Course Meeting Times

Lectures: 5 sessions / week, 1 hour / session

This seminar is offered during the Independent Activities Period (IAP), which is a special 4-week term at MIT that runs from the first week of January until the end of the month. This course was offered during a 2-week period.


There are no formal prerequisites. Students need only the rudimentary grasp of programming concepts that can be obtained from introductory or Advanced Placement computer science classes in high school.


This class builds a bridge between the recreational world of algorithmic puzzles (puzzles that can be solved by algorithms) and the pragmatic world of computer programming, teaching students to program while solving puzzles.

Few introductory students want to program for programming's sake. Puzzles are real-world applications that are attention grabbing, intriguing, and easy to describe. Each lesson starts with the description of a puzzle. After a failed attempt or two at solving the puzzle, we arrive at an Aha! moment—a search strategy, data structure, or mathematical fact—and the solution presents itself. The solution to the puzzle becomes the specification of the code to be written.

Students thus know what the code is supposed to do before seeing the code itself. This represents a pedagogical philosophy that decouples understanding the functionality of the code from understanding programming language syntax and semantics. Python syntax and semantics required to understand the code are explained as needed for each puzzle.

The course includes eleven puzzles and related programming exercises that vary in difficulty. Many of the puzzles are well known and have appeared in publications and on websites in many variations. The code corresponding to the solutions of the puzzles covered in the course is available on the course website.


Most of the material in this course is from Buy at MIT Press Buy at Amazon Devadas, Srini. Programming for the Puzzled: Learn to Program While Solving Puzzles. MIT Press, 2017. ISBN: 9780262534307. [Preview with Google Books]


This is a pass / fail class.