This is a past/archived course. At this time, you can only explore this course in a self-paced fashion. Certain features of this course may not be active, but many people enjoy watching the videos and working with the materials. Make sure to check for reruns of this course.
This course gives an introduction to all major programming concepts, techniques, and paradigms in a unified framework. We cover the three main programming paradigms: functional, object-oriented, and declarative dataflow. We explain the four ways to do data abstraction and discuss the trade-offs between objects and abstract data types. We present declarative dataflow, the most useful paradigm for concurrent programming, and show how it avoids race conditions. We give a simple formal semantics for all concepts and illustrate them with practical code that runs on the accompanying open-source platform, the Mozart Programming System. This course is targeted toward people with a basic knowledge of programming. It will be most useful to beginning programming students, but the unconventional approach should be insightful even to seasoned professionals.
To learn more about the practical organization of the course, watch our second introductory video: http://youtu.be/M0Dlswd_hIQ
All required readings are available within the courseware, courtesy of The MIT Press. A print version of the course textbook, Concepts, Techniques, and Models of Computer Programming, is also available for purchase. The MIT Press is offering enrolled students a special 30% discount on books ordered directly through the publisher’s website. To take advantage of this offer, please use promotion code CTMCP30 at The MIT Press site.
Before, during, and after the course, check out the course's official Facebook page for announcements and discussions.
At the end of this course, the successful participant will be able to :
Specify problems, break them down into their basic steps, and design algorithms and abstractions to solve them
Choose the right programming paradigm and write a program in this paradigm to solve a problem
Use formal semantics to reason about program correctness
Write small concurrent programs in the deterministic dataflow paradigm