top | item 930752

Why kids don't program

94 points| johnaspden | 16 years ago |johnlawrenceaspden.blogspot.com | reply

89 comments

order
[+] zupatol|16 years ago|reply
For me it was exactly the opposite. I started learning programming at 13 reading the zx spectrum manual chapter after chapter until I came to sin and cos which I did not know. My parents hadn't studied, so they could not tell me. Instead of just skipping that chapter, I gave up programming. Much later I studied economics. Working as an economist I discovered the fun of programming with visual basic, and then decided to become a programmer.

If in 1983 I could have googled sin and cos or read about it in wikipedia, I would have wasted much less time.

[+] johnaspden|16 years ago|reply
That makes me feel really sad. My epiphany was your iron curtain coming down.

I can see how. In fact I had the same reaction initially (and my parents are graduates, but they don't know the first thing about maths, so they were no help to me either).

I have no idea why I wrote the program to plot a circle that made it obvious what sin and cos were.

In fact I think I might have misremembered my own story. I had a ZX81 first, and I don't think that had a circle function, so it may be that the ZX81 manual explained how you could use SIN and COS to do that.

But I think we can agree that google and wikipedia are wonderful things. The upcoming generations of programmers and mathematicians are going to be Gods. How could they not be with a library like that!

[+] psranga|16 years ago|reply
And just fwiw, while I'm sorry to hear about your experience. I totally agree with the original article.

I found out about SIN/COS a while before I really understood what they were. :) I treated them as magic keywords and used to just plug in weird functions to see what turned out (sin(x)+cos(x), sin(cos(x)) etc).

Sometimes we take things like portability and platform-independence so far that we end up complicating things. As an example, with Turbo Pascal and DOS, I could just treat the video buffer as an array and write to it. Under Linux (even in the old days), I wasn't able to figure out how to access the console display as a array. The "right way" was to wrestle with Curses. I declined the invitation and stuck to network/command line programs. :)

[+] swannodette|16 years ago|reply
While I understand that everyone needs help, I do think this also highlights a not uncommon lack of drive to go figure it out yourself.

Among computer programmers this behavior is particularly common. I have a hunch that it's because smart people (programmers) are of often afraid of "starting over." And honestly I consider this the locus of pointless debates about programming languages, text editors, frameworks, et al.

To be like a kid again - and feel out of your comfort zone is the essence of self education. Children are little more fearless in this regard. If they are not, they should be reprimanded. To see this behavior in adults is lamentable (though understandable considering our nation's pathetic public education system).

I also remember not knowing what sin & cos were - but I also realized that they didn't have that much to do with programming in general. There was plenty of stuff left to learn.

[+] TrevorBramble|16 years ago|reply
I took a somewhat similar route. My math education after grade school was poor. I had disinterested teachers with the exception of one, under whom I advanced quickly and almost enabled me to catch up with my peers, however under the next math instructor and those that followed I again struggled and barely scraped by, often by repeating semesters.

Without the math requisites, I was only able to take introductory programming courses in High School. Those teachers recognized my interest and feed me more advanced material while I was with them, but when I had taken the only classes available without those math prerequisites, we parted ways.

After graduating H.S. I took to writing excessively intricate batch scripts on my family's XT, and later while working on a help desk I checked out this new "HTML" and "JavaScript" stuff by way of WebMonkey tutorials and free hosting on a new service called GeoCities.

Years later, with ASP/VBscript, PHP, and bash experience all from after-hours activities I transitions from systems support and administration to programming as my career, after which my experience and expertise has mushroomed.

I couldn't have come all this way without the resources of the Web to back me up.

[+] Kirby|16 years ago|reply
In reality, I'd wager there's a _lot lot_ more kids programming today than 30 years ago. How many people had a computing device at home back then?

This anecdote makes the point that a very specific kind of thinking was better suited by the tools of the late 70s, and maybe - I've never been much inclined towards it, so I dunno.

And what we consider 'programming' is blurrier than it used to be. Is HTML programming? What if you use a fancy editor like dreamweaver? Only when it becomes dynamic? Does CSS count? A lot of youngsters, when they aren't getting off my lawn, have done web stuff, and the fact that it's a gradual shift from being a user to being a programmer probably makes it even easier.

I find the whole premise of this blog post flawed. (Great Scott! Someone disagrees with someone else on the Internet!)

[+] ja2ke|16 years ago|reply
If you boot up an Apple II without a disk in the drive (or something incredibly simple like that), it drops into AppleSoft Basic. That's how I learned that one could program a computer. For sample code I could turn to a number of magazines about my computer, or the manual that came with it. No questions or outside research dependent on anyone else (including the Internet) were required. This was when I was of single-digit age. The barrier to entry was tiny (type "10 print hello world" at the command prompt). Nothing like that exists for a curious child at this point unless their parents take the initiative, or the child waits until they're older.
[+] swannodette|16 years ago|reply
And I disagree with you here. Writing declarative HTML and writing a simple interactive computer game are two activities that could not be more different.

Like it or not, the act of programming has become much more difficult than it once was. 1988 I could reboot my Apple IIgs, hold down a couple of keys, and I could start writing a BASIC program immediately.

[+] srn|16 years ago|reply
Agreed on the numbers.

Almost every web browser on the planet can run javascript, independent of operating system or underlying hardware. I don't think you can get more accessible than that

[+] yummyfajitas|16 years ago|reply
It's actually fairly easy to do what he wants today.

    ipython -pylab 

    [...boilerplate...]

    In [1]: n = arange(255)

    In [2]: plot(n, 88+80*sin(n*pi/128))
http://imgur.com/oSd62.png

As for the "imaginary diffusion equation" (I assume he means the Schrodinger equation), here is a simple program which solves it on the torus:

    from pylab import *
    from numpy.fft import *

    def freeSchrodingerSolver(input, dx, dt):
        np = input.shape[0]
        k = arange(np)*2*pi/dx   #Coordinate system in k-space
        k[np/2:] -= np*2*pi/dx   #FFT puts negative frequencies
                                 #on right side of array
        return ifft(exp(complex(0,-dt)*(k**2)/2)*fft(input)) / np
I really doubt it was easier to do that on a ZX Spectrum.
[+] gizmo|16 years ago|reply
I disagree, it was much easier back then.

In my case: I started on basic in dos 5 or dos 6 when I was 10 or so, and every function I had to my disposal was listed in the help file. Alphabetically and by sorted by category. Sooner or later you find the SETPIXEL function, then discover screen 13, then discover how to draw lines and so on. You can discover that "one more thing" pretty easily, and at no point can you get stuck because dependencies are missing or you have the wrong version of libgd. Basic was installed on the family PC, and I had gorillas and snake as example programs to study. Many people I know started in a similar way.

Compare this with python today. First you have to download and install it. You don't just discover it by accident. Then you have to learn the whole edit program, save program, run in python steps. BASIC had a primitive IDE, Python doesn't. Then you have to understand packages and package management, learn how to install pylab, and so on. Python also isn't a very forgiving language.

Programming sound on BASIC was trivial too. The moment you discover SOUND and PLAY you can make primitive melodies. Want to delay? Add a few SLEEPs in between. Exploratory programing at its best, and no internet connection required.

[+] johnaspden|16 years ago|reply
Well, actually,

sudo apt-get ipython sudo apt-get install ipython ipython -pylab sudo apt-get install pylab sudo synaptic (<--used it to find pylab packages) sudo apt-get install python-matplotlib sudo apt-get install python-matplotlib-data sudo apt-get install python-matplotlib-doc ipython -pylab

And then the program works.

Actually, thanks for that, I didn't know about that stuff, and it looks really useful. If I can figure out how to get the drawings to move then it will do what I want. (to visualize the action of unitary matrices on Hilbert spaces)

But my point was that in 1982, my non-technical parents bought me a computer and then I was away. A couple of months later I had an animated model of the solar system. And I hadn't read anything except the spectrum manual (and the equivalent one for the TRS-80).

I can work out how to do the above installation for my hypothetical 12 year old son, but my poor father wouldn't have had a chance. And I suspect that the same would be true for most non-techie parents.

And how is the hypothetical son supposed to go from the pretty blue curve created by the magic plotting program to an animated solar system?

I can't see how to make the graphs move. Perhaps it can be done. Perhaps it can't and I should use SDL instead.

The point is that it is not obvious to me. Whereas the equivalent questions were obvious to a child thirty years ago.

[+] Tichy|16 years ago|reply
No boilerplate, no installation of Python, no installation of pylab. I think it was a lot easier on the ZX Spectrum.
[+] foulmouthboy|16 years ago|reply
I just tried opening up terminal on my MacBook Pro, typing in what you wrote and nothing happened.
[+] neilk|16 years ago|reply
Probably tangential... I learned what sin() and cos() did experimentally.

There was a BASIC program in Creative Computing that used sin() to make a long snake of text scroll down the screen. So, in my mind, sin() and cos() were things that made wavy lines.

A little while later I was puzzling over how to draw a circle. I had this epiphany that the X component was drawing a wave, just like sin(), and the Y component was drawing a wave that was just out of phase. I went home and programmed it and it worked instantly.

We had a Britannica at home, so I finally looked up what sin() and cos() were, and the diagrams made it all obvious.

It's good that we now have Wikipedia and all, but kids today are still deprived of a computer that comes with a decent programming environment, that makes fun stuff like graphics dead simple.

[+] dbz|16 years ago|reply
And when kids download "decent programming environments" they have absolutely no idea how to use them. =/

That one comes from personal experience.

[+] erikwiffin|16 years ago|reply
The crazy thing is, he just told the exact same story about beginning programming as I would tell. The only difference, is that I'm 21, and my first experience was drawing circles on a TI-83 graphing calculator in high school.

It has a graphing mode, where you can put in functions and it'll draw them for you. And it has a programming mode, with a very BASIC-like syntax that I wrote simple graphing programs, ridiculous text-based rpgs, and my own version of the oh-so popular Drug Wars.

Having no idea what a ZX Spectrum is, I can only assume that the likelihood of the author having one 30 years ago is about the same as the likelihood my having a TI-83 in high school, especially because the calculator was pretty much required for some of the math classes I was in.

[+] megaduck|16 years ago|reply
You're right, they're pretty similar. The ZX Spectrum was a little personal computer, sold in Britain through the 80's. It was pretty cheap, probably the equivalent of $750-$1000 today. Certainly cheap enough for parents to buy for a bright young boy.

Since the ZX ran BASIC, programming for the spectrum and your TI-83 is pretty comparable, although your TI-83 was a bit more powerful. :)

http://en.wikipedia.org/wiki/ZX_Spectrum

[+] lssndrdn|16 years ago|reply
I am the same age, and I had a very similar experience, especially with regards to the BASIC manual. I would just go through the list of keywords, A to Z, skipping the ones that didn't make sense at first, and then circling back and starting all over until I had them all. In a way, a limited manual made it easier to circumscribe the problem, and gave my little nerdy self a "goal": Finish The Book.

I guess the same could be done with the information available on the Internet. If someone wants to learn javascript they have all the info they could possibly ever want. There are so many options now. But learning to program is a question of interest and determination, not availability of information.

[+] AlSweigart|16 years ago|reply
I don't agree that programming has gotten harder, I think it has become easier. What is harder now is finding material to learn programming that is simple for kids but also still "real" programming (not just game creation kits).

I wrote a freely available book called "Invent Your Own Computer Games with Python" and released it under a Creative Commons license. It's available at http://inventwithpython.com

I think Python makes a great (even superior) replacement for BASIC. Adding in Pygame, and it is much easier and fun to learn programming.

[+] benwr|16 years ago|reply
About 5 years ago, in 7th grade, almost the exact same thing happened to me, but with a TI-83 graphing calculator. I would estimate that there are approximately the same number of kid programmers as there were. Modern PCs and macs don't come with compilers or interpreters, and there is no "command mode". Why would the ordinary kid ever open up cmd.exe, when everything you could ever want to do on a computer is on the web? I only learned TI-BASIC because a friend's dad is a hacker. He inspired me to check out the only book on programming at our school, which happened to be about BASIC. The truth is that, while kids are closer to computers than they were 30 years ago, they're not much closer to programming.
[+] dbz|16 years ago|reply
I started programming around 6th grade, and I am in 11th grade now. I started because one of my "really smart friends" was doing it. He started because his dad made his own linux distro .(That's a lie. I know his dad has made his own linux distro, but I honestly don't know why he started, but I am sure his dad is the cause of inspiration.) The point is that I am sure tons of people would love to learn to program if they are simply given the opportunity- the inspiration (and the tools).

Why would I be sure of this? People have come up behind me and asked questions like "Wow, that's a really cool word-like program. Where did you get it?" Of course I tell them I made it and almost always I get asked how. I've even given out a couple of programming "lessons". (That's a lie. I've given out hundreds of programming lessons, and I've written at least ten little programming manuals to help people begin to program.) However, the real point is: If given inspiration, kids are very curious creatures and will start to program.

[+] ajuc|16 years ago|reply
I had c-64 and one of the most frustrating memories from my childhood was that I couldn't get it to draw anything in a graphic mode. In manual the code to initiate graphic mode had error in it, or the manual was for different version of the computer, I still don't know.

Anyway - 8-bit computers were superb "teach-yourself-programming" machines, but I think novadays kids have internet access, so they will manage :)

PS. I would choose python + pygame to teach a kid graphic programming. It is simple, interpretted and has interactive console.

[+] Tichy|16 years ago|reply
Graphical mode on the C64 was difficult, ZX Spectrum was much easier for that. C64 ended up being the better game engine, though :-)
[+] Tichy|16 years ago|reply
I wonder, is Logo still relevant for children (was it ever)? I know Netlogo or StarLogo are still in active use in academia (for artificial life/complex systems research).

