CS107 is the third course in Stanford's introductory programming sequence. Our CS106 courses provide students with a solid foundation in programming methodology and abstractions and CS107 follows on to build up their programming maturity and expand breadth and depth of experience. The course will work from the C programming language down to the microprocessor to de-mystify the machine. With a complete understanding of how computer systems execute programs and manipulate data, you will become a more effective programmer, especially in dealing with issues of debugging, performance, portability, and robustness. Topics covered include: the C programming language, data representation, machine-level code, computer arithmetic, elements of code compilation, optimization of memory and runtime performance, and memory organization and management.
The class has two lectures a week and a weekly lab designed for hands-on learning and experimentation. There will be significant programming assignments and you can expect to work hard and be challenged by this course. Your effort can really pay off - once you master the machine and advance your programming skills to the next level, you will have powerful mojo to bring to any future project!
The CS107 web site is being prepared and will be published here when ready. In the meantime, here are answers to questions commonly asked by potential students.
CS107 is scheduled for every quarter in the 2015-16 academic year. The course has two 80-minute lectures and a 2-hour lab each week. Fall quarter lectures meet Monday and Friday 1:30-2:50pm and labs are TWTh at various morning, afternoon, and evening times.
CS107 is typically offered by SCPD only one quarter per year, as dictated by industry demand for the online offering. In year 2015-16, spring quarter is scheduled to be recorded; the other quarters are not. SCPD may keep lecture recordings from prior quarters accessible, but we don't recommend you make a habit of relying on these as their continued availability is uncertain and they may not be a good match for the current quarter's coverage.
Lecture is an important part of the course and students find it most effective when they can join us in person. (An ode to "did I miss anything?") My earnest recommendation is that you wait or re-arrange your schedule to permit your full participation in all of your courses. Enrolling in conflicting courses is disallowed by university policy. We don't police your schedule to reject conflicts, but this does not mean we encourage or enable it. CS107 will not offer any alternate or makeup exams so you must arrange to be present for our scheduled midterm and final exams. If you've got an unresolvable conflict with lectures/exams, holding off on 107 shouldn't be catastrophic--- we are offering the class every quarter, so you have lots of other chances without much delay!
Auditors are welcome to attend lecture, access our materials, and complete labs and assignments on their own, but work is not handed in. We will not be able to grade work from auditors, nor be able to accommodate them in the lab sections.
All undergraduates are required to take the course for 5 units. Graduate students may opt to enroll for 3 or 4 units to squeeze into a limited tuition allowance, however this is solely a bookkeeping change and has no effect on the course requirements.
You may enroll for either a letter grade or CR/NC option. Students are graded on the same standards during the quarter without consideration of which grading option has been chosen. A CR course grade is earned for any course letter grade of C- or higher.
The goals for CS107 are for students to gain mastery of
to achieve competence in
and have exposure to
Successful completion of CS106B/X (or equivalent) and eagerness to advance to the next level. You should be an accomplished programmer who has practical C/C++ skills using recursion, dynamic data structures (pointers, linked lists, trees, graphs), data abstraction, classic data structures (lists, stacks, queues, sets, maps), and standard algorithms (searching, sorting, hashing). You should have an appreciation of the intrinsic value of good engineering and design and you will be expected to produce well-decomposed, readable code. You're welcome to talk with me if you need help determining the right placement for you.
Course grades will be determined by 50% coursework (regular assignments and weekly labs) and 50% exams (midterm and final). To pass the course, both the coursework and exam aggregates must each be passing work. Restated, if the composite of your exams is failing, then you will fail the class in spite of an astounding performance on coursework or vice versa.
Note: CS107 is offered on SCPD once per year. In 2015-16 that quarter is expected to be spring.
If you are local to the Bay Area, you are welcome (and encouraged) to attend lab in person. If that isn't possible, you can work through the lab exercises on your own. The lab materials are posted online and the TAs will prepare a webcast of the lab highlights each week. You may work alone or are welcome to arrange to work on the labs in collaboration with another SCPD student. Use the forum to find a buddy if you'd like.
Local students join us on campus for the regular exam. Remote students take exams on-site, proctored by the SCPD site administrator. The remote exam is administered on the same day as the regular exam; we can usually be somewhat flexible on the exact timeslot.
Spring quarter finals are in the white file cabinet in the Gates 1B lobby.
On the resources page.
If your question is not answered here, email us at cs107 at cs dot stanford dot edu and we can help you out!