Prof. Daniel Jackson
Prof. Robert Miller
MIT Course Number
As Taught In
- Lecture notes
- Projects (no examples)
- Assignments: problem sets (no solutions)
- Assignments: programming with examples
This course provides an introduction to the fundamental principles and techniques of software development that have greatest impact on practice. Topics include capturing the essence of a problem by recognizing and inventing suitable abstractions; key paradigms, including state machines, functional programming, and object-oriented programming; use of design patterns to bridge gap between models and code; the role of interfaces and specification in achieving modularity and decoupling; reasoning about code using invariants; testing, test-case generation and coverage; and essentials of programming with objects, functions, and abstract types. The course includes exercises in modeling, design, implementation and reasoning.
Open Learning Library Versions
MIT Open Learning Library offers a free version of this subject:
Other OCW Versions
OCW has published multiple versions of this subject.