Welcome!
In CMSC 15100 (informally CS151), we introduce a selection of major computer science topics through instruction in computer programming and various analytical techniques.
CS151 is designed for students intending to major or minor in the subject, although others are welcome.
The specific goals of the course are these:
- to understand solving computational problems in terms of identifying and, when necessary, designing relevant abstractions,
- to process data structures in several ways, most importantly by the technique of structural recursion,
- to learn to recognize and exploit common computational patterns through code organization and higher-order programming,
- to learn to use simple and polymorphic types as a powerful approximation of correctness in computer programs, and
- to analyze the efficiency of certain algorithms.
In pursuing these goals, students will become acquainted with a selection of classic data structures and algorithms. Broader, more technical treatments of these topics, in particular algorithm analysis, are presented in later undergraduate courses.
We use the Racket programming language in our studies. Racket is a dialect of Scheme, a language with a long history in the field of computer science generally and college-level instruction specifically. Specifically, we use the Typed Racket variant of Racket.
Having completed this course, students will be able to use computer programming as a robust and efficient method for analytical problem solving and creative endeavors, and develop a sense of the relationship between computer programming and computer science. Students will discover, in future work, that the experience gained in this course applies to programming generally, in any programming language; that is, CS151 should not be thought of as a course in programming Scheme. Furthermore, students will have gained experience with some best practices in the discipline.
Piazza: Online Support
Register with piazza. Piazza is an online question-and-answer system that we use for that purpose as well as distribution of course materials on occasion. Registered students will receive an email about piazza registration, with instructions, at your uchicago email address at the start of the quarter.
Staff
- Instructors
- John Reppy (Ryerson 256; jhr 'at' cs 'dot' uchicago 'dot' edu)
- Timothy Black (Ryerson 253A; timblack 'at' math 'dot' uchicago 'dot' edu)
- TAs
- Andrew Mcnutt
- Joe Wingerter
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 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, or send email to the instructor directly.
A few piazza rules:
- Do not post any more than a snippet of code to piazza. Any post that says "Here's my code — what's wrong with it?" will be deleted immediately.
- Please do not post anonymously to piazza (except when the question is personal). Piazza posts are better, more thoughtfully written, and more courteous when the author is identified. We reserve the right to delete anonymous posts from piazza.
Lectures
There are two sections of CS151 this quarter, at the following time and place:
- MWF 1:30–2:20, Ryerson 251
- MWF 2:30–3:20, Cummings 101
Devices
We do not allow the use of electronic devices during lectures. They are simply too distracting. This includes laptops, smartphones, tablets, and anything that beeps, blinks, records, locomotes, etc. The lone exception to this policy is that students whose handwriting issues necessitate their use of a device for note taking will be permitted to use a plain text editor on a laptop or tablet whose wireless capability is turned off. If you are such a student, let your instructor know.
Lab Sessions
Students must register for and attend lab sessions each week. Lab sessions are held in the Computer Science Instructional Laboratory (CSIL). CSIL is located on the first floor of Crerar Library. Attendance at the lab session for which you are registered is mandatory.
We offer four weekly lab sections on Wednesdays at two different meeting times. If you need to switch your lab time, there will be a way to do so online early in the quarter; details to follow.
The lab times are as follows:
- Lab 1: 3:30-4:50 (CSIL 1)
- Lab 2: 3:30-4:50 (CSIL 2)
- Lab 3: 5:00-6:20 (CSIL 1)
- Lab 4: 5:00-6:20 (CSIL 2)
- Lab 5: 6:30-7:50 (CSIL 1)
- Lab 6: 6:30-7:50 (CSIL 2)
Office Hours
Office hours are held at the following times:
- Mondays at 12:00-1:00 (Eckhart 129) and 3:00-4:00 (Ryerson 256)
- Tuesdays at 11:00-12:00 (Ryerson 256) and 1:30-2:30 (Ryerson 255)
- Wednesdays at 11:00-12:00 (Ryerson 256)
- Thursdays at 2:30-3:30 (Eckhart 129)
- Fridays at 3:00-4:00 (Ryerson 256)
In addition to the office hours that we provide, the College Core Tutor Program normally employs computer science tutors Sunday through Thursday nights from 7pm–11pm, starting in the second week of the quarter.
Schedule of Topics by Week
Here is a summary of the topics that we expect to cover this quarter. Note that this schedule may change!
Week | Topics |
---|---|
1 | basic values and types; variable definitions |
2 | function definitions; conditionals; testing; recursion |
3 | tail recursion; accumulators; struct and union types; |
4 | subtyping; functional update; local definitions; pattern matching; inductive types and recursive data structures |
5 | parametric polymorphism and lists |
6 | higher-order programming; first-class functions |
7 | higher-order list programming; folds; algorithm analysis; sorting |
8 | more sorting; trees and tree traversals; binary-search trees |
9 | Graphs; vectors; depth-first-search; mutable vectors |
10 | binary search and quicksort on vectors; abstract graphs; graph-search |
Optional Text
How to Design Programs, Felleisen et al., ISBN 0-262-06218-6. Over the years and as our curriculum has evolved, we have departed from this text to such an extent that we no longer require you to buy a copy. Moreover, the full text of the book is available online at http://www.htdp.org free of charge. It is a useful reference and a good book in its own right, and, despite various differences with this course in its present form, has given our curriculum its basic shape.
Software
All the software we use in this course is available free of charge for all common platforms. We mainly use DrRacket, available at http://racket-lang.org, and subversion. Macintosh and Linux users very likely have subversion on their machines already. Windows users will need to download and install Cygwin, and will be able to include subversion in their Cygwin installations. We will provide detailed installation instructions for various platforms once the quarter starts.
Coursework and grading
Coursework is comprised of lab exercises (done at lab sessions, discussed above), homework assignments, projects, in-class quizzes, and exams. Each student's final grade will be computed according to the following formula:
Percentage Component 15% Lab exercises 20% Homework assignments 15% Projects 5% Quizzes 45% Exams
What precisely constitutes an A, B, etc. will be determined by the collective performance of the class.
Lab exercises
Lab exercises will be posted on Piazza (except for Lab 1, which is here) and are meant to be done during your lab section. In some cases, you may need extra time to finish the exercise, so they are not due until Friday night.
Homework
There will be weekly homework assignments, which will also be posted on the Piazza. These will usually be assigned on Thursday and will be due the following Tuesday.
Projects
There will be a longer multipart project during the latter part of the term.
Quizzes
There will be six quizzes at the beginning of class on Fridays. These quizzes will typically consist of a single question that should only take a couple of minutes to answer. The purpose of the quizzes is to give you some practice thinking about computation without a computer at hand.
Exams
There will be two exams for all students that will be administered in the evening.
- Midterm exam: Wednesday February 7; 7–9pm; Kent 107
- Final exam: Tuesday March 6; 7–9pm; Kent 107.
Exam Accommodations
If you are a student who has special exam-taking arrangements with Student Disabilities Services (SDS), you must contact SDS to arrange for a time, date and proctor for the exams in this course. We will do our part by delivering the exams to the SDS office as needed.
If you do not have any arrangements with SDS but believe you should, please contact them directly (https://disabilities.uchicago.edu/) or talk to your college adviser to open the conversation.
To be clear, we, your instructors, are not in a position to judge who needs what sort of special accommodations; we leave those judgments to the professionals. SDS, along with the college administration, makes these determinations, and we abide them. Therefore, although you may ask one of us about making an accommodation for an exam, we will simply refer to your adviser or SDS in such cases.If you have a conflict with an exam because of a personal event (dinner with friends, night at the theater, meeting with a study group, etc.), we expect you to make every effort to put the exam first and plan around the exam rather than the other way around. If your exam conflict is important and cannot be postponed or rescheduled, we will accommodate you as best we can.
Late Work
Deadlines in this course are rigid. Since you submit your work electronically, deadlines are enforced to the minute. Late work will not earn credit. To allow for whatever inevitable deadline-related difficulties arise for individuals throughout the quarter, however, we drop the lowest scoring homework or lab exercise from our final calculation. Please note that no project work will be dropped. We also drop the lowest quiz score.
We occasionally accept late work in the case of special circumstances, such as serious illness, when those circumstances are extraordinary.
Academic Honesty
In this course, as in all your courses, you must adhere to the college-wide honesty guidelines. The college's rules have the final say in all cases. Our own paraphrase is as follows:
- Never copy work from any other source and submit it as your own.
- Never allow your work to be copied.
- Never submit work identical to another student's.
- Document all collaboration.
- Cite your sources.
Advice
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 you to 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. We will help you get going again when you are stuck.