June 13, 2004

The Pedagogy of Programming

I took programming courses in both high school and college, at least three or four all told (Basic and Pascal—I’m dating myself). I couldn’t have been less interested. The pedagogical approach was entirely vocational. Just as my French and Spanish courses revolved around hypothetical trips to Paris or Madrid (like I was going to get there any time soon), my programming courses were filled with unlikely scenarios that read like a cross between an inter-office memo and a GRE logic problem: “You own a small hardware store in Schenectady. Write a program that will display items in your inventory sorted in such and such a way, but not screwdrivers on Tuesdays when the moon is full.” That sort of thing. I can see in retrospect that lots of fundamentals were being taught here: variables, arrays, conditionals, control structures, sorts, loops, etc.—but there was nothing to engage my imagination, nothing to suggest why formal logic was a unique and powerful lens through which to view the world. Lately I’ve become interested in the pedagogy of programming, and I’m going to collect some initial links here. In no particular order:

  • RAPUNSEL, by Mary Flanagan, Andrea Hollingshead, and Ken Perlin. “The RAPUNSEL research project team is researching and building a software environment to teach programming concepts to kids. Someday, it will be a multiuser game. For now, we are tackling small interactive modules. We think our approach will attract as many girls to programming as it will boys, and this might help out with the shortage of women in computer-related fields.”

  • Processing, by Ben Fry and Casey Reas. “Processing is a programming language and environment built for the electronic arts and visual design communities. It was created to teach fundamentals of computer programming within a visual context and to serve as an electronic sketchbook.”

  • Nomic, by Peter Suber: “Nomic is a game I invented in 1982. It’s a game in which changing the rules is a move. The Initial Set of rules does little more than regulate the rule-changing process. While most of its initial rules are procedural in this sense, it does have one substantive rule (on how to earn points toward winning); but this rule is deliberately boring so that players will quickly amend it to please themselves.”

  • Grow, by Eyemaze. Michael Mateas (of GTxA) comments, “When you first start playing, the placement of objects on the sphere and their transformations seem random - there’s no reason to prefer placing one object before another. Discovering the internal logic that governs the transformations of the initially abstract elements is the primary addictive pull of the game.”

  • BlueJ, by a joint research group at Deakin University, Melbourne, Australia, the Mærsk Institute at the University of Southern Denmark, and the University of Kent in Canterbury, UK. “BlueJ is an integrated Java environment specifically designed for introductory teaching.”

Updates

  • Via Jason: Squeak, by Alan Kay, et al. “Squeak is a project by some of the original pioneers of personal computing and networking, joined by enthusiastic more recent colleagues, to get wide spectrum authoring for all back into the mainstream of computing.”

  • Via Liz: MUPPETS, by Andrew Phelps, et al. “Through capitalizing on research in the areas of gaming and virtual community social psychology, RIT is engaged in a project to develop a Collaborative Virtual Environment (CVE) entitled “The Multi-User Programming Pedagogy for Enhancing Traditional Study” (MUPPETS).”

  • Via Francois: Logo (of course), by Seymour Papert, et al. “The Logo Programming Language, a dialect of Lisp, was designed as a tool for learning. Its features - modularity, extensibility, interactivity, and flexibility -follow from this goal.”

  • Via Andrés: Jeliot 3. “Jeliot 3 is a Program Visualization application. It visualizes how a Java program is interpreted. Method calls, variables, operation are displayed on a screen as the animation goes on, allowing the student to follow step by step the execution of a program. Programs can be created from scratch or they can be modifyed from previously stored code examples.”

  • Via Geoff: Design By Numbers, by John Maeda, et al. “Design By Numbers was created for visual designers and artists as an introduction to computational design. . . . DBN is both a programming environment and language. The environment provides a unified space for writing and running programs and the language introduces the basic ideas of computer programming within the context of drawing. Visual elements such as dot, line, and field are combined with the computational ideas of variables and conditional statements to generate images.”

To be continued . . . suggestions welcome. As the above suggests, I’m interested in a pretty wide range of materials, from IDEs and other environments to games and conceptual tools. Special thanks to GrandTextAuto, where I first picked up several of these links.

Update 11/14/04: A number of excellent links, via Dirk Scheuring in the comments at GrandTextAuto:

  • C++ tutorial for the uninitiated.

  • Scheme: “Scheme is a statically scoped and properly tail-recursive dialect of the Lisp programming language invented by Guy Lewis Steele Jr. and Gerald Jay Sussman. It was designed to have an exceptionally clear and simple semantics and few different ways to form expressions. A wide variety of programming paradigms, including imperative, functional, and message passing styles, find convenient expression in Scheme.”

  • How to Design Programs.

  • Instant Hacking: short introduction to Python, for the uninitiated.

  • Squeak: “Squeak is an open, highly-portable Smalltalk-80 implementation whose virtual machine is written entirely in Smalltalk, making it easy to debug, analyze, and change.”

  • Epigrams on Programming: speaks for itself.

