Wednesday, September 13, 2006

See Your Favorite Author on Salon... and TV!

First, a few announcements.

I have a cover/lead article in the latest issue of SALON, one of the oldest and greatest online magazines. (One of my past covers was the controversial piece that led to STAR WARS ON TRIAL.) This one is about a topic I tested here -- the way that gradually, without any apparent notice, a whole generation of kids has been denied access to simple programming tools that are eaily accessible, universal and easy to use. Have a look at The Basic Problem: Why Johnny Can't Code.

Another little item. If you are at all interested in the burgeoning of science fiction in China, see the top story in SEED Magazine’s online edition. I am cited along with hopeful plans to spark a “Year of Science Fiction and the Future in Asia.

Speaking of which, I will pester you folks till I know the real SF lovers out there try on Baen’s Universe Magazine... The best thing to happen to science fiction in years. Not only does it carry my new serialized novel and lots of other cool items (you get TWICE the stories as any other magazine and they pay top rates for top authors), but every subscription is also a good deed. Every full price subscriber will be matched by free or steeply discounted online subs to students and folks in the developing world. Spread the memes.

(If you do subscribe, tell em I sent you!)

Oh, and some TV appearances. (1) I may be on NOVA (PBS) on October 31st. An episode about Black Holes. And (2) keep ready for news of a special new History Channel show that will premiere in November.

I generally try to post less often. But heaps happen.

 Do be sure and help spread alternative memes about the elections.
 Do be registering folks to vote.
 Do be talking moderates and “decent” conservatives into thinking about their duty.
 Do be do be do.

38 comments:

Chris Hanson said...

Mac OS X has always included a variety of programming options. One that's really cool is Ruby; it has a very gentle learning curve but it's sophisticated enough to build great real-world web applications that can make their developers rich.

You can just launch Terminal and type "ruby" to get the initial interpreter. There are some great online tutorials available, and there's also a good book by Chris Pine called "Learn to Program" that teaches programming from the ground up with Ruby, at a level appropriate for anyone 9 or over (including adults).

Jonathan said...

Back in the '80s, when I started college, the first programming classes were still in BASIC. I must confess, I surged ahead of the pack a bit - my final project in the class was an airline reservation program (for Fly-By-Night Airlines), using planes from Jane's All the World's Aircraft, with some of the most improbable routes I could think of. (Flying from LA to NY, for instance, was accomplished with a DC-3, with stops calculated from the best-guess fuel range, and a three-hour layover in Kansas City; you could fly from Puyallup, WA, to London on a Tupolev TU-44, the Soviet SST, even though at the time Puyallup's Thun Field was still a dirt strip.)

I ran a regionally popular bulletin board in Omaha, NE, on a C-64, back in '87-'89. It was, of course, written in BASIC. (And Dr. Brin, the command is LOAD "programname",8,0.)

Another C-64 hosted my favorite creation, the User-Unfriendly Craps game. (It would accuse you of cheating, for instance; win more than five rolls in a row, it would *really* cut loose!)

