Software Construction
Three Pillars of Decent Software
Safe from bugs
Easy to understand
Ready for change
6.005
lessons
Static Checking
Basic Java
Testing
Interesting fact: for every 1000 lines of code there are usually from 1 to 10 bugs
Code Review
Version Control
Specifications
Designing Specifications
Avoiding Debugging
Mutability & Immutability
Recursion
Debugging
Abstract Data Types
Abstraction Functions & Rep Invariants
Interfaces
Equality
Recursive Data Types
Regular Expressions & Grammars
Parser Generators
Concurrency
Thread Safety
Sockets & Networking
Queues & Message-Passing
Locks & Synchronization
Graphical User Interfaces
Map, Filter, Reduce
Little Languages
Team Version Control