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.
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/05
Welcome & Reasoning About Code
- HW 1: Writing Algs
- Slides: Introduction
- Slides: Formal Reasoning
- Read: Reasoning About Code, Part 1
- Read: PP prefaces, 1.1, 1.2, 1.3, 1.6, 3.19, 7.37, 7.38
- Read: Swift Reading 1
Lab 0: Intro To Swift
02/06
02/07
02/03
02/04
02/05
Welcome & Reasoning About Code
- HW 1: Writing Algs
- Slides: Introduction
- Slides: Formal Reasoning
- Read: Reasoning About Code, Part 1
- Read: PP prefaces, 1.1, 1.2, 1.3, 1.6, 3.19, 7.37, 7.38
- Read: Swift Reading 1
Lab 0: Intro To Swift
02/06
02/07
02/10
02/11
Reasoning About Loops
- HW 2: Reasoning
- Slides: Formal Reasoning w/ Loops (updated after lecture)
- Read: Reasoning About Code, Part 2
02/12
02/13
Specifications
- HW 3: Loops
- Slides: Specifications/ADTs
- Examples: Computed Props, Optionals
- Read: Specifications
- Read: PP 1.7, 4.23
Lab 1: XCode, Swift, and Dafny
02/14
02/10
02/11
Reasoning About Loops
- HW 2: Reasoning
- Slides: Formal Reasoning w/ Loops (updated after lecture)
- Read: Reasoning About Code, Part 2
02/12
02/13
Specifications
- HW 3: Loops
- Slides: Specifications/ADTs
- Examples: Computed Props, Optionals
- Read: Specifications
- Read: PP 1.7, 4.23
Lab 1: XCode, Swift, and Dafny
02/14
02/17
02/19
02/20
Swift & iOS Apps
- HW 4: Abstraction and Representation
- Slides: iOS and MVCs
- Read: Start Developing iOS Apps – Build a Basic UI
Lab 2: Calculator
02/21
02/17
02/19
02/20
Swift & iOS Apps
- HW 4: Abstraction and Representation
- Slides: iOS and MVCs
- Read: Start Developing iOS Apps – Build a Basic UI
Lab 2: Calculator
02/21
02/24
02/26
02/27
Gestures and More Swift
- Slides: Gestures
- Example: FaceView w/ Gestures
- Read: Swift Reading 3
Lab 3: Connect The Dots
02/28
02/24
02/26
02/27
Gestures and More Swift
- Slides: Gestures
- Example: FaceView w/ Gestures
- Read: Swift Reading 3
Lab 3: Connect The Dots
02/28
03/02
03/04
03/05
Debugging, Design and Style
- Slides: Design/Style
- Example: Debugging
- Example: Common Protocols
- Read: PP 3.20
- Read: Debugging
- Read: How to Debug
- Read: PP 1.5, 2.8-2.10, 5.28, 7.40, 7.44
Lab 4: Coding To Specifications
03/06
03/02
03/04
03/05
Debugging, Design and Style
- Slides: Design/Style
- Example: Debugging
- Example: Common Protocols
- Read: PP 3.20
- Read: Debugging
- Read: How to Debug
- Read: PP 1.5, 2.8-2.10, 5.28, 7.40, 7.44
Lab 4: Coding To Specifications
03/06
03/09
03/11
03/12
03/13
03/09
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/06
The Return of CS 326!
- Video: Welcome Back (~15 minutes)
- Read: Class Administrativia
TODO: Action Items
04/07
OO Design
- Video: OO Design
- Slides: OO Design
- Read: Swift Reading 3
- Read: PP 5.31
- Optional GraphViz App
Lab 5: Graph (Revised!)
Project: Final Project
04/08
04/09
Generic Abstractions
- Video: Generics
- Slides: Generics
- Read: The Swift Programming Language: Generics
04/10
04/06
The Return of CS 326!
- Video: Welcome Back (~15 minutes)
- Read: Class Administrativia
TODO: Action Items
04/07
OO Design
- Video: OO Design
- Slides: OO Design
- Read: Swift Reading 3
- Read: PP 5.31
- Optional GraphViz App
Lab 5: Graph (Revised!)
Project: Final Project
04/08
04/09
Generic Abstractions
- Video: Generics
- Slides: Generics
- Read: The Swift Programming Language: Generics
04/10
04/13
04/14
Generic Abstractions and UML Class Diagrams
- Video: UML Class Diagrams
- Slides: Class Diagrams
- Video: Performance
- Slides: Performance
- Read: UML basics: The class diagram
PreLab 6: Graph Performance
Lab 6: Social Networks
04/15
04/16
Gathering Requirements, Use Cases, System Architectures
- Video: Requirements
- Slides: Requirements
- Read: “Head-First Object-Oriented Analysis and Design” (on reserve in Schow) (Optional)
- Read: PP 8.45
- Optional SocialNetworks App
04/17
04/13
04/14
Generic Abstractions and UML Class Diagrams
- Video: UML Class Diagrams
- Slides: Class Diagrams
- Video: Performance
- Slides: Performance
- Read: UML basics: The class diagram
PreLab 6: Graph Performance
Lab 6: Social Networks
04/15
04/16
Gathering Requirements, Use Cases, System Architectures
- Video: Requirements
- Slides: Requirements
- Read: “Head-First Object-Oriented Analysis and Design” (on reserve in Schow) (Optional)
- Read: PP 8.45
- Optional SocialNetworks App
04/17
04/20
04/21
REST Services
- Video: REST Services
- Slides: REST Services
- Example: REST API
- Example: ToDoApp
- Optional Campus Paths App
Lab 9: Campus Paths
04/22
04/23
No Lecture Today…
04/24
04/20
04/21
REST Services
- Video: REST Services
- Slides: REST Services
- Example: REST API
- Example: ToDoApp
- Optional Campus Paths App
Lab 9: Campus Paths
04/22
04/23
No Lecture Today…
04/24
04/27
04/28
Dependencies and Decoupling; Design Patterns
- Read: PP 5.28, 5.29
- Video: Dependencies
- Slides: Dependencies
- Video: Design Patterns 1
- Slides: Design Patterns 1
04/29
05/01
04/27
04/28
Dependencies and Decoupling; Design Patterns
- Read: PP 5.28, 5.29
- Video: Dependencies
- Slides: Dependencies
- Video: Design Patterns 1
- Slides: Design Patterns 1
04/29
05/01
05/04
05/05
Building Systems in the Wild
- Video: Building Systems
- Slides: Building Systems
- Read: PP postface
05/06
05/07
No Class
05/08
05/04
05/05
Building Systems in the Wild
- Video: Building Systems
- Slides: Building Systems
- Read: PP postface
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
- CS 326 Swift Style Guide
- The Swift Programming Language: Language Guide
- Swift API Design Guidelines
- Full Apple Documentation
- Start Developing iOS Apps (Swift)
- CS 326 Git and GitLab Tutorial
- Using Git
Software
iOS Optional Extras
- iOS Apps for Graph Labs
- Lab 5: GraphViz App
- Lab 6: SocialNetworks App
- Lab 9: CampusPaths App
- Scrolling [1 lecture]
- Video: Delegation and UIScrollViews
- Slides: Delegation and UIScrollViews
- Example: ImageViewer
- Multiple MVCs [2 lectures]
- Video: Multiple MVCs
- Video: ImageViewer Redux
- Video: MVC Lifecycle (~10 minutes)
- Slides: Multiple MVCs
- Example: Emotions
- Example: Emotions w/ SplitView
- Example: SlideShow
- Read: Start Developing iOS Apps – Building the UI
- Lab 7: Photomosaics: Split views, UI design, image manipulation
- Tables [1 lecture]
- Video: Tables
- Slides: Tables
- Read: *Start Developing iOS Apps – Working With Tables
- Lab 8: Utter!: Tables, Tab views, more sophisticated UIs.
Acknowledgement: This course utilizes material developed by Michael Ernst, Hal Perkins, David Notkin, Dan Grossman, Zach Tatlock, Paul Hegarty, and Scott Smith.