Jimmy Tolkien

By reason of the small people who live in my house I watch more Jimmy Neutron than is good for me ("Brain Blast,  I've got it!").   While planning this summer's obligatory costume party (the final Harry Potter book), a contrast drawn between JRR Tolkien and JK Rowling stuck.  Tolkien and "small people" come on the heels of David Brin's "Why Johnny Can't Code".   Hang on...

I recommend reading David Brin's article in full.  It is well-written and provocative - no attempt will be made to introduce the full song here.  However, consider this tune:

...quietly and without fanfare, or even any comment or notice by software pundits, we have drifted into a situation where almost none of the millions of personal computers in America offers a line-programming language simple enough for kids to pick up fast. Not even the one that was a software lingua franca on nearly all machines, only a decade or so ago. And that is not only a problem for Ben and me; it is a problem for our nation and civilization.

Lambda the Ultimate offers a smart technical discussion on the relative merits of Basic (or Logo, RUR-PLE, Scheme, PASCAL, or fascinatingly, 3d CAD languages).   Slashdot also offers its usual broad range.

Rather than going to any of those places now, what has got me pegged to this keyboard this late evening is the Tolkien one I heard earlier: whether or not LOTR is "better" than Harry Potter it does at least portrays a more complete world.  I take the argument to be a technical one:  LOTR has more pieces crafted to fit together tightly.  More pieces with more laws governing their fittings, I presume, means a more convincing world.

In the Ruby Slipper discussion, a point raised by Greg on Why Johnny Can't Code seems too good to let go.   Does the creator of a game, the programmer of its code, understand its world better than a mere-consumer can ever?    Perhaps a mere-consumer has fewer reasons to understand the pieces and their laws, however contrived.  And perhaps contrived laws and components are better than none at all.  It also likely doesn't help that Johnny never reads the manual.

I've always wondered what Jimmy Neutron's parents did.  Perhaps if I were forced to write their LUA scripts in that plastic world of theirs, we might even get along. 


Comments on Jimmy Tolkien:

Gabriel says:

"Does the creator of a game, the programmer of its code, understand its world better than a mere-consumer can ever? "

Coming from a more community-oriented position in the gaming community, I can offer one compelling reason why consumers of games have the *possibility* of understanding their world better than the programmers and coders.

