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:

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:

Lectures

There are two sections of CS151 this quarter, at the following time and place:

The first lecture is on Wednesday, January 3; the last is on Wednesday, March 7. There will be no lecture on Monday January 15 (MLK) or Friday February 9 (College break).

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:

Office Hours

Office hours are held at the following times:

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.

Please plan accordingly.

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:

  1. Never copy work from any other source and submit it as your own.
  2. Never allow your work to be copied.
  3. Never submit work identical to another student's.
  4. Document all collaboration.
  5. 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.

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.


Last revised: March 1, 2018