Why Johnny Can’t Code and How to Help Him

Cant Code?When Bill Gates was 13, a parents group enabled his school to buy a Teletype machine and computer time on a remote GE computer that used the BASIC programming language; he, Paul Allen, and others became intrigued by the technology, including obviously the immediate feedback they got from programming in an easy programming language. He went on to learn other languages, found Microsoft and become a gazillionare.

Does that mean that if your sons or daughters learn about computers using BASIC that they too will earn googol dollars? Well… probably not. If not, might they understand the computer better if they do? Well…. maybe.

Being interested in programming by profession and by inclination, I came across by sheer chance an article in Salon.com entitled “Why Johnny Can’t Code” by David Brin. By 12/31/06 it had attracted 297 comments and over 300 blog reactions.

Mr. Brin’s point seemed to be that there ought to be a language, whether BASIC or something else, that could give an inquiring student to try out simple computer concepts, without ceremony, in the same manner as you could on the old computers that brought you directly to a screen into which you could key BASIC statements ( like PRINT 290*25*16; ” BOTTLES OF MILK”).

Well, the response was overwhelming. People wrote to agree, condemn BASIC as a learning tool, and/or suggest alternatives for beginning computer education for kids. And did they suggest alternatives! In approximate alphabetical order, they suggested: ActionScript, BASIC4GL, C, C++, Chipmunk BASIC, DarkBASIC, Flash, Forth, FreeBASIC, HTML, IPL, Java, JavaScript, JustBASIC, Kids Programming Language(KPL), LambdaMOO, Leopard, Lisp, LOGO, MatLab, MindStorms, Mumps, Octave, Pascal, Perl, PHP, Python, QBASIC, Rebol, Ruby, Runtime Revolution, Scheme, Smalltalk, Squeak, TCL, Turbo C, VBScript, VB .NET, Visual BASIC, Visual BASIC Express ( I realize the previous four are variations on the same thing), Visual C, Visual C#, and VPython.

( If you think that’s a lot of programming languages, try this site , where you can find over a thousand ways to program the printing of all the verses of the famous song “99 Bottles of Beer”.)

So people are interested in cultivating computer education. I certainly am too. I am glad to be in an occupation where I can support my family and can enjoy myself, even have fun; and I would love to be able to help others find a vocation they can enjoy.

In some respects, my viewpoint is a bit limited. I came to programming late. I was 30 when I got interested in programming, and my motivation, in addition to its native appeal to my personality, was more basic – desperation. Trying to support a wife and four young children as a very mediocre (all right, lousy) furniture salesman can do that to you. The programming language I learned, RPGII, had the singular advantage of being a language that businesses used and would pay you to write. You didn’t push pretty pictures around on a screen; you paid employees and creditors, kept the books, and kept track of the money the company made, and you updated the necessary files to keep track of all these things, and you printed reports. There wasn’t even a CRT screen; the operator typed into a typewriter-like device connected to the computer.

But it was fun. And as I learned more, I got interested in other computers and programming languages. I programmed a little arithmetic game for the Apple II at my kids’ school, and later I created a substantial program – creating data entry screens and reports- using the GWBASIC on my Tandy 1000, even making the screens look like the screens I created on IBM minicomputers. I recently did a simple program in Visual BASIC 5.

They Need a Goal

I found the main motivation for learning was to accomplish a specified task. Without a goal, no matter how intrigued I was by a particular programming language, my progress would be limited by the lack of a specific task I needed to carry out. Without it, my progress was slow, and interest faded away.

This need for a goal or purpose is illustrated by an incident from my kids’ high school days. One of my PCs came with ClarisWorks, an integrated software package. I only used the word processor. They needed a pie chart for a news article for the school newspaper they worked for. I had no idea how to do it; I only ventured a suggestion that it probably had something to do with the spreadsheet. Armed with that information, they dove into the program and figured out how to do it. The goal was a sufficient motivation for them to dig into it.

How do you motivate them?