John Locke, in his work on the role of governments (John Locke's Two Treatises on Government) suggested that when you mix your labor with the underlying stuff of a world, you can rightfully "own" it. His example was a fence around a field: do you own the land enclosed by the fence? the land under the fence? Or just the land touching the fence itself? He concluded that by working the land you have, you can claim reasonable ownership of it.

Virtual "stuff" may not be maleable in the same way as dirt and stone; you can't take the code and morph it into your own house, with your own design,m and create new rules for the world (at least not yet). However, by working within the game mechanics with your friends and rivals, consumers can mix their labor with the underlying stucture to create a culture and community that is undeniably larger than the code that animates the world itself. By immersing themselves within the community and rules of the world, they can be more attuned to what's going on than the person that created it.

Two examples leap to mind immediately. The first is LambdaMOO, where Haakon, the creator, built the world around his house in California. Subsequent residents of Lambda added their own touches, met new friends, and expanded the size and complexity of LambdaMOO into something that was larger than Haakon, larger than the code itself. He can still pull the plug, and still rewire the guts of the world, but he withdrew and let it become more complex with each new user.

The second example is Eve-Online. Though the underlying code can be changed by CCP, the hundreds of thousands of users create their own community, politics, and disputes that go beyond the code itself. Unless coders and designers immerse themselves in the world itself, exactly the same way as consumers do, they cannot truly understand how the virtual world works.

This is different for established, fixed worlds like Middle Earth or Harry Potter. Within them there is one creator and one alone. That creator has complete knowledge of all the history and future of the world, and s/he alone can change it. When you open up your world for public interaction, however, you quickly find out that the world grows faster than you can keep up - unless you participate exactly as one of the "mere consumers."

Jeez, that was long.

Posted Jan 5, 2007 10:00:30 AM | link

timmy says:

“You were lucky. We lived for three months in a brown paper bag in a septic tank. We had to get up six in the morning, clean the bag, eat a crust of stale bread, go to work down the mill [coding on Basic with our abacus] fourteen hours a day, week-in week-out, and when we got home our Dad would thrash us to sleep with his belt.” — Monty Python's Flying Circus, Four Yorkshiremen [edited]

Posted Jan 5, 2007 10:43:34 AM | link

darin says:

I guess vb and java script is too hard for johnny (after all every computer has a web browser that supports java script).


If Johnny wanted too, he could participate in the scripting games:
http://www.microsoft.com/technet/scriptcenter/funzone/games/default.mspx

And last I check java and eclipse were free to download and also run on multiple machines.

So I don't understand the argument: if it isn't shipped as part of the os, then we are doomed scenario.

I guess this argumet could be applied to games as well, if Microsoft didn't ship minesweeper with the os, then johnny wouldn't be able to figure out how to use the computer to install/play other games.


Posted Jan 5, 2007 11:51:26 AM | link

says:

My computer has bash, awk, zsh, c, c++, fortran, tcl, perl, python, java, javascript, ruby, expect, at least one assembler, and php. It probably has half a dozzen application specific languages, like whatever open office come with, and might even have rexx and basic. It has flex and bison in case I need to write my own language.

You can get most of those things for windows if you want, and the new Macs probably comes with a similair assortment

I don't think the problem, if there is one, is with Johnny.

Posted Jan 5, 2007 3:52:24 PM | link

Sarapen says:

"Does the creator of a game, the programmer of its code, understand its world better than a mere-consumer can ever? "

No.

Okay, I'll explain. There is a fundamental difference between the author and the audience in that the author may understand how their work fits together, but they will never fully understand how their work is perceived by other people. A programmer may know exactly what code produces what effect, and even on what day that code was written, but that programmer will never feel the frustration of failing the damn jumping puzzle for the third time or the elation of discovering a loophole that produces more gold. More mundanely, the programmer can never experience the thrill of entering a new and unknown level or getting a new weapon. The gamer experiences the game as a game; the programmer experiences it as a piece of labour. The programmer can guess, can conjecture, but can never really know what it is like to play the game that he or she has created.

Posted Jan 5, 2007 5:02:57 PM | link

nate combs says:

Sarapen>
There is a fundamental difference between the author and the audience in that the author may understand how their work fits together, but they will never fully understand how their work is perceived by other people.
-----------------------------

I guess I'm neutral with this in a perfect world. But as I hinted with my swipe against players who don't read manuals, mere-consumers tend to fall into the laziness trap. And yes, most players, including myself a great deal of the time, don't like to read manuals (gawd! hubris! ...). Laziness, however, tends to be punished when exhibited by coders: they are more likely, therefore, to think it through.

Posted Jan 5, 2007 6:57:10 PM | link

nate combs says:

Gabriel>
the hundreds of thousands of users create their own community, politics, and disputes that go beyond the code itself. Unless coders and designers immerse themselves in the world itself, exactly the same way as consumers do, they cannot truly understand how the virtual world works.

-------------------------------

Yes. But what this is missing is that a great deal of the world and its rules are not community/social artifacts. Take Eve-Online, for example, there is expressly a "physics" that describes how the components of ships (guns, shields, and butter [humor]) and the tools of players interact. I strongly believe the richness of that half of the world model directly impacts the richess of the social/community one.

Posted Jan 5, 2007 7:27:28 PM | link

nate combs says:

darin>
I guess vb and java script is too hard for johnny (after all every computer has a web browser that supports java script)... eclipse
------------------------------------------
I'll tell you why I think this is bogus. IMO, kids and learning is best served by a spirt of scruffiness that is faciliatated by primitiveness: experimentation, goofing around and skipping stones, are the ingredients. Yes, I might be able to successfully explain the browser bit, or on a really good day get the Eclipse story lathered up. But in the statistics of real-life, ya going to lose a lot of kids along the way.

Posted Jan 5, 2007 7:53:09 PM | link

Doug Sharp says:

Tooting-my-own-horn-warning.

I will soon be relaunching my game ChipWits as an online game community. We're first releasing a standalone version to explore gameplay possibilities.

I don't know if anyone here remembers the game - Mike Johnston and I released it on the Mac in '84. Players used an iconic language - IBOL - to program robots to do such things as PICKUP PIE and ZAP ELECTROCRABs.

Not a textual language, but the original game elicited all the symptoms of programming addiction in its players.

Two of our playtesters are professional programmers who credit ChipWits with hooking them on programming. I googled to find playtesters.

We are going to have fun exploring different types of gameplay. We'll be hosting multiChipWit games and see if we can build a core of players.

I've started to blog about the project at doctordroog.wordpress.com.

We created ChipWits specifically for people to program. Due to the inherent complexity of even simple programs in a simple language such as IBOL I knew players would code things I hadn't forseen. But due to the unfortunate lack of an Internet in '84 I saw only a few programs produced by players.

ChipWits is trivial in terms of the rich fictional and social worlds you are addressing, but it's tangentially related.

Posted Jan 5, 2007 9:34:29 PM | link

Andy Havens says:

I learned Basic on a mainframe terminal (paper input, paper output) in 1977. Was durn good larnin' yes. And then moved to Basic on the TRS-80 where I programmed my own "Canyon Bomber" game using text graphics, complete with a cheat key. The basics of programming are great.

In those days, I was maybe... one of about 25 kids in a graduating class of nearly 400 that was interested in anything remotely like computers, programming, etc.

There's plenty going on today like that for the kids. I wish ta hell that I'd been born in 1986 instead of 1966. Twenty years wasted playing pixelated, crappy-looking games... I was... what? 25 when "Civilization" came out? That's too damn old. I wish I'd had that experience at 16 or 17. And "Railroad Tycoon" at 12.

The kids today don't have it easy. They have it great. They have more choices and more information and more media and more more more than we had. I just hope I'm successful at guiding my 7-year-old son into the right "ways" of experiencing and learning and crafting his way through it all.

Right now he's a whiz with Legos, likes playing a couple games on the XBox 360 (he can kick my ass at "Star Wars Battlefront" and "Star Wars Lego" already), and he loves to draw. Good starts all, I think.

What programming language should he start on? I don't know. He's learning to read English first, eh?

Any suggestions for games/aps that start to move the brain towards that? He currently wants to be a mechanical engineer when he grows up. We're not discouraging that. Dad "The English Major" definitely likes the idea of having a useful degree in the family.

Posted Jan 6, 2007 10:44:00 AM | link

greglas says:

I've been mulling this over for the past couple days and I can't say I've come up with anything really new.

The BASIC moment, when we all had to understand our machines in order to write the games that we would then play -- well, that was great, but that's gone.

But this isn't unique to computing technology. My father-in-law has a much deeper understanding of combustion engines than I will ever have, because both of my family cars today are heavily software-controlled. I long for a car that I pull apart and put back together, but if I want that, I need to do what Brin did -- buy a very old car. I actually think there is some legislation out there directed at this trend.

The advance of technology leads to inevitable black-boxing (de facto, if not de jure, as in the DMCA) of the technologies we want to / ought to be able to control. New technologies make us less and less like yeoman farmers. We marry attractive machines that inscrutable orderings into our lives. The 21st century promises more and more of this.

Call me a curmudgeon, but I think you're right to be bothered, Nate. We lost BASIC. Java is not the same -- the kids are missing something. The best we can hope for is the proliferation of LUAs.

(And, as I said before, I think this whole discussion throws some cold water on Steven Johnson's "the kids are alright -- no, better" game-utopianism.)

Posted Jan 6, 2007 10:58:36 AM | link

greglas says:

So I posted before reading Andy, and obviously I disagree with him at the deeper level.

But I will say I'm nuts about Legos / Lego Star Wars and so are my kids. I've been thinking about doing on post for the last two months on how an MMO version of Lego Star Wars would be able to beat WoW's numbers easily.

Posted Jan 6, 2007 11:02:47 AM | link

Andy Havens says:

@greglas:

I'm not a code jockey, really... so this ain't my area to have a strong opinion on. But in my world (marketing and design), the thing that's radically changed in the last 10-20 years is the application of computer/desktop tools to the design/layout process.

Now, nobody argues that learning the raw, natural media is anything but good. Learning to draw, paint, sketch, sculpt, etc. with the "original" materials is (I still believe) a necessary part of art education. But as far as doing layout work for ads, graphic design, print-production... in short, almost anything that will be used in the commercial fields... it no longer makes sense to do it on anything but a computer.

And yet, you have folks that bemoan the loss of doing paste-up by hand. They pine for the days of cutting/stripping. Of doing various things with Xacto knives and tape and glue. Despite the fact that the finished piece -- using Photoshop and Illustrator and Quark or InDesign -- can be done in 1/25th the time, and be done with 100-times the accuracy and effects.

Is something lost for what we've gained? Probably. Some level of "craft wisdom," perhaps. I bet the old doctors that made house-calls with little black bags knew a few things that my oncologist with his X-ray and cat scan doesn't know. But I'm gonna take the new stuff almost every time, because (I bet) there's an analog "craft wisdom" that lays on top of this matrix, but with more features.

It may just be that this particular craft (computer programming) has a different learning curve now. When we were growing up, the far left might have had a gentler entrance... Basic. Like the old, mechanical cars. Now it's got a steeper drop-off.

On the flip-side, though, millions more people use the dang things. Which means more people on the cliff, ready to drop off.

Posted Jan 6, 2007 1:48:48 PM | link

greglas says:

I'm more an artist than a code too, and I'm in agreement that there's not much lost in the move from cutting and stripping to Adobe, Quark, what have you (Though, like you, I still think people should experience vine charcoal and oils.)

I put coding in a different category, though. When you work in photoshop or a paint program, you start with pretty much the same blank canvas and much more powerful tools.

Learning to write in BASIC, though, I see as a different kind of thing. Maybe I'm wrong about this, but neither Java nor contrived game scripting tools hit that mark.

Posted Jan 6, 2007 3:47:34 PM | link

Andy Havens says:

@greglas: I'm not disagreeing with you. I don't know enough about what's out there now. And I remember the joy of learning about how nested "for next" loops could replace "if/then" chains in some circumstances and going, "Ahhhh. That'll be helpful as hell."

I just don't know if the current crop of tools has an analogous process. Or if one is really needed, as long as the ability to "think programatically" is there.

Posted Jan 6, 2007 4:29:42 PM | link

Kelly says:

I think the web is MUCH more inspiring to young people today than anything like BASIC ever was. Girls and boys who would never have any interest in programming or engineering careers now have a compelling reason to learn a little about code and how computers process data because they care about expressing themselves on web sites.

The simple act of learning enough html markup to control the look of your myspace page is far easier than any oldbie programming languages were because it gives such immediate and graphically stunning results. Noob coders can immediately see beautiful full color images or paste in scripts that make sparkly interactive goodness happen. These simple activities (modifying html markup) have likely inspired many kids to learn javascript and enough code sensibility to not muck up things too bad and change parameters as needed to customize their creations.

All in all I think the tools for budding techies today are far richer and more inspiring than command line environments where the big pay off was some text printed to screen. Now days kids have reasons beyond the sheer joy of tinkering to learn to code and tools so easy that they can get their feet wet without even understanding what they are copying/pasting. Some may never dig deeper and learn any actual programming beyond markup codes and html document structure that doesn't break anything but for those that do probe a little deeper I think the learning curve is amazingly tiny.

So tiny that a lot of kids think html and pasting scripts IS programming, lol. But hey at least they get the basic system of creating a text file in a syntax the computer can interpret to create some desired output. Beginning programming doesn't get much smaller, easier, or friendlier than that. Plus, little successes with something as simple as a web page build confidence and proficiency with computers that helps break down stereotypes that keep many people from trying to code (worrying that they aren't good enough at math, that they might 'break' something, that programming tools are expensive or that you need to college to program anything cool).

Just look at the high-level game creation tools available to kids today. Any kid can make their own video game or web based game using relatively simple authoring programs (how many mathphobic artists have braved ActionScript just to be able to make small games or animations?). Even VWs like Second Life are creating new opportunities to ease young people into content creation (their teen grid offers a more inspiring coding environment than BASIC lol). People who think technology was easier to get into years ago probably are forgetting how embedded technology is in kids' lives today and how many more reasons the average kid has to explore some kind of coding, be it a macro in an often-used game or program or a quick mod so they can customize some feature of their web page. Scripting isn't just for nerds anymore, and people are less amazed by computer technology and therefore more at ease with trying to control and customize it.

If the only point of learning to program a computer is becoming a hardcore engineer, then scratch all of the above points and be sure that the small percentage of the population that is actually interested in serious programming starts with a good low-level language so they don't learn any bad habits or take anything for granted. But if programming in the near future for most people is about modding applications, scripting custom behaviors in software we already use and being able to edit markup files without breaking anything, then I think young people today have great tools and an awesome head start on programming literacy.

A bigger issue than code (to me) is how kids are going to wrap their head around databases. So much of our future seems to be dependent on successful design and maintenance of databases and yet most people are scared of even a desktop program like MS Access. I once had a boss with a hundreds of client records in a Word document (tab-separated columns, not even a table). I hope schools move from just teaching kids to create documents to teaching them how to manage data. ;p

Posted Jan 6, 2007 6:05:16 PM | link

Doug Sharp says:

Before I created ChipWits I was a 5th grade teacher when Apples started to appear in classrooms. I got into programming by bring a machine home on weekends and programming in BASIC into the wee hours. I taught a summer school class in programming in '79.

I've always treated code as my art medium.

Having worked in many languages - MacFORTH to UCSD Pascal to compiled Applesoft BASIC to ActionScript 3 - and had fun and hassles with each of them.

My daughter - who is doing the art for the ChipWits revival - is serious about game design but has never taken programming seriously. She can code in ActionScript well enough to do simple games but never beyond that.

One of our testers just made a great entry about his history with ChipWits:

"I got a Commodore 64 when I was 5 and some years later my 5th grade teacher turned me on to Chipwits. I was hooked immediately, and I largely credit this game for enhancing my early interest and understanding in programming...! Today, I amm a full-time software engineer and I develop games on my spare time."

He seems to have forgiven ChipWits for turning him to a life of geekdom.

Posted Jan 6, 2007 8:21:11 PM | link

greglas says:

@Doug: I hope it takes off -- sounds neat.

@Kelly: I think "kids today" are producing a ton of interesting and engaging digital content with powerful tools -- but they aren't *coding*. HTML markup is good at arranging eye-candy, but it isn't really the same as goto, let a=, for/next, if/then for groking what code can be about.

Still, maybe I am being a bit of an antiquarian curmudgeon -- there are powerful tools out there, they are being used by young people, and in very creative ways. I have a hunch that the fact that something like BASIC it isn't bundled with an OS is a bad thing, but... I don't really have any empirical data that would Brin's discussion something more interesting than a hunch.

Posted Jan 6, 2007 9:17:28 PM | link

Kelly says:

@greglas I understand what you're saying but disagree that working in markup isn't a form of coding (I think using markup counts as coding because there is a forgiving but codified syntax involved-- it uses a code which is not natural language and can only be learned through study, just like picking up any new language, and though it is not programming proper, it does offer an easy step into the many conventions of reading and writing code like commenting, indentation/white space, working in a text editor that isn't Word, and easing people into script editing via javascript, php, and perl). I think that as a "first step" it's a much easier one for young programmers than the first step into BASIC was.

Also, my broader point is that Johnny doesn't need to code, nor does Jenny. Steve and Ann do-- because they like to tinker with programming or have a serious interest in becoming a software engineer. The majority of the world just needs to learn how to edit, modify, copy/paste, and manage existing code. To make macros, to open config files and change things without breaking the program. Simple concepts of formatting programmatic input so a computer application can process it and give the desired result... that is the essence of programming and you don't need to be a software engineer to do these things anymore. You can make a great hit game with no serious programming (Aveyond comes to mind but there are more out there). There was a time when every painter needed to be able to make mix their own paints from natural materials and every textile artisan had to first create their own thread or at least their own fabric. Those times in personal computing are passing. Wave as they go by. :)

The opening of this thread asked if the programmer knows their game more than the player and assumes the programmer is synonymous with the "game creator" for interactive entertainment software. I know of several popular, lucrative games on the market that were made by people who consider themselves visual artists and only dabbled in enough code to get the game mechanics to work... this isn't a revolution limited simply to some weirdos in game design. The same thing is happening with office programs as engineers create tools that elevate content creation AND giving the computer programmatic information to higher levels of abstraction from the BASIC code level. Things run on top of other things that manage the lower level details so coders don't have to... I think that trend will continue and in the end it is very good for the majority of people. The vast majority. Serious programmers will seek out the BASIC style education they've always needed and wanted (even in my CS studies I found that even though Java was the language of choice for all my foundation courses MANY serious students were choosing C for their personal studies and projects and in fact taking the oldbie programmers' sage advice). But the majority of CS foundation students weren't going into engineering! They were people headed off to IT and related careers who just needed the basics and skills to advance in related fields. The world needs great engineers but they largely don't need to be great engineers themselves and I think the same people who would have sat down and putzed with BASIC as a kid are the same people who seek out similar experiences today. It's just that today a greater and broader spectrum of people are able to also understand how to create or modify programmatic input and author, publish, test, fix, and run files with code in them (including but not just markup).

