Goals

Welcome! In CS162, we will focus not only on basic and advanced datastructures, but also algorithm analysis and design. The course will be driven by a number of interesting projects, some of which will have a number of optional contest components.

We use the C programming language in our studies. C is the lingua franca of computer programmers, and one of the historic and ongoing successes in the design of practical programming languages. Having learned a second programming language well, and having viewed a variety of common problems from two distinct vantage points, students who complete CS162 will begin to see past the superficial characteristics of computer programs to appreciate their deeper properties.

The course will essentially be an abbreviated version of CSE373 at the University of Washington, an upper-division datastructures and algorithms course, but we will use C instead of C++/Java because many of your subsequent computer systems courses at UChicago will use C. Also, we will take a few lectures to introduce C and CS373 assumes prior knowlege of C++/Java. You may refer to material from the UW course, but realize that we will be using a different language and will cover fewer topics.

Getting Help

We do not make use of Chalk in CS162. We will use piazza instead. We know most of you are familiar with piazza already, but please ask your instructor for help getting started with it as needed.

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 also very 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 your instructor directly.

In addition to the office hours we provide ourselves, the College Core Tutor Program (aka “Harper Tutors”) employs computer science tutors Sunday through Thursday nights from 7pm–11pm, starting in the second week.

Class Policies

We do not allow the use of electronic devices during lectures. They are simply too distracting. This includes laptops, smartphones, and tablets. The lone exception to this policy is for students whose handwriting issues necessitate their use of a device for note taking, who will be permitted to use a plain text editor on a laptop whose wireless capability is turned off. If you are such a student, let your instructor know.

Lab Sessions

Due to space constraints, students should attend the labs session they are registered for. Lab sessions are optional, but are designed for the Lab TA to be able to help you with your projects. Lab sessions are held in the Computer Science Instructional Laboratory (also known as the CSIL); it is located on the first floor of Crerar Library.

Resources

Textbook 1 (optional). The C Programming Language (Second Edition), Kernighan, Ritchie. This textbook is available on campus at the Seminary Co-op Bookstore ; you can of course find new and used copies at your favorite online bookstore as well.

Textbook 2 (optional). Data Structures and Algorithms in C++, 4th ed, by Mark Allen Weiss. There are few textbooks that use C, so you can refer to this C++ book for the conceptual material in the course. Supplemental readings in the schedule refer to this book. This book is not in the bookstore, but you can purchase it online.

Software: All the software we use in this course is available free of charge for all common platforms. We will mainly use vi or emacs, clang and subversion. Windowsusers will need to download and install Cygwin, and will be able to include subversion in their Cygwin installations.

Grading / Assignments

Projects will be multi-week endeavors - make sure that you don't get behind.

Each student’s final grade will be computed according to the following formula: labs 50% and exams 50%. We will scale the grades, so what precisely constitutes an A, B, etc. will be determined by the collective performance of the class.

There will be two exams. All exams are in class, and there will be no make-up exams. Documented hospitalization and death in the family are the only excused absences from exams.

Late Policy

Each student will have 2 free late days. These are meant to include legitimate excuses to be late, so do not ask for more even under such circumstances. For logistical reasons, each lab can be turned in no later than 2 days late. If you have used up your late days, each day late costs you 10% of the lab grade. Make sure you commit each time your code is in working order so that you get credit for work you have completed.

Regrade requests

Regrade requests for weekly assignments and exams must be submitted within 5 working days of when you received the grade / feedback.

Academic Honesty

In this course, as in all your courses, you must adhere to college-wide honesty guidelines as set forth at http://college.uchicago.edu/ policies-regulations/academic-integrity-student-conduct. 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 or seen by another student. Never submit work identical to another student’s. Never look at someone’s working solution in order to solve your error. Document all collaboration. Generally, collaboration is forbidden on the individual portion of homework assignments. Get permission before you have friends help you with your homework. Go to office hours instead. Cite your sources.

We are serious about enforcing academic honesty. We will be using automated analysis tools that look for structural similarities against a database of current and previous solutions. If you break any of the 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.

We will enforce the following rule as well: any student who is under suspicion of having violated academic honesty rules will not be allowed to withdraw from this course.

Withdraws, Pass/Fail Requests

All requests for withdraws or Pass/Fail must be received before the last class. Any requests after the last class will be denied. Note that if you take this course P/F, you may not use it to satisfy requirements for a computer science major or minor.

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 help you 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 (office hours, Piazza). We will help you get going again when you are stuck. We are very familiar with common mistakes that stump students for hours but require only minutes for us to identify. Please take advantage of our experience.