So, what would your child like to do? If your idea is for him to ace Comp Sci at Stanford, and his concept of computer literacy is wedded to an Xbox or Playstation 3, I wouldn’t recommend pursuing the matter at all. If you yourself are not computer literate, that would also be a problem if he/she isn’t either. I am very much open to suggestions as to how one might motivate a young person to extend his computer interests in the programming area. (None of my kids became programmers, though one or two could if they wanted to.) I know it helps speed progress if the child can read well, since so much of the available study material is in printed format either on paper or the Web. (Although in some cases the reverse has been found to be true – that the desire to learn about a given subject can also spur the desire to learn to read better.)

Make it Possible

However, once an interest is discerned, there are a number of options. For one thing, almost all of the computer language options that were suggested above have free downloads of the language interpreters or compilers. Many of them also have an IDE (Integrated Development Environment) available so your child would not have to key the source code (the verbiage you key in that is translated into computer instructions) into Notepad and run from a DOS command line. (If you don’t know what I just said in the last half of the previous sentence, be happy. It’s one headache you won’t need to be concerned about.) Many of them have easily accessible free tutorials that may be available through the language’s main web site.

BASIC, after all, is an acronym for “Beginner’s All-purpose Symbolic Instruction Code”. It was designed for beginners. Your child can learn “structured programming” concepts using modern versions of BASIC, such as JustBASIC. Some languages, such as Logo, KPL, and Leopard, are said to be oriented toward making the learning about computers fun; this may be a consideration. If his orientation is toward Web design, HTML, PHP, JavaScript, Python, or Ruby might be possibilities. I would warn against C or C++ or Java, at least as a first language; my experience and observation, which has been corroborated by my own research and discussions with Java programmers, is that C++ and Java have extremely steep learning curves. One IBMer, at a seminar for programmers about “Web-facing”, or enabling RPG programs to access the Web via HTML, once commented that it took over five times as many lines of Java code to carry out a task as it did in RPGIV. The same is true of C++, and the C or C++ syntax may be difficult to get used to.

My Own Recommendation
My own suggestion is for a language not mentioned above – Oberon-2, created in 1991 by Niklaus Wirth, the creator of Pascal, an extremely popular language originally created in 1970 as a teaching language. Oberon-2 uses “Object-oriented” programming concepts, which many feel are very important to learn. It is a simple yet powerful language – it has been used to create computer operating systems and other very complex programs. It is not widely used in North America, but concepts found in languages such as C++ and Java are presented in a much more comprehensible format in Oberon-2, which would make them easier to comprehend if they take up C++ or Java later.
Programming environments for Oberon-2 can be found for anything from simple Windows programming to Visual BASIC-style programming to .NET programming. A textbook only about 200 pages long, entitled “Into the Realm of Oberon“, by Eric Nitikin is available, for as little as $16.95 at this writing.

With regard to the previous comment, I am reminded of the article in Salon about David Brin’s son being about 200 pages into a C++ textbook; from my observation, he is probably less than a quarter of the way through the book. “C++ Primer Plus”, by Stephen Prata, has 1224 pages; “Teach Yourself C++ in 21 days”, by Jones and Liberty, 936 pages, according to their descriptions on the Amazon.com web site.

Yes, He Can

Can Johnny learn to code? Many factors affect the answer to this question, but the short answer is, Yes. There are no guarantees. But if your child is interested, and if you can express your interest in a non-threatening, friendly, helpful way, his chances are very, very good.

Contributed by: Curtis Barron

Technorati Tags: , , , ,

Share and Enjoy:
  • del.icio.us
  • digg
  • Fark
  • Furl
  • Reddit
This entry was posted in Education, Guest post, Programming, Technology. Bookmark the permalink. Post a comment or leave a trackback: Trackback URL.