There's no harm and a lot of good in shipping BASIC with a modern OS unless you consider it a dead language and time-waster. What can you learn from BASIC that you can't learn starting with something like php, a living, useful, and very easy to learn beginner language? Why cut your teeth on something that can only make text curiosities? It's entirely possible that I'm missing the awesomeness of BASIC because I've never learned it. But if it can teach the proper non-stupid use of a goto then it probably is needed because every Java-type OOP course seems to have a few strong words against goto in them, without any real explanation about what goto is good for ;p

Posted Jan 7, 2007 11:40:11 PM | link

ajs says:

@greglas you just love BASIC because it let you create something new and dynamic on your computer. Wizardry was written in pascal...

@helen markup and coding are different skill sets. Which is why my markup sucks. Goto is good for getting out of deeply nested loops for about 1% of the cost of exception handeling. I've written one about 5 times in 15 years as a programmer. When you need one, you really need one.

The real question is: can a user create someting new in the environment provided? With BASIC, the answer is yes. World of warcraft, not so much. Second Life? Yes again.

Posted Jan 8, 2007 3:04:39 PM | link

Bart Stewart says:

The first point to make is that there are, always have been, and probably always will be more users than builders. In other words, most people only want to use systems; only a relatively small number of people enjoy designing and implementing systems.

