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, our in-class discussions will focus on the nature of high-quality code and the techniques and habits that best serve the production of good code. We will also use discussion time for code reviews (see below) to help you revise your work to improve it.

Your working computer

If you are not in Northfield this term, you'll need to have access to a computer on which to do you work. If you're in town, then you have the option of working in the socially distanced labs on the third floor of Olin. Your first task for the term is to make sure your computer is ready to support your CS257 work. See the Week 1 list of tasks and assignments for the Setup task.

Windows, macOS, and Linux computers are all fine for the work we're going to be doing.

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.

Course structure for a COVID world

This class will be conducted entirely online. I made this choice for our safety, and to fully support students who are enrolled but not on campus this term. CS257 is one of the classes that, I believe, can be quite successful in online form. (And, if my students last term are to be believed, it was successful.)

That said, the biggest challenge for doing this class online is to make sure we have plenty of time interacting with each other. Software development has the reputation of being a solitary endeavor, but the vast majority of software is produced by teams. It's also a lot of fun to work on software together.

To generate that togetherness in a Zoom-oriented world, here's how we're going to run things this term.

Books

We will take readings from a variety of sources. Enough of the readings will come from one book that I have asked you to purchase it: Don't Make Me Think, Revisited, 3e, by Steve Krug. This book is short, fun to read, and reasonably cheap. It's also packed with ideas that programmers (especially but not exclusively web developers) 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 many programming and design assignments during this term, we will have code reviews. We will choose one or two teams from each discussion group, study their code or designs ahead of time, and then spend most of a discussion group meeting talking about the strengths and weaknesses of what the teams have done, and alternative ways they might better achieve their goals.

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 show respect, prepare thoroughly, and offer both praise and constructive criticism. Code reviews get easier over time, so we'll do a lot of them.

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: