rc3.org

Strong opinions, weakly held

The golden age for wannabe programmers

David Brin wrote an article for Salon about the absence of BASIC on modern computers that is wrong on so many levels that it makes my brain hurt. Here’s the argument:

Only, 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.

My counter argument is that this is the golden age for people who want to create things with their computers. In fact, it’s the golden age for people who want to create software for their computers. First of all, every modern computer has an incredibly robust programming environment installed, and the best thing about it is that it’s incredibly easy to dabble with. It’s called a Web browser. With it you can learn HTML, CSS, and even how to program with JavaScript. There are millions of free pages of documentation online and billions of free examples that you can check out. So the idea that curious people can’t learn how to program with what’s on their computer right now is false. They can. The best thing about it is you can type literally anything into your text editor, load it in your Web browser, and the browser will try to do something useful with it. The barrier to entry here is nonexistent.

Unfortunately, writing code for your Web browser doesn’t satisfy Brin (although he doesn’t even consider Web programming in the article), because it’s not close enough to the machine, or not “BASIC” enough, see?

Those textbook exercises were easy, effective, universal, pedagogically interesting — and nothing even remotely like them can be done with any language other than BASIC. Typing in a simple algorithm yourself, seeing exactly how the computer calculates and iterates in a manner you could duplicate with pencil and paper — say, running an experiment in coin flipping, or making a dot change its position on a screen, propelled by math and logic, and only by math and logic: All of this is priceless. As it was priceless 20 years ago. Only 20 years ago, it was physically possible for millions of kids to do it. Today it is not.

Wrong again. I can write any of the examples he lists in JavaScript, or just about any other programming language. Brin betrays his ignorance here badly. It’s all about loops, and conditional statements, and simple mathematical statements, and they’re the building blocks of every language. This paragraph is perhaps the ultimate exhibition of Brin’s ignorance:

The “scripting” languages that serve as entry-level tools for today’s aspiring programmers — like Perl and Python — don’t make this experience accessible to students in the same way. BASIC was close enough to the algorithm that you could actually follow the reasoning of the machine as it made choices and followed logical pathways. Repeating this point for emphasis: You could even do it all yourself, following along on paper, for a few iterations, verifying that the dot on the screen was moving by the sheer power of mathematics, alone. Wow! (Indeed, I would love to sit with my son and write “Pong” from scratch. The rule set — the math — is so simple. And he would never see the world the same, no matter how many higher-level languages he then moves on to.)

This is just completely wrong. Yes, there are tons of higher level libraries and abstractions that are part of modern scripting languages, but take a look at an introductory text for any of these languages, and you’ll see simple, short programs exactly like the ones he’s talking about in BASIC. Indeed, the thing that makes programming books work is that you can understand how programs work when written on paper, and then see how they work when you run them on your computer. That’s how you learn.

Languages like Ruby and Python even provide an interface exactly like the one on the old Commodore 64 where you can simply type in statements and see what they do, line by line. Ruby’s is called irb and Python has its interactive mode. These are ideal environments for experimentation and learning.

Given that today’s tools provide everything that BASIC did (and they do), let’s look at the big picture. Today, with Web access, you can find tons of example code for whatever language you prefer (even BASIC). When I was learning to program, we were basically captives of the computer magazine industry. You can also easily share your programs online with other people who might find them useful, so there’s no need to toil in solitude. There are plenty of outlets online where you can get help if you’re stuck. And best of all, there are lots more reasons why you might want to program.

Brin decries the fact that people are being taught to be computer “consumers” rather than “builders” but the hallmark of the current era is that many applications that you consume also enable you to build. You could be writing on LiveJournal, or posting photos to Flickr, or uploading videos to YouTube. You can sign up for a Ning account and start building your own publicly available Web applications without paying a dime. World of Warcraft has over five million subscribers and it contains a built in development environment that uses a real scripting language called Lua. Yes, you can consume, but you are also able to build, and it’s easy to get started.

It would be better if more people knew how computers worked and programming were a skill that’s dispersed more widely throughout society, but it’s not the tools that are at fault here. The blame lies elsewhere.