Far more people want to play games than design them, just as vastly more people want to drive cars than build them. And that's OK. If Johnny wants to code, great, but there's no reason why he should need to know how to code. When Western civilization falls, it won't be because Johnny would rather surf the Web than implement some odd new mash-up.

So the idea that there is any programming language that could turn a majority of computer users into happy programmers is almost certainly false. I believe trying to achieve that goal would be a waste of effort. (Ref. the Mark Twain comment about trying to teach a pig to sing.) Better to focus on those who'd actually use a computer language because they want to do so.

Accordingly, the second thing is that even within the system-builder subset, I believe there are different styles of system-building -- I call them Architecture and Tinkering -- and these styles benefit from different types of building tools.

Architecture needs professional-grade compiled languages (such as C/C++ and Java) because their structure helps reduce the difficulty of building large, complex systems. Alternately, Tinkering calls for interpreted languages and scripting languages (BASIC, Logo, Perl, REXX, etc.) because they minimize the time spent waiting to try new ideas.

Interpreted languages like BASIC helped to generate and maintain excitement about system-building because they provided instant feedback. You could make a change, type "RUN", and see immediately how the behavior of your system changed. Of course this led to "spaghetti code" when you changed from Tinkering to Architecture, but as long as you were just playing around with creative ideas, BASIC got the job done amazingly well. It offered just the right mix of power and simplicity.

