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

COVID-19 Updates

Updated 4/1: See the calendar below for our post-break plans, especially the Class Administrativia and Action Items listed on 4/6.

Class Details

      Instructor:   Stephen Freund
Office: TPL 302
Office Hours:     Monday and Tuesday, 2:30-4:00
email: freund@cs.williams.edu
phone: 413-597-4260
TAs:     David Lee, Dyrson Marshall, Shivam Patel


TA Hours


Contact us during our hours using these Zoom links. (Only visible via VPN.)


Tentative Calendar

Mon
Tues
Wed
Thurs
Fri
02/03

02/04

02/06

02/07

02/03

02/04

02/06

02/07

02/10

02/11
Reasoning About Loops

02/12

02/13
Specifications
Lab 1: XCode, Swift, and Dafny

02/14

02/10

02/11
Reasoning About Loops

02/12

02/13
Specifications
Lab 1: XCode, Swift, and Dafny

02/14

02/17

02/18
Data Abstraction

02/19

02/21

02/17

02/18
Data Abstraction

02/19

02/21

02/24

02/25
Custom Views
02/26

02/27
Gestures and More Swift
Lab 3: Connect The Dots
02/28

02/24

02/25
Custom Views
02/26

02/27
Gestures and More Swift
Lab 3: Connect The Dots
02/28

03/02

03/03
Testing

03/04

03/05
Debugging, Design and Style
Lab 4: Coding To Specifications

03/06

03/02

03/03
Testing

03/04

03/05
Debugging, Design and Style
Lab 4: Coding To Specifications

03/06

03/09

03/10
Swift Design Elements

03/11

03/12

03/13

03/09

03/10
Swift Design Elements

03/11

03/12

03/13

03/16

03/17
SPRING BREAK

03/18

03/19
SPRING BREAK

03/20

03/16

03/17
SPRING BREAK

03/18

03/19
SPRING BREAK

03/20

03/23

03/24
SPRING BREAK

03/25

03/26
SPRING BREAK

03/27

03/23

03/24
SPRING BREAK

03/25

03/26
SPRING BREAK

03/27

03/30

03/31
SPRING BREAK

04/01

04/02
SPRING BREAK

04/03

03/30

03/31
SPRING BREAK

04/01

04/02
SPRING BREAK

04/03

04/07
OO Design
Lab 5: Graph (Revised!)
Project: Final Project

04/08

04/09
Generic Abstractions

04/10

04/07
OO Design
Lab 5: Graph (Revised!)
Project: Final Project

04/08

04/09
Generic Abstractions

04/10

04/13

04/14
Generic Abstractions and UML Class Diagrams
PreLab 6: Graph Performance
Lab 6: Social Networks

04/15

04/16
Gathering Requirements, Use Cases, System Architectures

04/17

04/13

04/14
Generic Abstractions and UML Class Diagrams
PreLab 6: Graph Performance
Lab 6: Social Networks

04/15

04/16
Gathering Requirements, Use Cases, System Architectures

04/17

04/20

04/21
REST Services
Lab 9: Campus Paths

04/22

04/23
No Lecture Today…

04/24

04/20

04/21
REST Services
Lab 9: Campus Paths

04/22

04/23
No Lecture Today…

04/24

04/27

04/28
Dependencies and Decoupling; Design Patterns
04/29

04/30
Design Patterns
05/01

04/27

04/28
Dependencies and Decoupling; Design Patterns
04/29

04/30
Design Patterns
05/01

05/04

05/05
Building Systems in the Wild

05/06

05/07
No Class
05/08

05/04

05/05
Building Systems in the Wild

05/06

05/07
No Class
05/08

05/11

05/12
No Class

05/13

05/14
Project Presentations

05/15

05/11

05/12
No Class

05/13

05/14
Project Presentations

05/15

05/18

05/19

05/20

05/21

05/22

05/18

05/19

05/20

05/21

05/22


Resources

Readings
Software
iOS Optional Extras



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