I have been toying with the idea to write a Javascript LOGO for the Canvas Element. There used to be Online-Logo Applets, but I think they were all Java.

At least it might be a fast way to draw nice things programmatically.

[+] spatulon|16 years ago|reply
This JS-based Logo works nicely: http://logo.twentygototen.org/

Here are a few programs I made with it (note that the default is to 'run normally'. You might want to click 'stop program' and then 'run fast'):

* Sierpinski triangle: http://logo.twentygototen.org/83EGZPPC

* Sierpinski carpet: http://logo.twentygototen.org/4c5iy9iU

* Sierpinski arrowhead curve: http://logo.twentygototen.org/hYDSZt8h

* Hilbert curve: http://logo.twentygototen.org/CFyUSzqG

* Hexaflake: http://logo.twentygototen.org/AJeuVkKc

[+] techiferous|16 years ago|reply
Some years ago I was a high school Java instructor. I'm a big fan of teaching one concept at a time, so I actually started out everyone on LOGO since it was an introductory programming course. LOGO is a great way to learn the basics about commands, loops, and the exacting syntax of computer languages.

The next step was to start learning Java through Karel J. Robot ( http://www.csis.pace.edu/~bergin/KarelJava2ed/Karel%2B%2BJav... ), which was a nice, easy segue from LOGO. After going through the Karel material, the students could dive into more advanced stuff.

The course was self-paced, so if you mastered the LOGO stuff in one day and wanted to move on, you could. You just had to show that you mastered the relevant learning concepts.

All in all, this was a great way to structure a course. So yes, LOGO can still be relevant.

[+] flatline|16 years ago|reply
There are so many more options than when he was writing BASIC programs on a ZX Spectrum. Choose something straightforward and stick with it. Python is about as simple as it gets. PLT Scheme is also a great option, it has a fully self-contained environment that includes much better graphics options than BASIC did, and is well-documented. There are lots of others - this post has some good discussion on a similar topic: http://stackoverflow.com/questions/950619/summer-holiday-pro...
[+] swannodette|16 years ago|reply
Having more options means you have to figure out what choose. That doesn't make it easier, that makes it's harder.

It's also important that there be a lot of reference materials which would be easy for a kid to teach him/herself with.

For example: http://www.scribd.com/doc/200861/A-Touch-of-Applesoft-BASIC-...

This was the book I read when I was 10 years old. It was also easy to find BASIC code at the school library and in computer magazines.

How many current general computer magazines still publish useful bits of code ("How to access your mouse from Apple Basic", etc) ?

[+] pxlpshr|16 years ago|reply
Nothing will ever stop a hacker from programming and figuring out a machine, especially age.

I started when I was a tot during the days of DOS on an IBM box. At least kids these days have the internet, we were left to fend for ourselves.

[+] aaronz3|16 years ago|reply
I remember growing up I was playing on the Internet and found a 10 chapter book online for QBASIC. I printed it out and had it scattered all over the floor, and in no time at all I was writing code that actually did things. I had never written code before and I was in elementary school (9 or 10?).

Eventually this led to html, javascript, php, VB, C#, etc. Dad wasn't real thrilled when he realized I used all of the printer ink to do this, but I'd say it was a pretty good return on his investment.

EDIT: I'd like to play with BASIC again, anyone know of a way to do that on OSX? VM?

[+] lisper|16 years ago|reply
It's important to keep in mind that one of the reasons it was "easier" to program back in the day is that you had so many fewer options. The flip side of not having to install anything is not being able to install anything. BASIC was cool, but once you hit its limits (which was very easy to do) you were kinda screwed. Sure, you could learn machine language, but that was a lot harder than running Python or Javascript.
[+] alttab|16 years ago|reply
This type of math-programming-graphics-game mind soup resonates with me very well.

I did mine on a TI-83 calculator, went to visual basic, and then C++/DirectX. Once I grasped sin/cos/tan, I created Microcosm (missle command, angles, rotation as my primary game mechanic due to my fascination of the power of trig, http://arcade.connersc.com).

I feel the same way. You put it in words clearly. :)

[+] jsz0|16 years ago|reply
I tried a few times to get into programming but the amount of institutional knowledge required was so off putting. Learning the languages and APIs isn't too hard but I found all the reference material didn't teach me how to actually solve problems. I suppose this is something you need a mentor or at least a strong background in legitimate computer science to understand.
[+] shaunxcode|16 years ago|reply
When I was a kid I did not know any adult programmers and thus assumed programming looked like the strange special characters you would get through alt + shift combos. This didn't scare me - it just upset me that I didn't know how to utilize it. If someone had shown me APL I would have been amped hahaah!