Elements of Software Construction

Screenshot from an instant messaging program designed and implemented by 6.005 students.

For Project 3, students were asked to design and implement an instant messaging system. This submission won the award for the most aesthetic user interface. (Courtesy of Sinchan Banerjee, Kristie D'Ambrosio, Itai Turbahn, and Victor Wang. Used with permission.)


MIT Course Number


As Taught In

Fall 2008



Cite This Course

Course Description

Course Features

Course Description

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.

Other Versions

Other OCW Versions

OCW has published multiple versions of this subject. Question_OVT logo

Archived versions: Question_avt logo

Related Content

Daniel Jackson, and Robert Miller. 6.005 Elements of Software Construction. Fall 2008. Massachusetts Institute of Technology: MIT OpenCourseWare, https://ocw.mit.edu. License: Creative Commons BY-NC-SA.

For more information about using these materials and the Creative Commons license, see our Terms of Use.