Will our future culture suffer because we lack a fun rapid-prototyping language like BASIC? No, because only a few people are system-builders, and only some of them are Tinkerers for any length of time. There just aren't that many people affected.

Still, having something like BASIC again would be great for those who are interested in trying their hand at system-building. A modern language that maximizes the creative aspects of system-building might help encourage Tinkerers to stick around long enough to become Architects, and that would be a Good Thing.

Now, who'll be the first to repeat the old call for an iconic programming language? ;-)

--Bart

Posted Jan 8, 2007 3:55:03 PM | link

nate combs says:

Bart>
Far more people want to play games than design them, just as vastly more people want to drive cars than build them. And that's OK. If Johnny wants to code, great, but there's no reason why he should need to know how to code. When Western civilization falls, it won't be because Johnny would rather surf the Web than implement some odd new mash-up.
-----------------------------------------------

I think this underestimates the likelihood that there are a lot more folks (kids especially) who could be *tempted* into occasionally tinkering around the edges should the tools be available. E.g. as part of some exercise or doodle. For tinkering to count doesn't mean that it be for sake of a larger project.

I think technical doodling is goal enough - and that is precisely what the scruffy approach empowers. Put it another way, if one undertakes a large systems project one can amortize the overhead of a more complex development environment. Professional developers make this contract all the time. The claim is that most kids won't commit to that for a casual opportunity, and I think that is a reasonable claim.

