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.

Lecture Policies

Lectures this quarter will be conducted live online with student participation. (The details of how to attend each section are posted on Piazza.) Lectures will also be recorded and made available after the fact through links on Piazza. These recordings will include the visual content used in the lectures, but we will also post the slides separately. Nonetheless, iff you can make your lecture time slot, we urge you to attend live. The interaction of a live class is important; it allows you to ask questions in the moment, and gives us valuable feedback on how to pace the class, what topics need more clarification, and what everyone is most interested in.

Please be aware that recordings of the class will include the audio of both the instructor, and audio sent by students when their microphones are unmuted, such as when they are asking a question. All of us in the class have an obligation to be respectful to every question that is asked, and we hope you feel comfortable asking questions during lectures.

The University has a stringent policy restricting what students can do with recordings from our classes and for how long they can retain them. This is to protect everyone's privacy and the open and collegial environment of our lectures. Your adherence to the policy, which is stipulated below, is mandatory.

By attending course sessions, students acknowledge that:

A. They will not: (i) record, share, or disseminate University of Chicago course sessions, videos, transcripts, audio, or chats; (ii) retain such materials after the end of the course; or (iii) use such materials for any purpose other than in connection with participation in the course.

B. They will not share links to University of Chicago course sessions with any persons not authorized to be in the course session. Sharing course materials with persons authorized to be in the relevant course is permitted. Syllabi, handouts, slides, and other documents may be shared at the discretion of the instructor.

C. Course recordings, content, and materials may be covered by copyrights held by the University, the instructor, or third parties. Any unauthorized use of such recordings or course materials may violate such copyrights.

D. Any violation of this policy will be referred to the Area Dean of Students.

Office Hours

Office hours will be conducted throughout the week by both the instructor and TAs using online conferencing tools. Information about office hours scheduling and procedures will be maintained on Piazza.

In addition to the instructor's and TAs' office hours, the College Core Tutor Program employs computer science tutors.


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 git. 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, homework assignments, projects, and quizzes.

The relative weighting of the assessments in computing your grade is below.

Each student's final grade will be computed according to the following formula:

If there are four quizzes:

If there are three quizzes:

We recognize that the unusual and challenging circumstances happening during the quarter may affect your ability to meet a deadline. To provide a uniform and streamlined policy for handling exceptional cases, we will drop the lowest of your homeworks, and we will also drop the lowest of your labs. This policy is explicitly intended to accommodate exceptional cases. Therefore, you do not need to take any action if you miss a lab or homework deadline, or are unable to complete the work to your satisfaction due to extenuating circumstances: the assignment will automatically be dropped. If an extraordinary situation arises that presents issues for a second lab, or a second homework, or for another assessment in the course, please contact your instructor to discuss.

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.

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.