Teaching programming

Alex Reinhart – Updated July 31, 2017 notebooks · refsmmat.com

Programming seems susceptible to a similar bottom-up teaching approach as I think would work best in statistics; there are a lot of busywork details in each (syntax of different language constructs, or details of different types of tests) which students memorize more than understand, and which can be avoided if you strip the course down to its core concepts (sampling variation and the logic of inference, or basic computing with functions and minimal syntax).

How to Design Programs is the embodiment of this idea for introductory computer science. It starts in Beginning Student Language, a restricted subset of Racket which has minimal syntax designed to prevent the most common student mistakes. The language has basically no features; instead, students work on structuring programs, understanding how to work with data, building data structures, and so on. Remembering where to put the curly braces and semicolons is completely beside the point, so the language doesn’t have any.

See also Statistical programming languages for an attempt to apply these concepts through the language used in an early statistics class.