Building pieces of systems is just fine to broaden some kid's understanding. Sure, some of those might even go on to build *systems* and power to 'em.

Posted Jan 8, 2007 8:07:34 PM | link

nate combs says:

BTW, here is Computer Science Teacher's Association spin on the bad times in CS: When the Worst of Times is the Best of Times.

Posted Jan 8, 2007 8:41:04 PM | link

magicback (Frank) says:

Nate, while kids don't have the one simple BASIC that rule the whole computer world, kids have specialize progamming environments given the increase in complexity and connectivity.

Kids can try LEGO programming, DVR programming, Security system programming, or Virtual Basic, or PHP. There's no BASIC anymore as there are HTML, activescripts, MySQL, Perl, etc.

Posted Jan 8, 2007 10:22:23 PM | link

lewy says:

HTML isn't coding--there are no conditionals, no variables, no data structures, etc. There's no way to implement an algorithm.

Actually, I think one of the biggest obstacles to somebody picking up a book and learning coding on the fly now is object orientation. I recently tried to teach a friend how to code because he was curious and, for whatever reason, wanted to learn Java. Have you ever tried to explain to somebody who's pretty much a complete novice why they have to instantiate an object from a class before they can use it? And just forget about the static keyword. It made me wonder if the best approach might be just teaching procedural scripting and then easing into the OO stuff later on.

