Welcome to the summer 2012 instance of CS 151! The course is taught by Adam Shaw, Lecturer in the Computer Science department. For majors and non-majors alike, we hope you will find this course to be a stimulating, challenging and horizon-expanding experience.

In the summer quarter, lecture is in Ryerson 251, and meets Monday, Wednesday and Friday from 1:30–3:30pm. We will not meet on Wednesday, July 4. Two hours is a long time to sit in one place on a beautiful summer afternoon; I will try to make it bearable by delivering two distinct lectures with an intermediate break, during which I will more or less insist you get up and walk around.

Each student must attend weekly lab sessions from 4–6pm on Wednesday afternoons (with the exception of July 4). Labs are held in the Computer Science Instruction Lab, commonly known as the MacLab, on the A-level (downstairs) in the Regenstein Library. At our first meeting, we will arrange a make-up time for the lab that would be on the 4th of July.

The text for the course is How to Design Programs by Felleisen et al. The full text is available free online so it is not necessary to purchase a hard copy. If, however, you would like to read the text as an actual book, it is available on campus at the Seminary Co-op Bookstore and on the Internet, new and used, at the usual online bookstores.

You may use the department's computers for your work, but in the likely event that you intend to work on your own machine, you will need to download and install Racket and subversion. (Installation instructions for subversion vary by platform; we will assist you with subversion when the time comes.)

As the course gets going, the flow of questions and answers becomes steady. We will use the piazza system to help manage the traffic. You will need a piazza account to participate.

If you have any remaining questions about the course, please send email to the instructor at ams .at. cs .dot. uchicago .dot. edu.

Lecture Schedule

(subject to change)

Week Monday Wednesday Friday
1
  • lecture 1: welcome and orientation; atoms; expressions; images
  • lecture 2: functions; design recipe
  • lecture 3: booleans; conditionals; compound data
  • lecture 4: local bindings; structures; variants
  • lab: simple graphics, day-of-week
  • lecture 5: self-referential variants; recursion
  • lecture 6: lists
2
  • lecture 7: two lists; natural numbers
  • lecture 8: recursive graphics; pattern matching
  • lecture 9: polymorphism; higher-order functions
  • lecture 10: map and filter
  • lab: recursive graphics
  • lecture 11: fold; lambda; curried functions
  • lecture 12: local functions; modules
3
  • lecture 13: trees: family trees, expression trees
  • lecture 14: binary search trees
  • lab: Google image charts
  • July 4th
  • midterm exam
  • lecture 15: worlds and universes
4
  • lecture 16: expression trees
  • lecture 17: mutual recursion
  • lecture 18: game strategy
  • lecture 19: graphs; route finding
  • lab: B-trees
  • lecture 20: algorithm analysis
  • lecture 21: insertion sort; mergesort; quicksort
5
  • lecture 22: boxes and effects
  • lecture 23: vectors; hash tables
  • lecture 24: binary search; in-place sort
  • lecture 25: backtracking
  • lab: Huffman codes
  • final exam

Evaluation

Your grade in this course will be computed according to the following formula:

Late work will not be accepted. Our time frame is compressed and you must keep up. Exceptions to this policy will be granted only in the case of extraordinary circumstances.

Devices Off

You must power down all laptops, phones, iPods, tablets, magic wands, etc. while you are in class. Better yet, leave them home. This policy is the result of years of competing for attention with email, text messages, cat videos and the rest. Enough. I hereby win this competition by banishing the opponent. Invest in a paper notebook and a writing utensil or two, bring them with you, and take notes.

One exception: students with documented handwriting issues may turn on a laptop and open a text editor for note taking while turning off their wireless antenna. Come speak to me if you are such a student.

Academic Honesty

As the world of computer programming becomes ever vaster and the Internet becomes ever more populated with ripe fruits to copy and paste, your personal ethics are absolutely essential in maintaining the worth and integrity of your education. Remember that an honest failure is of infinitely greater value than a dishonest success. I can't amplify this enough.

College-wide honesty guidelines are here. The college's policies are always the last word, if there is any uncertainty.

The following rules of thumb summarize honesty as it pertains to this course:

  1. Do not copy anyone's work.
  2. Do not allow your work to be copied by anyone.
  3. Do not submit work identical to another student's.
  4. Document all collaboration.
  5. Credit your sources.

To expand on the second rule, sharing completed or partially completed work in advance of its deadline in any way, including posting to the Internet, is expressly forbidden.

When it is time to do the actual coding, writing, etc., do your own work. Your work.

Dishonest behavior will result in serious consequences.