Computer Organization & Systems

Fall 2020

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 Tues. Dec 8 by Nick Final grades have been uploaded to Axess. Check your Stanford email for more details about grades. Have a great winter break - we hope you enjoyed the course!

  • Final Project Grades Released Mon. Dec 7 by Nick Final Project grades have been posted to the Gradebook page, along with comments for your work. The quartiles of scores for the functionality portion of the project (which included functionality tests, the readme, and scores for dump_heap and validate_heap) were as follows (/122): 1st quartile = 93, second quartile = 111, third quartile = 116. (This does not include the 5% bonus, which is not yet factored in). Congratulations on completing your heap allocators!

  • Assignment 5 Grades Released Mon. Nov 23 by Nick Assignment 5 grades have been posted to the Gradebook page, along with feedback for the readmes. The quartiles of scores were as follows (/84): 1st quartile = 70, second quartile = 78, third quartile = 81. Congratulations on defusing your bombs and finding vulnerabilities in ATM!

  • CS107 Recap Page Posted Mon. Nov 16 by Nick As an additional resource to our final wrap-up lecture, we've posted a CS107 Recap Page that sums up everything we did this quarter, where you could go next, and ways to explore the CS107 material further if you're interested. We encourage you to check it out! We also hope you can take the time to fill out the end-quarter CS 107 course evaluation. We sincerely appreciate any feedback you have about the course and read every piece of feedback we receive. We are always looking for ways to improve! To fill out the course evaluation, go to Axess, and from there click the "Student" tab and select "Course and Section Evaluations". Thank you in advance for any feedback you have!

  • Assignment 4 Grades Released Sat. Nov 14 by Nick Assignment 4 grades have been posted to the Gradebook page, along with style feedback for the assignments. The quartiles of scores on the functionality portion of the assignment were as follows (/92): 1st quartile = 84, second quartile = 88, third quartile = 92. Awesome job!

  • Final Project Posted Mon. Nov 9 by Nick The Final Project 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. It is due Fri. 11/20 at 11:59PM PST. Because it is the end of the quarter, no late submissions will be accepted for the final project. You can find more details on the assignment page. Important note: we have decided to remove the following language from the general information handout regarding the final project: "You must do the final project in order to pass the class.". Instead, we rely solely on the 20% weight of the final project to communicate its importance to the course, and its significance in determining your final course score.

  • Lab 7 Posted Sun. Nov 8 by Nick We’ve posted the materials for lab7, which is all about exploring optimizations and profiling. There is no prelab for this week. The exercises give you practice with profiling and optimizing code, which will be useful for fine-tuning your heap allocators. Feel free to post on the discussion forum if you have questions while working!

  • Gradebook Updates Thurs. Nov 5 by Nick You can now visit your Gradebook page to see your overall assignments score through assign3, your overall lecture quiz score through lecture 13, your assessment score, and your overall score and percentile range "if the quarter ended today" (meaning if you do the same on future work as past work). We hope you find this information helpful! As a side note, we do not "curve down"; meaning that a raw score of 60% is at least a D-, a raw score of 70% is at least a C-, a raw score of 80% is at least a B-, and a raw score of 90% is at least an A-. As a reminder, more information about our grading weights and procedures can be found in the general information handout, linked further down on this page. If you see anything incorrect, please let us know as soon as possible. Thank you!

  • Post-Assessment Advice Page Posted Thurs. Nov 5 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!

  • Assessment Grades Released Thurs. Nov 5 by Nick Mid-quarter assessment 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 mid-quarter assessment webpage. Awesome job on the assessment!

  • Assignment 5 Posted Wed. Oct. 28 by Nick Assignment 5 has been posted on the assignments page. It is meant to reinforce the topics of assembly translation and reverse engineering. There are two parts to this assignment. The first part is about an ATM withdrawal program containing some vulnerabilities - you'll need to use your C and assembly skills to find and demonstrate how to exploit these vulnerabilities. The second part is the binary bomb program, where you're given an executable "bomb" program to "deactivate" using your assembly and reverse-engineering skills. These problems are like C/assembly "puzzles" to solve, and we hope you enjoy solving them and exploring this material as much as we enjoyed creating them! The assignment is due Mon. 11/9 at 11:59PM PST. You can find more details on the assignment page.

  • Assignment 3 Grades Released Tues. Oct. 27 by Nick Assignment 3 grades have been posted to the Gradebook page, along with style feedback for the assignments. The quartiles of scores on the functionality portion of the assignment were as follows (/95): 1st quartile = 87, second quartile = 91, third quartile = 95. Rock on!

  • Lab 6 + Pre-lab Posted Sun. Oct. 25 by Nick We’ve posted the materials for lab6, which is all about exploring assembly's interactions with the stack. In preparation for labs next week, please make sure to set aside 20-30min beforehand to complete the pre-lab exercises; you can find them on the lab6 page. The exercises will be essential to the further problems you'll work through during your lab session and for the next assignment. Feel free to post on the discussion forum if you have questions while working!

  • Lab 5 + Pre-lab Posted Sun. Oct. 18 by Nick We’ve just posted the materials for lab5, which is all about assembly. Feel free to post on the discussion forum if you have questions while working!

  • Assignment 2 Grades Released Sat. Oct. 17 by Nick Assignment 2 grades have been posted to the Gradebook page, along with style feedback for the assignments. The quartiles of scores on the functionality portion of the assignment were as follows (/80): 1st quartile = 71, second quartile = 76, third quartile = 80. Nice work!

  • Mid-Quarter Assessment Next Week Fri. Oct 16 by Nick The CS107 mid-quarter assessment is next week, with an assessment window from Wednesday October 21 at 11AM PDT through Friday October 23 at 11AM PDT, and you can take the assessment during any 3-hour block in that window. Please see the mid-quarter assessment webpage for information about the assessment, as well as study tips. You can also find review materials, as well as a download of the BlueBook software. You should download BlueBook as soon as possible to become familiar with it. It is a program that can administer assessment files in a special file format. The encrypted file for the assessment will be available next week at the start of the assessment window.

    If you have academic accommodations, e.g. through OAE, and have not already let us know, please let us know as soon as possible.

  • Assignment 4 Posted Thurs. Oct 15 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 the sort command. We hope you have fun with it! The assignment is due Wed. 10/28 at 11:59PM PST. You can find more details on the assignment page.

  • Assignment 3 Posted Thurs. Oct. 8 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 convenient 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 Wed. 10/14 at 11:59PM PST. You can find more details on the assignment page.

    Note: Through helper hours and the discussion forum, our focus will be on supporting you so that you can track down your own bugs. Please ask us how to best use tools, what strategies to consider, and advice about how to improve your debugging process or track down your bug, but we want you to take ownership of your own code and drive your own debugging. For this reason, if you have debugging questions during helper hours, you should make sure to gather information and explore the issue on your own first using the debugging checklist discussed in lab and in the assignment spec, and fill out the QueueStatus questions with this information. This is required for any debugging questions in helper hours starting with assign3 so that the course staff can effectively help with debugging questions. If you don't provide enough information, we will ask you to please re-sign up in the queue once you can provide more information so that we can better help you. We are looking for information like - what have you observed from running GDB? Have you found a simple, reproducible test case? Etc. If you are eager to sign up for Helper Hours as soon as they open, we recommend preparing responses ahead of time to the questions: "What question do you have? Please provide as much information as possible." and "What steps have you already taken to try and answer your question? (e.g. running gdb/valgrind, reading Resources page, etc.). This information is required for help with debugging questions."

  • Lab 4 + Pre-lab Posted Sun. Oct. 11 by Nick We’ve just posted the materials for lab4, which is all about generics and function pointers. In preparation for labs next week, please make sure to set aside 20-30min beforehand to complete the pre-lab exercise; you can find it on the lab4 page. The exercise this week is getting more comfortable with function pointers and how they're used, which will play a big part in the upcoming assign4! Feel free to post on the discussion forum if you have questions while working!

  • Assignment 1 Grades Released Wed. Oct. 7 by Nick Assignment 1 grades have been posted to the Gradebook page, along with style feedback for the assignments. The quartiles of scores on the functionality portion of the assignment were as follows (/80): 1st quartile = 69, second quartile = 76, third quartile = 80. Awesome job!

  • Labs Moving To Zoom Sun. Oct. 4 by Nick Starting with lab3, we will be running labs via Zoom instead of Nooks. To join your lab, visit the course Canvas page and click on "Zoom" in the sidebar. Then, from the list of Zoom links, pick the one corresponding to your lab leader and lab time. We'll see you in labs this week!

  • Lab 3 + Pre-lab Posted Sun. Oct. 4 by Nick We’ve just posted the materials for lab3, which is all about pointers, arrays and the heap. In preparation for labs next week, please make sure to set aside 20-30min beforehand to complete the pre-lab exercise; you can find it on the lab3 page. The exercise will be essential to the further problems you'll work through during your lab session. Feel free to post on the discussion forum if you have questions while working!

  • Assignment 2 Posted Wed. Sep 30 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 Wed. 10/7 at 11:59PM PST. You can find more details on the assignment page.

  • Assignment 0 Grades Released Wed. Sep 30 by Nick Assignment 0 grades have been posted to the Gradebook page, along with style feedback for the assignments. The quartiles of scores on the functionality portion of the assignment were as follows (/25): 1st quartile = 24, second quartile = 25, third quartile = 25. Way to go! Check out our Ed post for a short debrief of the assignment.

  • Lab 2 + Pre-lab Posted Sun. Sep 27 by Nick We’ve just posted the materials for lab2, which is all about strings. In preparation for labs next week, please make sure to set aside 20-30min beforehand to complete the pre-lab exercises; you can find them on the lab2 page. The exercises will be essential to the further problems you'll work through during your lab session. Feel free to post on the discussion forum if you have questions while working! Going forward, we plan to post each week's lab, including pre-lab exercises, the Saturday before the lab.

  • Free Online CTL Tutoring Wed. Sep 23 by Nick The Center for Teaching and Learning reached out asking us to share the following announcement about free tutoring. Feel free to get in touch with them if you're interested! "Want to meet with an experienced peer to discuss course concepts, think through a problem set, or prepare for an upcoming exam? CTL offers appointment tutoring for CS 107 and CS 106B, 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 page. We also have a variety of remote learning resources and academic coaching available to assist with all of your learning needs!"

    As a reminder, with any tutoring, please make sure to adhere to the course honor code and collaboration policy. You can find information about tutoring in particular on the collaboration page.

  • Assignment 1 Posted Mon. Sep 21 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 Wed. 9/30 at 11:59PM PST. You can find more details on the assignment page.

    As you start working, we want to include a reminder about the course style guide; it contains an in-depth reference about how to ensure your programs have great style! Additionally, through TA helper hours and the discussion forum, our focus will be on supporting you so that you can track down your own bugs. Please ask us how to best use tools (like the brand-new GDB!), what strategies to consider, and advice about how to improve your debugging process or track down your bug. If you have debugging questions during helper hours, please make sure to gather information and explore the issue on your own first, and fill out the QueueStatus questions with this information. Starting with a future assignment, we will require this information when signing up for helper hours for debugging help, so please make sure to provide as much information as possible.

  • Lab Assignments PostedMon. April 13 by Nick We have posted lab assignments on the labs page of the course website. You can view your assignment here. We did our best to assign everyone to one of their top choices; your enrolled lab will be bolded on this page. On this form, if you'd like, you can also join a different lab with space available. Unfortunately, if a lab is full, we are not able to accommodate additional students at this time, but check back later, as enrollments may shift over time.

    Labs start Tues., and there's nothing you need to do before lab this week - just go over to Nooks (see the Help page for more info) and join the room for your lab leader at the specified time. They'll explain everything about lab and what it's all about. Going forward, labs will be published each Saturday, including a pre-lab exercise (a short activity that should take 20-30min) to complete before lab. You can find more information about labs and lab policies on the labs page. We'll see you in lab this week!

  • Lab Signups Open until Sat. 5PM Tues. Sep 15 by Nick Lab preferences submissions are now open! From now until Saturday at 5PM PST, please submit your lab preferences for which lab you would prefer to attend this quarter. Note that preferences are not first-come first-serve; you may fill out your preferences anytime between those dates, and you may come back to update your preferences later as well. You can access the lab signup page via the link on the labs page here.

  • Helper Hours Schedule Posted Mon. Sep 14 by Nick We have posted information about Helper Hours on the Getting Help page. We'll be using a tool called Nooks this quarter to facilitate Helper Hours and staff shifts during Helper Hours. Please join our Nooks community to work with other students, and to get help from the TAs! You don't need to have questions to come by Helper Hours - feel free to drop in and chat with others anytime! You can also see the calendar for Staff Helper Hours on the Getting Help page as well.

  • Assignment 0 Posted Mon. Sep 14 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. 9/21 at 11:59PM PST, and there are no late submissions accepted for this assignment (late days or otherwise), so please make sure to submit by the deadline.

  • Apply to CS107A (ACE/Pathfinders) Sun. Sep 13 by Nick (based on CS106B post written by Sonja Johnson-Yu) CS107A, also known as CS107 ACE, is a 1-unit supplementary section designed to build a stronger foundation in computer science. Students participating in ACE will attend an additional weekly section and participate in special office hours and ACE-specific review sessions. Section is scheduled for Tuesdays 10-11:50AM PST, but an asynchronous option will be available for students in international time zones or with class conflicts.

    ACE is one of the School of Engineering’s Equity and Inclusion Initiatives. We especially want to provide an opportunity for students who come from educationally disadvantaged backgrounds or for anyone who feels they might need additional support in order to succeed. We limit enrollment to enable small classes that allow students to have one-on-one interactions with the TA.

    If you are interested in joining the ACE section, please apply online - click here. The application will be open until 5PM PDT on Friday, September 18. Prior to application results being released, any student who's applying/planning to apply should attend CS 107A sections. You can find more information about CS107A on our FAQ page. If you have further questions about ACE, feel free to reach out to Jennie Yang (CS107A TA) at jenniey@stanford.edu.

  • Welcome! Tues. Sep 1 by Nick Welcome to CS107! Class starts remotely on Monday, September 14th. We are looking forward to meeting you and starting off a great quarter together! We'll have more details to come about the format of CS107's remote fall offering. In the meantime, please feel free to check out the updated FAQ. It covers questions about recorded lectures, conflicting classes, CS107E, CS107A, and more. We hope you find it helpful! Other details and course policies listed are subject to change, so please stay tuned.

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 11:30AM-12:50PM PDT via Zoom (link on Canvas)

Labs: Tue/Wed/Thu at various times on Zoom; students sign up for labs after the quarter begins.

Course Policies

Feedback

Course Staff

Visit the Getting Help page for information about how to contact the course staff.

Aditi Gaur

Andrew Benson

Brynne Hurst

Cem Gokmen

Charles Rajan

Lucas Soffer

Nikhil Athreya

Ricardo Iglesias

Soham Gadgil

Stefan Hadjis

Teresa Noyola

CS107A CA:

Jennie Yang