Posted Jan 9, 2007 4:41:18 AM | link

Bart Stewart says:

Great point, lewy. There are some things that are considered essential in a "real language" that are seriously counterproductive for tinkering. Emphasizing OO decomposition is probably one of those things -- it's overkill for someone just trying to understand "hello, world."

I also question the belief that a progamming language for novices should "teach good programming habits." All that does is impose the pickiness of a full architectural language but without the expressive power -- it's the worst of both worlds: all the pedagogy and none of the fun. A language built for tinkering assumes that you'll make mistakes, but it lets you fix them quickly and keep going.

For my money, the highest barrier to maintaining the novice programmer's interest is strong data typing. Strong typing is important for an architectural language because it helps minimize semantic errors, but it frustrates novice programmers who don't understand why one kind of variable should be treated differently from other kinds. For the novice, a variable is just a box that holds anything; having to know about different kinds of boxes (in addition to other programming knowledge) is too much complexity too soon.

Having to satisfy finicky typing rules disrupts the flow of tinkering, and that's the last thing you want when you're trying to maximize the novice programmer's enjoyment.

To my mind, a good novice language would have at least the following features:

  • interpreted rather than compiled
  • convert types on the fly according to "best guess" rules
  • a simple set of flow-of-control statements
  • subroutines whose parameters are passed by reference
  • garbage collection by the system, not the programmer
  • simple words rather than punctuation characters