Today, unless someone prepackages the solution, I can't set up even the simplest algorithm on my computer. It's not that I'm stupid, heaven knows - it's that I can't afford to get a book on Visual BASIC, and my local library's selection of software language manuals is pitiful, at best. (DOS For Dummies"? No problem, there's a copy on the shelf. Too bad Windows no longer runs over DOS...)

For that matter, there are people where I work who think it's magic when I can tell them that the computer they're working at is about to lose its hard drive. (When every time the computer access the drive, you hear a grating hum, there's a bearing set about to meet its maker. It only seems like magic if you've never learned the basics...)

Anyone else here reminded of Isaac Asimov's classic short, "The Feeling of Power"?

Naum said...

David, I really enjoy most all of your articles and your blog takes, but on this subject (the Salon article on "Why Johnny Can't Program", I will tell you as a professional programmer myself who had fun with those BASIC programs way back when, you're viewing things with a terribly distorted lens.

First off, if you really want to tinker with machines and learn programming, Windows is not choice #1 -- Macs and/or Linux. There you have a complete array of "learning to program" tools. And there's a whole other set of "learn to program" stuff like Squeak and commerical developer software. But one can start in even more simpler fashion - pounding out Javascript using a text editor, one can learn all the ropes of programming. All the basic and even more advanced algorithms can be done in Javascript, Perl, Python, C, even shell script. Again, in Linux or Mac you just goto the terminal and you have the same environment where you can do all those BASIC programs.

There's really no reason to run BASIC programs, other than because they're listed in a textbook.

More importantly, the world of code in this age is a different beast. The realm of yesterlore where BASIC was prevalent was a lot simpler in many respects -- you had a machine and you had a program. Now, today, code is simpler, and even laypersons can hack out web applications (i.e., MySpace), but there are sets of platforms that sit on eachother -- for instance markup language (HTML), stylesheets (CSS), scripting language ($pickone), Javascript in the client browser, web server, low level code that may run on server in "batch mode", etc... ...used to be we compiled and link edited programs by hand, now we use complex software configuration packages to build software...

But the entry barrier is still even less than it used to be -- the hardware is so much cheaper now, and if you go the F/OSS route, you have all the programming goodies you ever need. Even if you run Windows, you can code Javascript and do all the algorithms right in your browser...

Johnny too can code, I will beg to differ -- it's just a different form now -- HTML coding, javascript, CSS, macros for games, scripts to perform tasks on the computer. I am training a young assistant now that is on fire for coding and he started simple, World of Warcraft macros, writing little scripts to do Access DB chores and now I've got him writing web applications. Kids are too doing other things than BASIC -- from creating web pages, customizing web software, scripting thier games, modding the games and textbook publishers should change to reflect it.

Your stance is as silly as arguing that we should replace handheld calculators with abacuses or computers with handheld calculators. It might be special for an oft-odd diversion to study "how it once was done", but I don't believe its very fruitful to teach BASIC examples. If you want to get close to the machine, you can compile a C program or built a simple adder/subtractor circuit or grapple with some rudimentary assembly code.

Years ago, I did a lot code in BASIC, even a bit professionally, but I don't get the BASIC love. And again, anything you can do in BASIC, you can do just as simply and even more elegantly than in BASIC. Many in the computer science fields believe BASIC to be a "dumbing down" and harmful to long term programmer development.

The fact that BASIC is being printed in current textbooks (if this is true) is an abomination, and the instructor needs a head slap (if he indeed was the chooser) for choosing such a poor textbook. A better method of learning, is to learn the algorithm first, then learn language. If that is mastered, than a problem can be expressed in any language.

But to make a leap that "Johnny can't code" because BASIC isn't available on contemporary machines is a giant leap that strains credulity. I will accept that for Windows machines that ship minus development tools, it's not the same as the old school way -- but like I wrote, a Linux and/or Mac box comes with all the programming tool chest.

It's not a case of "Why Johnny CAN'T code", it's more a matter of "Why Johnny WON'T code", and as someone who has nearly 25+ years professional coding experience, here's my take on that:

1. Offshoring and importation of NIV workers (i.e., H1B). Kids arn't stupid, they observe career choices of parents and older friends and siblings. Wages, measured on a real basis, continue to decline and with the advent of pagers and cell phones and 24/7 processing, it's an arduous road to master and that proficiency is in turn rewarded with less pay for virtual 24/7 work. Careers in marketing, financial realms, insurance, law, etc... are going to appeal much more to youth. In fact, college computer science and engineering enrollments are declining as smart people opt for careers in managment, marketing, etc...

2. The field itself, even before the flood of NIV programmers and move to offshore teams, has a trajectory more in tune with professional sports athletes than traditional professional careers. Folks simply leave the field after a while and it's rare to see a "lifer" in this field of study. There is also terrible age discrimination.

monkyboy said...

Johnny's dad could show him a BASIC EMULATOR:

http://tinyurl.com/e9nqv

It's not bad...the software library has some fun old programs...

Anonymous said...

you've been featured on slashdot: http://developers.slashdot.org/article.pl?sid=06/09/14/0320238

Have fun reading the comments (use +4 for sanity sake)

Dan Armak said...

I agree with the article, but it doesn't go far enough.

Based on what it says one would think that MS et al removed BASIC from their OSs because they consider the language to be outdated and useless. But if that were true, one might expect those OSs to be distributed with compilers, SDKs and documentation for the languages that are used to write the majority of today's desktop apps - C, C++, .Net, Java, ... And probably also some other languages whose implementations are free anyway - Python, Perl, Ruby, Scheme, whatever. (Many of these have MS .Net implementations anyway.)

Whereas in reality we have Linux, which is generally distributed with all of these; and Windows, which includes none; and OSX, which I haven't used but assume is somewhere on the Linux side or in between.

Windows is distributed without any compilers at all, even though many of them are avaialble for free download if you know where to look. And without any kind of programming documentation. And without a command-line shell that can be used for programming. And without the (unix-tradition) text-processing tools, or any ways to combine them effectively, or access to most information as raw to begin with. And with the most common programs (MS Office...) producing obfuscated and unreadable data...

The real problem isn't that MS is stupid and, by omitting BASIC, failed to raise a new generation of people who understand computers. Rather, they omit all and any programming tools on purpose, because they stand to lose if their users understand and can use computers better. Enlightened users might come to wonder if computers are really naturally insecure, or unstable and unreliable, or whether some program that comes with Windows can't be changed for one they'd like more - and eventually abandon ship.

So it's in Microsoft's interest to keep people from trying to understand computers, and to perpetuate the meme that computers are not to be understood. It's not in their interest to empower their (average home) user in any way until competing software starts winning users over anyway thanks to its features. It's not in their interest for people to perceive that an OS is separate from the hardware it runs on, or that a program is separate from its data, or that the data is separate from DRM.

So to sum up, MS will put efforts into making programmers better programmers, as by creating and freely distributing the .Net SDK and documentation. But they'll also put efforts into preventing non-programmers from becoming programmers, and "consumers" from becoming suppliers.

Meanwhile, chris and jonathan are right: the best way to start programming today is with linux and an agile scripting language, not with Windows or BASIC. I also think that e.g. Python is much easier to learn as a first programming language than BASIC; restricted to a small subset of syntax/libraries, it can do anything BASIC could and be just as simple or more. Except for moving dots onscreen - you'd need to use a dedicated library for that...

Warren said...

Have to agree with Naum et. al. here.

For the longest time the FCC required learning Morse code for even an entry-level ham license. When that requirement was dropped, there was a lot of controversy — but licensing went up.

Morse is ancient technology. If we ever end up actually needing to use it for serious comm purposes, it'll be because we're even more screwed than the humans were in Independence Day. We'll be too busy fighting off our neighbors with clubs to worry about radio.

Similarly, BASIC line-entry programs are simply ancient history. They have no relevance today. OOP design is the way in and the way to go.

A simple beginning can even be had using JavaScript, which has the advantages of (1) running in pretty much any browser, so you don't even need sophisticated programming tools, just a text editor and Mozilla; and (2) running in the browser sandbox, which keeps you from inadvertently entering code that can wipe your hard drive.

The reason a generation of kids today doesn't have the tools you or I did is because those tools are largely irrelevant. Pining for them is a little like wishing we could return to the time when cars didn't have digital controls on everything so they could be hand-adjusted … and required incessant hand-adjustment to keep running.

Those just weren't the days.

Jason Doege said...

In response to the basic problem, I have to say that while I agree with your sentiment, I think that there are actually a plethora of options. You mention scripting languages and describe them as too high level, but I think that is true only if you want it to be.

I remember the same things you do. One of the first programs I wrote in Basic was a simple one which counted to 10, printing the numbers as it went. I thought it fantastic that I could get a machine to simply do so. After reading you article, I wondered if I could get a modern scripting language (Perl, in this case) to work similarly without high level constructs. This is what I produced, gotos and all:


$a = 1;
label:
$a = $a+1;
print $a;
if ($a == 10) { goto label2; }
goto label;
label2:

Looks just as ugly, but just as understandable as the Basic version I remember. Perl, Python, Ruby, etc. are all freely available and relatively easy to add to a computing environment and can be used in the old, unstructured way we remember. Furthermore, they have an excellent library of books available in the local bookstore to further the learning experience. Unlike Basic, they offer a path to better programming practices such as structured programming, OO programming, functional programming, etc. At best, our old basic might have allowed us a peek at Structural programming (gosubs, but no local variables).

All that said, back then, the first use, the first interface to the computer was often the line interpreted basic so naturally we tried it. Today, you have to look for it and maybe install it because these tools are fulfilling their promises of productivity. I agree wholeheartedly with what you are doing with your son and plan to give my children, and maybe their classmates, the same experience.

Best regards
Jason Doege

epkat said...

You should bring your son to Penguicon, the combination science fiction and open source software convention. He'd enjoy it for the computers, and you'd enjoy it for Charlie Stross, Elizabeth Bear, John Scalzi, Karl Schroeder, Nick Sagan, and many others.

I'm the head of programming-- it would be neat to have a panel on the topic of "Does BASIC Cause Brain Damage?" in which the author of The Hacker's Dictionary is put in a back-and-forth discussion with BASIC education proponents to defend his assertion in the entry on BASIC that early exposure to BASIC causes bad habits that ruin nascent programmers for life.

Rob Perkins said...

Speaking as someone who is still programming in something called BASIC, I'm at a simple loss to say WHY David and his son didn't just download a C=64 emulator and avoid all the nasty physical complications related to that platform.

There are at least SEVEN emulators, two of which I could have sent to him just for the asking. For free.

Unless there was something viscerally important about hearing the 1541 drive go "clunk" or fretting over the loss of an irreplacable power supply brick...?

Ross said...

Dan Armak said:

"Windows is distributed without any compilers at all, ..."

Not entirely correct. The .NET Framework contains compilers for VB.NET, C#, and probably some other, less useful languages. The .NET framework wasn't included with the base Windows XP, cause it didn't exist yet, but I am pretty sure it is included with Service Pack 2. And I am certain it will be included with Vista (shudder).

They're not easy to use -- hell, they're practically impossible to use without a development environment. But they're there.

What's more, everything since Windows 98 has come with VBSCRIPT. And that *is* a scripting language you can use without a development environment. Again, it's not what I would call a friendly learning environment, but it's there, and it's BASIC of a sort, and it's actually pretty useful even after you've learned real languages.

Paula said...

Ah -- thanks for the reminder! I’ve been meaning to check out Baen’s Universe Magazine since you pushed it at your Worldcon kaffeeklatsch. It looks quite good and they seem to be doing things right so I got a Universe Club level membership and put a link on my web site. I didn’t see any way to tell them you sent me, though.

David Brin said...

Naum, your letter is cogent and intelligent and vastly entertaining! Many good points...

...that had almost nothing to do with the core point of my article.

Indeed, from the letters on SALON, it seems very few actually READ the article, instead of skimming quickly and then leaping to the conclusion that "David Brin (the old fart) loves BASIC"

(I do not! In fact, I rather dislike the ugly old thing!)

Those few who did not skim, leap to a conclusion and howl... those few who actually read the essay... realize that my complaint is actually about something else -- the lack of a pervasively accessible "lingua franca" language, included in all computers, that would let publishers assign those little exercises at the end of chapters in math and science textbooks. Exercises that let (encourage, require) kids do those first primitive experiments before moving on to something better.

Something universal enough that millions could compare notes and gripe and learn something about the guts of the machines they (and their civilization) rely upon.

Something to let millions (not a few elite thousands) see that the screen in front of them is composed of dots, and each of those dots moves and changes as a result of genies called algorithms. And, once-upon-a-time, those genies were under human control. Indeed, if you really WANTED to...

Hey, look people. You can preach till the cows come home about which language kids “ought” to start off learning. By all means innovate and push your favorites! Let the really motivated ones take classes in Python, Java, Perl... or even SELF-teach, the way my son is learning C++. Terrific.

And yet, underlying all of this is a level of towering and outrageous arrogance. An implicit assumption that programming is only for the self motivated alphas out there. And all the rest of the kids can go to hell.

Oh, a zillion letter-writers have indignantly stepped forward, dissing old Basic in favor of their fave compilers. Alas, I've heard it all before. Countless exchanges and fascinating blog entries about Python and Perl and QBasic and etc, ad nauseam. Everybody has an opinion. Everbyody's an expert. And very few see the forest for the trees. None of these rants reveal even a scintilla of insight to the basic point of my essay, which is that kids who sat down before older computers used to be encouraged to use them to COMPUTE.

Today, you have to be an alpha... and a determined one... just to find a way to do that with one of the super-sophisticated machines sitting on a hundred million desktops. (Go experiment. Find an HONORS 9th grade math class and challenge the kids to go find a programming language and learn to move a pixel for themselves. Offer five crisp $10 bills as a reward. Come back later and see how many have actually done it. All of your strongly held opinions are nothing against the fact that fewer kids are actively programming today than ten years ago!)

My complaint is about the lack of a pervasively accessible "lingua franca" language, included in all computers, that would let textbook publishers assign those little exercises... that would let kids do those first primitive experiments before moving on to something better. Something universal enough that millions could compare notes and gripe and learn something about the guts of the machines they rely upon. BEFORE MOVING ON.

And -- sighing -- let me reiterate IT DOES NOT HAVE TO BE BASIC! (I despair, of course. Repeating that over and over again simply will not work. I guarantee it. A majority will still screech at me about Basic.)

Let there be no mistake. Only one institution is to blame for this situation. And the same one could fix it, overnight.

If Microsoft included a simple (updated) version of Basic... or Python or whatever... in a turn-key kit along with tutorial... in every Windows machine, that language would overnight become the new locus of kid-experimentation. Once again, millions would share the amazement, moving dots and going “wow” over the way math can control a pixel. And soon, textbooks publishers would have little exercises in that language, forcing millions of students to at least try it out, once or twice.

It would cost Microsoft next to nothing, use up almost no disk space, and do a world of good. (My druthers? Include samplers for DOZENS of other programming languages, as well!)

One of you cynically wrote a theory as to why this will never happen: “...it's in Microsoft's interest to keep people from trying to understand computers, and to perpetuate the meme that computers are not to be understood. It's not in their interest to empower their (average home) user in any way until competing software starts winning users over anyway thanks to its features.”

I have to disagree. I don’t see a conspiracy. After answering several hundred of these letters, I nowrealize that 99% of very smart, computer savvy guys are actually and sincerely unable to “get” what this is all about!

Perhaps the phrase “lingua franca” is too arcane and foreign. In any event, the guys at M$ are probably much the same. Their answer to the textbook problem is “There are still computer code snippets in textbooks? Don’t worry. They’ll go away soon.”

(Try complaining about electoral cheating. Soon we’ll hear: “There are still elections...?”)

The thing that I am simply unable to get across is that whole “forest for the trees” thing. Yes! Your favorite introductory language is probably marvelous and delightful and troglodyte author David Brin doesn’t appreciate its beauty... and thousands of bright young people are using it to great effect today! (Hey, David Brin’s son is one of them!)

But until you can substitute the word “thousands” with “tens of millions”, consider my case proved. You guys just...don’t... get it.

Naum said...

David, actually trying to comment on your "Why Johnny Can't Code" article -- your response seems to have mangled the HTML and the document is not rending properly.

I'll delete and C&P into after its resolved but while I have a moment I wish to respond to your partial response to me.

Your article title suggests that our youth are unable to code and in your lead here, you write a whole generation of kids has been denied access to simple programming tools that are eaily accessible, universal and easy to use.

Which is simply untrue. The "programming tools" now manifest themselves in different forms, but they are (a) more powerful, (b) just as simple to use and (c) come with every machine.

The yesterlore that you write of is an age where that machine was more akin to a toy, or a desktop calculator. And the kids today are forging a new way, writing HTML, coding scripts, building web applications, writing game macros, etc... ...all of which are no less an exercise than scribbling those spaghettti line oriented BASIC programs.

The entry barrier is even lower -- hardware cost is lower, and with simple act of View -> Source or a download of F/OSS software one can learn from somebody elses code rapidly.

A weighty advancement from the day where such activities were confined to nerdy hobbyists eager enough and suitably financially endowed to pursue such an interest.

I indeed read the article (and reread it), just respectfully disagree with your assessment. Kids today have access to simple programming tools that are universal (even Windows machines come with javascript interpreter and web browser and notepad) and simple to use.

The keyword isn't "can't", "won't" might be more apt...

Dan Armak said...

David Brin wrote:
"One of you cynically wrote a theory as to why this will never happen: [quote by me]

I have to disagree. I don’t see a conspiracy."

I don't think of this as a conspiracy. I merely pointed out that doing this would not be to Microsoft's advantage. At best it would be to everyone's advantage, but it wouldn't give them an edge over their competition. And monopolists don't normally try to enlarge the market they're in (by encouraging programming), because they're rightly afraid that their slice of the market will become a smaller percentage.

There's another reason Microsoft will go to a lot of effort to avoid bundling compilers with Windows: it could seriously aggravate their antitrust problems. They might also have bad memories from when they bundled their not-quite-standard Java VM.

I do understand your point about the need for computers to come with simple programming tools, and for children (and adults) to be encouraged to use them. And I've always thought the same myself. I just don't see a real chance of Microsoft doing this.

Open source software, whether on Linux or on Windows, is adequate but doesn't come by default with Windows. I can't influence Microsoft's policies, and I don't want to sit around doing nothing, so I try to convince and help people I know personally to move to Linux or free software on Windows. There are also (very small-scale) private efforts (effectively against government education policy here in Israel) to introduce Linux in primary and secondary schools.

This doesn't change much in the big scheme of things, but what else can I do? Do you expect the right people at MS to read your article, or a thousand such articles, and change their ways? It's not impossible but it's not probable, either.

If I tell you that many people (though not many enough as a percentage) do understand the problem you're describing, what would you have us do that we're not doing already? Not the few thousand people who set policy at MS, but the millions outside MS who understand and care about these issues.

Naum said...

More feedback on your comments...

...my complaint is actually about something else -- the lack of a pervasively accessible "lingua franca" language, included in all computers, that would let publishers assign those little exercises at the end of chapters in math and science textbooks. Exercises that let (encourage, require) kids do those first primitive experiments before moving on to something better.

Students should be learning the algorithms and express the problems in pseudo-language before transforming to code. Then, it doesn't matter the language, as language are just and forcing a "lingua franca" is a major boneheaded move, as a tool good for one problem is not so good for another. Perhaps textbook makers could incorporate their own syntax and scripting engine, but that seems just as silly to me.

Again, the theme of your rant is akin to wanting to learn about horse & buggy in the age of the automobile. Nice for historical context and all, but the age has passed. Machines now that sit on our desk (and in our laps) more resemble the old mainframes than they do the PCs and Apples of 20+ years ago.

Something to let millions (not a few elite thousands) see that the screen in front of them is composed of dots, and each of those dots moves and changes as a result of genies called algorithms. And, once-upon-a-time, those genies were under human control. Indeed, if you really WANTED to...

Still can, the entry barrier is less than it ever was. Because it's not in a mode and flavor familiar to you, you discount it.

...underlying all of this is a level of towering and outrageous arrogance. An implicit assumption that programming is only for the self motivated alphas out there. And all the rest of the kids can go to hell.

Totally wrong. More kids than ever now have opportunity and are taking advantage of it. Hardware costs are such that almost all Americans can get access of a computer (not true at all in the nostalgic period of which you write of, where only an elite set of financially privleged nerds could act on their passion, or even BE EXPOSED TO SUCH MARVELS).

---

Your article actually reminds me of all the hoopla you read over the once golden age of Macs (when there was a plethora of Mac magazines for enthusiasts and Macs had a larger share of PC market to Windows machines), yet truth is that while all those hobbyist magaiznes and cults folded up, there's a heck of lot more Macs today (I don't know what the ratio is, but it's a big number TIMES what it used to be).

Blake Stacey said...

To quote a movie from the BASIC days, "Greetings, program!"

This comments page was oddly truncated (curse that high-level, massively interrelated software!), chopping off the majority of DB's last post and the "post a comment" link. I almost resorted to e-mail to say the following:

1. You got a Commodore 64? Why not go for an Atari 400 and experience the joy of listening to your programs being loaded from tape? That's certainly how I started, well nigh two decades ago. "Skreeee-wrr . . . Bzzzzh." I say that I started programming it then; my father used it much earlier. He was playing PAC-MAN on the thing days after I came back from the hospital, so I probably have that (and Asteroids and Missile Command) burnt into my cortex at a fundamental level.

"Computer games don't affect kids; I mean if Pac-Man affected us as kids, we'd all be running around in darkened rooms, munching magic pills and listening to repetitive electronic music."
-- Marcus Brigstocke, British comedian

2. Anyone who criticizes the MIT Media Lab earns a place in the hearts of many MIT students. We all grow acclimated to their peculiar brand of brightness mixed with buffoonery; seeing an outsider make the case is always refreshing.

3. I would disagree with your characterization of Python (that it's not "close enough to the algorithm that you could actually follow the reasoning of the machine as it made choices and followed logical pathways"). This becomes true when you start dealing with lists, dictionaries and suchlike elaborate data types which depend upon hash functions and other comp-sci trickery an honest physicist like me was never taught. However, I don't believe these "sophisticated" features would enter into the implementation of the programs I wrote in MS-DOS BASIC all those years ago, when the world and we were young. Even the comparatively elaborate SPACEWAR game my friends and I cooked up would not look very different in Python. It would probably look better, given that we'd be able to forgo the odd GOTO statement here and there, but it would live at the same level of the software hierarchy, at the same distance from bare silicon.

Having said all that, two issues arise when asking the question, "Why isn't Python (or Perl, etc.) the new BASIC?" Both have already been touched upon. First is a technical issue: graphics output is more difficult. I shudder to think at the TCL/Tk wizardry one has to chant before doing a simple thing like lighting up a pixel. . . This may be the inevitable result of moving to graphical user interfaces, where each program's pictorial output has to play nice with all the others'. Offering everyone the page of code necessary to get started (define this object, call this, do that) and having people obey it by rote is a distasteful option which runs counter to the point of the exercise.

I speak in Python terms because that's what I know, but I'm sure these concerns are more generally valid.

(This has been the biggest obstacle, really, in the efforts my friends and I have made to create physics simulation programs which students can use to complement their blackboard-and-chalk education experiences. It's much easier to get why we'd want to prove that an inverse-square gravity law gives conic-section orbits once you've seen the pixels orbiting each other in ellipses! The problem is, which language that's available to everybody requires the least wizardry in order to illuminate those pixels?)

The second issue, of course, is wrapped up in DB's words "pervasively available". I could plug a cartridge into my Atari 400 and get a BASIC interpreter the moment I switched on the machine. (I still can, by the way: my Atari 400 is in perfect working order.) I could load MS-DOS QBasic by typing a single command once the operating system had loaded. Turn computer on, wait one minute, and program. What's more, I could count on anyone else who owned a PC clone being able to do the same thing.

But you have to download Python to make it work on Windows. That's far more than should be necessary!

Now that all that text has been ranted. . . What are we going to do about it? (For it is the bringeist around here that we're supposed to look forward and not let ourselves get derailed by romantic nostalgia, yes?) Perhaps we should start a drive to keep those "try it yourself" code snippets in textbooks, to organize and update them, and to keep resources and relevant documentation centrally available online?

I know I wanna include programs like that in my next book. . . .

Naum said...

Having said all that, two issues arise when asking the question, "Why isn't Python (or Perl, etc.) the new BASIC?" Both have already been touched upon. First is a technical issue: graphics output is more difficult. I shudder to think at the TCL/Tk wizardry one has to chant before doing a simple thing like lighting up a pixel. . . This may be the inevitable result of moving to graphical user interfaces, where each program's pictorial output has to play nice with all the others'. Offering everyone the page of code necessary to get started (define this object, call this, do that) and having people obey it by rote is a distasteful option which runs counter to the point of the exercise.

This is more of a hardware problem, with the advent of super duper graphics cards. This, I will concede is not "universally available" anymore unless you're willing to dig...

Still, direct screen manpulation is possible with C or even I'm sure that one of the scripting languages has a F/OSS library that you can easily DL and then use...

But back then, all tinkered at that level... ...nowdays, an graphics library and API is employed (back to my point about how our desktops and laptops are more akin to mainframes of old than the PCs of 20+ years ago that were in many respects, glorified calculators...) - DirectX, OpenGL, GD, ImageMagick even Flash is used for this sort of pixel level generation (and all the F/OSS have libraries for accessing thse, some even built in...).

Blake Stacey said...

Addendum:

I am not so sure a widespread fluency in HTML, CSS, etc. counts as "the same thing" as young'uns getting a taste of BASIC. (To recall the language bandied about a few posts ago, are Web-related scripting languages "the real heir to BASIC"?) It seems to me that the basic tasks one does with HTML, Wiki markup et al. are qualitatively different from the things we crotchety old people cut our programming teeth upon. Moreover, I believe that those things we toyed with in the Elder Days (c. 1994) gave more insight into the essential ways computers operate, and thus taught lessons which remain valid after generations of technology have risen and decayed into obsolescence.

Dan Armak said...

Naum, you forget that many people don't have casual Internet access at home, certainly not broadband. This is especially true in the developing world. Downloading FOSS software is neither obvious nor trivial for them.

Today most of the people in the world don't have computer access of any kind. If (hopefully) this is reversed during the next few decades, then most of the next generation of programmers will be the first computer-using generation in their countries. It's important not to let people who might be interested in programming fall into the usage patterns we see today, ie. unawareness of how computers work.

Also, novice users who don't have an experienced family member to guide them can only stumble on FOSS and on programming in general more or less by accident. Even if they have BASIC code in their school textbook, they're unlikely to spend much time searching for a BASIC compiler if they're not sure what the word "compiler" means but remember the teacher saying this thing is optional, and know everyone else in the class is skipping it. Prominently bundling development tools lowers the barrier to entry and entices people to try programming for the crucial first few hours.

This is especially important in the case of younger, inexperienced children (and less computer-savvy adults). They're implicitly taught, by their parents and peers, that the computer is for playing games and browsing the web and chatting and maybe using MS Word. They're not just unaware of what programming is, they're mostly unaware that it exists. For all they know, computers are stamped at a computer factory production line. How can they go off searching for development tools when they don't even realize those tools ought to exist somewhere? Even if they hear about programming later in life, they've lost valuable time.

Also, from the standpoint of security, it's bad to encourage very inexperienced users to download and run random Windows programs. But it's hard to blame MS for not bundling the huge range of software that comes with a modern Linux distribution. And I don't see any other solution to the security issue that would work for novice users. Witness the furor over the new security warnings in Vista, and that's only coming from professional IT reviewers - the average home user would be seriously confused...

BillSeitz said...

By the way, the $100 laptop will have Python in it. So we win:)

mitch said...

I commented on the Salon article, then came here to see if you had read the letters, and was happy to find that you had. I was sad to find that you claim that the letters are missing the point, while doing a little of that yourself.

Clearly, you and many of the commenters here and on Salon are talking past each other a bit. The reason so many commenters have focused on BASIC is because that's the most bizarre and easy-to-comment-on part of the piece. You'll have more success by leaving BASIC as an aside or a footnote, and focusing on the "lingua franca" thing as you did in your comment here.

It's true that there is no lingua franca these days, but stop for a second and think about what the original "lingua franca" actually was: a common standard dictated largely by force. I don't deny the network effects you get from a single standard, but you have to balance those against the benefits you get from having the freedom of choice. With the current breadth and depth of programming language devlopment, the benefits of the new and different options outweigh, by far, any benefits you might get from a lingua franca.

The main reason programming language debates get so heated in computer circles is that everyone wants their language to be the lingua franca. The truth is, though, that despite years of strenuous effort, there still is no consensus, and the reasons for that are the speed of change and the enormous variety of problems. There is no one thing that works well in every context, or that will work well indefinitely, so there is no lingua franca. Any attempt to dictate one would be a cure worse than the disease, if successful (it would require some force), or the same as the current situation, if unsuccessful.

Why, exactly, is it so important to you that there be one language? You've mentioned two main things: availability and textbooks. The availability thing is a red herring; installing and trying out squeak or python or ruby is dead easy these days. Software has never been so easy to get.

I can see where you're coming from on the textbook thing, but programming can be included in the curriculum outside of the textbook. This is a much, much more achievable goal than the lingua franca thing. Also, a much more worthwhile goal.

This bit: "kids who sat down before older computers used to be encouraged to use them to COMPUTE" is true enough. A lingua franca isn't a prerequisite for encouraging kids to compute, though. It would be better to encourage kids to explore and evaluate the vast variety of tools out there, which is a skill of enormous importance going forward. The reliance on a single choice made by someone else is a weakness in YOUR education, and it would be better not to propagate that to your kids.

Kids who sit down at a computer today are encouraged to interact with other people in writing, with email, IM, blogs, etc. Incidentally (or not), two skills that many coders today glaringly lack are writing and people skills. In my opinion, a shift in emphasis from coding to communicating is more than welcome. There will always be people who gravitate to the coding and specialize in it. If they could communicate worth a damn it would be wonderful.

Naum said...

Today most of the people in the world don't have computer access of any kind. If (hopefully) this is reversed during the next few decades, then most of the next generation of programmers will be the first computer-using generation in their countries. It's important not to let people who might be interested in programming fall into the usage patterns we see today, ie. unawareness of how computers work.

Obviously, if one doesn't have access to a computer...

But computer access is growing and a lot greater than it was >10+ years ago...

Also, novice users who don't have an experienced family member to guide them can only stumble on FOSS and on programming in general more or less by accident. Even if they have BASIC code in their school textbook, they're unlikely to spend much time searching for a BASIC compiler if they're not sure what the word "compiler" means but remember the teacher saying this thing is optional, and know everyone else in the class is skipping it. Prominently bundling development tools lowers the barrier to entry and entices people to try programming for the crucial first few hours.

That BASIC programs are included in a modern textbook is an abomination.

Help and discovery is a google click away for even those totally surrounded by 0 computer knowledge. It might take longer, but one step at a time, there's an internet community and bundle of resources for any subject matter, including programming.

If a computer is affordable, internet access is available also, even if it's slow dial up based. I did not have broadband until end of 2001/2002 at my home, and ran Linux and F/OSS all on 28.8K modem. You're not going to play videos and listen to podcasts but you can still transact online on dialup.

If internet is totally unavailable, then the computer is returned to the status of handheld computer, typewriter and hobbyist tinkerer device...

...it's bad to encourage very inexperienced users to download and run random Windows programs. But it's hard to blame MS...

Ah, the folly of choosing to submit a monopolistic reign instead of opting for superior and more secure OS...

That being said, bottom line is the vast majority of users do not want to "get under the hood". Any suggestion that they undertake such a challenge is resisted with strong force, and their wish is to simply point & click their way to completion without having to give a second thought on how something works or constructing their own recipe...

...I am not so sure a widespread fluency in HTML, CSS, etc. counts as "the same thing"...

In conjunction with Javascript that comes standard with any browser made in the last 8+ years, it is the equivalent of the same BASIC programs and other initial programming exercises. Simpler in one aspect, more complex in another, in that multiple pieces are used together...

Dan Armak said...

Re: Naum:

Obviously, if one doesn't have access to a computer...

I don't get your point here. I was talking about what happens when these people get their first computers - we'll want the software on those computers to suggest the possibility of programming and make it easy out of the box.

That BASIC programs are included in a modern textbook is an abomination.
It's bad that it's BASIC, but it's far better than no sample programs at all.

Help and discovery is a google click away for even those totally surrounded by 0 computer knowledge. It might take longer, but one step at a time, there's an internet community and bundle of resources for any subject matter, including programming.

By that reasoning, we don't need to teach children anything at all. Once they can use a mouse and read onscreen we'll just point them at Google and Wikipedia and come back in ten or fifteen years.

If the average person could learn programming himself, without it even being suggested to him, then by much the same argument, why shouldn't he learn math himself? And physics, and history, and everything else he ever needs to learn?

This is exactly what Brin decries in his followup: that only a few 'alphas' who work hard at it can learn programming all by themselves. And it's wrong to require them to do so. Having many people learn to program is a good thing - not just for them but for us too and for society in general - and so we should support and encourage them.

If a computer is affordable, internet access is available also, even if it's slow dial up based.

Even if true, that's not the issue here. A determined computer-owner can always get his hands on a copy of Python. The problem is the barrier to entry - the need to know what you're looking for and to spend a little time and money looking for it will deter 9 people out of 10.

Remember, these people aren't thinking "I need a Python interpreter. Let's dialup and google 'python'". They're thinking: "my statistics textbook says 'Python code'. Well, it really is in code, I can't read any of it! It says here 'double click on the PYTHON icon on your desktop' and I don't have one... Oh, who cares, I've solved the homework exercise anyway."

Actually, in the case of textbooks, instructions about installing python could be included. But textbooks that include code aren't common; I know I've never had such a one.

I did not have broadband until end of 2001/2002 at my home, and ran Linux and F/OSS all on 28.8K modem.

Sure, I used to have dialup too. It works great if you're such a tech savvy user that you run Linux at home. The people we're talking about don't even know what the word OS means.

Ah, the folly of choosing to submit a monopolistic reign instead of opting for superior and more secure OS...

If youre accusing me of all people of "submitting to a monopolistic reign" you obviously haven't read my comments in full.

That being said, bottom line is the vast majority of users do not want to "get under the hood".

That's the technophobic meme propagated by MS and the pre-Internet mainstream media, among others. I'm not sure how much of it is real and how much mindwash.

Anyway, OSX and modern desktop-targeted Linux distributions demonstrate that it's possible to be easy to use and at the same time let users who care get under the hood as deep as they like.

Woozle said...

Here's what I get.

Brin wants language which is:

* (Ideally) Available pre-installed on all popular OSs
* BASIC-like in certain ways:
** must have an "interactive" mode, where you type a line and the computer... computes
** must have simple graphics ability readily available (where "readily" can be defined as "you can plot a pixel in a single line of code, where lines which include external libraries count as additional lines of code")

The "availability" issue largely comes down to two things: strategy decisions at the OS company (Microsoft and Apple covering the vast majority of the market there), and availability of a suitable language not hampered by licensing restrictions.

(Aside: I tend to agree with what Dan Arnak said about Microsoft. I'll be happy to compile more evidence, Dr. Brin, if you'd like to apply some CITOKATE to Dan's and my conclusions. (-; The issue of whether or not it is a conspiracy, though, is a bit off-topic, so I'll drop that angle for now.)

In any case, I have no immediate suggestions for how to influence giant behemoth software companies, so must move on.

As far as the essential design elements of the required language, with the programming tools readily available today, it is almost trivially easy for a reasonably experienced programmer to create such a language, write an interpreter for it, and make it easily and freely available (by internet for those with connections, and by CD or floppy for those without).

It could even be nominally compatible with the most common BASIC forms (let's call this "textbook-example-compatible") while still being usable for grander things. Visual Basic (I hear the groans; let me finish my sentence), despite its flaws, is widely used for serious applications and is mostly compatible with generic BASIC; it mainly lacks the simplicity of running the program and (bam) you're THERE. Pretty much all the newer, IDE-style languages have a start-up process which goes something like: "File -> Create New Project -> (select template) -> check project properties -> add a form -> put controls on it -> attach code to the controls -> run the program -> do something with a control -> NOW something happens". Rather discouraging.

When I was "that age" (circa 1975), I had the great fortune to have access to a Tektronix graphics workstation and pen-plotter. The workstation used BASIC and nothing else. I learned to use simple trig expressions to plot some reaallly COOOL designs on paper, which I still have somewhere. Several years later, as computer technology advanced, it occurred to me that I would be unable to duplicate those designs with any hardware or software currently available -- mainly because the software to easily plot lines on a piece of paper based on arbitrary algorithms is no longer on any computer to which I have access.

So if I wanted to show someone -- say, a kid that age -- how I learned to program, I can't do it. (I also can't make any more pretty designs without a big up-front investment of time.)

So... yeah. I'd love to see something BASIC-like for today's computers. It wouldn't be hard for one person to create or distribute; it's just a matter of matching time-resources with the appropriate skills. If I win the lottery, it will be high on my list of projects.

Dan Armak said...

Re: Woozle: let's take Python as an example, because I know it pretty well and also believe that its clean syntax is well suited to teaching a 1st language.

It has an interactive prompt. It's great for implementing algorithms that are described in terms of structured programming.

It can also draw stuff on screen. The GUI lib bundled with python is unfortunately TK-based - wxPython or PyQt would be better - but if you're just going to draw dots and lines rather than widgets, that doesn't really matter.

I could write a trivial wrapper that would include the necessary boilerplate to set up a window and provide a simple API to draw geometric constructs. It could be every bit as simple as BASIC if you like. I don't need a lottery prize either - if anyone really wants this to use for introducing people to programming, I'll write it for you. So would plenty of other people, I expect - it shouldn't take more than a few hours. Maybe there's one somewhere already.

Of course, if you're counting on people having access to this boilerplate code of mine (e.g. via the Internet), you can also count on their having any amount of extra libraries and tools. The graphics code could be based on something better suited than TK. And people could use things like e.g. a graphical stepping debugger, which is great for explaining what a piece of code does.

So my point is that you don't need to write a new langauge. Languages already exist that are quite good enough. Any changes that might be needed are completely trivial. The only problem is getting these languages to the end user.

Naum said...

By that reasoning, we don't need to teach children anything at all. Once they can use a mouse and read onscreen we'll just point them at Google and Wikipedia and come back in ten or fifteen years.

If the average person could learn programming himself, without it even being suggested to him, then by much the same argument, why shouldn't he learn math himself? And physics, and history, and everything else he ever needs to learn?

This is exactly what Brin decries in his followup: that only a few 'alphas' who work hard at it can learn programming all by themselves. And it's wrong to require them to do so. Having many people learn to program is a good thing - not just for them but for us too and for society in general - and so we should support and encourage them.


Programming is different than math, physics, etc... ...if you examine the empirical research and studies (there are a number of early ones done that are detailed in JCR Licklider and the Dream Revolution and Code Complete (a MS book!) detail others that show programming skill is really a special knack that some people just naturally gravitate to, and show an inkling for. Early on, the government tried a number of theories - that chess players would make great programmers, that math wizards would make great programmers, etc... ...and after great effort, they concluded that the talent was one of those things that its hard to quantify from other variables, and that some people just have a knack for it.

That doesn't mean it's limited to a chosen bunch, but that it's just a truth that some folks are inclined that way. All of the programmer studies I've seen to date reinforce these findings.

But you are correct, that to get to the next level requires more than self-study. However, when one looks at successful programmers, invariably, they turn out to be, on the whole, deficient in formal training. While I have a degree in Computer Science and Mathematics, the best programmers I've worked with are typically college dropouts, self taught, or anthropology majors or no college at all.

I'm speaking of people that have written a lot of code -- even Gates and Jobs were college dropouts. Look at all the interesting software being written today -- the bulk of it is not being authored by PhDs, more likely it's the story of MySpace creator, a non-professional programmer...

The best way to become a good programmer is to:

1. Write code
2. Read and understand OPC (other peoples code)

Everything else is secondary to those two things.

That's the technophobic meme propagated by MS and the pre-Internet mainstream media, among others. I'm not sure how much of it is real and how much mindwash.

How many people want to change thier own oil?

Many people dont want to program, yet use Linux and participate in making better F/OSS. One thing is true -- there is a need for many more testers and those willing to do documentation...

For a few years, I served as a traveling service partner, training corporate IT staff and programming teams on programming and scripting stuff. I noted that even amongst the tech crowd, there is a minority that really are enamored with the power of programming computing machines and the majority (even within IT departments) are content to limit their experience and work to the realm of the "known now"...

OTOH, some gravitate to it, no matter their profession or industry - be it musician, housewife, etc...

Anyway, OSX and modern desktop-targeted Linux distributions demonstrate that it's possible to be easy to use and at the same time let users who care get under the hood as deep as they like.

/agree for sure on that account...

Woozle said...

I am now collecting information towards eventual implementation here.

The Python idea strikes me as possibly workable, though I would think it would need to be somehow packaged in such a way that the wrapper would be included by default. Some simple documentation also seems necessary – a good selection of example code, links to references for Python and the graphics library (ultimately rewritten as a separate piece specifically for this configuration).

Of course, this doesn't solve the problem of re-establishing a beginning-programming lingua franca... but I'm not sure there is any sytematic way to do that. Python certainly has its fans, so it at least has a toehold.

Am I charging off in the wrong direction on this? I just hate to see a good idea not gaining any traction when a partial (at least) solution is within reach. I'll probably end up having to drop the ball at some point due to lack of time, but I can do this much.

Any other ideas (besides Python+wrapper)?

Dan Armak said...

Woozle, see my comment on Brin's next blog post. Linking to specific comments doesn't seem to work - it's the one starting with "even if Microsoft were to help you".

The relevant point is that we don't need a lingua franca. A dedicated edu-oriented environment is nice, but not very useful if peopel don't know about it.

So you need to either 1) make all the textbook authors link to your Python -based env and include Python code samples or 2) somehow let our hypothetical young novice user find it himself, assuming a reasonable Internet link, or both. I think these are the issues we need to plan out before actually doing anything on the Python side.

We also need to find & review any existing edu-related solutions (and not just with Python).

Jonathan said...

I see my comments were also misinterpreted.

I mourn the loss of an "introductory" computer language as much as Dr Brin himself. The essential difference between good ol', bad ol' BASIC and the other offerings we've seen here is this: they are compiled. BASIC was interpreted.

Essentially, this meant that if your BASIC program didn't work, you could go make a change, then instantly run the program again and see if that helped. No need to wait for the compiler, no need to watch for its errors (I also used to code in COBOL; my record was 143 compiler errors resulting from forgetting one period). Just run the program, and see what happens.

Is there such an item today?

And Naum, the point you're missing is that if the kids don't even know to look for something, what's going to prompt them to do so?

We shouldn't have to rely on the next generation of obsessive autistics to create the next generation of software - and even worse is if we do as Microsoft has done, and rely on the next generation of beancounters...

Bryce Leo said...

I hate to do this but you seem really emphatic and serious about there not being any good teaching langugaes out there for kids anymore. Well, there actually is one (it's .net so it's Windows only) and I think it's what you're looking for
http://www.kidsprogramminglanguage.com
This language has been so popular in the year that it's been out and not just with kids that they've now created a "grown-up" version called Phrogram. I strongly suggest that if you're interested in getting younger people programming that you check out and endorse this language! I hope this helps you out, and it is fantastic to hear that your son is doing well learning C++ on his own!

Naum said...

I mourn the loss of an "introductory" computer language as much as Dr Brin himself. The essential difference between good ol', bad ol' BASIC and the other offerings we've seen here is this: they are compiled. BASIC was interpreted.

Essentially, this meant that if your BASIC program didn't work, you could go make a change, then instantly run the program again and see if that helped. No need to wait for the compiler, no need to watch for its errors (I also used to code in COBOL; my record was 143 compiler errors resulting from forgetting one period). Just run the program, and see what happens.

Is there such an item today?


Perl, python, Ruby, Javascript etc... are all interpreted and all except Javasrcipt run at the same and/or lower level than Basic... ...they are just as close to the machine, and have the added benefit of not trapping the maturing programming into a faulty foundation to advance to deeper patterns.

...the point you're missing is that if the kids don't even know to look for something, what's going to prompt them to do so?

The prompting comes from the desire to build things, to understand the magic that makes it possible for any set of eyes and fingers across the globe to stumble across your creation, to design and implement something like an example that they see on their web browser or to craft a microcosm working model of a game they've played ... ...I've witnessed it frequently, and coached many who've inquired where to find resources, how to learn, and most all quench the thirst. Some are satisfied with the brief foray and gain an appreciation, for others it's the first step in a sequence of stages that sees them grow into a programmer/devloper...

We shouldn't have to rely on the next generation of obsessive autistics to create the next generation of software ...

But we're not. As we debate this, millions of kids are building web pages, downloading Linux and running their own server, writing javascript, building web sites, tinkering with F/OSS that lets ANYBODY HACK AT THE CODE AND BUILD A BETTER MOUSETRAP, building their own PVR, or any other number of projects you see featured in Make magazine.

It's not just google and yahoo that are bursting in the golden age of programming. All over the world, young minds are busy building new software, contributing to a growing F/OSS movement, forging their way ahead, building atop the creations that preceded them.

In the best programming textbook ever written, the C Programming Language by Kernighan & Ritchie, one of the first exercises is to figure out (in that day, that meant finding the sysadmin and asking for help, before one could google or visit a well stocked bookstore that devotes entire aisles to the subject of computer programming...)... ...how to enter the simple and ubiquitous helloworld.c program. That the first step on a journey as such take some personal initiative, motivated by the whetting of curiosity.

William Moates said...

David, The quick answer to the question, "What's the easiest way to play with those 'Try it in BASIC' code snippets?" is to get a TI-83 from Texas Instruments.

Seven years ago, when I was working towards a teaching certificate, I was preparing to teach high-school math in NC, and we had to learn how to use and program a TI-82. That thing has BASIC on it, and more RAM than the Atari 800 I played with in 1982 (when I was your kid's age). In the public schools of 2000, every math teacher had dozens of TI-82s, and (I think) it was a standard tool in the NC classroom, sanctioned by the state. I believe that some national k-12 math teaching organization got together and decided that BASIC should be the programming language used in textbooks, and that students can buy graphing calculators to program in BASIC. You can get a graphing calculator for $50-$100 at an office supply store (or elsewhere), and follow along with the textbook authors.

If you just want to make pretty pictures using less than ten lines of code, you can program in Logo, with its "turtle graphics".

One of the keys to getting kids to learn technology at a a deeper level is interactivity. With BASIC, you can mess with the variables and see what happens, so it's interactive. With old cars (before environmental regulations and on-board computers complicated their design), you had quite simple machines to mess with, so a lot of teens in the 50's could soup up their cars. (You still have folks doing that these days--think "The Fast and the Furious".) As you point out, if you don't get to the interactivity part of the lesson until Step 23, then most kids will have tuned out long before then.

Another important aspect is flexibility. If you can only do a few things with it, why play with it? A hammer is a great tool because of all the things you can build with it. A Dremel is such a specialized tool that hardly anyone will want to play with it. Legos have always been great for flexibility and interactivity. I loved them as a kid, and kept playing with them in my early teens, thanks to the Technics series--which gave you gears and motors. Nowadays, Lego has MindStorms, which lets you build and program your own robots. I wish they had that in the Commodore 64 era--I would have glommed onto it gleefully.

If you want your kid to have the opportunity to tinker, there are always toys out there--it just depends which niche you're talking about. And there are also people out there who see the need, and try to fill it. And they probably have a website up and running right now.

Alan Sargent said...

David Brin wrote:
Only one institution is to blame for this situation. And the same one could fix it, overnight. If Microsoft included a simple (updated) version of Basic... or Python ...

OK. Except it's not going to happen "overnight". Even if Bill wanted to pack an entry-level language, he'd go through what you just saw, a huge debate that would make no one happy and probably end up with something like .NET with Clippy help.

Your personal solution, ebay an old computer, is obviously not scaleable.

I really can't understand why disparage the many free solutions available others have mentioned, including many that could run your antique Basic routines as-is. You say downloading and installing an emulator is too hard. How about instead of imploring Bill Gates to solve your problem, you, with your platoform at Salon, could have asked for help to make a bootable CD that would come up with a BASIC interpreter, to sell at cost, give away, or make available as an ISO for download. Talk to the teachers, to the textbook publisher, get them to publicise it, if not include in the book.

You could have solved the problem, had it out in the real world in every school interested, by Xmas.

Stu Dent said...

Planet Gnome is a blog for adults that seems as if it's designed to hook precocious kids. A paradox. You should visit Planet Gnome.

Anonymous said...

There are some live CDs that you can just boot and get a language environment, like the FreeDUC CD that has Squeak Smalltalk or the PyroLiveCD that has Python including robotics libraries. You can even try ruby in your web browser.

Anonymous said...

Don Box wrote about languages for kids last year and sparked discussion on his blog and the programming languages blog, Lambda the Ultimate. You can find start at http://lambda-the-ultimate.org/node/543 to find these discussions. He eventually came down to Scheme or Logo as the best kids' language.

I updated the Wiki at http://htyp.org/languages_for_learning_programming with a number of references to learning languages and environments, including Alice, Logo, Python, Ruby, Scheme, and Squeak Smalltalk.

Lorraine said...

I hope readers (if any) can forgive me for commenting on a months-old blog entry. I am a vagrant netizen, which means that participation in online discussion groups, from my perspective, is as you would imagine meatspace to be experienced by a person with a slow brain, to whom the rest of the world must appear to be moving in fast-forward. Thank you, Dan Armak, for pointing out the existence of the digital divide.

The difference, as I remember it, between running vintage BASIC on vintage equipment, and running ANY language on contemporary equipment, is in the PEEK and POKE statements. In the 8-bit era these accessed harware registers, and anything else in the (typically 64kB) address space, in absolute terms. My first owner-occupied computing environment was Atari's amazingly cheap 6502-based product line, something it seems I share with several other respondents. After playing with Atari BASIC, I eventually acquired their PILOT and assembler, which included a disassembler. The disassembler taught me things about interrupts, operating system theory, co-processor instruction sets, in short, it provided me with a rough mental sketch (no doubt a detailed one in more talented tinkerers) of the computing system, hardware and software, developed from first principles. It says in Ecclesiastes there's no end to the writing of books. The same could be said of programming languages. The current generation of languages no doubt includes multitudes that are youth-friendly, beginner-friendly, more-logical-than-basic, occasionaly even graphics-primitive-friendly, but expository, it seems, belongs to a more innocent time.

PILOT taught me how simple a language specification can be. I wrote (i.e. initiated) the Wikipedia article on said language; go there and learn PILOT right now if you wish. Sure, small subsets of modern languages have pedagogical potential, but this essentially rules out understanding OPC, right? (Thankx for the nomenclature, Naum) Dan Armak points out that OSX and Linux let users who care get under the hood as deep as they like. I don't doubt this, but I myself haven't gotten very deep into Linux so far. The sheer size and complexity of the system leaves me clueless as to where to start. This, of course, is where mentoring comes in. But with the virtually undocumented Atari system I had no mentors save Bill Wilkerson's book Mapping the Atari. For the curious types, reverse engineering is less boring than documentation, but only the alphas(?) stand to reverse engineer today's systems without both documentation and mentoring.

Our host is clearly the most visible transparency activist of our time. Transparency is clearly at the core of the technology (in general) pedagogy question. It is ironic that my 100% proprietary Atari hardware and software (without even the dignity of an industry-standard cereal port) was far more transparent concerning its theory of operation than virtually any modern hardware running Linux. Why is this? I venture that there is truth in the credo of the various progressive ideologies that progress inevitably occurs with the passage of time. I propose that the dark force which balances this monotonic trend is an also irrevocably monotonic decrease in (i.e. loss of) "innocence" with time.

My second computer was an Amiga, which taught me the folly of "implementing" "multi-tasking" without first implementing memory protection, thus illustrating the value of Dr. Brin's "pants up" school of transparency.

In the spirit of the electric guitar industry, perhaps there can be "re-issues" of vintage models of computer, perhaps miniaturized for energy efficiency, and sell-phone-era portability. It wouldn't be without precedent. I recall during the "palmtop era" in the mid nineties seeing pocket gadgets hardwired with MS-DOS 5.0 and the concurrent version of Lotus 1-2-3, and other applications. Intended of course as a work tool. An Atari-800-clone palmtop would be a nice stocking stuffer for kids (of any age) in your family you would like to introduce to the joys of hacking. The problem, as I see it, isn't the range of languages available today. It's the hardware.