Winter 2019
NOTE: this website is out of date. This is the course web site from a past quarter, Winter 2019. If you are a current student taking the course, you should visit the current class web site instead. If the current website is not yet visible by going to cs107.stanford.edu, it may be accessible by visiting this link until the new page is mounted at this address. Please be advised that courses' policies change with each new quarter and instructor, and any information on this out-of-date page may not apply to you.
Important course announcements will be posted below and announced in class. You are responsible for all material that appears here and should check this page for updates frequently.
Announcements
-
Final Course Grades Posted Wed. March 27 by Nick Final grades have been uploaded to Axess. Check your Stanford email for more details about grades. Have a great spring break - we hope you enjoyed the course!
-
Final Exam Grades Released Wed. March 27 by Nick Final exam scores have been released via Gradescope, an online course grading website. You can find more information about the exam statistics, how to see your score, and information about regrade requests, on the exam webpage. Awesome job on the exam!
-
Assignment 7 Grades Released Tues. March 26 by Nick Assignment 7 grades have been posted to the Gradebook page, along with comments for your work. The median on the assignment was 103/114. Congratulations on completing your heap allocators!
-
Assignment 6 Grades Released Tues. March 19 by Nick Assignment 6 grades have been posted to the Gradebook page, along with comments for your work. The median on the assignment was 78/84. Congratulations on defusing your bombs!
-
Final Exam Fri. 3/22 12:15-3:15PM in Hewlett 200/201 Fri. Feb. 8 by Nick The CS107 final exam is on Friday, March 22 from 12:15-3:15PM in Hewlett 200/201 (depending on last name). Please see the final exam webpage for information about the exam, as well as study tips. We are also in the process of posting review materials there. The exam will rely on the same version of BlueBook you previously downloaded for the midterm. The encrypted file for the exam will be posted in advance of the exam, and you will be notified when it is available. Download the file ahead of time so you are prepared when the exam starts. We will provide a password to unlock the exam at the start.
If you have academic accommodations (e.g. OAE) or athletics accommodations, or if you do not have a workable laptop for the exam, please let us know by Monday, March 18 at 11:59PM PST. Limited charging outlets will be available during the exam. -
Final Exam Review Session Tues. March 12 by Nick We will be holding a CS107 final exam review session on Wed. 3/20 from 7-9PM in 320-105. Any applicable materials from the review session will be posted on the course website afterwards. Please come with questions!
-
Assignment 5 Grades Released Thurs. March 7 by Nick Assignment 5 grades have been posted to the Gradebook page, along with comments for your READMEs. The median on the assignment was 33/35 - awesome work!
-
Assignment 7 Posted Tues. March 5 by Nick Assignment 7 has been posted on the assignments page. It is mean to act as a capstone for all the topics we've covered this quarter by implementing our very own heap allocator! We hope you have fun with it. The assignment is due Thurs. 3/14 at 11:59PM PST. You can find more details on the assignment page.
-
Post-Midterm Advice Page Posted Thurs. Feb. 28 by Nick We've posted a page containing information about commonly-asked questions heading into the final weeks of the course, for example about how to interpret course grades, succeed in the remainder of the course, and more. We hope you find it helpful!
-
Assignment 4 Grades Released Mon. Feb. 25 by Nick Assignment 4 grades have been posted to the Gradebook page, along with style feedback for the assignments. The median on the assignment was 83/87 - nice job!
-
Assignment 6 Posted Sat. Feb. 23 by Nick Assignment 6 has been posted on the assignments page. It is meant to reinforce the topics of assembly translation and reverse engineering. In the assignment, you'll be exploring vulnerabilities in a provided ATM program, and defusing a "binary bomb" executable without access to its source code. We hope you have fun with it! The assignment is due Mon. 3/4 at 11:59PM PST. You can find more details on the assignment page.
-
Midterm Grades Released Fri. Feb. 22 by Nick Midterm scores have been released via Gradescope, an online course grading website. You can find more information about the exam statistics, how to see your score, and informaiton about regrade requests, on the midterm exam webpage. Awesome job on the exam!
-
Assignment 3 Grades Released Fri. Feb. 15 by Nick Assignment 3 grades have been posted to the Gradebook page, along with style feedback for the assignments. The median on the assignment was 86/90 - awesome work!
-
Midterm Exam Ready For Download Thurs. Feb. 14 by Nick The CS107 midterm exam BlueBook file is now ready to download from the midterm exam webpage. You should download BlueBook and the exam file corresponding to your exam seating in advance of the exam. We will provide a password to unlock the exam at the start. We have also posted a PDF version of the reference sheet on the midterm page that we will pass out in hard copy at the exam as well.
-
Midterm Exam Fri. 2/15 12:30-2:20PM in Hewlett 200/201 Fri. Feb. 8 by Nick The CS107 midterm exam is on Friday, Feb. 15 from 12:30-2:20PM in Hewlett 200/201 (depending on last name). Please see the midterm exam webpage for information about the exam, as well as study tips. You can also find review materials, as well as a download of the BlueBook software. You should download BlueBook in advance of the exam to become familiar with it. It is a program that can administer exam files in a special file format. The encrypted file for the midterm exam will be posted on Thurs. 2/14 before the exam. Download this file ahead of time so you are prepared when the exam starts. We will provide a password to unlock the exam at the start.
If you have academic accommodations (e.g. OAE) or athletics accommodations, or if you do not have a workable laptop for the exam, please let us know by Sunday, Feb. 10 at 11:59PM PST. Limited charging outlets will be available during the exam. -
Assignment 2 Grades Released Tues. Feb. 5 by Nick Assignment 2 grades have been posted to the Gradebook page, along with style feedback for the assignments. The median on the assignment was 76/80 - awesome work! We've also released statistics for the previous assignments as well. The assignment 1 median was also 76/80, and the assignment 0 median was 20/20. Way to go!
-
Assignment 4 Posted Tues. Feb. 5 by Nick Assignment 4 has been posted on the assignments page. It is meant to reinforce the topic of generics, void * pointers and function pointers, with exercises ranging from implementing your own version of the
ls
command to implementing your own version of thesort
command. We hope you have fun with it! The assignment is due Mon. 2/11 at 11:59PM PST. You can find more details on the assignment page. -
Assignment 3 Posted Tues. Jan. 29 by Nick Assignment 3 has been posted on the assignments page. It is meant to reinforce the topic of pointers, arrays and heap allocation, with exercises ranging from implementing a better version of a C file I/O function to implementing your own versions of the Unix "tail" and "uniq" commands. We hope you have fun with it! The assignment is due Mon. 2/4 at 11:59PM PST. You can find more details on the assignment page.
-
CURIS Summer Research Opportunities Mon. Jan. 28 by Nick Applications are now open for CURIS summer internships here at Stanford. CURIS is the Computer Science department's undergraduate research program: Stanford students work with a faculty member as part of their group for the summer, with the goal of producing an identifiable and publishable research result. Students who participate in CURIS open up opportunities in top-tier jobs, graduate schools, and often get to see their work shared and adopted worldwide. Apply at http://curis.stanford.edu. Applications are due by Sunday, February 10. Your project rankings will be combined with faculty rankings to match applicants to projects. To find out more, join the CS Research Panel on January 31 at 5:30pm. Send queries to curis-mentors@cs.stanford.edu.
-
Assignment 2 Posted Tues. Jan. 22 by Nick Assignment 2 has been posted on the assignments page. It is meant to reinforce the topic of C Strings, with exercises ranging from implementing tools to display environment variables to implementing your own version of the Unix "which" command. We hope you have fun with it! The assignment is due Mon. 1/28 at 11:59PM PST. You can find more details on the assignment page. We have also posted a new style guide on the Assignments page for tips on how to use good style in your programs.
-
Tutoring at Center For Teaching And Learning Thurs. Jan 17 by Nick Alex Ayers, the head of the peer-tutoring program at the Center for Teaching and Learning, has asked us to post this information below about tutoring: "Free Tutoring: Want to meet with an experienced peer to discuss course concepts, think through a problem set, or prepare for an upcoming exam? CTL offers free drop-in and appointment tutoring for CS107, in addition to tutoring for a number of other courses. For more information and to schedule an appointment, visit ourĀ tutoring appointments and drop-in schedule."
-
Assignment 1 Posted Mon. Jan. 14 by Nick Assignment 1 has been posted on the assignments page. It is meant to reinforce the topics of bits, bitwise operators and integer representations, with exercises ranging from implementing the core "saturated arithmetic" algorithm to a bit-level cell simulation to a modern-day character encoding. We hope you have fun with it! The assignment is due Mon. 1/21 at 11:59PM PST. You can find more details on the assignment page.
-
Lab Signups Open Wed. Jan. 9 by Nick Lab signups are now open! You can sign up using the link provided on the Labs page. Signups are first-come-first-serve, so we recommend signing up early if you have many scheduling constraints. You can also use the lab signup page to switch or drop your lab. Labs start next week.
-
Lab Schedule Posted Tues. Jan. 8 by Nick Lab signups open tomorrow evening, so we have posted our current lab time offerings on the Labs webpage if you would like to plan ahead to decide your preferences on dates/times. We'll send out a note when lab signups are open, with the link to sign up.
-
Assignment 0 Posted Tues. Jan. 8 by Nick Assignment 0 has been posted on the assignments page. It is meant as an introduction to Unix and C, with exercises ranging from uncovering who got unauthorized access to a filesystem to modifying a provided C program to accept command-line arguments. We hope you have fun! The assignment is due Mon. 1/14 at 11:59PM PST, and there is no grace period for this assignment, so please make sure to submit by the deadline.
-
Welcome! Thurs. Dec. 20 by Nick Welcome to CS107! Our first lecture is Monday, January 7 at 12:30PM in Hewlett 200. We are looking forward to meeting you and starting off a great quarter together! If you have questions about the course before the quarter starts, please feel free to check out the FAQ. It covers questions about recorded lectures, conflicting classes, CS107E, CS107A, and more. We hope you find it helpful!
Course Description
CS107 is the third course in Stanford's introductory programming sequence. The CS106 courses provide you with a solid foundation in programming methodology and abstractions, and CS107 follows on this to build up and expand your breadth and depth of programming experience and techniques. 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!
Course Logistics
Lectures: Mon & Fri 12:30-1:50pm in Hewlett 200; Note that this is shorter than what Axess says. We will only use the full Axess-listed timeslot for the Midterm exam.
Labs: Tue/Wed/Thu at various times in Gates B08; students sign up for labs after the quarter begins.
Exams:
-
Midterm Exam
Date/Time: Friday, February 15th, 12:30-2:20pm (in class)
Locations: Hewlett 201 (Last Names A-G), Hewlett 200 (Last Names H-Z)
Info: midterm webpage -
Final Exam
Date/Time: Friday, March 22nd, 12:15-3:15pm
Location: TBA
Info: final exam webpage
Course Policies
- Handout 1 - General Information contains a summary of the course logistics and policies
- Honor Code and Collaboration details how the Honor Code applies in this course, including specific examples of acceptable and unacceptable collaboration
- The FAQ contains answers to course questions and information about CS107E and CS107A.
Course Staff
Instructor:
CAs:
![](img/annie shi.jpg)
Annie Shi
![](img/cooper raterink.jpg)
Cooper Raterink
![](img/emily ling.jpg)
Emily Ling
![](img/emily marx.jpg)
Emily Marx
![](img/jennifer tao.jpg)
Jennifer Tao
![](img/max lam.jpg)
Max Lam
![](img/michal wegrzynski.jpg)
Michal Wegrzynski
![](img/nolan handali.jpg)
Nolan Handali
![](img/petar penkov.jpg)
Petar Penkov
![](img/rifath rashid.jpg)
Rifath Rashid
![](img/sushain cherivirala.jpg)
Sushain Cherivirala
![](img/timothy le.jpg)
Timothy Le
CS107A CAs:
![](img/reynis vazquez-guzman.jpg)
Reynis Vazquez-Guzman