CMSC 15200

The University of Chicago, Spring 2017

Homeworks, labs, and projects will be posted to Piazza. This web page provides the syllabus for the course.

Welcome! In CS152, we extend our introduction to major computer science topics through instruction in imperative computer programming and various analytical techniques.

CS 152 is designed for students intending to major or minor in the subject, although others are welcome. To enroll in CS152, students must have previously taken one of the department's first quarter courses.

The specific goals of the course are these:

  1. to learn imperative programming techniques,
  2. to build an understanding of the memory usage of computer programs, including an awareness of the stack/heap distinction, fluency with pointers and dynamic memory allocation and deallocation,
  3. to design a variety of useful data structures including lists, trees, maps, and graphs, and
  4. to analyze the efficiency of certain algorithms.
These goals will be reached in part by reexamination of techniques learned in the previous quarter in a new light. Broader, more technical treatments of these topics, in particular algorithm analysis, are presented in later undergraduate courses.

We use the C programming language in our studies. C is the lingua franca of computer programmers, and one of the historic and ongoing successes in the design of practical programming languages.

Having learned a second programming language well, and having viewed a variety of common problems from two distinct vantage points, students who complete CS 152 will begin to see past the superficial characteristics of computer programs to appreciate their deeper properties.

To anticipate a common question: we do not make use of Chalk in CS 152. (Well, we make very heavy use of chalk, but not Chalk.)

Instructor: Matthew Wachs, email: mwachs, office: E 127.

TA: Steven Basart

TA: Chunwei Liu

TA: Chaojie Zhang

Contacting Us

If you have questions about the course, and those questions are in a sense impersonal -- that is, they are about course material or course logistics -- we ask that you post those questions publicly on piazza, rather than contacting any of the staff members directly. This ensures you will receive the fastest, most consistent possible response from the staff. Since students usually have common questions, posting public questions is also very efficient for your classmates as well. As yet another advantage, it avoids duplication of work on the part of the staff.

In cases where you have a question that is about your own personal situation and not relevant to the class as a whole, you may ask a "private question" on piazza, which is invisible to your classmates, or send email to the instructor directly (preferred).

Electronic Devices

We do not allow the use of electronic devices during lectures. They are simply too distracting. This includes laptops, smartphones, and tablets. The lone exception to this policy is for students whose handwriting issues necessitate their use of a device for note taking, who will be permitted to use a plain text editor on a laptop whose wireless capability is turned off.

Lab Sessions

Students must register for and attend lab sessions each week. Lab sessions are held in the Computer Science Instructional Laboratory (also known as the CSIL); it is located on the first floor of Crerar Library. Attendance at the lab session for which you are registered is mandatory.

Office Hours

Information about office hours will be maintained on Piazza.

In addition to the instructor's office hours, the College Core Tutor Program employs computer science tutors Sunday through Thursday nights from 7pm-11pm, starting in the second week.


The C Programming Language (Second Edition), Kernighan and Ritchie. The textbook is available on campus at the Seminary Co-op Bookstore, 5751 S Woodlawn Avenue. you can of course find new and used copies at your favorite online bookstore as well.


All the software we use in this course is available free of charge for all common platforms. We will mainly use vim, clang, and svn (subversion). Windows users will need to download and install Cygwin, and will be able to include subversion in their Cygwin installations.


Coursework is comprised of lab exercises (done at lab sessions, discussed above), homework assignments, projects, and exams. The relative weighting of these in computing your grade is below.

Each student's final grade will be computed according to the following formula: homework and project work 30%, labs 20%, exams 25% each. We will scale the grades, so what precisely constitutes an A, B, etc. will be determined by the collective performance of the class.

Regrade Requests

Graders, TAs, and instructors do make mistakes, so it is normal and expected that a few assignments will have grading errors. In order to manage the workload of regrade requests, however, regrade requests must be submitted within one week of the assignment being returned. No regrade requests will be accepted after this point.

Late Work

Deadlines in this course are rigid. Since you submit your work electronically, deadlines are enforced to the minute. Late work will not be counted.

(We will accept late work in the case of special circumstances, when those circumstances are extraordinary.)

Academic Honesty

In this course, as in all your courses, you must adhere to college-wide honesty guidelines as set forth here. The college's rules have the final say in all cases. Our own paraphrase is as follows:

  1. Never copy work from any other source and submit it as your own.
  2. Never allow your work to be copied or seen by another student.
  3. Never submit work identical to another student's.
  4. Never look at someone's working solution in order to solve your error.
  5. Document all collaboration.
  6. Cite your sources.
We are serious about enforcing academic honesty. If you break any of these rules, you will face tough consequences. Please note that sharing your work publicly (such as posting it to the web) definitely breaks the second rule. With respect to the third rule, you may discuss the general strategy of how to solve a particular problem with another student (in which case, you must document it per the fourth rule), but you may not share your work directly, and when it comes time to sit down and start typing, you must do the work by yourself. If you ever have any questions or concerns about honesty issues, raise them with your instructor, early.

It is University of Chicago policy to not allow a withdraw from a course after a student has been accused of cheating / copying / etc. This means you will not be able to avoid receiving a low or failing grade if you are found to have engaged in such conduct.

If you are found to have engaged in any cheating in the course, you cannot receive a grade above a C, if indeed you receive a passing grade at all.


Writing code that does what it is supposed to do can be joyful, even exhilarating. By contrast, fighting for hours with broken code is misery. We would like to help you experience more of the former and less of the latter. Work methodically. Start your work well ahead of time. Beyond a certain point, it is not profitable to be stumped. If you have made no progress in some nontrivial chunk of time, say, one hour, it is time to stop and change your approach. Use one of our many support mechanisms to get some assistance (office hours, Piazza). We will help you get going again when you are stuck. We are very familiar with common mistakes that stump students for hours but require only minutes for us to identify. Please take advantage of our experience.