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
Section | Lecturer | Time | Office | Office Hours |
---|---|---|---|---|
1 | Ravi Chugh [email] | MWF 10:30-11:20 (Ryerson 276) | Ryerson 260 | Tu 3:30-5:00, W 11:30-12:30 |
2 | Stuart Kurtz [email] | MWF 01:30-02:20 (Ryerson 251) | Ryerson 166 | MWF 2:30-3:30 |
Teaching Assistant | Office Hours |
---|---|
Brian Hempel (Lab TA) [email] | Th 1:00-2:30 (CSIL 4) |
Stephen Fitz (TA) [email] | M 1:30-2:30 (Young 404) |
Alex Smith (Grader) [email] | |
Geelon (Aaron) So (Grader) [email] | |
Bowen Wang (Grader) [email] | W 4:00-5:30 (CSIL 3) |
Course Communication
We will be using several technologies for coursework and management:
- This website, which contains our lecture notes for the course. These are a primary source!
- Piazza is an externally hosted course web site that we're going to use for student Q&As. Content related questions and discussions should be routed through Piazza—if you have a question, then almost certainly other students do too. The Piazza site for this course is piazza.com/uchicago/fall2016/cmsc16100/home.
- For individual issues you can contact your instructor and/or TAs via email. If you do send email, please include include the string "[16100]" in the subject line, as this will get you past spam filters.
Texts
The principal text for the course will be our lecture notes, but we recommend:
- Learn You a Haskell for a Great Good is a longstanding student favorite. It's quirky and fun, and seems to be evolving with the language. It's also available as printed book, for those that prefer such things.
- Programming in Haskell, 2nd edition, which is Professor Kurtz's kind of programming language book: terse and systematic. The 2nd edition is just out, and reflects recent fundamental changes to Haskell's standard library.
- Real World Haskell, which is a bit verbose for our tastes, but verboseness can be a virtue in dealing with new concepts, and we'll see a lot of them. It's fairly inexpensive as textbooks go, but is also freely available on the web. Unfortunately, RWH hasn't yet (to our knowledge) been updated to reflect standard library changes, so it's dated, but useful.
Grading
Grading will be based on homework (1/3), lab (1/6), a midterm exam (1/6), and a final exam (1/3).
Our particular theory and practice of homework is this:
- Each day's lecture notes comes equipped with several homework problems, some of which are marked with asterisks. You are required to turn in only those problems marked with asterisks. However, you should work through all of them, as well as seek out additional opportunities for practice.
- The principal role of homework is to ensure that the work that you do outside of class covers material that we believe is important. One implication of this is that we do expect you to work outside of class. The comments you get on your homework and exams are much more important than the grade—let your instructor know if you're not getting what you need.
- We view the assessment aspect of homework as secondary, and mostly to avoid putting too much weight (or pressure) on the in-class exams. That said, homework as assessment is particularly subject to manipulation, which these days includes simply getting your answers from the internet. We expect that most of you are driven by a thirst for knowledge, and for you guys, it should be obvious that you gain by doing your homework yourself, and lose by having others do it for you. For those few of you who are motivated more by grades than anything else, we'll note that doing the homework is an efficient way to prepare for the exams. In any event, we'll ask you to note our policy on academic honesty, on the policies page.
- Managing late homework is a major pain. So here's our late homework policy: We don't accept it. But, since we were once undergraduates ourselves, we know that life exists outside of the classroom, and occasionally an assignment gets missed. Therefore, we're giving each student five "free-passes" on their homework, i.e., you can miss up to five homework exercises, for which there will be no penalty. Mechanically, this is automatic—we'll just drop the five lowest scores. Note that a single day's work can involve multiple exercises.
- Homework exercises are due at the beginning of lecture after they were assigned, unless otherwise noted.
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 hard, and smart.
- Ask questions. Ask questions during lectures, at lab sessions, in study group meetings, at office hours. Don't assume, 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.
- 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.
- 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.
- 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.