1 Motivation & Overview |
1.1 What is it sw? What is sw dev about? |
1.2 Pairs and PLs |
1.3 Prepares TAHBPL/A |
1.4 Administrivia (time permitting) |
|
2 What We Teach |
2.1 How the Course Works |
2.1.1 Project |
2.1.2 TAHBPL |
2.1.3 Social Processes |
2.2 So What Can You Learn Here, What do We Want You to Learn |
2.2.1 Technical: What you’re likely to remember most ... |
2.2.2 Sociology of Programming |
2.2.3 [5 mins] Psychology of Programming |
2.3 We’re Here to Critique You Because We Think All of You Can Improve |
|
3 Component Discovery, Abstractly |
3.1 What is a Software System, Introduction |
3.2 Running a Software System |
3.3 Developing a Complete System |
3.4 If you’re Ben: |
|
4 Component Discovery, Illustrated |
4.1 The Idea |
4.1.1 Spiraling away from the Idea |
4.1.2 Drawing the Boundary; Use Cases |
4.1.3 Component Identification |
4.2 Milestone 1 |
4.3 TA HB PL B |
|
5 Software Architectures |
5.1 Model View Control |
5.2 Pipelines |
5.3 Client-Server |
5.4 Architectures for Bazaar |
5.5 Administrivia, Finally |
|
6 Interfaces for Components |
6.1 Components |
6.2 Interfaces |
6.3 Encapsulation |
6.4 Types and Interfaces |
6.4.1 Null Checking |
6.4.2 Types are too Loose |
6.4.3 Value-Dependent Promises |
6.4.4 Assertions in Open Systems |
6.5 Temporal Constraints |
6.5.1 Android Media Player |
6.6 Resource Constraints |
6.7 Sum Total |
|
7 Sprints & Questions |
7.1 Sprint Memos |
7.1.1 Evaluating Descriptions of Sprints |
7.1.2 Memo 1 |
7.1.3 Memo 2 |
7.1.4 Memo 3 |
7.1.5 Memo 4 |
7.2 Questions |
7.3 C |
|
8 Programming Components |
8.1 Clarity of Code |
8.2 Comments |
8.3 The Very Basics |
8.3.1 Names |
8.3.2 Size of Functions and Methods |
|
9 Design and Reasoning |
9.1 Program Design |
9.1.1 Data Representations and Functionality |
9.1.2 Functionality Extensions |
9.1.3 Variant Extensions |
9.1.4 Data Representations for Intermediate Data |
9.2 Reasoning |
9.2.1 Do the ++ functions receive directories? |
9.2.2 Why are Files Never Replaced? |
|
10 The Programmer |
10.1 The Nature of Programming |
10.2 Egoless Programming |
10.3 Pair Programming |
|
11 The Team |
11.1 Background |
11.2 Presenting |
11.3 Paneling |
11.3.1 How to Ask Questions |
11.3.2 The Goal |
11.3.3 Questioning What Is Presented |
|
12 Practice Code Walks 1 |
|
13 Practice Code Walks 2 |
|
14 Beyond Software Development |
14.1 Today |
14.2 Assertions |
14.3 Contracts |
14.4 How to do some of this in Java |
14.5 Higher-order Contracts |
14.6 Stretch Goal: Trace Contracts |