CS 257: Software Design

Course Information

Goals

I have two main goals for you in this class. I want to help you improve your independence as a programmer and your ability to write high quality code. Pursuing these goals involves the usual academic emphasis on concepts and vocabulary that you need to learn through study and experimentation. But it also involves lots of practice with the tools of the trade, and lots of effort to develop good habits and discard bad ones. Therefore, we'll spend a lot of class time on practice.

Your computer (if any) and computers in class

You may or may not own your own computer and if you do, it may or may not be a laptop. This course does not require ownership of a computer, much less a laptop. Our labs are well set-up and well maintained, and you can do all your work for CS 257 on them.

That said, my experience is that most students in CS 257 own laptops. If you do, and you are using it for your CS 257 work, please bring your laptop to class most days. As long as we have one laptop in class for every three people, we'll be able to do lots of hands-on learning and useful work during class.

If you have any concerns about what computer you plan to use for this class, please contact me early in the term so we can discuss your thoughts.

Here are a few suggestions regarding how to use whatever computer you plan to use for this class.

Class time

Most days, we'll do some combination of:

Books

We will take readings from a variety of sources. Enough of the readings will come from two books that I have asked you to purchase them: Clean Code: A Handbook of Agile Software Craftsmanship, by Robert C. Martin, and Don't Make Me Think, Revisited, 3e, by Steve Krug. Both of these books are short, fun to read, and reasonably cheap. They're also both packed with ideas that programmers should think about. You'll get lots of good advice here, plus some advice you disagree with. The disagreement is natural, and the discussion matters.

Code reviews

For some programming assignments during this term, we will have code reviews. For our purposes, a code review will be a meeting of the students at one of the tables in Weitz 235, with drop-in interruptions by me. The goal of each code review will be to discuss the strengths, weaknesses, and other interesting features of each student's solution of a particular programming problem. Code reviews are one of the most efficient and powerful tools I know of for improving your software, but of course most people feel a fair amount of apprehension at the idea of discussing their code in detail in front of other people. Thus, it's essential that each participant in a code review prepare thoroughly by studying everybody else's code, and by preparing positive comments, constructive criticism, and plenty of questions. We'll discuss the details of our code review process before the first code review.

Grading

Your grade will be based on your performance on a variety of assignments, and and on your participation in the code reviews. The assignments will include some writing and several programming assignments. There will be no exams.

Though the precise weighting of the assignments in your grade will depend on the exact nature of each assignment (which I won't determine until the assignment is written and posted online), a good estimate will be the number of days I give you between the last assignment and the current assignment. So if there's a two-week gap, that assignment will be worth approximately 20% of your grade in a ten-week term (with the caveat that I don't count midterm Saturday through Monday as days--I intend for you to have time to rest and catch up on midterm weekend).

Late homework will receive 25% reduction of score during the first 24 hours after the homework was due, and will receive a score of 0 after that. Consult me at least 24 hours before an assignment is due if you have extraordinary circumstances preventing you from handing in your work on time. In real emergencies, contact me as soon as you are able.

Rough schedule

I may reorder some things along the way, but the schedule will look more or less like this: