CS 326: Software Methods

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; software architectures; concurrent, parallel, and scalable systems design; testing and debugging; and performance evaluation.

Full Syllabus

Class Details

      Instructor:   Stephen Freund
Office: TPL 302
Office Hours:     Monday and Tuesday, 2:15-4:00
email: freund@cs.williams.edu
phone: 413-597-4260
TA:     Caroline Kessler (Lab Hours: Sunday,Monday 8:00-9:30pm in TCL217a)



Tentative Calendar


Mon
Tues
Wed
Thurs
Fri
09/03
09/04
09/05
09/06
Welcome & Reasoning About Code
Lab 0: Intro To Swift
09/07
09/03
09/04
09/05
09/06
HW 1: Writing Algs
Lab 0: Intro To Swift
09/07
09/10
09/11
Reasoning About Loops
09/12
09/13
Specifications
Lab 1: XCode, Swift, and Dafny
09/14
09/10
09/12
09/13
HW 3: Loops
Lab 1: XCode, Swift, and Dafny
09/14
09/17
09/18
Data Abstraction
09/19
09/21
09/24
09/26
09/27
Gestures and More Swift
Lab 3: Connect The Dots
09/28
10/01
10/02
Testing
10/03
10/04
Debugging, Design and Style
Lab 4: Coding To Specifications
10/05
MT DAY?
10/01
10/02
Slides: Testing/Debugging
10/03
10/04
Slides: Design/Style
Lab 4: Coding To Specifications
10/05
10/08
Reading Period
10/09
Reading Period
10/10
10/11
Swift Design Elements
Lab 5: Graph ADT and GraphViz
10/12
10/08
10/09
10/10
! DUE Noon: Lab 4
10/11
Slides: Threading/Equality (w/ update for overflow)
Lab 5: Graph ADT and GraphViz
10/12
10/15
10/16
OO Design
10/17
10/19
10/15
10/16
Slides: OO Design
10/17
10/19
10/22
10/23
MVC
10/24
10/25
Tables
10/26
10/22
10/23
! DUE: Lab 6
10/24
10/25
10/26
10/29
10/30
Tables, Generic Abstractions
10/31
11/01
Generic Abstractions
11/02
10/29
10/30
10/31
11/01
11/02
11/05
11/06
Gathering Requirements, Use Cases, System Architectures
11/07
11/08
Events, Listeners, and Callbacks; Design Patterns
  • Read PP 27, 29
Lab: Midterm (Tentative)
11/09
11/05
11/06
11/07
11/08
Read PP 27, 29
Lab: Midterm (Tentative)
11/09
11/12
11/13
Design Patterns
11/14
11/15
REST APIs
11/16
11/12
11/13
11/14
11/15
11/16
11/19
11/20
Building Systems in the Wild
11/21
Thanksgiving
11/22
Thanksgiving
11/23
Thanksgiving
11/19
11/20
11/21
11/22
11/23
11/26
11/27
TBD
11/28
11/29
TBD
11/30
11/26
11/27
11/28
11/29
11/30
12/03
12/04
TBD
12/05
12/06
TBD
12/07
12/03
12/04
12/05
12/06
12/07
12/10
12/11
12/12
12/13
12/14
12/10
12/11
12/12
12/13
12/14


Resources

Readings
Software



Acknowledgement: This course utilizes material developed by Michael Ernst, Hal Perkins, David Notkin, Dan Grossman, and Paul Hegarty.