CS2500: Fundamentals of Computer Science I

Spring 2010

General Info | Syllabus | Assignments | Labs | Textbooks | Advice | Blog
Course Contract

Lectures: MWTh, 4:35 PM – 5:40 PM, 170 West Village F
Labs: Th, 11:45 AM – 1:25 PM, 210 West Village H
Note: Office hours have ended for the semester.
Instructor: Jesse Tov tov@ccs Office hours: M, 2 PM – 4 PM, 308 West Village H (or by appointment)
TAs: Stevie Strickland sstrickl@ccs Office hours: T, 3 PM – 5 PM, 308 West Village H
  Vincent St-Amour stamourv@ccs Office hours: F, 2:30 PM – 4:30 PM, 308 West Village H
Tutors: Nikko Patten npatten@ccs Office hours: M, 12 PM – 1 PM, 102 West Village H
  Chris Souvey souvey@ccs Office hours: M, 8 PM – 10 PM, 102 West Village H
  Ryan Cassidy rcassidy@ccs Office hours: T, 5 PM – 7 PM, 102 West Village H

General Information

This course is an introduction to computing and programming. Its major goal is to introduce students to the principles of systematic problem solving through programming and the basic rules of computation.


The course assumes a basic familiarity with arithmetic and algebra. It demands curiosity, self-discipline, and some amount of people skills, because all computer scientists end up working with others interactively all the time, including in this course.

The course does not assume any prior programming experience. It is therefore suitable for first-year students—majors and non-majors alike—who wish to explore the intellectual ideas of the discipline.

Earning a Grade:

Many of you have one burning question on your mind as you start your college careers:

How am I going to get an A in this course?

We have some news for you: you are in college now, and in college, it really is about learning something and not (just) getting a grade. As a matter of fact, if you are taking a course and the A comes easy, you are either cheating yourself or you are allowing the instructor to cheat you.

Here is the positive take-away from this section: College is your last chance to learn how to learn by yourself, without pressure from parents, teachers, or peers. You want to learn that, because the quality of your life depends on it. Your life. Nothing more, nothing less.

Naturally, we understand that you want some feedback, both in terms of specific corrections and in terms of a grade. You want feedback so that you can improve your learning process. And we will give you that feedback. It is our end of the bargain. Your end is to demonstrate that you actually use the methods and tools for learning that work best in our experiemce. After all, you don’t want to waste your time, and we don’t want to waste ours either.

So, if you wish to earn a grade in this course, you must print the Course Contract, sign and date it, and turn it in at the instructor’s or TAs’ office hours. Your signature acknowledges that you have read and understood the contract and its implications. As long as you will live up to its spirit, we will stand by you during this semester.


In a large freshman course such as CS2500 you typically encounter three kinds of people, listed in increasing order of relevance to you:


Jesse Tov

Teaching Assistants (TAs):

Vincent St-Amour

Stevie Strickland

TAs teach labs, supervise the grading of homework sets, hold office hours, and occasionally substitute in lectures. In general, they are apprentice teachers and are here to learn how to run a course.


Nikko Patten

Ryan Cassidy

Chris Souvey

Tutors hold office hours and group meetings in colleges and labs, grade homeworks and provide feedback about the class’s progress. In general, they are undergraduate and graduate students who know that to learn something really well, you need to teach it.


Class consists of lectures and lab meetings (CS2501).

Lectures meet on Mondays, Wednesdays, and Thursdays from 4:35 to 5:40 PM in 170 West Village F.

The course also has two lab sections, aka CS2501. Both labs are held on Thursdays from 11:45 AM to 1:25 PM in 210 and 212 West Village H. The purpose of labs is to give you some hands-on experience with the actual tools, and to explain some of the principles from lecture with hands-on examples.

Computing Environment:

We will use DrScheme v4.2, a programming environment for the Scheme programming language, some dialects of Java, Algol 60, Ocaml, and a few others. For CS2500, we will stick to the HtDP teaching languages plus teachpacks. DrScheme is installed on the CCS computers. It is also freely available on the Web, in case you wish install it on your own computer.

DrScheme runs on most popular platforms (Windows XP/Vista/7, Mac OS X, Linux, and other UNIX systems). Programs written in DrScheme work the same on all platforms. You therefore do not need to worry what kind of machine you use when you run DrScheme programs.

Problem Sets:

Most actual learning happens while completing problems sets, and problem sets will help to prepare you for the exams

There will be weekly problem sets. Some problems are drawn from HtDP, the textbook; others are constructed for this instance of CS2500. We will grade some but not all problems from each set.

We will drop the homework grade with the worst impact on your final grade from consideration for the final grade. Thus, if you choose to skip an assignment set or if you just don’t get it one week, nothing is lost. The story is different for the second or third or ... time.

You may only collaborate on problem sets with your partner (see below). You must acknowledge your collaborator/partner on your cover page. Any other collaboration is cheating; we will report cases to the university administration.

Pair Programming:

You must work on your problem sets (2 – 11) in pairs. Your lab TA will assign you a partner. Every few weeks, you will get a new partner.

Pair programming means that you and your partner work on the problem sets jointly. You read them together and you work on the solutions together. One of the lab’s purposes is to teach you how to work in pairs effectively; indeed, pairs are provably more effective than individuals in programming. The rough idea is this: One of you plays pilot, the other co-pilot. The pilot works on the keyboard and explains aloud what is going on; it is the co-pilot’s responsibility to question everything. After a problem is solved to the satisfaction of both, you must switch roles.

Exams and Quizzes:

We will have two three-hour evening exams to assess your progress:

The exams will test material similar to that assigned in weekly homeworks. You will take the exams by yourself. Collaboration is not tolerated. If you can solve every homework problem on your own, the exams will be easy. If not, you will have a difficult time.

We will have the daily quiz. It is our one concession to “high school thinking.” (Consider it a crutch for your self-discipline.) Each week we will randomly select at most one of these quizzes for grading, and the remainder are thrown away.


For the final grade, we will assign a weight of 30% to your overall homework grade and 30% to each of the two midterm exams. Each week’s homework grade is multiplied by that week’s lab quiz grade (0 or 1); students who fail a lab quiz have a week to come to office hours and convince an instructor or TA that they have learned the material, in order to receive homework credit. (Students who miss a lab quiz must email the instructor by the day of the lab to be eligible to make up the lab quiz.) The remaining 10% depends on the quizzes, lab participation, and the discretion of the instructor. Additionally, you must have a passing grade for your homeworks alone in order to pass this course.


This table specifies the reading and lecture schedule. The link in the first column connects this page to the homework that you will be working on for the corresponding week. The second column gives the date for Monday of each week. The third column lists the sections in How to Design Programs that cover the lecture material. The fourth through ninth columns give the pages or sections for your reading for that day.

This daily reading schedule is intentionally not tied to the lecture schedule. Instead it is designed to cover a reasonable amount of material on a regular basis. On the average, you will need to read six to twelve pages a day, which in our experience is an appropriate speed of reading. As a result you will occasionally be behind the lecture schedule, and most of the time you will be ahead, which will help you and us to make lectures interesting.

(Reading schedule last updated Fri, 15 Jan 2010 01:19:06 -0500.)

# wk. of Topic M T W Th F S/S
1 Jan. 11 Preliminaries §1  §2.1–2.1.7  §2.2–2.2.3 
2 Jan. 18* Atomic and compound data §2.3–2.3.5  §2.3.6–2.3.7  §2.4–2.4.4  §2.4.5–2.4.7  §2.5–2.5.1  §2.5.2–2.5.7 
3 Jan. 25 Unions §2.6–2.6.1  §2.6.2–2.6.3  118–128 128–137 138–151 168–180
4 Feb. 1 Self-referential unions int. 2 189–199 209–217 217–221 §16 228–239
5 Feb. 8 Self-referential unions 240–247 int. 1 §14.4 §17.7 249–258 259–269
6 Feb. 15* Recursion in all forms 269–280 exam prep. exam 283–292 293–298 299–305
7 Feb. 22 Abstraction 306–312 int. 4 313 319–25 §21.3 334–340
- Mar. 1 Spring break
8 Mar. 8 Abstraction 342–349 357–367 §26 381–386 387–396 399–401
9 Mar. 15 Loop functions 407–413 417–426 426–436 441–445 445–450 450–457
10 Mar. 22 Generative recursion 460–466 472–477 slack slack 21–27 90–93
11 Mar. 29 Generative recursion 94–96 168–175 176–180 221–228 int. 6 exam prep.
12 Apr. 5 Generative recursion exam prep. exam prep. exam 491–498 499–504 505–507
13 Apr. 12 Generative recursion §36
14 Apr. 19* Conclusion Last day of class is Wed., Apr. 21

* No class Monday for MLK Day (1/18), Presidents’ Day (2/15), or Patriots’ Day (4/19).

† These readings with the aqua background are from How to Design Programs, Second Edition, which is available online only. Be sure to use the links in the table above, because these section numbers do not align with the first edition (i.e., your printed textbook and the online version at htdp.org).

Homework is generally due at 11:59 PM on Tuesdays, though you should check each individual assignment to be sure. Please let the teaching staff know ASAP if you have trouble submitting, because turning in homework on time is your responsibility. Barring exceptional circumstances, late homework will not be accepted.


Link Assigned Due
Problem Set 12 Wednesday, April 7 Tuesday, April 20 at 11:59 PM
Problem Set 11 Tuesday, March 30 Tuesday, April 6 at 11:59 PM
Problem Set 10 Tuesday, March 23 Tuesday, March 30 at 11:59 PM
Problem Set 9 Tuesday, March 16 Tuesday, March 23 at 11:59 PM
Problem Set 8 Tuesday, March 9 Tuesday, March 16 at 11:59 PM
Problem Set 7 Thursday, February 25 Tuesday, March 9 at 11:59 PM
Problem Set 6 Tuesday, February 16 Tuesday, February 23 at 11:59 PM
Problem Set 5 Tuesday, February 9 Tuesday, February 16 at 11:59 PM
Problem Set 4 Tuesday, February 2 Tuesday, February 9 at 11:59 PM
Problem Set 3 Tuesday, January 26 Tuesday, February 2 at 11:59 PM
Problem Set 2 Wednesday, January 20 Tuesday, January 26 at 11:59 PM
Problem Set 1 Tuesday, January 12 Wednesday, January 20 at 4:35 PM

Please submit your homework sets according to the instructions on the web page for the individual assignments, following the guidelines for turning in homework.

Electronic Hand-in:

For Problem Set 2 and subsequent assignments, we will be using online submission for the programming component of all assignments in this course. Instructions for using the homework server are below. We will go over them in lab, but keep this page bookmarked as you will need to do this each week.

Installing the Submission Plugin

Download the plugin to your computer. Use the “File” / “Install .plt file” menu option to install this file. Once it completes you must restart DrScheme. If it installs correctly, you will have a CS 2500 Handin button in your DrScheme window.

Verifying your Account

Each of you should have an account in the homework server. Your username is your MyNEU account name (for instance, my account is “strickland.t”) and your password is the last 4 digits of your student ID. Use the “File” / “Manage CS 2500 Handin Account” menu option and the “Change Info” tab to get the current information on your account. Enter your username and “old” password, then click “Get Current Info”. Update any incorrect information and change your password to something you will remember. Then click “Change Info” or “Set Password” as appropriate.

Submitting Homework

To submit your homework, make sure it is open in DrScheme’s current Definitions window as well as saved to disk. Then click “CS 2500 Handin” to open the popup window. For pair submissions, enter both usernames joined by “+”, as in “strickland.t+stamour.v”. Enter either person’s password. Select the correct homework name. When you are ready, click “CS 2500 Handin” within the popup window. DrScheme will report whether your submission is successful at the top of the window. If it fails, READ the error message and correct your submission appropriately.

Checking Grades

Log in to this page using your handin server username and password. It will take you to a page listing all of the homeworks so far. For each homework, it shows whether you have handed in yet, a link to the latest submission once you’ve handed in, and your grade once we enter it.

Paper Hand-in:

When you turn in homework on paper, make sure to follow these instructions:


Lab 11: April 15

Lab 10: April 1

Lab 9: March 25

Lab 8: March 18

Lab 7: March 11

Lab 6: February 25

Lab 5: February 11

Lab 4: February 4

Lab 3: January 28

Lab 2: January 21

Lab 1: January 14


Required Reading:

Your daily readings come from:

Recommended Readings:

Scheme Readings:

If you wish to learn to use Scheme as a tool, which is not the goal of this course, then take a look at the following:


You cannot learn everything you need to know in lectures and/or homeworks. You must:

  1. Read the Book (How to Design Programs).

    Try to stay ahead of the game and read material before it is covered in class. If you have questions, write them down. If these questions don’t get covered, ask in class and/or meet with the tutors, lab coordinator, or professor.

  2. Attempt to solve additional problems.

    Try to solve as many exercises as possible as you read sections in the book. If you can’t do them, read the material again.

  3. Attend the lecture and tutorials (aka “labs” at Northeastern).

    Every professor has a personal understanding of a course and teaches the material according to a personal style. It is important to get used to and to exploit this “personalization of courses”; otherwise, you’re wasting your money.

    The tutorials cover the practical know-how (how to edit, how to evaluate, how to print, etc.) and illustrate the material from a different angle.

  4. Talk to the course staff.

    If the lecture and the notes leave you with questions on the material, see your teacher(s) during office hours or make an appointment. Mark the passages in the book(s) that you haven’t understood and prepare questions that express what you haven’t understood.

  5. Keep up.

    Experience proves that students who fall behind quickly drop out. So, keep up with the readings, tutorials, and the homeworks. Ask for additional problems, if the homeworks failed to make a point.

Blog [RSS]

The End

We’re done! Thanks for a great semester.
I’m supposed to once again encourage you to complete TRACE online course evaluation surveys. They’ve extended the deadline. You can get to them from myNEU. Don’t forget to fill out the survey for the lab course (CS2501) and your TAs Stevie and Vincent.
Enjoy your summer and keep programming.

Posted Tuesday, 04 May 2010 [link]

Don’t Forget Your Late Days

If you have late days remaining, you can certainly use them on Problem Set 12—just let Stevie know before it’s due. As usual, you can use a maximum of two, so no games will be accepted after 11:59 PM on Thursday.

Posted Monday, 19 April 2010 [link]

TRACE Surveys

I’m supposed to encourage you to complete TRACE online course evaluation surveys. These are different from the surveys you did yesterday in class. The survey will be open until May 2 at 11 PM.

Posted Friday, 16 April 2010 [link]

Updated Lecture Notes

Wednesday’s and today’s lecture notes, combined.

Posted Thursday, 15 April 2010 [link]

Lecture Notes

I’ve posted lecture notes for Monday and Wednesday.

Posted Wednesday, 14 April 2010 [link]

Proposals Now Due Tuesday

I’ve received only one game proposal thus far, and this has me worried. Proposals are now due this Tuesday, 4/13, at 11:59 PM. Don’t try to submit them using the submission server—please email them to me.

Posted Saturday, 10 April 2010 [link]

Partner Reminder and Lecture Notes

Several partner requests have now been fulfilled. If you still need a partner, please email me ASAP.
I’ve posted lecture notes for Wednesday (optional lecture) and Thursday.

Posted Friday, 09 April 2010 [link]

Lab Quiz Amnesty

When you get back your exam, you may notice a list of lab numbers at the bottom. If you have such a list, these are the lab quizzes that you missed or failed over the course of the semester. Our rule is that you can only receive credit for your homework in weeks where you pass or make up your lab quiz. Therefore, if you have missing or failing quiz grades, this could severely impact your grade.
Since we want you to get credit for the work that you did, we are announcing a lab quiz amnesty. For one week only, starting at Vincent’s office hours on Friday and continuing through Jesse’s on Monday and Stevie’s on Tuesday, you may make up any quizzes that you have missed.
Some guidelines:

Posted Thursday, 08 April 2010 [link]

No Lab Tomorrow/Today, but Yes Lecture

Don’t forget that lab is canceled tomorrow. We won’t be there. We do still have lecture, though. Come get your exams and learn about accumulators.

Posted Wednesday, 07 April 2010 [link]

Problem Set 12 Is Up

Problem Set 12.
Start now, because you need to have your proposal approved before you start coding. If you need a partner, please email ASAP.

Posted Wednesday, 07 April 2010 [link]

Review Session Notes

Several people have asked for these notes from the review session.

Posted Wednesday, 07 April 2010 [link]

Fractals in HTDP

Several of you have asked me questions about the fractal code in §27.1 of HTDP and how it might relate to your homework. The idea of generative recursion is the same, but the code in the book uses the draw.ss teachpack, which works very differently from the image.ss and universe.ss teachpacks that we use now.
In particular, the draw.ss teachpack relies on side effects. A side effect is when calling a function, in addition to returning some answer, causes something to happen. In this particular teachpack, for example, there is a line function that always returns true, but also causes a line to appear on the screen. Everything we do using the image.ss teachpack is about returning images, not about causing things to happen on the side. (Even when you use big-bang, all the functions you write are about computing values, not doing things. Things happen, but that’s something that big-bang takes care of for you.)
Rather than using side effects, you should be writing a function that returns a scene. You can make this work if you think carefully about the four parts in the recipe for generative recursion:
  1. What is a trivial problem? Is there some size fractal that you can produce right away, without recursion? In particular, is there some size under which smaller sizes could not show additional detail?
  2. How do you produce this trivial fractal?
  3. For a larger fractal, how can you generate a simpler (smaller) subproblem, which you can then solve recursively?
  4. How can you construct the fractal you want from the solution to the smaller problem?
Since it might help, let’s take a look at the function sierpinski from the book:
;; sierpinski : posn posn posn  ->  true
;; to draw a Sierpinski triangle down at a, b, and c,
;; assuming it is large enough
(define (sierpinski a b c)
    [(too-small? a b c) true]
     (local [(define a-b (mid-point a b))
             (define b-c (mid-point b c))
             (define c-a (mid-point a c))]
         (draw-triangle a b c)
         (sierpinski a a-b c-a)
         (sierpinski b a-b b-c)
         (sierpinski c c-a b-c)))]))
You can see in the first cond clause, it checks for the trivial case (too-small? a b c), and the trivial solution is to draw nothing else to the screen, so it returns true. Otherwise, it uses and to sequence four side-effecting operations: First it draws a triangle at the requested points on the screen, and then it recurs three times to draw the subfractals (subproblems) to the screen. This is following the recipe for generative recursion, but in terms of drawing, it is quite different from how we do things.
For comparison, here’s a version that’s closer to how we do it in this course. Notice the changes to the contract and purpose:
;; sierpinski-helper : Posn Posn Posn Scene -> Scene
;; To add a Sierpinski triangle at points a, b, and c
;; to the given scene, assuming it is large enough to see
(define (sierpinski a b c scene)
    [(too-small? a b c) scene]
     (local [(define a-b (mid-point a b))
             (define b-c (mid-point b c))
             (define c-a (mid-point a c))]
       (sierpinski c c-a b-c
        (sierpinski b a-b b-c
         (sierpinski a a-b c-a
          (add-triangle a b c scene)))))]))
If you’d like to make this work, you’ll need to write too-small? : Posn Posn Posn -> Boolean and add-triangle : Posn Posn Posn Scene -> Scene.
Note that if you want to use a similar strategy for sierpinski-carpet, the recursive function had to be a helper to a Natural -> Scene function that creates the empty scene and calls the helper to add the carpet to it.

Posted Sunday, 04 April 2010 [link]

Graph Coloring Lecture Notes

Lecture notes from Thursday.

Posted Saturday, 03 April 2010 [link]

Exam Review Session

The review session will be held on Monday from 6 to 8 PM in 272 West Village F. I haven’t been there, but I expect it’s just upstairs from our usual lecture room.

Posted Friday, 02 April 2010 [link]

Topological Sort Lecture Notes

Lecture notes from today.

Posted Wednesday, 31 March 2010 [link]

Practice Exam

Here’s a practice exam for next week’s midterm.

Posted Wednesday, 31 March 2010 [link]

Even More Lecture Notes

Lecture notes from Wednesday 2/14 and Monday 3/29.

Posted Tuesday, 30 March 2010 [link]

Lecture Notes

Lecture notes from Monday and Wednesday.

Posted Thursday, 18 March 2010 [link]

Instructor Office Hours Schedule

Because I’ll be out of town, I won’t have my usual office hours on 3/15, 3/22, and probably 3/29. I will hold office hours on Monday, 3/15, from 11:30 AM to 1:30 PM, and again on Tuesday, 3/30, from 2 to 4 PM, both in my office (308 WVH). I’ll resume the usual schedule on Monday, 4/5.

Posted Saturday, 13 March 2010 [link]

Lecture Notes and the Make-Up Quiz

Here is the code from Wednesday and Thursday.
I’ve been asked to post the make-up quiz from class yesterday, so here it is. (The solution is in white text. To see it, either highlight it or copy it and paste in another program.)
;; A QTree is one of:
;; – "Q"
;; – (make-single QTree)
;; – (make-double QTree QTree)
;; – (make-triple QTree QTree QTree)
(define-struct single (only))
(define-struct double (this that))
(define-struct triple (left middle right))
;; Template for QTree:
(define (process-qtree qt)
    [(string? qt)   ...]
    [(single? qt)   ... (process-qtree (single-only qt)) ...]
    [(double? qt)   ... (process-qtree (double-this qt)) ...
                    ... (process-qtree (double-that qt)) ...]
    [else           ... (process-qtree (triple-left qt)) ...
                    ... (process-qtree (triple-middle qt)) ...
                    ... (process-qtree (triple-right qt)) ...]))
;; q-count : QTree -> Natural
;; To count the number of "Q"s in a QTree.
(define (q-count qt)
    [(string? qt)   1]
    [(single? qt)   (q-count (single-only qt))]
    [(double? qt)   (+ (q-count (double-this qt))
                       (q-count (double-that qt)))]
    [else           (+ (q-count (triple-left qt))
                       (q-count (triple-middle qt))
                       (q-count (triple-right qt)))]))
