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:
Updates
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:
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 CommentThanks 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 CommentMatt,
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
Colleagues here at RIT, led by my friend Andy Phelps, are working on a project called Muppets
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 CommentBest 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 CommentFollowing 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 CommentJeliot 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 CommentMind the typo (first line under "Updates"):
"Via Jason: Suqeak, by Alan Kay..."
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