CMSC-16100: Honors Introduction to Programming, I

Course Overview

This is an introductory honors course in computer science, not just computer programming. We will learn through the vehicle of a specific programming language—Haskell—a pure, lazy, functional programming language. This quarter has a distinct “high-brow” feel to it, because Haskell obtains power through generality, and generality through abstraction.

Course Staff

SectionLecturerClassOffice Hours
1 Stuart Kurtz [email] MWF 10:30-11:20, Stuart 104 F 9:00-10:00 JCL 247, Tu 2:00-3:00 Zoom (see Canvas)
2 Ravi Chugh [email] MWF 11:30-12:20, Ryerson 276 WF 1:00-2:00, Zoom (see Canvas)

Teaching AssistantOffice Hours
Benjamin Caldwell (Lab TA) [email] F 1:30-3:00, JCL 205
Brian Hempel (Lab TA) [email] M 12:30-2:30, Zoom (see Canvas)
Spencer Ng [email] Th 3:30-5:30, Zoom (see Canvas)

Eric Chang
Nick Clifford
Bhakti Shah
Andy Yang

Course Communication

We will be using several technologies for coursework and management:


The principal text for the course will be our lecture notes, but we recommend:


Grading will be based on homework (1/5), lab (1/5), a midterm exam (1/5), and a final exam (2/5).

Our particular theory and practice of homework is this:

How to succeed in CMSC-16100 (and College)

This course has an earned reputation for being rigorous and demanding. You came to the University of Chicago to have the opportunity to take such classes, so... you're welcome. But you don't just want the opportunity, you want to succeed. To that end, we have some concrete recommendations based on our experiences as students, teachers, and in particular, teachers of this course.

You should work hard. But hard work is not enough to guarantee success. You need to work smart.

  1. Ask questions. Ask questions during lectures, at lab sessions, in study group meetings, at office hours. Don't assume that if you don't understand something now, you'll figure it out later by yourself and all will be well. Ideas build on ideas, and not understanding now can undermine your foundation, leaving you behind and struggling.
  2. Do all of the homework assignments, and all of the labs. The difference between A students and everyone else has less to do with the A students jumping better, and more to do with their reliability in jumping when and how they're expected to.
  3. Form study groups. Meet 2-3 times a week for an hour or so. Review the lectures, the homeworks (both pending and graded). Make sure you understand what you've been taught, what you have to do, and the feedback you're getting.
  4. Take advantage of the office hours for the course instructors and TAs. If you can't make your instructor's posted hours, ask to meet at a time that works for you. Consider meeting with the other instructor, who might have a different “take” on something that has you stumped. Please understand that we like to have students come to our office hours. It is perfectly reasonable, if your group can't figure something out, for the whole group to come to office hours.