• Print

Why Johnny Can't Program

Many months ago, David Brin (the author of many sf books and “The Transparent Society”) wrote a piece for Salon called Why Johnny Can’t Code. It’s about the disappearance of BASIC and the resultant inaccessibility of introductory programming. I was moved to shout “hear! hear!” when I read it, because I have been facing the same issues since I returned to New Zealand. I had a chance to do something about my frustration when my kids’ primary school wanted volunteers to run clubs for the kids: I stepped up and ran a three week computer club for two sets of kids.

Each class was four kids in size, a mixture of boys and girls. They varied in age from 7 to 10, and I had them for three 90m sessions over the course of the club. I structured the club to lead them into programming.

Week 1: Think Small

Programming is all about reducing big problems to small and easy tasks. So I paired up kids on two Macs I brought from home, and we used iStopMotion to build stop-motion animations. This teaches them to think in terms of small steps, while at the same time they become familiar with the computers. And, best of all, it’s enormous fun. I recorded (with Quicktime Pro) the kids doing voiceovers and stitched together movies. Over the following weekend I burned the movies with iDVD and the kids were able to show their goodies to their families.

Week 2: LOGO

In week two each kid took one of the school’s desktop PCs and we learned to program in Logo (MSWLogo to be precise, which I have mixed feelings about). I gave them cheat sheets of forward, backward, left, right, etc. I had them draw boxes and then regular shapes like pentagons and octagons. Advanced kids got to make smiley faces.

Week 3: Motion

I bought a Lego Mindstorms NX kit (much to the horror of my wife who watches my credit card activity like a hawk) and the culmination of the class was getting to tinker with the machine. I brought in a basic robot and they added sensors and new motors to it as I challenged them to make it do different tasks. I had only half the kids work on the robot at any one time, the others experimenting with Alice virtual worlds to learn object-oriented programming.

Overall, I think it went really well. I had three girls and one boy who were really keen on programming, which represented half the intake. Those kids now know (a) that they can do it, and (b) where to find more. Those who didn’t take to it at least know that it’s possible and it’s not hard (just detail-focused and sometimes not as much fun as running around outside). All valuable lessons.

I also learned lessons. First and foremost: only one Mindstorms kit isn’t enough! The kids could easily have spent all three weeks building and programming them. And even with a pair of kids on the robot while another pair were programming in Alice, the kids using Alice always felt like they were getting a raw deal. I didn’t have the discretionary spending for a second kit, unfortunately (as it was, the Mindstorms kit was “an early Christmas present” for my 7-year-old son that I immediately stole for the class).

I also learned that there’s not a lot of great introduction to programming software. I looked at Python and PyGame and Perl and a handful of Mac Logo interpreters and they were all too hard for seven year olds. Kids that age can type, they can use the web, they open and close windows, but saving and switching windows and remembering the #! incarnation and … all that crap gets in the way of teaching programming. It’s like making someone make their own paper before you teach them to read: yes, paper is important, but it’s not what the goal of the exercise is. David got it right when he remembered the simplicity of line-oriented BASIC programming.

The modern equivalent of BASIC is the interactive interpreter, such as the fabulous Interactive Ruby Tutorial. As the new guy on Radar, Gabriel Williams, pointed out in internal email, they’re primarily for debugging and prototyping, but they’re also excellent tools for learning a new language. My only problem with using these with 7-10 year olds is that the raw language doesn’t offer enough sexiness–graphics and video seem to happen at a low level and that makes it hard to inspire the kids to persist through the inevitable frustrations of typos, difficult math, etc. I think it probably is telling, though, that the only systems I found were open source.

Do you have a favourite first programming system for kids? I’d love to know about it–tell me in the comments.

  • bryan

    I will reiterate what I said on the Lambda the ultimate blog on this: Beginning programming requires the desire to enhance the tool (or toy)
    http://lambda-the-ultimate.org/node/1733#comment-21414

    given this actually Rebol may not be a good choice, Kids nowadays are more likely to have phones than emails. give them a language they can do cool stuff on their phone with.

    mindstorms is a good idea, it enhances the toy.

  • http://www.snelson.org.uk John Snelson

    I noticed the other day that Blitz Basic is still available. Biltz Basic is a programming environment I used to use on the Amiga when I was much younger, and the modern incarnation looks pretty good. It’s specifically focused on making computer games.

  • http://www.folknology.com al

    Check out Squeak : http://www.squeak.org/

  • http://freebsd.amazingdev.com/blog Jonathan Arnold

    I too have been looking for something to introduce my girls (6 & 7) to programming. I used to work for Roger Wagner Publishing on their wonderful Hyperstudio, a Hypercard-like program that let kids do some great stuff. It had a custom logo written for it, but I was never too impressed.

    Have you seen KPL (kids programming language) and its successor, Phrogram? These looked interesting:

    http://www.kidsprogramminglanguage.com

  • Robert Lefkowitz

    Supercard.

    It’s how my son started — but that was a long time ago…

  • Monty Zukowski

    http://www.toontalk.com/

    ToonTalk actually teaches concepts like event-oriented distributed programming through telling robots what to do. The concepts behind it are actually quite sophisticated, but the interface is very simple. I have yet to play with it, since it only runs on Windows, but look forward to sitting down with it and my daughter when she’s ready.

    To quote the website:

    Inside of ToonTalk’s animated world you will build and run all sorts of computer programs. While learning how to program you will face challenging puzzles, express your creativity, learn new ways to solve problems, and have loads of fun!

  • http://blog.andrewparker.net Andrew Parker

    I’d love to hear more about your thoughts on Alice because, in theory, it is design to solve the problem you are having: introducing young children to programming.

  • Anonymous

    The Flash IDE seems to have what you are looking for: shapes and colors, a timeline you can tinker with before actually programing, and a reasonably object-oriented scripting language. Since ActionScript is very similar to JavaScript they can make the jump to CSS and HTML with JS pretty easily.

  • http://walkerhamilton.com Walker Hamilton

    Now, seeing as how I’m commenting on an O’Reilly blog, this might be heresy, but you guys haven’t tried to publish a book yet that teaches _really_ basic programming (especially to kids).

    With that said, there’s this book called Learning to Program that you can find at amazon.

  • Jay

    The simple solution is REALBasic – a great language to get started with. Gives all the simplicity of a BASIC syntax coupled with object oriented structure.

    It provides support for graphics, sql databases, external I/O control and a bunch of other features.

    It’s simple enough for beginners and powerful enough for professional level software. (it’s also cross platform)

  • sparaig

    Check out squeak, a project to bring Smalltalk into the 21st Century, that is being headed by Alan (“Object Oriented Programming”) Kay. Squeak is oriented towards kids since teaching kids about computers has been Kay’s primary focus in computer science since he started working in the field.

    http://www.squeak.org

  • http://web-professor.net/ webprofessor

    I have this problem too, My son wants to learn to “do what daddy does” but finding an appropriate language for a 6 year old that was interactive enough to be engaging is tough.

  • http://homepage.mac.com/chilton/ Chilton

    SuperCard

    I started programming in Basic on a VIC-20. Most of my work these days is in Cocoa, Carbon, and SuperCard. SuperCard for when I need things done now, and bulletproof. Cocoa when I need some really fancy new technology not in SC, but don’t mind spending 10x more time. Carbon for when I need things to vroooom.

  • Cambot

    Imagine Logo is very popular in Europe for teaching beginning programming – it is simple to get into and produces fun results easily

    http://www.logo.com/imagine/

    For even younger kids an icon based introductory tool like Dragon Pathways http://www.logo.com/dragon/ can be really useful for getting started

  • http://www.shmoozenet.com/yudel Larry

    I suspect that an updated version of “My Computer Likes Me” would become an instant best seller.

  • http://www.galaxygoo.org Kristin Henry

    My daughter went to a great summer camp where they got to work with Lego Mindstorms. She loved it! All the kids did.

    I keep an old laptop in my office, with programs that I use on it, specifically for my kids to use. Flash is a popular one, but so is notepad.

  • http://www.rubyinside.com/ Peter Cooper

    Scratch is the best one I have seen so far.

  • http://benmetcalfe.com/blog Ben Metcalfe

    I fondly remember learning basic on my school’s BBC Micro’s and my home Acorn A3000.

    However, I’m aware kids are so focused on the internet these days that HTML courses are becoming part of the curriculum in many schools.

    With this in mind, I would recommend something like PHP or JavaScript as a first programming language.

    • It uses a fair degree of natural language
    • You could run it locally rather than on a remote website, or write a simple script that accepts code in a form, saves it and then interprets it with the code redisplayed in the form for further editing
    • It’s actually something they can grow with – bring in elements of OOP and then web building rather than having to later dump an ‘educational language’ because it’s not appropriate for any real uses
    • There are some nice IDE’s that are simple but do syntax highlighting, real-time debugging (using familiar MS Word-like visual underline queues), etc
    • It passes the quite astute “enhance a familiar tool/toy” observation

    Javascript has the benefit that everyone computer these days can interpret it out of the box via the browser. However it requires a bit of faffing about with HTML to get something on screen (although there is the Javascript console in most browsers).

    PHP can echo to the shell and doesn’t require knowledge of HTML if you don’t want to output to web to begin with.

  • http://www.briggs.net.nz/log Jason R Briggs

    I still think Python is the way to go. Path of least resistance, so to speak. Not convinced it’s approachable to less-than-7-year-olds, but 8-plus I think might be workable.

    I’ve actually been working on a Python programming book for kids since (about) a month before David Brin’s Salon article was published (interesting timing). Still nowhere near finished (at the 50-page point now), but if anyone is keen to provide feedback, let me know — I’m probably a month or so away from a finished first draft.

  • monopole

    Anybody who teaches children BASIC in this day and age should be convicted of child abuse. I’d say that teaching a subset of Python would be best. Python is free, platform independent, has an excellent command line interface, promotes good coding practice, and has a uniform learning curve.

    The primary trick with Python is to construct a module with a simple interface and high level impact such as a simplification of the PIL image library or a particular PyGame environment.

    Once this is done teach the kids to script in that, and then generalize.

  • http://www.davidglasser.net/point/ dave glasser

    I second Scratch. Lots of fun with immediate feedback.

  • Isaac Carroll

    The book Computer Programming is Fun! teaches Python and is written for ages 12-16.

  • Edoc

    I’d use a multimedia authoring kit, like Runtime Revolution or Macromedia Director.

    REBOL (http://www.rebol.com) might also be a good choice, if you want something as simple as LOGO. REBOL has a tiny, cross-platform interactive command line that can do all kinds of graphical stuff with minimal syntax fuss. Here’s a line of code which opens a window with a headline and a close button:

    view layout [banner "Howdy There!" button "Close" [unview]]

  • Paul Kimelman

    I think you need to consider the age and attention abilities of the kids involved. Starting a kid on a text programming language can be very frustrating for many of them. I think starting with something like Scratch to show them the concepts can work well to get them interested (even teenagers have fun with it). Moving to a language like Squeak (Smalltalk, but with a GUI block building for some things) or KPL/Phrogram (has really nice 2D and 3D scripted programming, with good sprite controls and good camera controls). The latter is probably ideal for older (10 year old and up) as they can see how it relates to video games (and will be able to run on Xbox360).
    The problem with PHP, JS, Flash, etc, is that they are not very forgiving of mistakes, and the error messages are not very obvious to a non-programmer. What makes some of these newer kid-oriented languages better than Basic is that they have the good error handling and easy instant try (or even change while running) of basic, yet introduce proper object oriented concepts. These would make it easier to move to any language or concept, as they will *get* the concepts much more readily.

  • http://www.radar.com/nat gnat

    Thanks for the great suggestions (Squeak, Phrogram, etc.) which I’m checking out now.

    It’s a noble idea to start teaching kids in Python, but there’s only a small subset of kids for whom typing in text to get text out will be fun. As monopole said, the trick is to get a combination of modules such that it’s easy to get visible and audible effects from slight changes to code, and build from there. I completely agree, but haven’t found such a thing yet.

    I strongly suspect that people who suggest teaching Python to 7 year olds aren’t familiar with the powers and interests of 7 year olds. Even 12 year olds bore quickly. Both are accustomed to instant graphic gratification through the web. They believe that every noun or verb can be followed by “dot com” and will yield an informative and useful site (probably with a Flash game). They can recognize the Google logo across a crowded room. They struggle to type, it’s frustrating and slow for them. So the rewards have to be immediate and strong so the kids persist.

    I’ll try out the other systems suggested and let you know how it goes at the next clubs day. Thanks!

  • scoots

    Javascript!!

    Kids are on the web, they get the web, they get links. In my experience they learn HTML and Javascript quickly. give them easy tutorials and goals and they’ll get it done. The best thing is that once they are done they can have their friends and grandparents go to their web page to see their programming work.

    It’s visual and interactive right away, with quick and easy testing.

    I’ve taught 8 year olds javascript and was amazed at how much they learned outside of what I taught them.

  • http://people.unisa.edu.au/adam.jenkins Adam

    I didn’t share your enthusiasm over David Brin’s article – while I too loved BASIC as a kid, it could be easily replaced by other languages – JavaScript, PHP, Python and many others suggested here. The article felt a bit too much like an old codger reminising about the great times, and how kids today have to use these new-fangled languages which are nothing like they had in the old days. Admittedly, I’m probably an old codger too. :)

    Personally, I think the path you took was much better than BASIC would have been. When I’m teaching, I start students with POGO – a LOGO variant I developed for my students that uses a Penguin rather than a turtle, and focuses on making the penguin dance and tell jokes. But it is Mindstorms where I think the real secret lies.

    You see, by my way of thinking, back when we learnt to program, making a computer say “Hello ” was really, really cool. Having that dot move across the screen, as Brin described, was exciting. But at the time these things were new to us, and our expectations were low. So little things were exciting and made us love programming. Unfortunately, I can’t get students as excited over simple tasks – their expectations have been coloured by the games they play, and every second student wants to write a MMORPG. But robots still have that “wow” factor. While you might not be excited by seeing a dot move across the screen, making a robot run across the floor, spin three timrs, and beep – which is just as easy to program – is ever so much more exciting.

    My own epiphany came the first time I programmed a microcontroller. I felt as excited seeing the LEDs flash in sequence, triggered by my actions and controlled by my code, as I once felt when I programmed a VIC-20 to say “Hello World”. Plus, to keep David Brin happy, with a PICAXE you can code your microcontroller in BASIC. :)

  • http://edtechdev.blogspot.com/ Doug

    Exactly. You teach them with python or ruby and they’ll be turned off of programming for the next 10 years, if not the rest of their lives. Trust me on this.

    I second the recommendation for the recently released and free Scratch programming environment from MIT: http://scratch.mit.edu/
    It’s for making animations and artwork.

    Above that level (perhaps for middle schoolers) is Netlogo (or Starlogo):
    http://ccl.northwestern.edu/netlogo/

    I also think SuperCard was great like others mentioned, but it is a bit out of date and mac only.

    For advanced kids or beginning high schoolers, try visual basic .net (the only mainstream programming language designed at least in part with beginners in mind). There is a Mono VB.NET compiler too if you are on a mac or linux machine. The Phrogram thing someone mentioned is basically the same as Visual Basic .NET minus OOP features.

  • http://www.briggs.net.nz/log Jason R Briggs

    A question for Adam. You say you can’t get students excited over simple tasks. What age group are you talking about? Are these kids in the 8-12 bracket, or older?

    When I started learning to program (TRS-80, around 8 years old), my expectations were obviously low. You can’t have high expectations about graphics when a pixel is a 5mm rectangular white box.
    But even when you’re talking about the graphics available back in the 70s, it’s a big leap to go from drawing a dot on the screen to an animated game. I recognised that I had to start somewhere.

    Maybe that mindset is not common, and perhaps the expectations set by current standards of technology make it even less common…?

  • http://people.unisa.edu.au/adam.jenkins Adam

    Hi Jason!

    I wouldn’t say that I can’t get students excited over simple tasks – just that the simple tasks which we were excited by (“Hello World” in BASIC) don’t work as well today. LOGO is still cool, and languages like Alice let you do some pretty cool things without knowing much at all.

    Mostly I teach (much) older students, as I teach at uni, but I have an ongoing minor research project concerned with teaching programming to young children, which is why I felt inspired to comment. :) So I’m not a primary school teacher, but I have taught children in the 8-12 range, and I’ve spent a lot of time looking at how children in that age bracket are being taught and how they feel about the process. Mostly inspired initially by a post on this blog (along with one or two others), but partially for self-interest: enrolments in computing are falling, and we’d like to know how to get kids (and especially girls) interested again. Actually, I’d go further and say that one thing I have found is that the same issues arise with children and adults – both have high expectations of computers, and simply aren’t impressed by the sorts of things we were with the 8 bit computers.

    Anyway, I guess the reason why I feel kids are more jaded today, is that when we started computers weren’t as common and software wasn’t as complex as it is today. So while I agree that there was a difference between a dot and an animated game on the TRS-80, there wasn’t a huge difference. Throw a few dots together and you get the graphics from Asylum. :) When I was about 12 a friend and I started writing games to sell, and we knew almost nothing at the time – but while our games weren’t very good, they weren’t that far removed from what real programmers were producing. But I’d argue that the difference is much greater today. What you can do in BASIC is nothing like what you see in a modern game – not even close. So it just doesn’t have the same impact. You need languages like Alice when teaching, so that what they produce is closer to what they are used to, so they can be excited again.

  • http://www.briggs.net.nz/log Jason R Briggs

    Adam wrote:

    > Actually, I’d go further and say that one thing

    > I have found is that the same issues arise with

    > children and adults – both have high

    > expectations of computers, and simply aren’t

    > impressed by the sorts of things we were with

    > the 8 bit computers.

    Maybe it’s just Australians….. ;-)

    (Sorry. Couldn’t resist.)

    Anyway, assuming your hypothesis is correct, I’ll scale down my expectations about how useful my kids programming book will actually be (also assuming I actually finish it).

    Not yet convinced higher-level languages will fit the bill either though. Considering extraordinarily high levels of expectation, and the supposed drop in attention span, the language will have to be so high-level it’s debateable a child will learn anything from it anyway…

    > draw 3d room here

    > add 4 avatars

    > add artificial intelligence

    > add doorway here

    > start game

    (._.)

  • http://www.briggs.net.nz/log Jason R Briggs

    Off-topic PS. I have no idea why my comments look perfectly good in preview, but then end up double-spaced when I actually post.

  • martin

    This looks like an interesting approach, and you don’t need any computers :)

    http://video.google.co.uk/videoplay?docid=-5129662873097337591
    http://www.unplugged.canterbury.ac.nz/

  • http://people.unisa.edu.au/adam.jenkins Adam

    It probably is just Australians. :)

    Oh, I still think teaching programming to kids will work. My claim is only that you can’t do it with BASIC and expect them to go “Wow! Computing is so cool!”, in spite of what David Brin was arguing. The best practical I ran (and this was with 17-40 year olds) was when I showed them how to program virtual penguins to tell jokes. I discovered two things: a) that doing something in programming with a language which was designed to be fun makes them feel like the whole experience will be worthwhile, and b) there is no such thing as a funny knock-knock joke. These students had no interest in programming, and indeed several had changed degrees because they didn’t like doing programming when they were taught it the previous year (and thus were annoyed to discover that they had to take a single programming subject), but doing things which had visible and enjoyable results seemed to work well with them. Or at least better than writing a Java class which calculates the area of a square did. :)

    What Nat was describing in his post sounds great to me. Especially the first bit: teach children that problem solving in programming is fun, and show them how to do it, and the language itself may almost be irrelevant. Its a theory, anyway. And I’m an academic – we like theories.

  • http://www.appsapps.info app103

    You can still get the original 1.0 version of the free Leopard programming language IDE on some download sites, which was created with kids in mind. They can build browsers, media players, etc. (Windows only)

    http://www.winsite.com/bin/Info?19000000037359

    What is amazing about this language is that it was written by a kid. (the developer was about 14 when he started this project)

    The developer decided to take a bad route with v2, by tying it to WeatherBug. The original v1 doesn’t require the installing of any adware though.

  • Drew

    I vote for Squeak, for the reasons others have mentioned. It’s as graphical, or as text-y as you need. And the whole IDE is tiny and free.

    http://www.squeak.org/

  • Mikie

    Check out Processing (www.processing.org), a software sketchbook / programming environment written in Java. It is used by computer artists and you can actually achieve a lot of interesting stuff. At the same time it should be usable by children as well – artists are often like children :) It features three modes the simplest one “Basic Mode” which allows to draw static shapes up to full Java (see http://www.processing.org/reference/environment/index.html). It is free and has an active community as well.

  • Alex Dimitrov

    Some then years ago Sierra had this really great game, “The lost mind of Dr. Brain”. Among the many puzzle gems in it was the “motor programming area”, which essentially introduced basic ideas of programming, with which you had to solve some puzzles by moving a virtual robot. You got moves, turns, subroutins, loops, and a task. Brilliant! I have not seen anything quite like it of late.

    Even longer ago, in my youth, there was the Robot Odyssey game for Apple II, where you had to do all that with logic gates and small IC-s (all simulated of course). You can still get it on an emulator: http://members.aol.com/Fractal101/odyssey.htm

    Otherwise I am a great fun of Lego Mindstorms as well. Links programming to the physical world, so one does not have to go abstract immediately.

  • Jim Harrison

    For interactive graphics with python, have a look at graphics.py, an simple open source graphics module that John Zelle wrote to go with his python textbook (see http://mainline.brynmawr.edu/Courses/cs110/fall2006/dx/examples/graphics.py and http://mcsp.wartburg.edu/zelle/python/). You could also add a simple module with some prewritten objects for kids to use.

    This works fine from the command line interpreter (you can interact directly with the objects) or with scripts.

  • Paul Kimelman

    I note that I have had my son and his friend (7 and 10) start with Scratch (which they loved right away). I then just started them on Phrogram/KPL. What is nice about Phrogram/KPL is that it is a script language like Javascript, but has a lot of built in libraries and concepts to get them some visual results quickly. I do not mean dialogs and window frames, I mean things like a 3D backdrop (they have tons of pre-done art of earth, space, tunnels, etc), sprites of things like spaceships and cars and the like, and good control functions. What it allows is the ability to quickly make a 2D or 3D game or just animation (far more complex than scratch of course). I walked them through some samples. They did not get all of the concepts right away, but were able to tinker with these examples and so learn at their own pace. I had to explain the concept of variables, but they got it pretty quickly. Note that Phrogram is free unless you want support and some add-ons.
    I played with Squeak, but found that the main Squeak is a bit too hard to get these younger kids going on, and eToys is too rudimentary (like Scratch). I also worry that as much as Smalltalk has some nice features, it is not as clean a mental port to Javascript, C/C++, Java, or other “modern” language (Smalltalk was way ahead of its time of course).

  • http://www.eduserv.org.uk/foundation/ Andy Powell

    LSL, the scripting language in Second Life? While I wouldn’t characterise it as a beginner’s language as such, the ability to create a 3-D object that moves, changes shape, changes color, responds to voice commands, etc. might be quite compelling for younger programmers. There is an issue over the Teen SL vs. SL divide of course.

  • http://schoolgamemaker.rupert.id.au/ Tony Forster

    Similarly to Nat, I started a computer club at my son’s school 4 years ago. My chosen language was Game Maker http://www.gamemaker.nl because it is free and has an easy drag&drop interface. It is suitable for 9 year olds and even bright 7 year olds.

    I now find myself in a cluster of schools spanning 4 Australian states. Two cluster members have become teachers of the year for their work on games programming, one internationally recognised for “world best education content” in the Microsoft awards. We have run PD, conferences and a national game programming competition.

    The cluster has tried a lot of software including Python, Alice, Logo, KPL, Flash, Lego Mindstorms and the 2 favourites are Game Maker and Click&Play. (see http://www.gamelearning.pwp.blueyonder.co.uk/index.html?clubs/tools/tools.htm for a review of languages)

    There is a discussion forum at http://www.groups.edna.edu.au/course/view.php?id=81 which you are welcome to join.

    My kids’ achievements and more resources at http://schoolgamemaker.rupert.id.au/

    Tony Forster,
    ASISTM Computer Game Design, Programming, Multimedia and Mathematics Cluster.
    Phone +61 3 9796 8161
    Mobile 0403 07 3717

  • Will

    The comments above are great! I have a 7 year old who is starting to get interested in programming.

    We started with ACS Logo. I was surprised it hasn’t been mentioned yet. It won an Oreilly award a few years ago.

    ACS Logo has a great looking GUI, although it’s not intuitve for kids to go back and forth between windows.

    It runs on Max OS X and allows kids to creat Quicktime Logo movies.

  • Chas

    Despite what has been said earlier about showing children Basic, I started my 8 year old off on DarkBasic and now 8 months down the line he seems quite happy playing with it on his own. It is aimed at creating 3D games but then maybe that’s its virtue – it is visually very exciting.
    I suppose that a large part of the reason I chose it is because I know a little Basic.
    I dont think that Basic is trapping him mentally as he seemed quite happy to have a stab at programming the Lego RCX in ‘Not Quite C’. In fact it seems that DarkBasic is now released in a C type variant – DarkBasic SDK, so perhaps there is a migration path to more serious languages?

    Looking back at it; some of the inital fun and understanding came from adjusting other peoples programs to get infinite lives etc.

    If anyone is tempted to go down the DB line I would recommend getting some kind of software to make 3d models that can be imported into ‘the game’ -looking around AC3D looks to be pretty good and is not as off-puttingly complex as some others.

  • Chas

    A typo in the the above; it has taken 18 months for him to get up and running!
    Also, there are some problems with DarkBasic as a starter language: It has more commands than one can shake a stick at, so one has to sort out a subset of the most usefull ones to get started with (which means getting to grips with it pretty well, beforehand) sadly the example codes given in the helpfiles are often less than helpfull -pointing to 300 line example programs when four liner’s would be clearer. Both these aspects make it seem pretty daunting in the begining.

    But all this doesn’t address the question of ‘Why Johnny cant program’ – I think that a large part of the answer is simply that school teachers cant program. The other part is, perhaps, that children cant come up with many tasks that can be tackled using elementary programming. -Maybe the game-programming languages do circumvent that problem?

  • http://blogs.msdn.com/steverowe Steve

    Thanks for all of the suggestions above. I’m about to give it a try with my son (7 years old). We’re going to start with Logo. Nat, you say you have mixed feelings about MSWLogo. Can you say what you didn’t like about it?

  • Arpad

    Thanks for all the suggestions. I will check the things you suggested.

    I work with 6-10 year olds. I teach them LOGO and HTML and they love it, especially HTML.

  • Tim

    Just wanted to follow up on Chas’s remark – he’s right – most school teachers can’t program. In their defense, they’re usually juggling a myriad of other issues in their classroom and school environment.

    Some of them still struggle with the basics of email, network structure and file saving procedures – in my experience as a head of IT in a small intermediate school.

    So any language/app needs to allow them to handle and work with it, and gain confidence – a confidence that will be passed onto students.

    My students know how to play PS2 or online games – I want them to get excited about creating those worlds, not just being in them.

    Thank you for all the suggestions.

  • sunny

    compliment!,i have been given a project topic to write design a program used to teach children A,B,C,D,with objects examples,by using virtual basic.I want you to help me with materials,the table of content,the aims and objectives and litrature review.thank sir SUNNY VAN

  • Peter Cheng
  • http://pythonbook.coffeeghost.net Al Sweigart

    I also read David Brin’s article, and agree with much of what he said. A lot of the “game creation kits” hide too much of basic programming behind layers of abstraction and “automagic”.

    To help fix the situation, I wrote a book the teaches Python programming to kids. It’s called “Invent Your Own Computer Games with Python” The book is freely available under a Creative Commons license.

    The book provides complete source code for games, and teaches programming concepts from the examples. The book sticks to the basics of variables, flow control, and expressions while still providing full examples.

    The book’s website is http://pythonbook.coffeeghost.net

  • Mad Jack

    Kids don’t need a “introductory” programming language. They can learn C, and then move on to C/C++. When I was a merit badge counselor, I was able to teach a 13 year old how to write basic C programs in a few short hours.

    You don’t need fancy graphics to teach them or get them excited. They were excited enough to be able to make a simple number guessing game, or one that would give out funny responses depending on how old you said you where. And the cool thing is, there’s a free C compiler for every computer on the market today, thanks to the guys over at GNU and the Free Software Foundation (FSF)– the GNU C/C++ compiler just happens to be the same compiler used in Mac OS X’s Xcode tools (no small wonder, since the system is based on BSD Unix… that would be BSD Unix with it’s soul ripped out).

    The problem is, the books are bad. They cover a lot of stuff, and leave out the common “hey, be careful about this” comments that the writer thinks are obvious.

    I started with BASIC, and then moved on to C, then C++, Perl, Java, PHP, and…

    The matter is one of teaching, and I actually have a document targeted towards newbie programmers:
    http://coderguide.com/Guides:C/C_Crash_Course

    It’s meant for those 12 and older… Specifically “formal operational” children (look it up on wikipedia). At around that stage of development, their brains are capable of adult level reasoning, signified by the ability for abstract reasoning which is required by programming languages. Okay, no, 12 year olds don’t reason like adults because they rely more on emotions for making decisions, but all the hardware is there ready to go…

    Learning an introductory language is a complete waste of time. It’s better to start them off on a real language that provides a good base for learning other languages in the future. Pretty much every modern language borrows heavily from the C syntax, so it is a good place to start– and it’s still a widely used language in Unix and Mac OS X (Carbon) software development.

    C can be made simple, if you teach for simplicity. Leave OOP alone till you have a firm foundation in basic programming concepts.

    Languages such as Python, Java, JavaScript, and such, shouldn’t be taught as first languages because it encourages and tolerates lazy programming techniques and will cause problems for young programmers as they move into other languages or more advanced programming.

    LOGO and BASIC were written for non-programmers and YOUNG children (grades 1-4). You’d be better off teaching logic to kids that age (grades 4-8), so they can learn to think logically for themselves, rather than having others make decisions or conclusions for them.

  • Rainer

    What language to use as a teaching-to-program depends probably on the kids as well. In my opinion some children aged 8-10 are well prepared to learn about logic and programming recipes even without touching a computer and that is because they want to know how and why things work. But that has not always to do with a lust to play. They want to play without the obligation to learn and they want to learn ‘seriously’ at other times.
    Therefore I suggest the REXX language for children as a support for the development of logical and analytical thinking, which certainly and successfully can be supported at this early age. Nice GUIs and moving turtle? I’d leave them for playing time.