Follow Slashdot blog updates by subscribing to our blog RSS feed


Forgot your password?

David Brin Laments Absence of Programming For Kids 355

An anonymous reader writes "David Brin is an award-winning science fiction writer who has often written on social issues such as privacy and creativity. Now, he's written an essay for titled 'Why Johnny Can't Code'. He discusses his son's years-long effort to find a way to use his math book's BASIC programming examples. All they were ever able to find, however, were either children's versions (on the Mac) or 'advanced' versions which attempted to support modern programming requirements (and which required constant review of the user's manual). Ultimately, they ended-up buying an old Commodore 64 on Ebay — Yes, for those of you under the age of 30, 'personal' computers like the Apple II and C64 used to all include BASIC in their ROMs."
This discussion has been archived. No new comments can be posted.

David Brin Laments Absence of Programming For Kids

Comments Filter:
  • There are options (Score:3, Interesting)

    by mkosmo ( 768069 ) * <> on Friday September 15, 2006 @03:34PM (#16115969) Homepage
    How about QBasic on Win95, MS DOS, etc? My first BASIC programming experiences were on one of those kiddy VTech laptops, then moved to QBasic on Win95. Worked great... simple BASIC, didn't require any special knowledge. In fact, I quite enjoyed it.
  • Re:There are options (Score:4, Interesting)

    by tmasssey ( 546878 ) on Friday September 15, 2006 @03:38PM (#16116012) Homepage Journal
    Or a C-64 emulator, or GW-BASIC, or VisualBasic or any of a *bunch* of free or open source BASIC interpreters []...

    This sounds very much made up to write an article.

    Having said that, I have tried to find kid's programming books for my 8-year-old daughter. I started learning computer programming at 8 using my Commodore VIC-20 manual. It had a little cartoon computer character that led you through BASIC programming from the typical 10 PRINT "TIM" 20 GOTO 10 all the way to "advanced" games. As a kid, I absolutely loved it.

    However, I have been able to find *nothing* like that for her... Any thoughts out there?

  • How is it that (Score:2, Interesting)

    by Travoltus ( 110240 ) on Friday September 15, 2006 @03:40PM (#16116040) Journal
    Slashdot can post dupe stories about the dearth of programming training opportunities for kids, but they can reject a story I posted about a recent study showing a LACK of programming jobs?

    Why should kids learn programming when they'll only be able to compete for a programming job if they take an East Indian's dollar-a-week salary?
  • First Big Tits Dupe (Score:5, Interesting)

    by goombah99 ( 560566 ) on Friday September 15, 2006 @03:55PM (#16116194)
    perl -we 'print "Big Tits" until 1==0' Is the epitomy of every first program.

    Perl seems to fit the bill, since it can be as simple as you want and doesn't even have the type issues Basic has. Perl is happy to be procedural. When you are ready to step up to objectsperl is ready.

    Object oriented perl is a wonderful way to learn objects. Wait don't scream. I said "learn". I'd been object oriented programming for years in Java and other languages. But I truly did not understand how all the pieces worked till I wrote perl objects. In perl it's like one of those "visible man" models. You learn how inheritance works. You learn how binding of an instance to a class works. You understand closures for the first time. You understand how the namespaces are kept separate and how instance memory is allocated. It's not just some voodoo that simply works, like in JAVA. Moreover all of the voodoo is not out of reach but right there for you to mess with. An instance can change it's own inheritance if you want it to. An instance can create a new method and write it into it's own namespace if it wants to. An instance can trap calls to it's own methods and redirect them or intercept calls to methods that don't exist and respond to them.

    Those features are not unique to perl (for example pyhton implements objects identically to perl). The difference is that All of that object management occurs in perl itself and is not hidden behind syntactic sugar (like python and java). You quickly appreciate what dereferencing costs, etc...

    The other thing that is nice about perl for learning is all of those prefixes like $ @, and so forth. They may make perl look like cursing but they force you to think about what a variable is. When I index out an array, I get what? an array? no I get a scalar, so $X[2] is how I index @X. You can look at someones perl program and if it's written well tell what every word is. You cannot look at a bare name in python or java and tell if it's a method, an array, a hash, a scalar or reference. Perl you can. (Oh and by the way let me explode a perl/pyhton myth. python has more special markup characters in use than perl, the main difference is that in python they are suffixes instead of prefixes and are overloaded with multiple meanings--try counting how many modifiers there are some time (e.g. () , [] ** and so on))

    Now once you learn perl objects. Well it's time to put down the perl and back away slowly. Python, java are much better languages for writing re-usable, easily read, complex object oriented programs. Perl is still a much more powerful language than either. But it's powerful for efficiently creating compact or single use programs quickly. Not for well designed complex systems.

    Perl is good language to start in, plus it's useful enough to work throughout your career. Basic is not.

  • by neonprimetime ( 528653 ) on Friday September 15, 2006 @03:58PM (#16116222)
    You know what's even funnier? The link I created in the Parent works! And it takes you to the /. home page! hahahahahahahahahahahaha
  • by biobogonics ( 513416 ) on Friday September 15, 2006 @04:25PM (#16116471)
    It does afford me the option of wondering "aloud" why Brin didn't just download, say, an Apple ][ or C64 emulator.

    Even better, find an emulator that runs CP/M which also emulates various types of terminals. One fun thing about computers is making them do fun looking *stuff* like display hacks, moving the cursor, typing backwards, etc. Learn how to control the display by issuing character sequences. Find some books by David Ahl. CP/M had an incredibly rich set of simple tools. Part of the fun is that you have to do some actual building to make things work. Sample any number of the host of languages available under CP/M. Use a line editor. Print out program listings, etc.

    Use the computer as a *tool* to learn something else - like math. Number fun - magic squares - rectangular, triangular, perfect numbers. Find prime numbers and pythagorean triplets, etc. Do number base conversions. Learn dimensional analysis and units, etc, etc, etc.

    Let the child enjoy saying "Whoopie. I made this."

  • by Vellmont ( 569020 ) on Friday September 15, 2006 @04:53PM (#16116693) Homepage

    But seriously what could a kid do in Excel that would actually hold their interest longer than half a second?

    Write a macro the does all their math homework for them, including showing work? Figure out how long it takes them to save up for a new bike? There's lots of ways a kid could be interested in Excel.
  • Re:Flame Baby Flame (Score:2, Interesting)

    by sceptre1067 ( 197404 ) on Friday September 15, 2006 @05:06PM (#16116799) Journal
    so what does that say for kids raised on Ruby... or Haskell. ;-)

    One scary article I encountred (on suggested starting kids out on tcl/tk.

  • by An Onerous Coward ( 222037 ) on Friday September 15, 2006 @05:29PM (#16116992) Homepage
    That's a point I hadn't thought to make last time this story came around. I started programming on a Commodore64 when I was 7. Not a prodigy; I programmed about as well as you'd expect a 7 year old to program. Copied short snippets from books and whatnot. By ten, I was using basic programming flow to draw interesting patterns on the screen. At the age of thirteen, I tried my first truly ambitious project: a 'Dragon Warrior'-style RPG.

    It was a catastrophe. When I first started composing this, I was going to blame it on BASIC itself, then on the crappy line editor I was trying to use. But as frustrating as these things were, my greatest shortcoming was that I had no adult supervision. When you try and teach yourself, rather than learning from an expert, you tend to not realize when you've missed something very, very important.

    I feel a deep sense of shame even today for admitting this level of stupidity, but I didn't know what a subroutine was. Knowing that I could have called the same snippet of code from different parts of the program would have saved me much heartache, but I had the concept of a flowchart firmly in my head, and it seemed to demand a single, unbroken flow of execution. Which demanded cut-n-paste. Which I couldn't do with that crappy line editor.

    Thinking on it, I should probably try tackling that project again, so that next time I set down to writing a long anti-BASIC diatribe, I'll at least know what the hell I'm talking about.
  • Re:Perl OO (Score:2, Interesting)

    by corporate zombie ( 218482 ) on Friday September 15, 2006 @05:54PM (#16117189)
    Learn Object Oriented Perl --

    In perl there are references. A reference is created by \ on a container.
    my $scalar_ref = \$a_scalar;
      my $array_ref = \@an_array;
      my $hash_ref = \%a_hash;
    or you can create a reference with anonymous array and/or hash syntax.
    my $array_ref = [ 1, 2, 3 ];
      my $hash_ref = { "a" => 1, "b" => 2 };
    A reference can have a namespace associated with it. This is done with bless(). Such a blessed reference is called an "object".
    my $obj = bless( {}, 'My::Class' );
    Subroutines can be written to work on objects. They expect their first parameter to be the object being worked on. Subroutines that expect an object as their first parameter are called "methods". Often this parameter, by convention, is named $self.
    sub do_something {
        my $self = shift;
        # do something
    If you use an '->' between an object variable and a subroutine then the parser rewrites this to provide the object as the first argument to the subroutine.
    A method call is first searched for in the package the object is blessed into. If it is not found there the package's @ISA array is examined. Each namespace in the @ISA array is searched (while in turn any @ISA's in that namespace is searched if the method is not located in the namespace) until the first method is found or none is.

    That's it. Everything else you can put together from general OO techniques.

    Here's a small Point class. _init() is seperated from new() so that any sub-classes of Point (those packages that have a @ISA list with 'Point' as an element) can override it without having to rewrite new(). Alternately a sub-class could do some additional work and call $self->SUPER::_init(...) to call _init() in some super class.
    package Point;
    use strict;
    sub new {
      my $class = shift;
      my $self = bless( {}, $class );
      return $self;
    sub _init {
      my $self = shift;
      my %av = @_;
      $self->{x} = $av{x};
      $self->{y} = $av{y};
    sub scale {
      my $self = shift;
      my $factor = shift;
      $self->{x} *= $factor;
      $self->{y} *= $factor;

"Wish not to seem, but to be, the best." -- Aeschylus