CS 5959-001 Fall 2015 Writing Solid Code

Class Meetings: 3:00-4:20, Mondays and Wednesdays in MEB 3147 (LCR)

Instructor: Zvonimir Rakamaric
Email: zvonimir@cs.utah.edu (only for urgent private matters)
Office: MEB 3424
Office Hours: Catch me after class; find me in my office; email me

Course Description and Objectives. This course is about the art and science of writing code that actually does what we want it to do and what we think it does. In contrast, if you are familiar with the frequent updates that are pushed out to basically every application and operating system, then you are used to the idea that our code commonly does not do exactly what we wanted. Avoiding bugs in code comes down to rigorous application of a few special skills:

  • Testing. How do we know what test cases to write? How do we know the right answers for the test cases that we do write? How can we tell when we have done enough testing? A good tester wants to make code fail, which explains why it is hard to test our own code - subconsciously we usually want it not to fail.
  • Debugging. Instead of just learning how to use gdb, we will rather introduce the more general skill of reasoning about failures and narrowing down their causes.
  • Code Reviews. If your code is solid, then you can stand up and explain how it works to a group of people whose job it is to find problems in your code. On the other side, you can read a piece of code or be a participant in a code review, and offer constructive criticism to the code's author.
  • Specifications. A specification is an independent statement of what the code is supposed to do. This can be an English document, a piece of mathematics, or something else. Assertions and loop invariants are simple examples of specifications. We will look at the use of assertions, invariants, and other kinds of specifications, some of which are supported by tools that ensure that the code matches the specification.

Programming assignments for this class will be fairly small and will be in C. The format will be interactive and student participation will be required instead of the usual professor-in-front lectures. We will be doing a lot of in-class code reviews. There will be some friendly competitions where you try to break other people's code and they try to break yours. Enrollment is by instructor permission. If you want to enroll, send me a mail indicating that you have read this description, a short paragraph describing why you would like to take this course, and also tell me the grade you received in CS 4400.

Getting Help. Do not be shy if you do not understand something: speak up in class, post questions to the discussion board, or send an email to the instructor!

Announcements. Important announcements, such as assignment corrections or deadline changes, will be posted to the canvas course page as public announcements. Make sure you set up canvas notifications appropriately to receive the announcements in a timely manner; ideally, you should receive an email notification as soon as an announcement gets posted.

Grading Policy. The final course grade is based on the homework assignments (80%) and participation in in-class discussions and Canvas discussion board (20%). The letter grading policy is as follows:

  87-89 B+ 77-79 C+ 67-69 D+  
93-100 A 83-86 B 73-76 C 63-66 D 0-59 E
90-92 A- 80-82 B- 70-72 C- 60-62 D-  


Cheating. I encourage discussing homework assignments and projects with others since that is often a good way to learn the material. However, all students must independently write their own code and write-ups. Discussing solutions at high-level is fine. Basing your code/write-up on any other code/write-up is cheating. So, do not copy solutions from another student, do not copy solutions from the internet, do not even look at solutions from another student, do not ask for solutions on online forums (e.g., Stack Overflow). Make sure you acknowledge appropriately any outside materials you used or rely on. This includes papers, books, websites, personal communication, source code, etc. For a detailed description of the School of Computing's policy on cheating, please see our Policy Statement on Academic Misconduct.

Late Policy. Late homework assignments will not be accepted unless you contact me before the deadline and have a good reason for needing more time.

Students with Disabilities. The University of Utah seeks to provide equal access to its programs, services, and activities for people with disabilities. If you need accommodations in this class, reasonable prior notice needs to be given to the Center for Disability Services (CDS), Room 162, Student Union Building, 801-581-5020 (V/TDD). CDS will work with you and the instructor to make arrangements for accommodations.

Course Summary:

Date Details Due