;; Examples/Tests:
(check-expect (q-count "Q") 1)
(check-expect (q-count (make-double (make-single "Q") "Q"))
(check-expect (q-count (make-triple
                        (make-double "Q" "Q")
                        (make-single (make-single "Q"))

Posted Friday, 12 March 2010 [link]

Monday’s Lecture Notes

Here is the code from Monday.

Posted Wednesday, 10 March 2010 [link]

Frequent Design Doc Advice

Having written some of the same comments several times in response to the design documents turned in so far, I figured I could save us all some trouble by sharing them with the rest of you now, while you’re still working on yours.

Posted Tuesday, 09 March 2010 [link]

Email Me if You’re Missing Class Today

If you are 1) still in the class and 2) missing lecture today, please email me by the end of class today to tell me. This will ensure that you are assigned a partner. (Conversely: If you miss lecture today and don’t email me, I’ll assume you are withdrawing and may not assign you a partner.)

Posted Monday, 08 March 2010 [link]

New Partners

If you haven’t requested a new partner yet, and you want to have some say in who you work with, email me ASAP!
(Also, I’d be glad to start looking over your game designs now if you send them to me.)

Posted Sunday, 07 March 2010 [link]

Problem Set 6 Solutions

Some of you asked me for solutions to last week’s homework.

Posted Sunday, 28 February 2010 [link]

Design Document from Today’s Lecture

Here is today’s lecture code, which includes my design document for the ball world program.
Also, something I neglected to mention today, which you may need rather soon, is the ‘function’ random. I put ‘function’ in quotes there because unlike every Scheme function we’ve seen so far, random may return different results when given the exact same arguments. It’s not truly a function in the mathematical sense, but it’s useful for what we want to do in Scheme.

Posted Thursday, 25 February 2010 [link]

New Late Day Rules

For the rest of this course, you have four free late days to be used as you wish, according to the following rules:
Caution: Since we now need to leave the hand-in server open beyond the normal due date, there are a few things to watch out for. In particular, at some point after the due date, but possibly before the late days end, we may gather your homework and begin grading. This means that if you intend to take a late day but you don’t tell us, we won’t know to wait to grade your homework, so we may grade a previous submission that you’ve sent us on time—but we might not, depending on when we start grading. On the other hand, if you submit late but don’t tell us, we might assume you intended to take a late day and charge you for it.
I realize that’s quite a few rules, but I hope this will make the course fairer and make it easier for you to deal with unforseen obstacles. I suggest conserving your late days for dire circumstances, because if you run out, you might not have them when you really need them.

Posted Thursday, 25 February 2010 [link]

Today’s Lecture Code (updated)

Here is today’s lecture code.

Posted Thursday, 25 February 2010 [link]

Today’s Lecture Code

Here is today’s lecture code.

Posted Monday, 22 February 2010 [link]

Alpaca Birthdays

For problem 4, you may safely assume that no two alpacas were born on the same day.
For this homework assignment, using the right template for processing alpacas will be a great help in getting your code to work. If at any point you find yourself thinking about alpacas’ grandparents, writing phrases like (alpaca-dam (alpaca-dam a)), this is a sign that you need some recursion. (Follow the shape of the data definition!)
If you find yourself writing things like (alpaca-dob (alpaca-sire a)), that indicates the need for a helper function.

Posted Monday, 22 February 2010 [link]

Lecture Notes from Thursday


Posted Saturday, 20 February 2010 [link]

Problem Set 6

Problem Set 6 is posted—enjoy!

Posted Thursday, 18 February 2010 [link]

Lecture Notes from Today

By request, today’s lecture notes.

Posted Wednesday, 17 February 2010 [link]

How to Know if You Know Enough about Recursion

Can you:
These are the essential ideas behind everything we’ve seen done with lists thus far. If you can do these and you can recognize variations on these themes, you should be in good shape.

Posted Sunday, 14 February 2010 [link]

Office Hours Monday by Appointment Only

Due to the Monday holiday, regular office hours (Christopher’s, Nikko’s, and mine) are cancelled. However, I will be available by appointment on both Monday and Tuesday. I’ll be glad to meet with any of you given 24 hours’ notice.

Posted Friday, 12 February 2010 [link]

Exam Location, Review Session, and Study Materials

Posted Friday, 12 February 2010 [link]

New Partners!

I just sent emails informing you of your new partners for Problem Set 5. Please let me know if you didn’t get yours.
Some people find pair programming effective and others less so. We require you to do it in this course because we’ve found that it’s an effective way to learn, and we require you to switch partners because we want you to experience working with different people and working with people you don’t know. In case you’re interested, here’s an article about what makes pair programming effective.

Posted Wednesday, 10 February 2010 [link]

Early Bird Lab and Partner Clarification

Some of you have been asking me who you should do Problem Set 5 with. The answer is: You don’t know yet, but you will very soon. I’ll be emailing you this afternoon, as soon as I work out who partners will be.
I’ve posted Lab 5 early for those of you that might want to get started today. If you find you’re having a hard time finishing the labs, starting early might help.

Posted Wednesday, 10 February 2010 [link]

No Class

On the miniscule chance that you are reading this course blog but haven’t yet heard from another source, Northeastern has cancelled classes meeting after noon today. That includes ours.

Posted Wednesday, 10 February 2010 [link]

Problem Set 5 and Practice Exams

Hello all! I’ve posted Problem Set 5 and practice exams from Fall 2007 and Fall 2008.

Posted Tuesday, 09 February 2010 [link]

Today’s Code

Here’s the lecture code from today.

Posted Monday, 08 February 2010 [link]

Typo in PS4

I just corrected a mistake in Problem Set 4. The last word of Problem 1 said “code” where it should say “cond.&rdquo.

Posted Monday, 08 February 2010 [link]

Partner Requests

If you haven’t sent your partner request in yet (via the hand-in server, using the process described below), this is your last chance. I’ll be assigning partners this evening, so if you have a preference, make sure you do it by 6 PM today (Sunday).

Posted Sunday, 07 February 2010 [link]

New Partners, Grade Retrieval, and Lecture Code

I hope you’ve started working on Problem Set 4 with your current partner. For Problem Set 5, we’re going to assign new partners. If you would like to request a partner and they would like to request you, please submit small Scheme program (doesn’t matter what you put in it, so long as the hand-in server accepts it) to the assignment “partners2” along with your requested partner. For example, if Stevie and Vincent wanted to be partners, then they would write something short, like 5 in a DrScheme buffer, and they would submit it as st-amour.v+strickland.t to the dummy assignment “partners2.” Please do this by noon on Sunday if you have a preference. We will consider your request, but we won’t necessarily honor it.
From now on, we will not be returning your homework to you, because we’ve set up a system to allow you to access homework grades and comments. If you want to see the graders’ comments on your work, you’ll have to look there. Login using the same user name and password that you use for the hand-in server. If you have trouble, contact Stevie—he knows how to fix it.
Finally, here’s the lecture code from Wednesday and Thursday.

Posted Friday, 05 February 2010 [link]

PS2 Graded, PS4 Available, and Homework Code

I sent out grades for Problem Set 2 to your husky.neu.edu addresses. If you didn’t get it, please let me know, and we can figure out what went wrong.
Problem Set 4 and Monday’s lecture code are posted.

Posted Tuesday, 02 February 2010 [link]

Problem Set 3 Exercise Correction

I’ve corrected the exercise numbers for Problem 4, which were off by one. It used to say 66, 67, and 68, and now it says 65, 66, and 67. Most of you have done or are doing 65, anyway, because it’s a prerequisite for 67. If you’ve already done 68, we’ll grade it for extra credit.
I’m sorry for the inconvenience.

Posted Monday, 01 February 2010 [link]

Lecture Code

Yesterday’s actual lecture code, the full version of the painting program, and today’s lecture code are available.
Please remember that if you failed today’s quiz, you need to appear at Vincent’s office hours tomorrow (Friday), Jesse’s on Monday, or Stevie’s on Tuesday in order to get credit for Problem Set 2. You need to be there at least half an hour before the end of office hours to make sure we’ll have time to work with you; likewise, Monday and Tuesday are likely to be very busy, so if you can, we’d recommend going to Vincent’s tomorrow.

Posted Thursday, 28 January 2010 [link]

Lecture Code, Homework Submission, and Submission Nagging

Today’s lecture code is available.
Please put all your homework problems are in one file. Some people have been creating a separate file for each problem, but if you submit multiple problems in sequence in different files, only the last one will be retained for grading. You may find that it’s annoying to have multiple calls to big-bang in one file. It’s okay to comment out your big-bangs, provided that each one works when uncommented.
There was some confusion today about what it means to “[c]reate a DrScheme buffer.” The DrScheme buffer is the same thing as what in lecture I’ve called the “definitions window”—it’s the place where you write programs. Even though the book says to create a buffer, just add the problems to the same buffer as your other files.
Finally, I understand that only one pair has attempted to submit their homework so far. Please—I urge you—try submitting your homework tonight or tomorrow morning. I don’t expect it to be done by now, but you need to make sure it works before the last minute, and you’ll be able to resubmit it later again any time before the deadline.

Posted Monday, 25 January 2010 [link]

Lecture Code, Partners, and Quizzes

Several important notes:

Posted Friday, 22 January 2010 [link]

Electronic Homework Submission

The homework submission server will stop accepting submissions at or very soon after 11:59 PM on Tuesday. We will not look kindly on homeworks emailed to us because you couldn’t get submission to work—especially if they arrive after the deadline—so there are some things we’d recommend you do now to make sure you can submit without a hitch on Tuesday.
First, we’ve noticed that only a minority of you actually performed test submissions to the lab1 assigment during our lab today. We strongly recommend that you do a test submission to the lab1 assignment using the electronic submission instructions before the weekend. If it doesn’t work, you can contact us or come get help at office hours in time to get it fixed by Tuesday.
Also, please make sure that you know your partner’s homework server ID, because you don’t want to find yourself stuck without it on Tuesday evening. (You don’t need to and shouldn’t know your partner’s password.)
Keep in mind that your last submission as of the time the submission window closes is the one that we will grade. This fact has three important implications:
  1. It’s safe and possibly a good idea to submit an incomplete assignment early, because you can submit over it later when you complete more of it.
  2. If you submit a good version of your code, and then mess something up and resubmit, we most likely won’t be able to retrieve the older, good version for you.
  3. In particular, take a look at the Wikipedia article on race conditions, and consider what you can expect if you and your partner accidentally submit different versions of the homework “simultaneously.”
Finally, if you changed your homework submission server password before this evening, we may have accidentally reset your password to your last four NUID digits. If you have trouble logging in with your changed password, you should try the original four digit password. (Sorry.)

Posted Thursday, 21 January 2010 [link]

Lecture Notes from Wednesday

As promised, here’s the source code from today’s lecture.

Posted Thursday, 21 January 2010 [link]

Problem Set 2

Problem Set 2 is posted.

Posted Wednesday, 20 January 2010 [link]

Major Reading List Change!

Hello all. I’ve made a significant change to the reading list for the next couple of weeks, starting this morning (Friday). Rather than read from the main textbook, I’ve assigned reading from a new edition, How to Design Programs, Second Edition. HtDP/2e is a work in progress, but many of the changes are based on experience teaching this course over the past few years, and I think you would benefit from reading from this new version.
Please note: The sections in HtDP/2e do not align with sections in your printed textbook and the online version at htdp.org, so please be sure to read from the second edition as linked from the syllabus.
(If you’re behind in the reading or if you are struggling, I suggest that you catch up by reading the Prologue to HtDP/2e.)

Posted Friday, 15 January 2010 [link]

Partners Are Not for Problem Set 1

Although we chose partners today in lab, these partners are for Problem Set 2, not Problem Set 1. Please do Problem Set 1 on your own, not with your partner.

Posted Friday, 15 January 2010 [link]

For Those of You without Hard-Copy Textbooks

(Note: Updated Fri, 15 Jan 2010 01:37:23 -0500 to mention HtDP/2e.)
It has come to my attention that the bookstore has run out of our textbook, HtDP. Fortunately, for the next few weeks, the reading is from HtDP/2e, which is only available on the web. (Please see the syllabus for the daily reading schedule.)
In two weeks, however, we’ll continue reading from HtDP, first edition. I strongly recommend getting the book in printed form by then. It’s available from Powell’s and Amazon.

Posted Thursday, 14 January 2010 [link]

Why Doesn’t “rectangle” Work?

Some of you have had a problem creating images in DrScheme. Perhaps you typed something like
    (rectangle 10 10 "solid" "green")
and DrScheme complained: “reference to an identifier before its definition: rectangle.” There’s nothing wrong with that Scheme expression, but you need to tell DrScheme ahead of time that you want to work with images (and eventually, animations), by loading the universe.ss “teachpack.” You can do this by going to the Language>Add Teachpack... menu and selecting universe.ss at the bottom of the list.
Whenever you run a program in DrScheme (by clicking the “Run” button, or pressing cmd-t or ctrl-t), it tells you which teachpacks you have loaded. Mine, for example, says:
     Welcome to DrScheme, version 4.2.3 [3m].
     Language: Beginning Student custom.
     Teachpack: universe.ss.
Yours should say something similar.

Posted Wednesday, 13 January 2010 [link]

Problem Set 1

Problem Set 1 is posted.

Posted Tuesday, 12 January 2010 [link]

CCIS Accounts

I promised in class to provide this link to the CCIS account request form. Fill this out, follow the instructions, and drop it off in the slot outside 310 WVH. I strongly recommend that you do this as soon as possible—if you turn it in by tomorrow (Tuesday), you may have an account in time for lab on Thursday.
Note that this is not the same as your myneu/husky.neu account, so even if you already have one of those accounts, you’ll need to get one of these as well.

Posted Monday, 11 January 2010 [link]


Welcome to CS2500! Please check back here often for updates, or subscribe to the RSS feed.

Posted Monday, 11 January 2010 [link]

Last updated Tuesday, 04 May 2010

Valid XHTML 1.1 Valid CSS!