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

CS 126 - Software Design Studio (Fall 2020)

Instructor: Michael Woodley

Lectures:

Textbook: The Art of Readable Code by Dustin Boswell and Trevor Foucher - You should have free access by logging in here.

For questions / concerns about:

Campuswire: https://campuswire.com/c/GACAB6D7A/feed

Gradescope: We use Gradescope for students to submit assignments.

PrairieLearn: https://prairielearn.engr.illinois.edu/pl/course_instance/128327/ We use PrairieLearn to offer small lessons tailored to the course. Please check this regularly for a reminder when assignments are due.

Course Overview

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.

Course Meetings

Things that you need for this course:

Course Expectations

CS 126 focuses on more than getting your code to work; although we expect your code to fully work, you won't get 100% just for completing the assignment. We care about how well your code is designed and how easy it would be for someone else to understand, extend, or modify your code. In other words, your code, rather than just the output it produces, is a part of the product and will also be evaluated.

As such, make sure to read over the rubric for each assignment before starting it and make sure you understand all the sections.

Rubric Sections

Although the sections may be weighted differently per week, our rubric typically focuses on the following categories. Please refer to the weekly rubric, which we will post along with the current week's assignment, for more detail:

Late Policy

Assignments for code review assignments are due at 11:59pm on the Tuesday before the code review. Your assignment score will be reduced by 25% for every 24 hours after the deadline.

Code Reviews & their Attendance

Perhaps the most important part of this class is the weekly code reviews. These will give you the opportunity to get feedback on the code that you've written. We'll be assigning code review sections during the first week of classes, and starting them in the second week of the semester. Code reviews are 2-hours long and consist of (at most) six students and one moderator. Students will take turns presenting their code: 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. We will do our best to accommodate such requests.

Feedback

You should receive both verbal and written feedback on your assignments. Your code moderator and your peers will give you verbal feedback during code review. You should also receive written feedback in the form of comments on each assignment via Gradescope after your moderator grades your assignment. You should receive your grade for the current week's assignment no later than the Sunday after it's due. If you don't receive a grade by that time, please reach out to your moderator.

You should always listen to what your moderator has to say about your code. Make sure you pay full attention during code review, both during your own presentation and during your peers' presentations; the feedback your moderator gives to your peers can also apply to you. You should also make sure to go over the written feedback your moderator's left you. We suggest taking notes during code review, although this isn't required, and compiling a list of the feedback your moderator's given to make sure you don't make the same mistakes again. Make sure you fully understand your code moderator's feedback and please ask questions if you don't. Your code moderator should be reachable via email.

Handling Conflicts with/Missing A Code Review

It is of primary importance that students present their code at a code review on a weekly basis, as their work will not otherwise be graded. That said, we understand that there are reasons why you may not be able to make it to your regularly scheduled code review. In particular, the following reasons are considered acceptable reasons for missing a code review (up to 3 times during the semester):

Note that job interviews are not a valid reason to miss a code review, since they could be scheduled at a non-conflicting time.

When you need to miss a code review, you should contact your moderator ahead of time (if at all possible) and enlist their help in finding an alternative code review opportunity. The preferred solution is to find an alternative code review time that you can attend (for full credit). If that isn't possible, then you and your moderator can arrange a time for a 1-on-1 code review, but this alternative may involve reduced credit, as you won't have the opportunity to earn participation points during other students' presentations. In any case, a make-up for a code review should happen within a week of the assignment due date.

Grading Philosophy

We consider point deductions as indicators of what you can focus on or improve on for the next assignment. We encourage viewing numerical grades as a summary of what you can do better on and we suggest looking for opportunities to improve. Focus on implementing your code moderator's feedback in future assignments rather than extrapolating how you're doing in the class based on your numerical grade. Make sure you understand where you've lost points and, if you don't, please reach out to your code moderator.

Cheating and Plagiarism

Academic integrity is an important issue in general, but especially in this class. In order to have enrolled in the class, you need to be a CS major, which means proficiency in programming is fundamental to both your success in this major as well as your future career. The purpose of this class is to help you develop this proficiency, 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.

We are okay with and encourage you to consult resources that help you attain a better conceptual understanding of the problem and the techniques to solve it. Everyone in this class is here to improve as individual programmers and develop their individual style. Sharing code directly impairs this process, even if it’s a good-natured attempt to help somebody. By sharing a solution to even a small part of the assignment, you have deprived another student of the learning opportunity to solve the problem.

Not only will your moderator pick up on code that feels like it didn’t come from you, but also the course runs tools to determine if the written code was taken from other sources. Of course, you will find at times that you really need a small solution online (e.g.: a StackOverflow snippet), and that is okay: as long as the code is cited with a comment and the amount of code taken from online sources is less than 25% of the overall project, it will not be counted as cheating.

The CS department expects you to be familiar with the CS department's Honor Code and the University expects you all to be familiar with Rule 33 in the Code of Policies and Regulations Applying to All Students. 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.

Use of the Internet and Citing sources

A significant part of programming is using reference materials, because few have the full language specification memorized and programmers frequently use code that they themselves didn't write in the form of libraries. Since we want CS 126, as much as possible, to reflect authentic programming, you are allowed and even 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 (https://stackoverflow.com/). We do, however, have some constraints on your usage of code that you didn't write:

It must be publicly available; having your Mom write portions of your code is not allowed. 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. 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. 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:
// https://stackoverflow.com/questions/21626439/how-to-implement-the-java-comparable-interface
public int compareTo(LineItem other) {
    return Integer.compare(this.position, other.position);
}

Lecture Recordings

Lectures are recorded using Zoom and uploaded to Illinois Media Space.

Grading

We'll use the Gradescope to record your grades. Your grades in CS 126 will be computed as follows: