CS 106X: Programming Abstractions (Accelerated)
Autumn 2018
Monday, Wednesday, Friday 12:30PM-1:20PM PST in 300-300
NOTE: this website is out of date. This is the course web site from a past quarter, Autumn 2018. 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 cs106x.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.

RESOURCES

icon Qt Creator
Course Staff
Textbook
icon Piazza Forum
Pair Programming
LaIR Help Hours
icon Stanford Library Docs
CppRef
C++.com
Blank C++ Project

EXAMS

Midterm
Thursday, November 1
7-9PM

Final
Monday, December 10
8:30-11:30AM PST


STAFF

Nick Troccoli Lecturer: Nick Troccoli
troccoli@stanford.edu
Gates 193
M/W/F 1:30-2:30PM
Or By Appointment

Zachary Birnholz Head TA: Zachary Birnholz
zacharyb@stanford.edu
Gates B02
Tues. 2:30-4:30PM
Or By Appointment


Final Grades Released
201812172201

Final grades have been uploaded to Axess and should be visible soon. If you would like to see a breakdown of your final grade, please visit this grade report link, which will prompt you to log in with your Stanford credentials. This report contains the grades that we have recorded for you, along with your final grade; if you believe anything is incorrect, please reach out to us as soon as possible.

We have also posted final exam grades, which have been released via Gradescope. Please see the final exam webpage for more information about exam regrades, statistics and scores. Regrade requests will be accepted until the end of the first week of Winter quarter, at 11:59PM PST on Sunday, January 13, 2019.

Thank you for a great quarter! Have a great winter break, and please keep in touch or stop by anytime!

CS106X Ask-Anything Fri. 12/7
201812051701

For our last lecture, we will leave some time for you to ask questions about anything you might like; whether it's related to CS106X, Computer Science in general, or anything else! You can feel free to ask questions during lecture on Friday, or submit them anonymously ahead of time at this link. We will pick some from this form to answer during lecture.

Final Exam Monday 12/10 8:30AM-11:30AM in 420-041
201812042201

The CS 106X final exam is on Monday, Dec. 10 from 8:30AM-11:30AM in 420-041. Please see the final exam webpage for information about the exam, as well as study tips. A few particularly important announcements:

  • We will be holding a final exam review session on Wednesday, Dec. 5 from 7-8:30PM in Hewlett 103. Any slides will be posted on the course website after the session has concluded. We encourage you to come, and to bring your questions!
  • [UPDATE] As of Tuesday 12/4, review materials, including a download of the BlueBook software and practice problems, have been posted.
  • Like the midterm exam, the final exam will be administered via BlueBook.
  • If you have academic accommodations, e.g. through OAE, please let us know by Wed. 12/5 @5PM PST if possible.
  • If you do not have a workable laptop for the exam, you must let us know by Wed. 12/5 @ 5PM. PST. Limited charging outlets will be available during the exam.
The Honor Code
201812041201

As mentioned in class today during the Honor Code discussion, if you wish to retract any of your assignments for any reason whatsoever, please send Nick an email (email at left) saying which assignment(s) you wish to retract. We will, no questions asked, retract that assignment and give you a 0 for that assignment. In particular, if there were any Honor Code issues with that assignment, retracting will remove it and we will no longer consider it an Honor Code issue. Note that you may not retract just parts of assignments, and we do not provide an opportunity to redo that assignment. The deadline to retract an assignment is Friday, December 7 @ 1:20PM.

If you have any questions about the Honor Code, please see the Honor Code handout under the "Handouts" tab. Also feel free to come talk to us if you have any questions about the Honor Code, retractions, or anything else.

Assignment 8: CS106XCell
201812041101

Update (12/4): we want to clarify that, even with topological sort for cell updates, you should be sure to still only re-calculate cells that need to be updated when a given cell changes. Please see this Piazza post for more information.

Update (12/3): we found a small bug in the controller's error handling - please see this Piazza post for more information.

Update (11/29): we mistakenly wrote in the spec that you should implement 8 tests for CS106XCellModel, when the correct number is 6; 6 required additional tests for Expression, 6 for the model. We've corrected this.


CS106XCell

For your eighth and final assignment, you will use topological sort and inheritance to build your own spreadsheet program. This assignment also gives you practice with working on a larger-scale project, and adding to an existing codebase. It is a chance to pull together your stellar C++ skills, use a variety of existing classes, design and implement a few new ones, and build an awesome piece of productivity software. It's a wonderful and sophisticated task that is a capstone to all you've done so far. See the assignment page for more details.

As part of Assignment 8 we ask that you document one bug you encounter and how you solved it. You may also (optionally) work on this assignment in pairs. Please see the pair programming guidelines for guidelines on working in pairs.

The assignment is due Friday, December 7 at 6PM (note the new due time).

LaIR Reopens Tonight (11/25)
201811251701

We hope you had an enjoyable and restful break! As a reminder, the LaIR reopens starting tonight for its usual help hours (7-11PM). Please feel free to stop by, or post on Piazza, if you have any questions while working on the homework.

Assignment 7: Pathfinder
201811170501

Pathfinder

For your seventh assignment, you will implement several graph search algorithms to find paths between different points on maps, mazes and terrains. See the assignment page for more details.

As part of Assignment 7 we ask that you document one bug you encounter and how you solved it. You may also (optionally) work on this assignment in pairs. Please see the pair programming guidelines for guidelines on working in pairs.

The assignment is due Wednesday, November 28 at 11AM.


Update (11/17): we replaced "shortest" with "minimum cost" throughout the description of Alternative Path to clarify that the Alternative Path algorithm should always be dealing with the minimum cost/weight path, not the shortest path by number of edges.

Update 2 (11/18): we have created a new demo program that also includes Alt Path and the updated maps data; you can download this new JAR from the assignment page.

Mid-Quarter Grade Report
201811141301

We have posted individualized grade reports for each student to help you better understand how you're doing in the course so far. You can view your grade report by going to this grade report link, which will prompt you to log in with your Stanford credentials. This report details grade information through Week 6 (11/2), including Assignments 1-4, Sections 1-5 and the midterm exam. This report contains the grades that we have recorded for you; if you believe anything is incorrect, please reach out to us as soon as possible.

Assignment 6: MiniBrowser 2
201811081101

MiniBrowser 2

For your sixth assignment, you will implement several additional features in the MiniBrowser program you worked with in assignment 5. You'll get practice with various types of trees, including binary trees, binary search trees, and tries. See the assignment page for more details.

As part of Assignment 6 we ask that you document one bug you encounter and how you solved it. You may also (optionally) work on this assignment in pairs. Please see the pair programming guidelines for guidelines on working in pairs.

The assignment is due Friday, November 16 at 11AM.


Update: we removed the requirement in the Autocomplete portion that said "for all these methods, the runtime should be independent of the number of characters in the alphabet."

Midterm Grades Released
201811051301

The midterm exams have been graded, and individual scores have been released via Gradescope, an online course grading website. Please see the midterm information page for more information about exam regrades, statistics and scores. Regrades will be accepted until 1:30PM on Monday, November 12, 2018.

Encrypted Midterm Exam Files Posted
201811011401

The encrypted exam files for the regular and OAE exams have been posted to the midterm information page. Please remember to download this in advance of the exam, and also download BlueBook. Remember to also bring your two-step authentication device with you.

Midterm Review Slides Posted
201810302201

The slides from the midterm review session have been posted in the "Downloads" section of the midterm information page. Thanks to everyone who attended!

Assignment 5: MiniBrowser
201810292301

MiniBrowser

For your fifth assignment, you will implement several parts of a fully-functioning web browser and get practice with classes, pointers, linked lists, and dynamic memory. See the assignment page for more details.

As part of Assignment 5 we ask that you document one bug you encounter and how you solved it. You may also (optionally) work on this assignment in pairs. Please see the pair programming guidelines for guidelines on working in pairs.

The assignment is due Wednesday November 7 at 11AM.

**UPDATED**: Midterm Practice Materials Posted
201810271001

We have posted practice materials, including a practice exam PDF and the provided syntax reference sheet. Please see the midterm exam webpage for more information. We have also posted a download and instructions for the BlueBook software. We are finalizing the BlueBook version of the practice exam as well, which will be posted shortly.

UPDATE: we have posted a BlueBook version of the practice exam. We have also added a note under "Material covered" to reflect that there may be short answer questions, like the format of the last question on the practice midterm exam.

Midterm Exam Thurs. 11/1 7-9PM in 420-040
201810250901

The CS 106X midterm exam is on Thursday, Nov. 1 from 7-9PM in 420-040. Please see the midterm exam webpage for information about the exam, as well as study tips. A few particularly important announcements:

  • We will be holding a midterm review session on Tuesday, Oct. 30 from 5-6:30PM in Hewlett 102. Any slides will be posted on the course website after the session has concluded. We encourage you to come, and to bring your questions!
  • Review materials, including a download of the BlueBook software, practice problems, and the provided syntax reference sheet, will be posted by the end of the day on Friday.
  • BlueBook is a program that can administer exams distributed in a special file format. The encrypted file for the midterm exam will be posted on Thurs. 11/1 in the morning 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 a university or academic conflict with the scheduled exam time, you must let us know by Thurs. 10/25 @ 5PM PST.
  • If you have academic accommodations, e.g. through OAE, please let us know by Thurs. 10/25 @5PM PST if possible.
  • If you do not have a workable laptop for the exam, you must let us know by Friday 10/26 @ 5PM. Limited charging outlets will be available during the exam.
Assignment 4: Recursion to the Rescue!
201810192201

Disaster Prep

For your fourth assignment, you will write a series of programs that will give you practice solving more recursive problems in a variety of cool domains, from disaster prep to presidential elections. See the assignment page for more details.

As part of Assignment 4 we ask that you document one bug you encounter and how you solved it. You may also (optionally) work on this assignment in pairs. Please see the pair programming guidelines for guidelines on working in pairs.

The assignment is due Monday October 29 at 11AM, but make sure to get started early!

XL Puzzle Section Problem Resources
201810191501

If you're interested in playing around with the last problem on this week's section handout, take a look at the starter project and solution project that are posted, with a cool graphical interface to visualize the problem. Check it out if you'd like!

[UPDATED] Assignment 3: Recursion
201810132301

Plasma Fractal

For your third assignment, you will write a series of programs that will give you practice solving recursive problems in both console and graphics programs. In particular, you'll be drawing a series of awesome recursive graphics (fractals), generating random writing via grammatical rules, and calculating the wait on poor souls at the bottom of human pyramids. See the assignment page for more details.

As part of Assignment 3 we ask that you document one bug you encounter and how you solved it, so we highly recommend reading handout 6 if you have not already to provide a sense of how to approach debugging.

The assignment is due Friday October 19 at 11AM, but make sure to get started early!


UPDATED: we have updated the provided output for the recursive tree and Mandelbrot fractals to correct their resolution (for easier comparison) and, for Mandelbrot, to correct and label them with their Complex number ranges. Please see the assignment page for more information.

Zach's Tues. 10/9 Office Hours Rescheduled to Thurs. 10/11 2:30-4:30PM
201810081601

Zach is rescheduling his normal planned Tuesday 10/9 office hours to Thurs. 10/11 instead from 2:30-4:30PM due to a one-time conflict. Please feel free to stop by his office hours in Gates B02!

Assignment 2: ADTs
201810051201

