Elements of Software Construction

Several measures of a Bach fugue, with three voices each highlighted in a different color.

In Project 1, students design and build a player for abc music notation, which is capable of synthesizing a multi-voiced Bach fugue like this. (Adapted from an image by Matt.kaner on Wikipedia.)


MIT Course Number


As Taught In

Fall 2011



Cite This Course

Course Description

Course Features

Course Description

This course introduces fundamental principles and techniques of software development. Students learn how to write software that is safe from bugs, easy to understand, and ready for change.

Topics include specifications and invariants; testing, test-case generation, and coverage; state machines; abstract data types and representation independence; design patterns for object-oriented programming; concurrent programming, including message passing and shared concurrency, and defending against races and deadlock; and functional programming with immutable data and higher-order functions.

The course includes weekly programming exercises and two substantial group projects.

Other Versions

Other OCW Versions

OCW has published multiple versions of this subject. Question_OVT logo

Related Content

Robert Miller. 6.005 Elements of Software Construction. Fall 2011. 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.