Scoping of variables within a subroutine might be nice to have, but it's another one of those things that can frustrate new programmers. It's probably not necessary for a language whose typical program is 200 lines or less. (Variables should be local to subroutines, though. Making all variables global in a language with subroutines would produce another kind of frustration.)

Finally, it's debatable whether a novice programing language needs media (graphics & audio) commands, file handling, or Web hooks. Being able to make pictures and sounds might help retain the novice programmer's interest, but playing with how to set pixels or make beeps and boops doesn't really teach anything about programming. Implementing graphics and audio capabilities in a novice language might not be cost-effective (ditto for file handling and Web-aware capabilities, although there might be exceptions to the latter).

Nicest, of course, would be if a language could be designed that came in beginner, intermediate, and professional versions but whose "flavor" remained consistent. The beginner version would have the features I suggested above; the intermediate version would add nearly the complete set of keywords for interacting with the world outside the program (graphics, audio, files, internet, other programs, etc.); and the pro version would retain most of these keywords while tightening up the syntax-checking capabilities (compilation, strong typing, exception-handling, etc.).

Think of it as new skills you gain when you level up your Programmer class. :-)

--Bart

Posted Jan 9, 2007 2:38:00 PM | link

lewy says:

Bart Stewart wrote:

On strong typing:

Ironically, considering your earlier statement, I suppose it comes down to whether the goal is to teach programming or good programming practices. That said, I seem to recall an academic study which indicated that programmers tend to be much more productive using loosely typed languages. Additionally a lot of the new stuff that's coming out, like Ruby, are loosely typed so the point may be moot.

On passing by reference rather than by value:

Actually, I'm a little puzzled by this one. I'm not sure that this is going to have a huge impact on a novice simply because he or she is not going to be able to appreciate the difference between the two. Passing by reference is a very good idea but for reasons that I think are not going to be obvious to a beginner, depending on the beginner. So again, is the point to teach programming or "good programming habits"?

On interpreted rather than compiled languages:

Yes, the immediate feedback is nice, especially for someone just starting out. Compiling and, even worse, linking could well be distracting.

On automatic garbage collection:

What, shouldn't everyone know the joy of leaks and how to run Purify? It seems like colleges these days are just trade schools that teach Java though, and the vast majority of programmers don't work in C/C++, so again the point may be moot.

On scoping:

That's a tough one. I can guarantee that if you don't force a hypothetical beginner to think about it that upwards of 90% of them will just make all of their variables global. I think it comes back to the question of passing by reference in this sense: a lot of learning programming consists of writing something horrible when you're first starting out and then going back in and refactoring when you know better. Isn't it worth it to allow beginners to make horrible mistakes for the purposes of learning? A hypothetical language which automatically handles scoping is going to prevent horrible mistakes involving scoping.

"Finally, it's debatable whether a novice programing language needs media (graphics & audio) commands, file handling, or Web hooks."

I'd tend to agree.

Posted Jan 19, 2007 12:01:15 AM | link

nate combs says:

Nat Torkington (O'Reilly Radar) has a good take on Brin's thoughts(in "Why Johnny Can't Program"). He actually tried an experiment of sorts, other thoughts also presented:

I had a chance to do something about my frustration when my kids' primary school wanted volunteers to run clubs for the kids: I stepped up and ran a three week computer club for two sets of kids.

Posted Jan 27, 2007 10:15:44 PM | link