Posted by mgk at June 13, 2004 08:35 PM
Comments

You should check out Alan Kay's Squeak - http://www.squeakland.org - which was the highlight of his (second) talk at the Interaction Design and Children conference.

The piece he showed us involved dragging and dropping items to create rules for an object you create by simply drawing it. For example, he drew a car and made it drive in circles, then a steering wheel to the side, which he then associated with the car so he could steer it, etc. etc. Basic principles of programming, all through a fun interface.

Posted by: Jason at June 14, 2004 08:48 AM | Link to Comment

Thanks Jason, exactly what I'm after. When I get a few more I'll update the main post.

Posted by: MGK at June 14, 2004 08:58 AM | Link to Comment

Matt,
You may remember the work of Seymour Papert and associates from the investigations and reports of Sherry Turkle in _The Second Self_.

A clip from a richly linked site:
The Logo programming language is an adaptation by Wally Feurzeig and Seymour Papert
Dr. Seymour Papert [...]
One could say that Logo is Lisp without the parentheses. Today, it is known principally for its "turtle graphics" but it has significant list handling facilities, file handling and I/O facilities and can be used to teach most computer science concepts, as Brian Harvey does in his "Computer Science Logo Style" trilogy.
http://encyclopedia.thefreedictionary.com/Logo%20programming%20language

Posted by: Francois Lachance at June 14, 2004 09:02 AM | Link to Comment

Colleagues here at RIT, led by my friend Andy Phelps, are working on a project called Muppets

http://muppets.rit.edu/

From the first page:

What is MUPPETS ?

Through capitalizing on research in the areas of gaming and virtual community social psychology, RIT is engaged in a project to develop a Collaborative Virtual Environment (CVE) entitled “The Multi-User Programming Pedagogy for Enhancing Traditional Study” (MUPPETS). The MUPPETS system will be aimed specifically at engaging upper-division students in the education of lower-division students through their first-year programming core. The MUPPETS team is building upon existing research and technical developments in the field to design and construct a CVE and supporting infrastructure that allows students to write very simple Java® code similar to, and constructed around the same pedagogical issues as, code written in a more traditional course of first year study.

As part of the MUPPETS system, however, this code can now control objects in a shared virtual world very much like an online massively-multiplayer game that many prospective students are already familiar with. Upper level students also populate the system in a structure of their own, and this population will be aimed at encouraging and rewarding student engagement and peer knowledge-transmission.

Posted by: Liz Lawley at June 14, 2004 11:23 AM | Link to Comment

Best advice I can give from experience is: Get your hands on a circuitry pencilbox. Basically everything I know about the inner workings of computers -- which could about fit in a pencil box, admittedly -- comes from my freshman year of high school, learning Boolean logic and then manipulating wires and chips to simulate "and" and "not" and "exclusive or" gates and... um... J/K flip-flops (I think) and so forth. We did that before we ever learned any programming (in high school... I'd done some earlier), and it was absolutely invaluable. Completely strips away any mistakenly holistic notions about how computers work. Even LOGO, which we did in sixth grade, was a mystery to me until I had to translate complex operations into electrical impulses myself.

Posted by: Jess at June 14, 2004 12:18 PM | Link to Comment

Following up on Francois' post: I believe that Squeak is at least in part built upon/with Logo and stems from Kay's work with Papert and Marvin Minsky.

Posted by: Jason at June 14, 2004 12:20 PM | Link to Comment

Jeliot 3 is a program animation tool oriented to teach programming to novices. The animation consists on showing how the expressions are evaluated and how that changes the program behavior and the data structures.

You can have a look at http://cs.joensuu.fi/jeliot

Posted by: Andrés at June 18, 2004 03:37 AM | Link to Comment

Mind the typo (first line under "Updates"):
"Via Jason: Suqeak, by Alan Kay..."

Posted by: Herbert Wender at June 20, 2004 07:06 PM | Link to Comment

As I understand it Alan Kay's development of Smalltalk involved bringing children in and trying to reimagine what a programming language would look like. This is from Rheingold's _Tools for Thought_, "Part of the Smalltalk project's effect on the early days at PARC was inspirational. It wasn't long before the rest of the team understood Alan's desire to bring children into the process of designing the same instrument that he and all the other computer scientists wanted to use themselves." (http://www.rheingold.com/texts/tft/11.html).

Another language that preceeded Proce55ing and is simpler is Design By Numbers by Maeda. See http://dbn.media.mit.edu/whatisdbn.html where there is an online interpreter you can play with.

An online book that Steve Ramsay turned me onto is "How to Think Like a Computer Scientist" (http://www.ibiblio.org/obp/thinkCSpy/).

Finally you should look at the Lego robotics Mindstorms kit and the various programming environments for it.

Posted by: Geoffrey Rockwell at June 22, 2004 04:51 PM | Link to Comment
Due to the proliferation of comment spam, I've had to close comments on this entry. If you would like to leave comment, please send email to me at mgk =at= umd =dot= edu. Thank you.