Assignments Office Hours Hall of Fame Notes
Assignments Office Hours Hall of Fame Notes

CS 126 - Software Design Studio (Fall 2019)

Instructor: Michael Woodley (

Lectures: Tues./Thurs. 2:00PM - 3:15PM, Siebel Center 1404

Admin Email:


The focus of this course is to make you a self-sufficient programmer and provide you the tools to succeed in the rest of the CS curriculum and in summer internships. This course focuses on building programs from scratch using best practices. It covers programming style, documentation, testing, debugging, modular design, and design patterns. These concepts are primarily explored in the context of the Java and C++ programming languages.

CS 125 (or equivalent) is a pre-requisite for this course.



Assignments for code reviews are due by 11:59PM on the Tuesday before the code review. Your assignment score will be reduced by 25% for every 24 hours after the deadline, not prorated.

If your assignment is incomplete, it may be worth your time to keep working past the deadline if doing so would get you more points than turning in an unfinished assignment. Consult your moderator if you are unsure of what to do.

Code Review

Code review is an incredibly important part of CS 126. The best way to effectively learn good software design is to discuss your work with others; for this purpose, we require that you attend a 2-hour session each week where you will demonstrate the code that you wrote for that week's assignment. This is an opportunity to get expert feedback on the code that you've written, while also challenging your code analysis skills as you do the same for your fellow students.

Code review sessions consist of at most six students, including yourself, and one code moderator. Each student will present their assignment, showing its operation, key design principles, and how the code works. Presenters will receive feedback and questions from the moderator and their fellow students. In recognizing that presenting one's work places them in a position of vulnerability, it is important that all participants provide constructive criticism in a respectful manner. Based on each student's presentation, their participation during other students' presentations, and their submitted code, the moderator will grade each of their students.

We will do our best to assign you a section at one of your preferred times, but we have limitations with room and staff availability. If you are assigned a section that doesn't work for you, you can make a formal request to change your code review time by emailing the course admin email. We will do our best to accommodate such requests for the first few weeks of class.

Grades and Feedback

You ought to receive feedback from your moderator within 24 hours of your code review. If this does not happen, please contact your moderator. Feedback will be posted on your assignment's GitHub repository; numeric grades will be entered into Compass2g.

We use a 5-point grading scale, where a 0 means the category was not attempted at all, and a 5 means "literal perfection, this couldn't have been done better." For this reason, the final percentage you receive on an assignment may be lower than what you're used to from other classes: this is O.K. We do it this way because it allows you to demonstrate growth over the semester as your grades rise, and because everyone, even an expert programmer, has room to improve.

If you're ever confused or concerned about a grade that you receive, do not hesitate to contact your moderator or the course staff.


Piazza is a forum for you to ask questions of the instructors and your fellow classmates. All course announcements (new assignments, etc.) will be posted there.

We have a couple guidelines for proper Piazza usage:

  1. No code in public questions that other students can see. You may post snippets of code provided that your question is marked private for only instructors to see.
  2. Search before you post. Please make sure what you're asking hasn't already been posted.

Cheating and Plagiarism

The purpose of this class is to help you develop your proficiency in this field, and to grow your competence as a programmer. You can't grow your own competence if others are doing your work for you; you need to be the one working through all of the assignments. If you find yourself struggling in this class, get help from the course staff. If you find yourself considering cheating in this class, you should strongly consider changing majors. Life is too short to spend lots of time studying a major that you don't actually like.

Specifically, you must be the one to develop, type in, and test/debug all of the code that you submit, unless otherwise directed in the course. It is okay to have high-level discussions about course content, to draw and discuss diagrams on a white board, and to discuss rules of language syntax with fellow students. It is not okay to give or show a fellow student code that you wrote, view the code written for an assignment written by another student before the due date, or to solicit another individual to write code for you.

The CS department expects you to be familiar with the department's Honor Code, and the University expects you to be familiar with the Student Code. If we are able to pick out two nearly identical assignments out of the class, then cheating has likely occurred. All parties involved will receive a 0 on that assignment or exam and their final course grade reduced by one letter (e.g., A->B, B->C, etc.). A second offense will result in a failing grade for the class.

We strongly advise against making your code publicly available on sites like GitHub. Even if you do not deliberately share your code with another student, if your code appears in another student's repository by any means, the above penalties still apply.

Use of the Internet and Citing Sources

A significant part of programming is using reference materials, since few people have full language specifications memorized. Programmers frequently use code that they themselves didn't write in the form of libraries. Since we want CS 126 to reflect authentic programming as much as possible, you are allowed and encouraged to use the internet as a reference when writing your code. This includes using snippets of code from internet help sites like Stack Overflow. We do, however, have some constraints on your usage of code that you didn't write:

  1. It must be publicly available; having your Mom write portions of your code is not allowed.
  2. It must be a small minority of the code that you submit; less than 25% of the meaningful code that you submit can be from outside sources.
  3. You must understand what the code does. You should be able to explain any small code snippets in your code review; for libraries, you should be able to explain the Application Programming Interface (API) that you are using.
  4. For any distinctive or substantial code snippets (e.g., more than 2-3 lines), you must cite the source of the code in comments immediately preceding the code. If you do not cite the code, you are committing plagiarism. Citations should look like the following:
// Code below derived from:
public int compareTo(LineItem other) {
    return, other.position);