On Nov 11, 2006, at 10:00 AM, Michael Torrie wrote:

Recent discussion on Java's merits got me thinking. I recently read an
article, entitled "Why Johnny Can't Code[1]," which I thought was
interesting, but I'm not sure if his points really are valid.

I don't think his points are particularly valid either, though I appreciate the underlying question of how to introduce programming. I was thinking about this question a couple of years ago and it reminded me how exciting programming was. It re-kindled my desire to learn computer science, and got me to start studying programming languages again. Now you all have to listen to me talking about Smalltalk and Lisp and stuff! Watch out, this kind of thinking can be dangerous. ;)

Anyway, I started in early elementary school when my dad got an Apple II clone to do word processing. I was having trouble memorizing my multiplication tables, so he picked up a BASIC book and wrote a little flash card program. That fascinated me, so he taught me how it worked, and I was hooked.

Back in those days, even some commercial programs were written in BASIC with simple menu-driven interfaces. Creating those was within the reach of a hobbyist programmer, and more importantly, it /felt/ like it was within reach. Often you could buy a disk full of simple games, and they would be written in BASIC so you could look at the code. You could buy books with source code for interesting things, and they were simple enough to fit in a few pages but still did what they were supposed to. The fruits of my programming efforts, meager as they were, felt like they were only a little bit removed from what the 'professionals' made.

Now, programs are probably an order of magnitude more complex, and the applications a new programmer can write generally look like toys in comparison. Instead of having a programming environment as the command prompt, most users get a graphical shell with no way to write programs in sight. The FOSS movement has alleviated this to some degree, but UNIX is still far, far more complex than the simple BASIC prompt of my youth.

Anyway, my pondering of this problem led me to Squeak, which someone else has mentioned. To me, it has very much the same feel as the old BASIC systems, except with graphics and a saner (but still very simple) language. This is probably because Alan Kay always had kids in mind when he developed his ideas. He's passionate about teaching kids, and he's developed a bunch of tools in Squeak to help teach programming and other topics such as physics through simulation. You can 'inspect' any object on the screen, peek at the source code, and change it on the fly. It would be a goldmine for a kid interested in computers and making them do stuff, since it's got a built-in development environment that is at the same time trivially simple and extremely powerful.

Anyway, it's worth looking into, at least to see what kinds of kids- related stuff is in it. The LogoWiki mentioned earlier is run by a Squeak server, for example. Lots of people interested in making stuff for kids get drawn to Squeak, so even if you don't want to use Squeak itself, perhaps you might want to use something built with it.

  And I do think it is important to first teach
procedural programming first.  OOP and event-driven are great, but as
the computer itself is procedural, if we want to teach budding computer
scientists how computers actually work inside, we need to start on
procedural programming (and polling), then probably event-driven (help
them understand interrupt-driven stuff), and then introduce them to
other artificial abstractions that they will eventually use exclusively.

I don't think this order is necessarily the right one. Budding computer scientists will want to find out how the computer works inside anyway, and those who don't care ought to be able to write stuff for fun in a high level language anyway and not care what happens underneath. My dad certainly didn't care about what happened any lower than the BASIC level, yet he was able to write simple, useful programs that made a huge difference in my life.

I think you could start with any paradigm initially, so long as you had an environment to support it that brings the feel of the old BASIC prompt to the user. I think Squeak (or maybe Python) for OO, DrScheme for functional, or... well, I haven't thought much about procedural languages for kids, so you can tell I really do disagree about starting them on one. :)

--Levi
/*
PLUG: http://plug.org, #utah on irc.freenode.net
Unsubscribe: http://plug.org/mailman/options/plug
Don't fear the penguin.
*/

Reply via email to