8 Comments

  1. Rafe,

    I agree 100% with everything you write, with the possible exception of part of the last paragraph: “It would be better if more people knew how computers worked…”

    I learned to program exactly as you describe: looking at the source of web pages that I visit-> writing my own HTML -> Javascript and Perl -> multiple other languages. Along the way, I learned programming principles that allow me to pick up any new language fairly quickly.

    But I don’t think it’s necessary any longer to ‘know how computers work’ like it was back in the BASIC days. The advances in different types of programming paradigms (procedural, OO, etc.) have continued to make the computer work more like people think, rather than the opposite, which was true back in the BASIC days.

    The article you critique is simple nostalgia for Brin’s youth.

  2. I disagree with you and agree with Brin instead. I still don’t think he really made his point properly, though. There needs to be a simple and universal programming environment for children. HTML is universal but it’s limited to page mark-up and requires some non-intuitive syntax, e.g. means what? A traditional version of BASIC isn’t as easy as other learning languages so I’d probably want to see either a new improved BASIC or else Logo or something (I’ve never used Logo btw).

    We teach children to write block letters but we don’t expect them to continue using them, we then advance to lower-case, cursive, etc.

  3. sheesh, I tried to include pointy-bracket ‘a’ as an example of non-intuitive coding in HTML and the submission form treated it as live HTML.

  4. even if you have just a web browser installed with a java plugin, you can find many BASIC emulators online that let you “learn the magic” the old fashioned way. that’s the great thing about the web, you don’t need it to be installed on your computer to use it, you can just browse to it.

  5. Thanks for writing this. I circulated the article because I thought it was an interesting and nostalgic lament, but as I said when I furled it, I think Brin is completely wrong.

    You’ve articulated well why he’s wrong; now I don’t need to spend any cycles thinking about it anymore myself. 😉

  6. Strikes me that Brin has entered the part of middle age that consists of “these kdis today don’t know doo-doo. Back in my day … “

    He’s projecting his own ignorance. HE doesn’t know how web browsers work and has never clicked “view source” to find out, so HE assumes that no one else does. He doesn’t realize that there are am illion ways to get the building blocks of programming into one’s head; like you say, every language has conditionals, loops, mathematical statements, and some nowdays have a lot more. He’s just nostalgic for the way he learned it and is confusing that with some natural law someplace woven into the universe.

    It reminds me in a way of people who bemoan that kids today don’t learn Latin or Greek — NONE of whom are fluent or native in any language but their own. It escapse them that fully 100% of EVERYTHING you will get from Latin you can get from studying any Romance language plus dabbling in another. To people liek this, people whose attitudes have ossified with impending middle age, there is ONE path to knowledge, and it’s the path they took. It’s an incredibly self-centered way of looking at the world.

  7. Hi Rafe,

    Unfortunately, your argument succeeding in convincing me even more fully that Brin is right. It leads me to believe that you most likely have never used the command-line BASIC interpreters available on the TRS-80, Apple II, Commodore PET/Vic-20/64, TI 99-4/A, Wang, Amstrad, Timex/Sinclair, or any of the other many personal computers of the time.

    You talk about how a child — a child! — could supposedly get going using a text editor, a web browser, and all that. But look at the barriers to entry you’ve thrown up. You know how computers work already, and so these things are transparent to you. But this child would have to know how to launch a text editor, how to write a web page, how to save it to a file, (indeed, what a file is, and how to navigate to it), how to launch the browser, how to load the file, and how to deal with the inevitable bugs.

    Have you actually met a ten-year-old child, I wonder? Do you have a reason to hate children?

    Contrast this with the experience of using an interactive base: turn on the computer. You see something like READY>. You are in a REPL (read-eval-print loop). You type 10 PRINT “HELLO” . The computer says READY>. You type 20 GOTO 10. The computer says READY>. You type RUN. Your first program is executing. You’ve pressed perhaps 30 keys. To stop it, you press a key labeled “BREAK.” To see your program you type LIST .

    Notice all the things you don’t need to know:

    • how to launch a program, or indeed, what a program is
    • how to manipulate windows
    • how to save files, or indeed, what a file is
    • how to type very well (for example, you don’t need to be good at producing most of the punctuation characters, although you have to be able to produce quotation marks, and you needn’t distinguish between capital and lowercase letters on systems that typically didn’t offer lowercase).

    Now, I’ve actually taught Scheme programming on a Windows sytem using to elementary school students using PLT Scheme, a lovely IDE, and we made some nice progress there, quickly learning recursion and turtle graphics, but the accurate typing was a real problem. There are good tools for learning to program that a child can learn to deal with. In fact I don’t recomend BASIC as a first language because it doesn’t teach kids to use good abstractions: it doesn’t even encourage proper structured programming, much less functional or object-oriented programming.

    But the idea that learning to code as a novice child by using the cobbled-together mess of GUI, text editor, browser, and the gack that constitutes HTML and embedded JavaScript or whatever is just as easy, effective, appropriate, etc. is “not even wrong.”

  8. I like the way you think, and agree with you – but I a my coworkers have also come up with a freeware languages which we think are answers to David’s essay, and which I certainly hope you’ll take a look at: first KPL and now Phrogram. I like Ruby and Python, too – but there’s more fun programming to be done than can be done in their interactive mode. I also wanted to let you know that David Brin replied to my own blog about his article – I linked it as the URL on my name, if you’re interested. He still may not be convincing to you – but consider this: how easy is it for all kids everywhere to find, start using, and have fun with the technologies you describe? That’s really how he boils his point down – that there IS no easy way which is only an obvious mouse click away.

Leave a Reply

Your email address will not be published.

*

© 2024 rc3.org

Theme by Anders NorenUp ↑