For your second assignment, you will write a series of programs that will give you practice using a variety of different ADTs. Word Ladder is a program that finds connections between different words in the dictionary. Random Writer is a program that generates new random text from a provided source file. Maze Generator is a program that generates solvable random mazes of any size. See the assignment page for more details.

As part of Assignment 2 we ask that you document one bug you encounter and how you solved it, so we highly recommend reading handout 6 if you have not already to provide a sense of how to approach debugging.

The assignment is due Friday October 12 at 11AM, but make sure to get started early!

Nick's Fri. 10/5 Office Hours Rescheduled to Thurs. 10/4 2-3PM
201810031701

Nick is rescheduling his normal planned Friday 10/5 office hours to tomorrow (Thurs. 10/4) instead from 2-3PM due to a one-time conflict. Please feel free to stop by his office in Gates 193!

Section Assignments + Late Section Signups
201810021745

Regular section signups have concluded, and we have finalized section assignments. See the course website, under the "Section" dropdown, for more information.

If you missed regular section signups, you may sign up using the late signup form in the "Section" dropdown at the top.

If you would like to swap into a different section, you may also do that using the "Section" dropdown at the top. Section swaps will close in a week, on Tuesday, Oct. 9 @ 5PM.

If you are trying to swap into a section to be with a preferred partner, but are unable to do so due to capacity restrictions, we can attempt to place you and your preferred partner in a different section. Please contact the Head TA, Zachary Birnholz.

Assignment 1: Game of Life
201809281701

Game of Life

For your first assignment, you will write a program that simulates Conway's Game of Life. The Game of Life simulates cell life over generations by following a simple set of rules. This program will give you practice with concepts like file reading, streams, strings, Grids, and decomposition. See the assignment page for more details.

We have also posted Handout 6, which provides tips and tricks for debugging your programs. As part of Assignment 1 we ask that you document one bug you encounter and how you solved it, so we highly recommend reading this handout to provide a sense of how to approach debugging.

The assignment is due Friday October 5 at 11AM, but make sure to get started early!

Section Signups Open Until 5PM Sunday 9/30
201809280901

Section signups are now open! Click on the "Section" dropdown at the top and select "Sign up for section" to submit your preferences. As a reminder, signups are not first come first serve. As such, you may modify your preferences any time up until the deadline. We will notify you of your section assignment by early next week. Sections start next week!

Lecture Feedback
201809261230

As mentioned in lecture today, as a small portion of your section participation grade we are asking each student to provide brief feedback on 2 assigned lectures throughout the quarter. The feedback should only take a few minutes, and will be used to understand how the course is going, and to help make it better. To see which lectures you have been assigned, please see the lectures dropdown at the top of the page. For each lecture you are assigned, please fill out the Google Form linked to from the lectures dropdown after the lecture has concluded. You will also receive an email the morning of each lecture you are assigned, as a reminder. Of course, you are welcome to provide feedback on other lectures in addition to the ones to which you are assigned. We greatly appreciate any feedback you have to improve the course!

Qt Creator Troubleshooting Session
201809241232

If you run into any issues installing Qt Creator, we will be holding a troubleshooting session from 7-9PM on Wednesday 9/26 in the LaIR. The LaIR is on the first floor of Tresidder, in the food court/eating area. Please feel free to stop by!

Discussion Sections
201809241231

Section sign-ups open at 5pm on Thursday, Sept. 27 and end at 5pm on Sunday, Sept. 30. Please make sure to sign-up for a section, as they are required for the class. Once signups open, the signup link will be visible in the section dropdown up top. Signups are not first-come-first-serve. Sections will start week 2.

Assignment 0: Hello, World
201809241230

For your "zeroth" assignment, we have some todos to get you started during your first week in CS 106X. These include things like setting up Qt Creator and signing up for Piazza. See the assignment page for more details.

Welcome!
201809241001

Welcome to CS 106X! We are looking forward to a fun quarter. Class starts Monday, September 24th at 12:30PM in 300-300. See the "Handouts" dropdown above for handouts that outline the course policies.