Welcome! In CS 152, we extend our introduction to major computer science topics through instruction in imperative computer programming, continued development of data structures topics, and exploration of memory management approaches.

CS 152 is designed for students intending to major or minor in the subject, although others are welcome. To enroll in CS 152, 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, and
  3. to design a variety of useful data structures including lists, trees, maps, and graphs.
These goals will be reached in part by reexamination of techniques learned in the previous quarter in a new light. Later undergraduate courses will provide further breadth and technical depth on these topics.

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 Canvas in CS 152.



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.

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.

The lab meeting times are as follows:

Office Hours

Information about office hours will be maintained on Piazza.

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


The course does not make use of a textbook. Many suitable references for the C programming language are available online, if desired.


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). Users of macOS: all necessary tools are either already installed on your computer, or macOS will offer to install them upon your first attempt to use them. Windows users: options and instructions for installation will be posted on Piazza. Linux users: if clang is not already installed, use your distribution's package manager to set it up; the other programs are likely already present on your system.


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:

Your lowest homework grade will be dropped. Please note: this specifically means a homework, not a lab or project.

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 withdrawfrom 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. If you have elected pass / fail and are found to have committed an academic honesty violation, your election will be disregarded, and you will receive a low or failing grade as a "quality" grade on your transcript. Students who have been involved in academic honesty violations are also barred from being members of course staffs in the Department in the future.


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.


Version Control with Subversion by Pilato, Collins-Sussman and Fitzpatrick (full text online) [website]

Piazza (Q&A, announcements, course materials) [website]