6 Comments

  1. Posted January 9, 2007 at 12:43 pm | Permalink

    Out of the list of programming languages to begin with I would definately choose Leopard. It has got to be the worlds easiest programming language and it has influenced me to go on and learn quite a few other programming languages such as Just/Liberty BASIC, Dark Basic, Basic4gl and VB Express, but without leopard I would never have got interested in programming. Leopard is the one, in my opinion to go for. A five year old could create fantastic programs with it. GO ON LEOPARD ! ! !

  2. Posted January 12, 2007 at 2:10 pm | Permalink

    One of the good things about the older BASICs was that they had the very simple combined with great power. I remember seeing listings for Atari 400 and 800 with pages of PEEK and POKE statements. This meant that there was the ability to get a real understanding of what was going on inside the computer for those who were interested, yet the beginner did not have to deal with them.

    Thus, I have to agree with Joel Spolsky that most modern high-level languages (e.g., Java) are not a good way to learn to program. I would have to say that object-oriented languages are definitely good, just not for beginners.

  3. Posted February 19, 2007 at 4:15 pm | Permalink

    I have been programming (semi-pro) for quite a few years now. I have mostly been using variations of BASIC and Visual Basic. A few years ago my son took part in a school program for gifted math and science students in grades 3-5. They used “Cocoa Beans” (now Stagecast Creator) to learn the basics of logic and programming by building small virual worlds where they controlled the behavior of objects within those worlds. I thought it was very interesting how they got the kids attention and kept their interest by using a game like environment to teach them programming. This was a good start but from there the languages and IDE’s seem to jump to far ahead and left my son and some other kids thinking it too mechanical and boring again. I have been searching for a programming language/environment for teaching kids to program and enjoy doing it. I would like an environment that had stages so the budding coders could grow and evolve in the progrmming experience. Thus allowing kids who need to keep it simper longer to do so while allowing kids who want more of the “real’ thing to move ahead when desired. I have found all kinds of languages and environments but none that really fit the bill as described. So far I still like BASIC (or variations thereof) mostly becasue the syntax is easy and not usually likely to create enough early frustration to cause kids to bail out. Leopard/JustBasic/Liberty Basic are what I use. Leopard is easy, free and can sovle some real world problems, which give kids that immediate sense of accomplishment. Just Basic is the free limited version of Liberty Basic (which I beleive Leopard was created with) and is a natural progression. The syntax is simialr and its adds just enough additional capability and complexity without overwhelming the budding programmer. Liberty basic has very powerful capabilities but still keeps the langauge and interface easy. Once a new prorgammer gets up to feeling comfortable with Liberty Basic, I believe he/she will be equipped to jump off into the deeper development realm of OO programming and all those other powerful and useful but hard to start with languages (C, C++, C#, Java, Perl etc.). The msot inportant thing in teaching kids to program, or just trying to stimulate some interest in learning programming, is make it fun and have a purpose. Having kids solve real world problems related to topics that they are interested in, is the key. Once the fire is lit it is usually self-sustaning.

  4. Posted December 16, 2007 at 3:38 pm | Permalink

    Your comments struck a chord with me. I was introduced to programming at school in the late 1960’s when we used to visit a local school for a few hours a week. They (Royal Liberty School) were one of the first (if not the first) school in the UK to have a computer. That initial experience gave me a head start at Uni and a solid foundation for my ongoing 30+ years as a professional software developer. Any efforts towards capturing the imagination of budding school-age programmers are to be encouraged!

  5. Jen Barron
    Posted February 20, 2008 at 2:04 pm | Permalink

    Reading this makes me believe I could go down an entirely new career path. Being able to tell a machine what to do, when I was 10 years old, was the most exciting thing to me! (Yes…I was a huge nerd.) Programming captured my imagination as a teenager, and it saddens me when I see so many kids now straying away from the field. I think it’s only because now, the languages, and the field itself just seems so complicated, and they are steering away from the subject in high schools now. Thanks again, Dad…for your thoughts!

  6. Posted March 30, 2008 at 2:56 pm | Permalink

    Kids are smart. I don’t think it matters what language you throw at them. It is how are you motivating them? I used to love to compete against other kids programming robots using p-robots. That competitive streak. Other kids may be motivated by publishing something or controlling their virtual world. That’s where a good teacher and a more free-form course would make a huge difference.

2 Trackbacks

  1. [...] Why Johnny Can’t Code and How to Help Him. by Curtis Barron  - What!  I find it hard to believe that my Dad’s post is the most popular post on my blog.  It’s actually kind of painful.  I wonder how much this speaks to the fact that niche expertise is the real strength of a search engine.  Thanks for the contribution Dad. [...]

  2. [...] a blog post on my son’s blog, I ruminated on helping young people to learn to program and what might be a [...]

Post a Comment

Your email is never published nor shared. Required fields are marked *

*
*

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>