CSC161 2010F Imperative Problem Solving

Front Door

Welcome to the Fall 2010 session of Grinnell College's CSC 161, Imperative Problem Solving and Data Structures. This course serves many purposes: It teaches you a new approach to algorithm design; it introduces a number of tools you will use in your career, including Linux, Emacs, and Make; and it gives you a particularly hands-on perspective on computer science.

In an attempt to provide up-to-date information, and to spare a few trees, I am making this as much of a paperless course as I can. Hence, materials will be in a course web.

Warning! Computers are sentient, stupid, and malicious. When things go wrong, don't blame yourself. Ask me for help.


Meets: MTuWF, 11:00-11:50, Science 3819

Instructor: Samuel A. Rebelsky (, Science 3824. Office hours: MTuWF 1:15-1:50, 2:10-3:00. I also tend to follow an open door policy: Feel free to stop by when my door is open or to make an appointment for another time. Check my schedule for more details.

Mentor Aditi Roy. Office hours TBD.

Grading (subject to change):

Late Assignments: My experience shows that students who turn in work late learn significantly less than students who turn material in on time. (I'm not sure about cause and effect.) Hence, I strongly discourage late assignments. Unless prior arrangements have been made, assignments are due within five minutes of the start of class. After that they are considered late. Late assignments are penalized one letter grade per day late (or fraction thereof).

Because I am concerned about your health and well being, I will waive the late penalty if (1) you start the assignment at least three days in advance of the due date; (2) you get to sleep by midnight the night before the assignment is due; (3) you expend a reasonable amount of effort to complete the assignment by midnight; (4) you turn in a form attesting to facts (1), (2), and (3) when the assignment is due; and (5) you talk to me ASAP about any problems you've had on the assignment.

In addition, every student will be granted two grace days that can be used for any homework assignment, for any reason. A grace day is an automatic extension until the next class period. Please use your grace days wisely: you may need them more later than you do now! I would appreciate hearing in advance by email if you intend to use a grace day on a particular assignment since this makes my bookkeeping easier. However, any assignment submitted late will automatically use a grace day, if you still have one to use.

Extra Credit: Throughout the term, I may suggest forms of extra credit.

Required Books

I've tried to choose books that you'll want to keep on your bookshelf long after the class is done.

Kernighan, Brian W. & Ritchie, Dennis, M. (1988). The C Programming Language, 2nd Edition: ANSI C. Upper Saddle River, NJ: Prentice-Hall.

The classic book on C, by the designers of the language. A bit denser than most books, but has very little cruft. I particuarly appreciate that the book helps you think like a real C programmer.

Mecklenburg, Robert (2004). Managing Projects with GNU Make, Third Edition. Sebastapol, CA: O'Reilly and Associates. Also available online at

Make is one of the key tools Unix programmers use. This is an excellent introduction to the tool.

Raymond, Eric S. (2003). The Art of UNIX Programming. Addison-Wesley, Professional. Also available online at

This book has very little detail on the standard Unix commands, but helps you think about why Unix variants have continued to exist for three decades.

Recommended Books

Harbison III, Samuel P. & Steele Jr., Guy L. (2002). C: A Reference Manual, Fifth Edition. Upper Saddle River, NJ: Prentice-Hall.

Plauger, P. J. (1991). The Standard C Library. Upper Saddle River, NJ: Prentice-Hall.



Saturday, 14 August 2010 [Samuel A. Rebelsky]

  • Created.
  • Grace day policy taken from Marge Coahran.

Wednesday, 1 September 2010 [Samuel A. Rebelsky]

  • Updated office hours.


Disclaimer: I usually create these pages on the fly, which means that I rarely proofread them and they may contain bad grammar and incorrect details. It also means that I tend to update them regularly (see the history for more details). Feel free to contact me with any suggestions for changes.

This document was generated by Siteweaver on Wed Dec 8 10:56:54 2010.
The source to the document was last modified on Mon Dec 6 21:47:13 2010.
This document may be found at

Samuel A. Rebelsky,