During peak registration times, the open/closed status of a course will change frequently.
For the most up-to-date status of a course, the best resource is Williams Student Records:
Main Menu > Self Service > Class Search/Browse Catalog > Class Search
Sophisticated software systems play a prominent role in many aspects of our lives, and while programming can be a very creative and exciting process, building a reliable software system of any size is no easy feat. Moreover, the ultimate outcome of any programming endeavor is likely to be incomplete, unreliable, and unmaintainable unless principled methods for software construction are followed. This course explores those methods.
Specific topics include: software processes; specifying requirements and verifying correctness; abstractions; design principles; software architectures; concurrentand scalable systems design; testing and debugging; and performance evaluation.
Grading: no pass/fail option,
no fifth course option
homework, programming assignments, group work, presentations, exams
CSCI 136, and at least one of CSCI 237, 256, or 334
current or expected Computer Science majors