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 Ed Discussion, 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 Ed Discussion, 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.

Further, you may not make audio or video recordings, or take pictures, during lectures. Research has shown that taking notes by hand during classes leads to demonstrably better understanding and retention of the material, and you are strongly encouraged to keep handwritten notes. Not making recordings or taking pictures also helps us keep a comfortable environment in the classroom for everyone.

If you believe that a special circumstance may qualify you for an exception to this policy, please contact the instructor.

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:

Although you are nominally registered for a lab section in one of these two rooms in particular, TAs will circulate between the two rooms, and you are welcome and encouraged to spread out and choose any location across the two rooms.

Office Hours

Office hours will be conducted throughout the week by both the instructor and TAs. Information about office hours scheduling and procedures will be maintained on Ed Discussion.

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

COVID-19 Policies

You must adhere to the guidelines to which you have attested and to all relevant University policies around COVID-19.

Some (but not an exhaustive list) of the relevant policies are that:

We will be more than happy to help you catch up if you need to miss one or more classes due to the above. Please do not attend class when it is unwise to do so out of a concern for falling behind.

If you have concerns about your participation in the class and how it may impact your safety or wellbeing, please reach out to the instructor.


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 Ed Discussion. 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 exams.

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:

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, you will have two 48-hour extensions. These extensions can be used on homeworks and / or labs. For instance, you can use a single extension on a homework and a single extension on a lab, or choose to use both extensions on homeworks (or, instead, labs). These extensions are not available for projects or exams. Each 48-hour extension will not be pro-rated: if you submit an assignment late, but not a full 48 hours late, you still consume that entire extension. Please also be aware that our submission system, Gradescope, does not track how many late assignments you have turned in. Although the system will permit you to continue submitting further late assignments, you will ultimately receive scores of zero for any late assignments beyond the approved extensions. 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, you can simply go ahead and take the extra time if you have an extension left, with no special request needed. If an extraordinary situation arises that presents issues for a third assignment, or for another type of 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. Use the regrade request feature on Gradescope to file your request, explaining what you think was graded incorrectly.

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.

Please note that the prohibition on sharing work from the course continues to apply even after the course is over.

We realize that sometimes students commit plagiarism out of desperation and as a measure of last resort. If you are in this situation, please ask the course staff for help. If you are having a hard time in the class, we will provide as much assistance as we can. Plus, a poor performance in one assignment is unlikely to wreck your grade for the class. Plagiarism is never worth it.

Students often turn to their roommates, friends or paid tutors for help. While you are welcome to ask friends and tutors for help understanding concepts, you should never ask someone outside the course staff for help with assignments. We want to know what you can accomplish, not what your roommate, friend, or tutor can do. If you need help with understanding concepts, deciphering assignments, finding bugs in your code, etc, please consult the course staff.

All that said, we do encourage a collaborative environment in this class, as long as it doesn't slip into the realm of plagiarism. You are also welcome to discuss aspects of an assignment with other students in the class, as long as you don't share or write code together.

Please note that this also includes "whiteboarding": discussing an assignment with other students by sketching out code on a whiteboard can easily cross the line into academic dishonesty (even when using pseudocode). If you do sketch out code on a whiteboard, do not rely on the verbatim contents of the whiteboard when writing your solution (we recommend that you do not take photos of the whiteboard or verbatim copy anything from the whiteboard into your own code). You should instead focus on using the whiteboard discussion as a way to understand the high-level aspects of the problem, and then write your own code from scratch. Put another way, if your discussions with other students are at such a specific level of detail that your submissions end up being nearly identical, it is an academic honesty violation, regardless of whether it was based on code sharing or overly detailed "whiteboarding."

The penalty for cheating in the course is a grade of "F". Students who have been involved in academic honesty violations are also barred from being members of course staffs in the Department in the future.

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 failing grade if you are found to have engaged in such conduct.


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, Ed Discussion). 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.