Forgot your password?
typodupeerror
Programming IT Technology

Best Way to Get Kids Started in Programming? 777

Posted by Cliff
from the getting-started-at-an-early-age dept.
kbh3rd writes: "A couple of my kids are starting to make noises about learning to program computers, just like their old man. 8^D I'm totally unsure how to start out. I'm a *nix geek, but I don't know if they'd keep interest if started with 'main () { printf ("Hello, world!\n") ; }' and command-line gcc. They almost exclusively use Win98 because that's where their games run. I can't believe I'm saying this, but maybe they should start with something where they could get some Windows programs going, like VB (shudder) or Delphi? What language/development environment would be best for kids aged 11-13 who think they want to learn some programming over the summer? And what are some good books they might start with, too? "
This discussion has been archived. No new comments can be posted.

Best Way to Get Kids Started in Programming?

Comments Filter:
  • by Anonymous Coward
    I'll second that!!!

    In fact, many self-proclaimed OO programmers should try Smalltalk BEFORE trying languages like Java. The fact is that after C(C++) people are so messed up that rarely can write correct OO.

    Smalltalk is a two-thumbs-up for anyone wanting to program in OO. (At least it'll put your thinking on the right track.)

    Finally, it's simply lots of fun!

  • The connection is mathematics. Most people don't realize it, but music is based entirely on mathematics (Mozart was a math prodigy as well ;).

    My kids currently attend a school that has a mandatory music program because of studies that show kids with music education learn math more quickly and easily.

    Since programming is also largely a mathematical pursuit, it should come as no surprise that the two are related. Most of the engineers I know are also musicians...

  • Yes, but you don't need to use the Lego software. The protocols and whatnot have been reverse-engineered, and third-party tools (like NQC) are available.
  • by Suydam (881)
    I would tend to agree most with your last comment. Regardless of how people feel about Java as a commercial development language, it's great for learning how to program concisely (from a functional standpoint.....even if it is wordy) and it's great for doing graphical stuff (which will solve the Asker's boredom fears).

    Finally, my advice to our asker is to remember that kids rarely find computer programming boring....don't worry too much if they'll lose interest. They will probably love it...most kids do.

  • by adamsc (985)
    http://www.mindrover.com Basically you use a graphical programming environment to build small robots which compete in competitions. The game aspects would certainly get kids interested and the programming environment is a seductively easy way to get into modern event driven programming.
    __
  • Oops, I forgot to mention... it's also open source.
  • If you think syntax is the major thing you need to learn when picking up a new programming language, you are sadly mistaken. All the college when I was introduced to a new language I was given roughly a day to learn the syntactical structure.

    Scheme and Smalltalk are much more than syntactically different. They are different in terms of the fundamental underpinnings of the language (although less so with Smalltalk).

    Here's the huge syntactic difference you're refering to:

    aBoolean ifTrue: [
    b = a;
    ].

    vs.

    if (aBoolean) {
    b = a;
    }

    Are you telling me that the average human being can't learn the syntactic difference is a matter of seconds? Certainly, there are larger conceptual differences underneath the hood, but the syntax is not what's killing you.

    If you to concern yourself with the syntax, you should know that's Smalltalk's syntax was chosen to make it easily accessible for children, so to the extent that it's relevant it's BETTER suited to this particular task.

    The presumption that young children of today are going to be doing C/C++ programming tomorrow is also pretty misleading. Based on the history of language cycles kids of today are as likely to be using C/C++ when they get out in the work force as I am of using Fortran and Cobol today.
  • Functional languages [hex.net] do have some attractive properties, as they behave in quite regular ways, to the point of being "mathematically predictable." (At least, until it comes time to take out the trash... [hex.net])

    Unfortunately, notable ones like ML and Haskell head very quickly into the arcania of type theory, which may be a bit more math than you want to push at youngsters that are still working on getting used to the notion of abstract ideas.

    In contrast, the arcaneness of "pointer twiddling" in the C descendants is rather nasty.

    Contrast with the arcania of "program structure" in Pascal, where a single semicolon out of place causes great contortions...

    Lisp-like systems have irritating quantities of parentheses. (At least, for the first month that you use Lisp...)

    Which all goes to say that all the languages out there have some strengths and some weaknesses.

  • BASIC is good not because it's BASIC, but because it's an interpreted language. No compiling. No linking. No static libraries. No run time libraries.

    Instant.

    Gratification.

    Code stuff. "RUN". See stuff happening. Change stuff. "RUN". See new stuff happening.

    Unfortunately there aren't many other good (for kids) interpreted languages out there today. There's VB (not really BASIC and possesses few of the above qualities that made BASIC great). Anyone do LOGO anymore? (ooo! Turtle graphics!) There's the various scripting/batch files of DOS, the *nix shells, but these are text only and lack ***simple*** sound/graphics commands and ***SIMPLE*** ways to read input devices (keyboard, joysticks, mice, etc.) that kids will HAVE FUN[*] with. I really miss the SET() and RESET() block graphics of TRS-80 BASIC. and the commodore 128 BASIC's 'SOUND' statement. HyperCard for the Mac wan't bad for the older kid (16+ year old) programmer looking for new ideas, but I think that's dead now too. What creative tools does the SW industry give kids? Dress barbie or Choreograph the Spice Girls. Blargh.

    [*] Fun is really the key. Writing a pong game in BASIC for the C64 was fun because even at age 11, it was doable for me. If programming isn't fun, kids aren't gonna want to do it.

  • English language, machine: people.

    "Johnny, go tell your sister to clean up her room."

    I just remembered this old Metallica song. . .
  • Where do people get the idea that BASIC's syntax is simple? It's not -- it's almost insanely crufty. Almost every single statement has its own special syntax.

    It's only BASIC in comparison to FORTRAN -- and thank goodness nobody's mentioned that :-).

    Me? I think I'll be using Alice (www.alice.org) to teach; it's very motivating. I'll then upgrade to jPython.

    -Billy
  • There was a game years ago called "Chipwits". It ran on Macs (Plus and older) and Commodore-64s and Apple ][s. In it, one programmed a robot character to navigate mazes, find "food", destroy dangerous critters, and avoid hazards. You programmed him in a graphical language called IBOL which was stack based and which had code size limitations based on both the number of panels available and the layout of icons on the panels. My son loved it. As did I. I really wish I could get a modern implementation of Chipwits!
  • My first serious programming was on a TI-30. Well, that's not quite right. It was on a slide rule. ;-)

    Imho, real computing involves numbers. If they can't do that - or if they don't want to do that - that's cool. Not everyone is going to be a programmer. (I hope I remember that as my little one makes her choices in life.

    Graham

  • For kids who have just begun learning to read, LOGO might be a good choice; it's got a dirt-simple command set, and programming the "turtle" to draw graphics is fun. In fact, now that you've reminded me of it, I think I'll show it to my almost-five-year-old this weekend.

  • One of the tragedies of computing in the 1990s is the unavailability of programmable home compuetrs. In the 1980s, kids could experiment to their hearts' content on home computers, which had BASIC interpreters built in.

    Nowadays, they have nothing.

  • by craw (6958)
    Nice advice so far, but what if the parents want their kids to be 3133t? Well, I would recommend that they first learn how to write MS Word macros. To start them off, you could give them samples of all the fine macros/docs on your computer that NAV has helpfully flagged.

    Then it it is on to VBS. Just think of the pride that you will have when your darling children send Grandma a wonderful I Love You note on Grandma's birthday. Oh, this just brings tears to my eyes. But make sure, they don't wipe out Grandma's MP3 collection!

    Of course, proficiency with the CLI is a must. A kid that can't run a root kit shell script,..., well that's just sad. Unfortunately, kids grow up and will not be adorable script kiddies forever. When your kids start to questioned authority (not the gov, but big business), then they will be ready to move on to bigger and better challenges. I suggest they then learn C. Give them copies of DeCSS and Gnutella (ahh, the forbidden fruits). And don't forget to introduce them to buffer overflows using such classics as the WU-FTP, BIND, and Sendmail.

    Finally, make sure they snap up a snazzy nick real quick as all the good ones are being taken.

  • Get them started with Borland Delphi.

    They'll learn :

    • Object-oriented programming
    • Good programming habits from the start (thanks to Object Pascal)
    • The event-driven paradigm that is typical of GUI programming

    --
    Here's my mirror [respublica.fr]

  • The problem I see with this is that it doesn't really teach *programming.* Sure, you can make it print "hello world," but you can't do the sorts of things that kids generally want to do-- games, screensavers, etc. Basic concepts like loops, variables, etc, exist in Javascript, but they are generally de-emphasized in favor of more practical how-to knowledge.

    That's not the end of the world, but I'm not sure it's all that useful when it comes to learning programming skills. You can have an encyclopedic knowledge of HTML tags and JavaScript rollover tricks and still know nothing about coding, whereas playing with basic can teach you many of the conceptual foundations of programming (even if it does stunt your ability to write nice modular code: one of these days I'm going to go look at the BASIC programs I wrote back when I was 10. I can only imagine the spagetti code I must have written.)
  • I'll agree that Java's a decent choice, but I think the big problem there is that there's too much overhead in making it work. You need to declare objects and functions, learn to use the compiler, declare all your variables, and other fun stuff like that. Graphics are also kind of a pain. On my apple ][, I could do a hline 2,50,3, and it would make a line across the screen. WIth Java, you've got to create a Window, create a painting object and put it into it, and do other stuff I don't remember at the moment before anything appears on the screen.

    So I think Java is probably an excellent second language, and it might be a good choice for high school kids. But before that I think something like BASIC is a better starting point.
  • I saw a lot of people on this thread telling the guy to start them right out with object oriented fundamentals... I don't think I've ever met an 11-year old that could fully grok on the concepts of operator overloading, data hiding, and (especially) inheritance and polymorphism.
    I think your own bad experiences may have resulted from the kinds of teachers you had. I'm an old fart compared to you, and we old farts had OOP foisted upon us as one in a series of "programming methodologies", each of which was supposed to save the day and end the "Software Crisis".

    Because it was introduced to me late in my CS education (long after I left college), I was very slow to internalize the ideas. If somebody had taught me inheritance and polymorphism when my brain was still supple and non-judgemental, and had shown me better examples, I might have been a lot more accepting of it. I bet your teachers might have had experiences a lot like mine. Maybe we need to wait another generation before we have really good OOP teachers.

    Kids have enormous mental flexibility, and if you can hold their interest, they can learn an awful lot. Having hacked Python for a few years, I now find OOP totally natural, and I'm not unusually intelligent. It would astound me if it proved to be really impossible for kids to get this stuff.


  • What first got me into programming was a little program for the Commodore 64 called "Arcade Game Construction Kit" All it was, was this gui thing that let you create sprites and sounds background drawings and make a little top-down run-n-shoot game out of it (think "Rambo"). There was no programming involved, it was really fun and easy, and it got me thinking about things like system resources and what could and could not be done with that particular machine.

    Well I enjoyed and used that program so much that after cranking out 3 pretty cool games, I began to outgrow it.

    Next thing my dad knew, I turned 14 and for my birthday I asked for the C64 programmer's reference guide (basically a big thick book detailing the 6502 (?) assembly language) and the rest was history!

    I didn't really even know about "high level languages" like C until I was around 16.
  • Absolutely. I started to learn to program in logo on an apple 2e when I was in 4th grade (10 years old). Logo was the only language we had. By the end of 5th grade I was already banging my head against the limits of the language and the computers.

    Go ahead and start them out with C or Pascal. Visual Basic, for all its simplicity, has some severe limitations. C, for all its supposed complexity, has a very concrete and clear, if abbreviated, syntax. You don't have to, and absolutely shouldn't, try and teach them all about pointers until they have learned some about programming. By that I mean how to think through the algorithm and structure the program so that it works and is understandable. I think that was the most important thing I learned from the logo teacher I had in middle school. She knew how to teach the programming, completely independent of the syntax.

    If you're kids are itching to get into programming, then they're probably smart enough to learn it.

    One other thing to remember: It was years (YEARS!) before I ever wrote a useful program. Don't worry about thinking up useful programs at first. Think up programs that will teach the programmer how to program better!
    -Matt
  • I disagree...

    BASIC is a great starter language, because it lets you do exactly what all programming is: tell the computer what to do - and it does it very, very simply. Data structures are important, yes, but only to us people. The real meat is that we tell the computer what to do; everything else is eye-candy and syntactic sugar. Trying to get kids interested in arranging their bytes is like trying to teach them good martial arts - they like the noise their fist makes when it slams into the focus mit, but they don't care about body positioning for better power; just like they will think it's neat if their POKE 54328,15 command changes the background color, but won't care about arranging their integers in a linked list.

    You can get kids to practice good body positioning, or make linked lists or whatever, but you can't make them care about it like adults... they are still kids, after all.

  • As a 5th and 6th grader, I spent hours messing around on Hypercard at my school's mac lab. I don't know if many of you have ever seen it, or if it is even still around, but man it rocked.

    Basically, it was like a drawing program when you first learned to use it. You had toolboxes of fill patterns and paint tools, and just drew on the screen. Then, you want to start a new page. Well thats where "cards" come in. Choose the "new card" option and you get a new blank page. Each file you work with is called a stack, as in stack of cards. Then you find you can do things like editing a universal stack background, so all cards will share a background.

    Then you start noticing these other icons in the tool box - buttons and fields and such. Instead of having to use the text paint tool to put text on the page, you can make a field that can be moved around, and have its text edited at any time. For easy navigation, you can put buttons on a page and easily link them to other pages. Perhaps make a memo page at the beginning. Neat. Now you know enough to make any kind of powerpoint style presentation.

    Many hypercard users just stopped here. But wait! Hypercard had it's own scripting language, called hypertalk. How does that button I made before know to go to that page? Hmm, let's see here, it has a "script" which says,

    on mouseUp
    go next card
    end mouseUp

    (note - "go to" meant the same thing as "go". also, you could specify a card by number, id, or relative position to current card)

    Actually, everything had an associated script - buttons, fields, cards, backgrounds, stacks - able to control any property and handle any event. I strongly suspect visual basic was modeled after this. Visual basic is more feature rich for designing an application, but man, hypercard was great for a kid fooling around.

    The language was great too - it was an autoindent type thing that read almost like english. You could guess what the command for something would be without having seen it before. And you could bring up the messagebox for a command line interface. It was great stuff. By seventh and eigth grade, I had made a chess-playing stack, and gotten into encryption. My friends and I would invent codes, and use hypercard to "implement" them. I had a card with two fields - you paste something into one, hit the "Encrypt" button, and your ciphertext goes into the other. We actually had challenges where we'd invent a code, tell the other guy how it worked, and he'd try to write a routine that would break it (little did I know that this is EXACTLY what cryptographers do). Once we had enough imagination to get past simple substitution ciphers though, we could never break each others codes. Oh well.

    Anyways, the thing that made it so much fun was that it was so spontaneous. For kids, you don't want something that makes it into an engineering discipline requiring planning and design. You want it to be like a moist, malleable clay that a person can just sink his hands into and mold and mold and mold...

    --
    grappler
  • You can teach the basic concepts behind regular expressions (just using letters and *?[-]()^$) in a few minutes, and then challenge kids with questions like:
    • Does /ban*a*/ match "banana"? Why or why not?
    • Write a regular expression that matches both "knife" and "knives".
    • How many regular expressions can you come up with that will match both "cookie" and "cake"?
    • (For kids who are taking Spanish:) Write a regular expression that will match as many forms as possible of the Spanish verb "hablar".
    • Go back to one of the regular expressions that you wrote when answering a previous question. What other English words does it match?
    You can do a lot of exploring, brainstorming, and analysis with paper, pencil, and blackboard. Then you can sit down at a computer and type grep 'ban*a*' /usr/dict/words, or a Perl one-liner that does something similar, and look at the results.
    --
    "But, Mulder, the new millennium doesn't begin until January 2001."
  • A resource for those interested in introducing kids to programming - last year, we held a conference for Grade 9 girls, and the sessions I led made use of "The Virtual Family". This applet (and tutorial) was designed to interest junior high school kids in programming, and teach them some fundamental Java concepts while allowing them to mess around in the code, make changes and see the effects. Most of the kids enjoyed it, and several of the really keen ones requested copies for home.

    You can The Virtual Family applet from the SWIFT site [cs.ubc.ca]. They will send you a cd containing the source code and the tutorial (which is the coolest part IMHO) if you sign a NDA.

    YS
  • Strongly seconded. Studying existing code lets you experience maintenance, which is a crucial thing to know. :)

    I learned mostly from other people's code.
  • by Skinka (15767)
    Yes, basic is a real crummy language. Yes, one of the first thing it'll teach you is how to use goto's. Yes, I think it's the best language for small kids. Basic is good for this particular purpose because you can write a working program without learning any theory. It would be downright cruel to give a 700-page Java book to kid who just wants to make something. Basic may not last very far, but it will help your kids to decide if they are at all into programming. Besides, for a programming newbie a program that simply takes two ints and sums them is a triumph because for the first time they can say "look *I* wrote that program".
  • I think this is a little harsh, like throwing a kid into the river to learn to swim. Although they may learn to swim, their attitude towards you and swimming may not be as desirable.

    I think the post about mindstorms is a good idea. Most children have a short attention span, C, C++, Java, etc is not something you can correctly grasp and understand in half an hour while the programming interface that comes on the Mindstorm CD is. Once they get bored of Mindstorms (a few days) you can talk to them and get a feeling for where they want to go from there. Most hardcore or mediocre programmers are going to say "Eww, the mindstorms graphical interface is horrid." while most programmers don't seem to want to admit or remember that they didnt know how to program in a split second. I started off using BASIC when I was 4 and moved onto Hypercard on the Mac when I was 6 or so followed by perl and C then Java. I imagine if my dad had thrown a C book at me I probably would have handed it back to him and loaded lunar lander back up..

    Also, don't push too hard, if they don't want to be programmers, let that go. If you push too hard they may retaliate and view programming as something they never want to try again...

    Good Luck,
    Geoff
  • I would suggest either of the following

    LambdaMOO! (a MUD with a single inheritance prototype based object oriented language ... see http://www.moo.mud.org/ and telnet://lambda.moo.mud.org:8888/ for more details)

    Squeak! (original Smalltalk-80 updated with multimedia extensions, a new prototype based UI called Morphic, ability to play Flash, Quicktime, etc.)

    Either would teach important concepts of object orientation, prototyping, simple clean syntax, and have direct concrete results that younger people love (in LambdaMOO you can write methods on your "things" to make them do things in the room you're in, etc. and get immediate feedback)

    ryan
  • Lessee... Around 8-10, it was BASIC on a TRS-80. Then, as a HS senior, a semester of C that was all but forgotten. Next, as a sophmore in college who was beginning an undergrad research project, it was FORTRAN 77 on VMS (later HP-UX). As a grad student, it was an eclectic mix of F77 and F90, with an intro to C++ thrown in. Then I picked up PERL so's I could do some personal web projects. Finally, when I got a job as a software engineering consultant, it was on to (PL/)SQL.

    I can't think of a one of them that I'd want to START on... Maybe FORTRAN. It's a very straight forward language for the most part.

    Eric
  • Squeak [squeak.org] has a lot going for it, but familiarity for Windows users is not on the list. Probably a better choice would be Dolphin Smalltalk [object-arts.com]; it "feels like Windows" (a good thing in this case), it's a real Smalltalk, it comes with good tutorial documentation, and there's a free (as in beer) version available.

    Good news: Smalltalk was designed (back in the 1970s, assuming computers as powerful as we have today!) to be a programming language for kids. Bad news: Really smart kids took to it like fish to water, but most really struggled.

    Those of us who cut our teeth on punch cards and Teletypes were used to command line (or worse) interfaces and text programs. Today's kids aren't; even typing Smalltalk programs may bore them.

    Consider Stagecast Creator [stagecast.com] or Toon Talk [toontalk.com] as a couple of purely visual development environments. They're more suited towards development of games and simulations, but that's a plus if the goal is to get your children excited about programming (probably the right target at first).

    Here are a couple of stories about teaching kids to program: This one [kidsdomain.com] from Kids Domain has a lot of links to resources, while this one [suite101.com] from Suite101.com is an interview (with fewer but entirely distinct links).
  • Where was that area, anyway?

    I remember seeing some article back in the day that listed the most popular BBS software by region, and like, only near Washington D.C. was WWIV insanely popular. Everywhere else, except for CA, it was hardly used at all.

    Mainly, I wanted the code.. I wanted to go in and change stuff around.. and man, $70 as a kid when I was 14.. that was a FORTUNE to me. A lot of lawn-mowing and snow-shoveling :) And when I had that code.. wow, I was so happy. I remember the long distance calls on my 2400 baud modem to the nearest WWIV distribution site in NC to get the latest version when it came out, as I couldn't wait to get at it.. proving if you are passionate enough for something, you will -want- to learn it, even if you are young and inexperienced.

    As a side note, if you were in the WWIV area, what BBS did you run? I ran The World's Address in Northern Virginia for some time, and started up a network called FearNet, that grew to like 3rd or 4th largest overall at some point - until everyone died and went off to the internet.

  • A great tool I have used with my 11-yr-old son is Tcl Robots. Basically, it's a Tk application where the user writes small Tcl procedures to control robot "tanks" around a battlefield. You provide the algorithms for how to move, when to shoot, how to scan for enemy tanks, etc., by writing a procedure in Tcl. The program then runs your tank against other built-in or user generated tanks on a battlefield canvas (the canvas is part of the program, not created by the user).

    This has had several good effects: First, the kids are doing actual coding in a real programming language (albeit Tcl, not C). Secondly, they get very quick results in a graphical fashion. Third, several kids can write their own tank code and compete against eachother, which can raise the level of interest by making it kind of a game for them.

    I wish I had access to the URL right now, but a google search would likely turn it up quickly.
  • Well, like most folks here, I started my "real" programming with Applesoft BASIC. But, before then, I used LOGO, and I think it really helped me get started.

    Python (which is a great, great language) is making a big "Computer Programming For Everybody" (CP4E) push, and you can check out their education special interest group right here. [python.org] I think it would probably be more appropriate for 7th-12th graders, though.

    You can actually find a decent amount of material on Python for education here as well. [tux.org] One great thing about Python is the ease with which you can develop GUIs without using GUI builders. Not that there's anything wrong with GUI builders, I just question whether they're helpful for beginning programmers, who end up spending more time learning the interface of the particular IDE, rather than learning to program.
    --JRZ

  • The subject says it all. They can learn to program while building their own robots. Very cool.

    BTW, kids are smarter than you think :) I taught myself BASIC on our TI/99 when I was about their age, maybe ever a bit younger. Get them programming or building their own computers at an early age.
  • The best way to keep them interested is to give them what they need to get results quickly.

    Start them in a language that has little infrastructure overhead, such as Visual BASIC, or Perl... Nothing with #includes and everything wrapped in a function and all that... Save that stuff for later.

    Whet their appetite by accomplishing little things first. Start with teaching them to write a "guess the number" type game perhaps.

    As they absord that -- and they will absorb it quickly -- move on to new stuff.

    Once they have a sufficiently broad set of "tools" at their command -- basic flow-control (loops, conditionals...), I/O (producing output to the screen, reading user input), variable manipulation -- you can introduce more complex concepts.

    It'll be a while before they understand *why* "goto" is generally bad, functions are good, and encapsulation is neccesary to ensure one's sanity but they will gradually get there.

    The really tricky part is presenting this with correct timing. Don't go too fast -- they'll get confused -- but don't go too slow -- they'll get bored. And as above, any kid is going to get bored if they can't recognize progress and accomplishment in their efforts.

    -JF
  • Logo is damn sweet. I was the turtle mutha f---in' masta when I was 4 and 5.

    After that you have to find what it is the kids are in to and then give them the right tools. Pascal, Java, Modula-3, Python, and Smalltalk are all great. Simple, elegant languages that are easy to learn.

    I would hold back on C and C++ until they are a little bit older, I think I was about 10 when I started to play with C and it was really tough until I was maybe 13 or 14 and started to really grasp the concepts..

    I think those robot lego toys are pretty cool, I've never used one but I bet it would captivate the hell out of me when I was 6-12. Hell it might still and I'm, 24.

  • Kids that age (11-13) enjoy getting things done and seeing things they created. If you can sneak some learning in there, that's a bonus. If little Billy can sit down at the computer and 15 minutes later have a compiled program that does something cool, he'll probably stick with it. If he spends 45 minutes getting compile errors, he'll probably walk right back to the Dreamcast. I think VB would be a great way to start a kid down the road to geekdom.

    -B
  • by jetpack (22743)
    You people are making me crazy with all these suggestions. The correct answer to this question is obviously INTERCAL [tuxedo.org]!

  • Programming is one of the hardest things that we have ever asked the human mind to do. We are not built for the kind of internalization of flow and structure that it requires, and we are certainly not built for the level of perfection it demands.

    As such, not every one CAN do it, and most that CAN do it, CANNOT do it easily, or well. (this is true, how many gurus do you know? How many midlevel people do you know? I rest the case.)

    So we need help. And like everything else that people do, learning this task requires that we internallize certain things. If I am a golfer, I will be forced to internalize a representation of the ball and my club if I intend on getting good. This does not mean that I will be aware that I have done it, but If I want to be able to plan consequences, I have to have an internal model.

    So in programming, if I am to become a Programmer, as opposed to just playing with a toy language for a bit and dropping it, I have to internalize as accurate a model of how a computer works as possible, and that means Data Structure and Flow Control.

    I cannot do anything so rediculous as "Programming the way I think" because I AM NOT A COMPUTER. If I programm in a way that works, and seems to be "The way I think" then it is because I HAVE LEARNED TO THINK THAT WAY.

    So, In conclusion, it is not programming languages that *should* force a programmer to think in certain ways, it is Programming At ALL that DOES force a programmer to think in certain ways. And programming is what we want to teach.

    ---
    "Elegant, Commented, On Time; Pick any Two"
  • Languages aside for the moment, because there is no one true language. One major factor I remember from my earliest days is *seeing* source code, and then *typing* it in. It creates the connection between mind and fingers. It turns the code into "I typed it in, therefore I can change it." The problem with just getting all your sample code on disk is that there's a message associated of "Ooo, this came with it, I'd better not change it." And maybe you tweak here and there, but you're just not as intimate with the code that way. It takes you longer to find things, for example. You want the code to be yours. When you make your first change, you don't want to feel like a stranger inside somebody else's creation.

    Also, while I'm at it, games are always a big plus. Kids love to hack games. Go to your local BestBuy, since I know they sell them, and pick up whatever's the equivalent to "Game Programmer's Development Kit". i first saw it in QBasic form, where it would come with an IDE, and the source for a bunch of games. These days they have a similar thing out, only for Java.

  • by delmoi (26744)
    It may not be as fast/whatever as C++, but the tools are free, and its way better then visual basic
  • I started programming when I was 12.

    * I started by writing small programs and games in Atari 800 XL's BASIC.

    * I tried to learn Assembly, but I just couldn't understand all those wacky mnemonics. Though, I did write some hardware code.

    * I wrote with AmigaBASIC on the Amiga500. My next language was AMOS, which I still find to be pretty good as a BASIC variant.

    * Then I learnt 680x0 Assembly, and I wrote intros/demos with that, and learnt hardware access. 3d gfx was my fave.

    * I learnt C and Pascal on the Amiga. I was using a pirated version of the SAS/C :P C and C++ came very natural after assembly!

    * I was forced to program in Pascal and Java in Comp. Sci. undergrad. But I insisted on C++. I also enjoyed LISP/Prolog a lot, I think LISP could also be a good starter after assembly!!

    * I now code mainly in C++, but have an interest in new / interpreted languages and lang. design...

    So, that'w how my evolution went. I strongly suggest *clean* and *featureful* BASIC variants with which they *won't* be making GUI's but plain graphics and games. That's how you get to learn real programming (He he, demo scene rullaz!)

    Then, the kids will want to check out networking, and they can practice with Perl about TCP/IP stuff, I guess. (Not so scary)

    Java may seem like a pedagogic device, but avoid at all costs! It sucks. It will distract kids from the joy of programming, too dry... (Juice is what we're after, right?) [Java zealots write to my e-mail addy and if you're a Sun executive you get special treatment!]

    Don't tell them that C is the ultimate language; it isn't. Let them play with the following paradigms in the evolutionary order

    * Procedural (BASIC, Assembly)
    * Functional - Symbolic (LISP, PROLOG!)
    * Data driven - (FORTRAN, C)
    * Object Oriented/Generic (C++, Ada...)

    That will get them to understand why that language is done that way. The best is to pick one language from each generation of languages... BTW, as you see there isn't another generation after oo/generic languages, because there isn't.

    If you show them a RAD tool, they will think that programming is all about GUI's and databases and trivial networking. It isn't. It isn't. It isn't. Get them to read some computer science stuff, like sorting algorithms (even consider some excrepts from Knuth!)

    This will get you going :)

  • I started ata bout 8 years old. My grandfather gave us his old Franklin Ace 1000 he was retiring in favor of a brand-new spiffy (*gasp* IBM XT). I used the machine for some games and stuff, and i wanted to make a couple games of my own, but didn't know how. Luckily both my mother and my 3rd grade teacher knew BASIC and they both taught me what they knew. This was enough that i could make a text adventure (more like a choose your own adventure story) where the program would output some stuff, and then prompt the user to choose among a few options of what they wanted to do next. THen i made it a little more complicated by using the random number generator to make some of the decisions, and then i went a little further by doing some calculations (as in i'd ask the user how much fuel they wanted to buy, and kept track of the usage...)
    I think that starting people in a text environment is good, because it provides a liniar, Input->Proccessing->Output flow model which will help them later in life (i run into a lot of programmers who started with threaded GUI environments who can't make or read a flowchart to save their lives, and who can't debug a simple state machine). These more threaded/event driven models are best learned once one has a good handle on logic and program flow.
    Also the text adventure format is nice because it is rather timeless. I still fire up and play some of the old text adventures i've played since elementary school (i'm 21 years old now, and working full time as a programmer) but all those years don't take away from the appeal of a good text adventure.
    After i had that down, i did most of my other learning (except for a pascal class in middle school) on my own. I took apart existing code (something that was possible then, and now due to open source, is possible again). I read books at the library. I talked with others with an interrest in programming. If anybody had told me it would be a marketable skill, i'd have laughed at them, but it has provided me with steady and decent employment for the last several years, so go figure.
    Now i think that starting them in BASIC may be a good idea still, but i would go for a console based BASIC rather than a GUI based setup. I also think that moving to C or C++ should happen before GUI stuff is added. But most of all, don't rush them, give them the seeds, and they will pick their own direction, etc...

    =:-) -lars
  • First of all I'd say you know your kids best and you should best be able to know what would interest them and what would turn them off. Also you can ask what they want to know or be able to do.

    However, you can't always work that way. Before you can do the really exiciting things like writing games like the ones you play, you have to start with the basics.

    All that being said I'll offer how I got started if that can be of any help. My first interest in programming was when a friend of mine made some program that did some calculation and showed the class in 5th grade. To put a time line on this I am 19 and a college sophmore now. Anyway, I asked my dad to teach me how to program (he is also a computer person). He started teaching me GW-BASIC from a book. We would go through the book together and do the exercises, I could ask him question, and I after writing something pretty much out of the book I might decide I want to make it do something else and we'd figure out how together. I still have the 5.25 floppy with all my first programs. They mostly printed my name repeatedly in random colors or drew stuff.

    BASIC is a terrible language but it is meant to be a teaching language (*Begginers* all-purpose symbolic instruction code). I don't know if that is still a usefully way to start (with QBasic) because when I learned people still used DOS, but I think you have to start with text based stuff which is simple before you use graphics and Object-Oriented environments.

    When I was in 7th grade I started working in QBasic and learned alot from a friend who was amazing at it. I read his code, tried to emulate some of the techniques. I got VB2 and learned a bit about how windows worked.

    In High school I learned PASCAL and C++ but alot of what I learned an figured out had little to do with the teacher and more to do with my ability to take what I had previously learned and figured out about programming logic and use the Borland C++ help files to help me apply it to C. Eventually I replaced VB with BCB. A friend helped me get started with Linux but after a while of asking him questions all the time I became self-sufficent. I have taught myself Perl, PHP, MySQL, mantaining a linux system, and an Apache webserver all in the last year.
  • You've just written another book.

    Has VA realized this revenue stream yet?
    --
  • Alice is a lot of fun, and a useful learning environment, but it tends to make your system unstable.

    Q: "My machine's messed up, and I don't know why."
    A: "Try uninstalling Alice"

    is a somewhat frequently heard snippet of conversation around CMU.

    --
  • Webmonkey has a good javascript tutorial:
    http://hotwired.lycos.com/webmonkey/programming/ javascript/tutorials/tutorial1.html

    they also have a kids page but it's all html, no javascript yet:
    http://hotwired.lycos.com/webmonkey/kids/

    When they start getting annoyed with the limitations of javascript they could easilay move into java.
  • get them hooked on computer games... all of them, but especially the classic brain-bending ones... Like Zork or Enchanter or any Infocom games, Ultima III,IV, etc. These games challenge young minds and make them want to further explore computers... Get them hooked on the games, and they will want to learn how to code. Alternatively, get them hooked on music, there is a strong correlation between good coders and music.
  • When I was 12, I started learning Basic in school (on Apple IIs at school, C64 at home). I quickly realized that Basic would not permit me to create the games that I could buy at the store. That made me wonder what those were programmed in. Asking around a bit, I was introduced to assmebly language.

    Not realizing that assembly was supposed to be too much for a kid, I bought a C64 programmer's bible (which covered the assembly instructions) and started teaching myself. In no time, I had a working knowledge of assembly, and from that point on, I've been in love with programming.

    The great thing about learning assembly early is that it makes learning other languages (Fortran, C, C++, etc) not seem so forbidding.

    Steve

  • I haven't tried it, but I too think that HTML/Javascript might be a good idea. It has some features that are good for beginners, if not for more mature programmers, like not having to predeclare variables.

    It also scales nicely: you can start writing straight-line "global" code, then introduce functions, then introduce objects.

    It also teaches C syntax, which will help get them into Java and C later.

    You can build displays in HTML/CSS, which don't really require programming skill, and then script them with Javascript. That's a nice learning curve, and gives you nice concrete structures to manipulate with your programs.

    You can build interfaces and graphical stuff (very COOL graphical stuff soon, with SVG), and do lots of other things, using the powerful libraries built into modern browsers.

    Another nice thing is that when you've done something, you can put it on the Net and show all your friends, or email the results around.

    Also, these skills are very useful and marketable.
  • by cr0sh (43134)
    A lot of good suggestions so far...

    However, what I think would matter far more than just teaching a child to program, would be to teach them to think logically about solving problems, and to use those solutions for similar, future problems. This style of thinking will help them in every area of life (and, regretably, possible stunt them in other areas - anyone who has tried to work logically with their non-logical SO knows what I mean).

    Don't push them, if they don't like it - let them seek thier own level. You sound like that kind of individual already, noticing their clammoring for wanting to program.

    Depending on their ages/interest - you might try starting them out with a Mindstorms set (I know others have suggested this) - let them play with the built in system/ide that it comes with, then progress them into something like LegOS or NQC - to teach them further coding fundamentals. Always answer thier questions, and if you don't know something, tell them so (they'll appreciate you honesty), but also tell them you'll find the answer - then go out and find it.

    After playing with these languages on Lego - if they are still interested, you have a couple of ways to go - you could go the route of learning real robotics (progress by building a parallel relay box, hooking the Lego motors to that, then code in a regular languge, such as C/C++, to control it all - then after that, move to using a soldering iron and tools more to build real robotic devices), or take the "virtual" robotics route, and lead to small scale AI for game programming (game programming can teach a lot about many programming side areas - DB management, arrays, sound, graphics, etc).

    If they enjoy tinkering and building their own stuff, Lego is especially the way to go...
  • The most important thing when introducing kids to computers is getting them to structure what they want to do, and to understand the difference between the structure of the problem and the cruft introduced by the programming language. Consequently, the very last languages I would introduce them to are languages like BASIC which does nothing to assist clarity and structure, or PERL which has very unclear syntax.

    There's no point in thinking about what languages are currently popular in the industry, because if you're dealing with ten and twelve year olds by the time they're adult something new will have come along. This industry changes rapidly. But the fundamentals don't change; algorithms are algorithms whatever language you write in, and ideas of structure, modularity and granularity are fundamental.

    So any of these things would in my opinion be good choices:

    • Logo - especially for younger children
    • Scheme - probably for shildren a little older
    • Smalltalk
    • Java

    I personally play with and hugely enjoy Lego Mindstorms, but I don't really think it's good for kids. The programming system which comes with it is really poor, and none of the programming systems which other people have developed for it really seem suitable for kids - except, possibly, a smalltalk-based one which only runs on Windows and consequently I haven't tried.

  • Don't underestimate your kids by teaching them something that you consider sub-par.

    I quite agree. But graphics feels more cool when you're 10 or 11 so be sure to get them doing something interesting like that. (Mandelbrot set? Just tell them the rules they don't have to understand the maths). Also, make sure there's plenty of example code around for them. I got really frustrated when I was 10 cos I couldn't get scanf working properly. Some example code would've been great. What I would've done for some free software code like there is now! Gah, kids have it easy these days ... :-)
  • This is tough. I started with BASIC on my TI99/4a back in '82 or so. It was bad. The Extended BASIC was pretty good. I could do lots of graphics and animation which kept my attention and kept me wanting to program more and faster stuff. I briefly did a little Forth, then assembly language. Many years later I do Java primarily, some C, and some Python.

    My son is 5 months old. I have a while before I have to deal with this, but I would prefer he learn a language without goto's (or at least doesn't need them much). It would probably help kids if they didn't need to worry about variable types. I don't want to have to explain the difference between a long and short to a 6 year old. Python comes to mind, but python have cool libraries that your kids would like? Graphics and animation appealed to me. I doubt they will want to jump into file I/O or database interfaces.

    What ever happened to Logo? Another thought: what is used to program Lego Mindstorms? That would probably interest them.

    -tim
  • My first official procedural programming class was in Pascal. Pascal was designed as a language for instruction and it does quite well for that purpose, leaving complicated things like pointers under the covers (but still accessible if necessary), while supporting clean and intuitive top-down procedural design. Of course, it isn't object oriented, which is where Delphi comes in. Delphi is Object Pascal, the OO superset of Pascal. So Delphi can first be used to teach the kid normal, procedural console programming. Then graduate them up to OO concepts. And then onto full OO RAD GUI design. Delphi is really great in this respect...you can go from the very basics, to creating a full-blown OO and/or GUI app really painlessly. You don't have to expose any of the complicated stuff early on, unlike with C and C++ where you must have a tome of knowledge in your head, and a penchent for reading cryptic runes before you even create a Hello World. The language scales ;) As is evidenced by the fact that Delphi is (or at least was, last time I checked) Borlands #1 selling product. Plus, Object Pascal is being brought to the Linux platform with Kylix, which is a great bonus, and will provide a smooth transition (hopefully) for moving from Windows development, to Linux development and understanding.

    I really started with BASIC, but I don't think that is the ideal beginning language. It is loosely typed and doesn't give the same intuitive structure Pascal does (we should not have to explain the peculiarities of "DIM" and "REDIM" or the weirdness of different starting indexes, or that a type of variable can be denoted by the symbols $, #, !, %, & (*UGH!*)).
  • VB is an excellent language for teaching, as long as it's taught right... which, unfortunately, it almost never is. VB courses always seem to get hung up on windows and widgets, and hip technologies like ADO and web front-ends. Object-oriented concepts often don't come up at all, even though VB is about 80% as object-oriented as Java (and the next version will supposedly be 100%.)

    Maybe the solution is to use VB, but forbid anything "visual" until the students are comfortable with programming. MS has a library floating around somewhere that lets you do console I/O using COM (I think it's part of the WSH,) so it's not too hard to write a full-fledged console-only app in VB.
  • I learned BASIC on my Tandy CoCoIII when I was 10.

    Way back then we had to use things like gosub and line numbers. I think QBASIC comes, slightly hidden, on the Windows CD, or you could teach them pico, and use basic on *nix.

    A very high level language like basic, or pascal is definately the way to go when teaching beginners, especially young ones. Even if you can't re-use code when you mature, you keep strong programming concepts such as loops, arrays, functions, subroutines, etc. Which make other languages much easier to get into.

    hint: don't teach them about pointers and objects, ok? (-:
  • Personally, I'd recommend teaching an object oriented language first.

    Don't get them started on the procedural path for a number of reasons:

    1. It's slowly dying out.
    2. It's a lot easier to grasp procedural after OO than the reverse. (since any OO language can be reduced to a procedural language.)
    3. There's no reason to follow an evolutionary path. Just because we did things in a certain order doesn't mean our kids have to repeat our mistakes.
    4. OO languages almost force a better methodology when designing code.
    5. If your kids program some good ideas in an OO language, they're easy to steal for work. :-)

    Kids don't need to understand why a language is done a certain way. If they want to know, they'll ask, but there's no reason to teach them hieroglyphs and then move on to the alphabet so that they'll understand why the alphabet is used instead now.

    Give'em the most advanced tools available.
    Give'em something they can get immediate results from.
    Give'em something that doesn't teach bad habits for the future.

    KWiL

  • it seems so obvious - has someone done this? is there a Mac or Linux front end I give to my kids?
  • In my experience Mindstorms works great. My son and I used Lego Mindstorms to build a mini-sumo robot and beat 17 other entries first time out! We have also built and programmed numerous run-around the floor robots and a bar-code reader/candy dispenser. Several things are good about Mindstorms. You can build active, interesting *fun* robots, and fun is *most* important. You see the results of your program in a real manifestation (show me a 10-year-old cares about "Hello World?"). The Lego programming language is very drag-and-drop visual, and is dead simple to get started with. Once you get going there are several other languages to use. I use NQC (not quite C) which has a very c-like syntax and a reasonable programming environment called the RCX Control Center. More info on NQC is at: http://www.enteract.com/~dbaum/nqc/index.html . There is also a Forth variant and another low-level language called, I think, LegoS. The last 3 all run under linux. NQC also works with Windows.

    If you get interested in robots, there are several systems based on a series of microcontrollers called BASIC STAMPs. These, as you might guess, are programmed in versions of BASIC (running under DOS). The advantage here is you can teach some electronics fundamentals along with the programming, again in a real-world environment. the Robot Store, http://www.robotstore.com/ has lots of resources.
  • I don't say java just because I do it. I say it because it's a middle range language.

    If you learn java, VB is easy. Cold Fusion is easy. The syntax is similar to C. It really has a great sense of programming logic to it.

    Java is great online, it has inheritance (woohoo!), networking built in, it's multi-threaded, it's FREE, it's growing so rapidly.

    Java is expanding into neat stuff like speech recognition, telephony API, JavaTv API, RMI (remote method invocation), embedded stuff, OS work, (cute mascot), etc etcetc...

    java is free, abundant, and useable.

    Fook!
  • by PHroD (1018) on Friday May 26, 2000 @10:25AM (#1045060)
    i really think that Lisp, or better yet, Scheme, is the way to go for teaching kids to program. it teaches algorythms etc, rather than structure (which changes from language to language)

    check out www.schemers.org [schemers.org] for more information

    -------------------------------------------
  • by bhurt (1081) on Friday May 26, 2000 @11:07AM (#1045061) Homepage
    Start them on object oriented from the get-go. It's syntax is also good at catching "newbie errors".

    What I _wouldn't_ worry about is teaching them a "toy language". Of course they'll learn other languages. Do NOT start them on C or C++. Yes, those are languages "professionals" use. So? You don't learn to drive in a formula-1 race car or an eighteen wheeled semitruck, despite the fact that is what the "professionals" use. You don't learn to fly in an F-16 jet fighter. You learn to drive in a Geo Metro with an automatic (or equivelent), and you learn to fly in a piper cub.
  • It's got the merits that:
    • It is a reasonably nice dynamic language with a (unsophisticated) form of garbage collection.
    • It has a very clean design

      Not involving huge quantities of "line noise" or other such punctuation

    • Types tend to be associated with values rather than with variables, which is a nice change from the Pascal and C descendants.
    • It offers a reasonably rich set of algorithmic abstractions.
  • by Da w00t (1789) on Friday May 26, 2000 @10:35AM (#1045063) Homepage
    You need to get your kids started in LOGO. Yes, the little turtle who leaves lines on the screen -- Visualization is key. Let them figure out that they can create interesting drawings with a simple loop. Logo was what got me started in programming. I had a 5.25 floppy disk FULL of logo programs. Geez.. those were the days...

    clearhome
    pendown
    fw 45
    rt 160
    fw 45
    rt 160


    da w00t.
  • by drix (4602) on Friday May 26, 2000 @02:22PM (#1045064) Homepage
    Oh, I heartily disagree. There are certain fundamentals you need to get down before you start toying with the "most powerful" tool available. You don't throw someone into the middle of the Atlantic Ocean to teach them how to swim. People need to be learning procedural programming before they jump into the quagmire that is OOP. I saw a lot of people on this thread telling the guy to start them right out with object oriented fundamentals, Python, Java, C++, etc. This is just totally wrong. I know this because I tried; I have been learning C++ from age ten until present (17) and I still don't have a clue what I'm doing half the time. It's not like I had bad teachers or anything; there are just a few things that kids are too young to get. I don't think I've ever met an 11-year old that could fully grok on the concepts of operator overloading, data hiding, and (especially) inheritance and polymorphism. I'm sure that there are a few that do, but these are /not/ the things to be learning as a first foray into programming. Give the kids BASIC or Logo and allow them to learn at their own pace. Hell - give them Algebra. I can't think of a more valuable skill to know that understanding the significace of variables, functions, return values, and the like.

    --
  • I was going to say the same thing, but you beat me to it friend.

    Folks, mod this guy up another for me!

    More detail: Python is an object-oriented language built as such from the ground up, un like C++ which is none the less derived from C and has less syntactical conformity (and I say this where my only difference with the above statement is that I perfer C++ slightly over Python, though Python is a close second.) Not only that, but Python is a great numeric language with native Ultra-Long integer type and a complex number module build in. With the LLNL PyNum Numeric Extensions. Couldn't find a good implementation of the Gamma function over the set of Complex numbers, but I guess your youngins' ern't inta that yet. :)

    Another possility if you wanna get retro is do what I and doubtless you did: teach them on the C64! That is, get one of the variety of C64 emulators on the net and let them programme their hearts out in Basic. The great thing about the C64 is that because it uses PET/ASCII with all those graphics character in the characters with the MSB high so it's pretty easy to use graphics without having to use MoveTo, LineTo and the DC (if you do go the Windows route -- though so far all I've suggested exists in Linux-port form and I don't recommend teaching X-Motif just yet! :) The point is, it's much more WYSIWYG and really easy to come up with some cool stuff. For instance, I wrote a character editor for the C64 which was quite a fun project. The advantage is that the entire operating system is Basic so you have to be a programmer from the beginning just to use it. :) Disadvantage: it's a Proceedural, not on OOP language.

    A good list of available emulators can be found at http://commodore64.net/emulators/ [commodore64.net]

    The other thing I would strongly recomend is Logo. Logo is graphics and geometry application in which the user controls a 'turtle' by simple geometric commands. This is a great tool for learning the [most] basic principals of Graphics which I'm sure your kids will be most interested in because of their love for games. They can use it to draw their own pictures using basic proceedural programming techniques such as loops and recursion.

    You can get an MS Windows version of Logo at: http://www.softronix.com/logo.html [softronix.com].

    You could also download a Linux port of the Berkley Logo Software from this University of North Carolina at Chapel Hill software archive [unc.edu] though you may need to check out Steve Bakers' Software Page [airmail.net] if you have any problems with the port.

    Anyway, Python DOES have a pretty good graphics library and with TCL/TK you could even teach them a bit about interface design and with PIL you've got Graphics so that's just about everything. Anyway, at least I would choose one or more of those three options and make sure in time they should try to learn them all.

    One last note I should make is it's you be very helpful to their overall understanding of programming and logic if they could learn at least one rule-based language down the road, such as Scheme [indiana.edu] (thank you Professor Romanik! :).

    Be Seeing You,

    Jeffrey.

  • by Weasel Boy (13855) on Friday May 26, 2000 @10:38AM (#1045066) Journal
    Forget the langage. You can teach kids good programming technique in any language, and kids don't get hung up on the stupider elements of programming systems the way we dinosaurs do. Programming skills aquired in one system can be applied to any other.

    What you need is strong motivation. If your kids are anything like I was, that motivation is games. Do you have any games that support scripts or macros? Use 'em! Another poster suggested Lego Mindstorms. Great! I happen to enjoy MUDs, some of which allow extensive player programming. Even for the ones that don't, a specialized MUD client will.

    My point is, exploit your kids' desire to excel in their game, or make their own. They'll learn. Faster than you'll believe. It worked for me.

  • by seebs (15766) on Friday May 26, 2000 @10:39AM (#1045067) Homepage
    Long ago, I played hack a lot. Then my dad got me the source. Printed out. So, I read the source, and I had the game, and I learned C because it was pretty easy to compare sets of instructions in the source to what the game actually did.

    Your milage may vary.
  • by Imperator (17614) <<slashdot2> <at> <omershenker.net>> on Friday May 26, 2000 @11:14AM (#1045068)
    It's easy if you want to teach them the fundamentals of programming but Python syntax is too difficult.

    Book [rice.edu]
    Interpreter with IDE [rice.edu]

  • by MS (18681) on Friday May 26, 2000 @11:15AM (#1045069)
    I played Lego till the age of 18 and I thank god for it.

    Lego helps you very much to understand how to build and put together components, things can always be adapted, expanded and be made better in some way with intelligent composition of basic pieces and evolve to new structures, buildings, machines, robots, ...
    I enjoyed building with lego, not playing.

    I'm not Linus, but I'm sure he played Lego too. And some day in the future my children will play Lego too.

    :-)
    ms

  • by Crutcher (24607) on Friday May 26, 2000 @11:23AM (#1045070) Homepage
    Do not confuse yourself, languages like BASIC are NOT good for teaching children. You may have learned it first, but that doesn't make it better.

    The only thing that makes BASIC easier for anyone than C is that it is more like (bad) math. But this only helps if you've had lots of (bad) math. It doesn't really help those who haven't had the (bad) math.

    What a programmer really needs is Data Structures and Flow Control. Until these things are internallized, you are not a programmer, after they are, you will always be one. BASIC doesn't do either well, so your children will not learn either well. C does both well, so your children will learn both well. (Actuall I would use C++, it's a little more forgiving, but still doesn't let you cheat like perl does (which is something you don't want newbies doing (as the wont fully learn those two lessons)))

    Do not underestimate the flexibility of a child's mind. Look at baseball or pokemon stats. Give them a real language. After they learn it, even a little bit, it will stew in their brain. With many cognitive tasks, how LONG you have know something is more important than how WELL you know something, and they will NEVER need to have know BASIC for 20 years. (but if they are 10 year C/C++ veterans when they get to college?)

    Do not underestimate how very MUCH time children will spend working on something they find interesting, so even hard tasks are mastered. Think of video games, sports, TV, reading. They HAVE the time, let them work on something real.

    Also, C on UNIX is simpler than most things they can do on WinX boexen. File access and piping makes more sense, etc. If they have NEVER programmed, they have no legacy to overcome, so start them on the simpler system.
    ---
    "Elegant, Commented, On Time; Pick any Two"
  • by nano-second (54714) on Friday May 26, 2000 @11:16AM (#1045071)
    There's a project out of UBC (University of British Columbia) that has a program for teaching teenagers Java. It involves programming a Virtual Family. A bit reminiscent of the Sims idea... The website is here [cs.ubc.ca]
    Look for links pertaining to 'Virtual Family'. It's intended for Win95/98, and I believe it's still being worked on. I am not sure if you can just 'buy' a copy, I think you may have to get a beta version and give them feedback on it, after using it. (I may be wrong here... info should be on the website).
    ---
  • by Enoch Root (57473) on Friday May 26, 2000 @10:28AM (#1045072)
    I remember when I started playing with Lego Minstorms, I couldn't help thinking, 'Hell, I wish I had THAT when I was a kid.' I can't think of a better way to teach a kid how to program, and do Object-Oriented Programming, no less. It's very easy to understand, and you see a direct relationship between the code and the result. For instance, you'll be able to physically illustrate a FOR or an infinite loop with insane ease.

    And really, it's a toy that evolves with you. If 30 year-old jaded programmers can still get a kick out of it, imagine a kid... He'll probably wear it down before he gets tired of it!

    Lego Mindstorms Website [legomindstorms.com]

  • I'd say the main features a first language must have are:
    • It must be interpreted: mucking about with compilers takes
      confidence in your code;
    • It must have a straightforward syntax;
    • Input and output must be straightforward: getting the program to
      do things quickly is what keeps up interest
    • It must have newbie-friendly error reporting to avoid initial
      frustration

    I think in all of these respects Python is as good as BASIC. Plus it
    has GUI IDE's which really help with polishing I/O, plus one is
    learning good programming habits from day one. It doesn't hurt to
    have the powerful features there: on the contrary it's nice when one
    wants them not to have to learn a new language.

    Coding machine language is nice, but it's not so easy now as it was
    back then. One of the satifscations of learning Z80 and 6502 was that
    you could grasp the architecture of the processor without outside help
    and you knew you had mastered the whole instruction set. Not so easy
    with multi-level caching, instruction pipelines, stack frames
    coprocessor pipelines, memory management, SMP, privileged
    modes... have I forgotten anything? Well, the point is, really
    grasping a modern PC is a much bigger deal than it was 20 years ago.

    Charles

  • by yerricde (125198) on Friday May 26, 2000 @08:18PM (#1045074) Homepage Journal

    something more structured like C involves having to deal with too many complicated issues of programming theory and structure, and unless you're willing to sit through complicated stuff like X or Windows GUI coding, all you'll get is some boring text program.

    There's a very easy library for graphics and sound under C. It's called Allegro [demon.co.uk], and it has the advantage of being available on most important platforms; it currently works on DOS, Win32, Eunuchs/X11 (even on non-Intel such as linuxppc), and BeOS. You don't have to wade through that WinAPI bullshit; Allegro is a simple layer around GDI or DirectX.

  • by bob the cow (146929) on Friday May 26, 2000 @10:57AM (#1045075)
    Definetly BASIC, it's simple and does not have a lot of extra syntax/structure to get in the way of learning to write a computer-readable algorithm. Most non-programmers I know had an OK time with BASIC, and most programmers i know started in BASIC. One thing I suggest, however, is using TI-BASIC is a kid is using a TI-83 or higher in their high school math class. I find this to be very versatile for simple games, and good to know for programming math, chemistry, or physics functions.

    Now, if you really want them to grow up with a structured language embedded in their brains, BASIC can get in the way when taught later: it has no functions or "black-box" capabilities. I suggest that you stop speaking in English to them, and start conversing in C. This way, even though it is hard and confusing, they will pick it up quickly and will be permanent hackers. but note, under ALL CIRCUMSTANCES, you are NOT to do this with HTML, this can cause brain damage and even cancer!
  • by cybertad (173687) on Friday May 26, 2000 @10:30AM (#1045076)

    As a lot of other posts concur, any of the BASIC dirivatives are a good idea. VB, although poor at developing high-availability, cross-platform applications, is just fine for a youngster to start out in.

    There are also those *toy* programming languages based on eiffel and Smalltalk put out by Lego and others. Those are great. Hell, Smalltalk is pretty wonderful as it is, and quite easy to pickup.

    Just because we as professional developers know of a languages limitations, doesn't mean it isn't *programming*. Remember, what's basic to us, is still quite a bit over their heads!

    Unless you had kids just to turn out a team of software engineers, I would start them out with something simple. If you try to through a command line compiler and debugger at them and expect any results, you have another thing coming... especiialy if they are heavy into games and graphical stuff...




  • by Golias (176380) on Friday May 26, 2000 @11:22AM (#1045077)
    I totally agree. 10 or 11 is the perfect age for a motivated young geek to get started.

    This is not just a hunch, I have a degree in education, and know from studying childhood development models that the pre-teen and the "terrible twos" are the two periods of life when the human brain is growing the fastest... and they were too busy learning to talk to write code when they were toddlers. :) You do not want to waste these years.

    Give them the most powerful tools they can handle. Kids at this age don't just love the feeling of power, they crave it. They have no control over their voices, bodies, emotions, or sex drive... that's why kids often go for weird or elaborate haircuts at that age (one of the few things they can control is their hair). Put one of these kids in front of a flexible CLI and let them hack away at it! One of the best things my parents ever did for me was buy my my first computer (a Vic20) and insist that I figure it all out for myself. With all the web information out there these days, your kid might even know more than you in a couple years. :)

  • by GrayMouser_the_MCSE (192605) on Friday May 26, 2000 @10:24AM (#1045078)
    Since object oriented programming seems to be the major direction in programming and e-commerce, why not start them off with java?

    Its no more difficult than any other language to learn (remember, kids have nothing to unlearn), except for the grasping the object concept. And that may actually be easier for them to start with, since it models the real world.

    Its also reasonably platform independant (just stay away from j++ *cringes in terror*)

  • by afsd (192814) on Friday May 26, 2000 @10:48AM (#1045079)
    Squeak. Definitely Squeak. Definitely Squeak. My son tried it for his graduation project in Gr. 8, and despite his a _bit_ different interests, loved it. At Disney, they set up a class - 1.5 HRS every week with 4-5-graders. Going well. But, that's where OO the way we know it started (I mean, Imagineering Group - Kay et al.) Wondering, why only 1 post on Squeak out of 50?
  • by algae (2196) on Friday May 26, 2000 @10:27AM (#1045080)
    I don't know if it's around anymore, but I got a really good start using logo. It's good for learning basic programming skills (loops, etc) as well as applied logic and geometry.

    For those who aren't familiar with it, you basically have a cursor (called a Turtle) that draws a line behind it. There are commands to move the turtle, change the color of the line, in a friendly programming environment. I've seen everything from games to really wicked fractals done in Logo.

    This was, admittedly, over ten years ago, on an Apple IIe. Anyone know if it still exists?

    --Alex
  • by binarybits (11068) on Friday May 26, 2000 @10:40AM (#1045081) Homepage
    I love Perl, but starting kids off on it is like teaching them to shoot by giving them a machine gun.

    I think the most important characteristics of a beginners programming language are simple, logical syntax, a reasonably small set of instructions and operators, and enough high-level functions to allow kids to do something useful. Specifically, you should be able to run a "hello world program" in a line or two, and you should be able to graphics and other fun stuff like that without knowing too much about OS internals.

    Perl's not a terrible language for this (it is interpreted and provides some high-level functionality), but its syntax is only logical if you're used to c, it has an ungodly number functions and operators, and it's not designed to do graphics or interactive functions. (Yes, I'm sure there are modules and such to do pretty much anything, but the whole point is that we're talking about beginners)

    I grew up with BASIC on the Apple II. I started in first or second grade, and spent the next 5 years programming games and stuff almost constantly. I moved on to other languages and platforms in high school.

    So I still think BASIC is a good choice. Not sure VB is quite the ticket-- I wonder if there are any good free BASIC interpreters.

    I guess Perl would be an OK second choice. A close third would be Java, which has some nice graphics capabilities and a less obfuscated and complex syntax.
  • by jabber (13196) on Friday May 26, 2000 @11:24AM (#1045082) Homepage
    No, really..

    * JBuilder Foundation is free (as in beer) and comes with the JDK. Few parents can justify spending $hundreds on an IDE for their child.

    * It will let kids put together a simple GUI just by dragging buttons and stuff around. Immediate sense of accomplishment keeps kids interested. Writing a "Hello World!" program isn't impressive enough to keep their attention. VB will do this, but it's expensive.

    * It let's you make a graphical change in the GUI designer, and immediatelly let's you see the changes in code - and vice-versa. This is great for demonstrating how changing X and Y values of an object translates to a GUI layout.

    * The code is pretty simple to read (may be my bias, since I'm familiar) when compared to C and even VB. The syntax is pretty straightforward, and the API naming conventions are consistent and English - no modified Hungarian notation here. There are some freaky things (for a kid) like escaping characters in Strings, logical operators, ternary (?:); but there are no pointers. Pointers hurt small heads.

    * The IDE color-codes keywords and offers dynamic lookup of methods and parameters, organizes declarations and definitions, supports auto-indentation for readability, but doesn't enforce 'weird' habits. VB will structure their code for them (Capitalizes keywords, automatically normalizes spacing and such BS) but I've found that this just makes people sloppy - some discipline is good. Unlike VB, in JB you see all your code. VB keeps the subroutines visually separate - this breeds bad habits and confusion later, with REAL languages.

    * It's something that they can show to their friends on the net, without the complications of VBRUNxxx or missing libs or actually copying the executable. Applets are a neat thing for this. Peer reinforcement is a powerful thing in the teen and pre-teen.

    * It's a simple, yet non-trivial language that's a valuable skill (nobody hires Mindstorms developers). Granted, they're kids and it's not yet a priority - but Java is Cish in syntax, and the transition will be easier later; it's something they can use non-trivially NOW. They can do MATH homework with it, they can do hard-science with it. They can even hack together their own mini-ICQ with relatively (to other languages) little effort.

    * It's something that will scale as their skills and interests grow. The API is developing and includes built-in support for neat-o things like images, sounds, 2D and 3D graphics; as well as XML, databases, real-time, complex math, crypto.

    * It's as simple or as complicated as you want it to be, and the performance (a sore issue for hardened developers) is not a problem for kids writing toy programs. Once they start complaining about the poor performance of the interpreter, it will have done it's job. :)

    Add to this a decent book, with examples, and you should be golden.
  • by Sloppy (14984) on Friday May 26, 2000 @11:05AM (#1045083) Homepage Journal

    I think I learned quickest not when I was writing stuff from scratch, but when there was existing code that I was used to running, and started changing it. I remember adding features to other kids' programs on the school computer, speeding up games that I had typed in from COMPUTE!, etc. That way I learned both from doing things myself, and from seeing how other people had done things.

    Maybe start with a game, written in something like Python.

    And if they get bored with that, give 'em the BSD kernel. ;-)


    ---
  • by kimflournoy (91906) on Friday May 26, 2000 @10:30AM (#1045084) Homepage
    ...but why not HTML and JavaScript? There's the instant gratification of seeing your creation alive and being able to show your friends something cool you just did. Most web-savvy kids nowadays have some concept of mouseovers and forms, and maybe have their own homepage already, so adding functionality to something they're already interested in would be easier than sticking them in front of a prompt and saying "Oh, look, you printed 'hello, world' to the screen!"

    IMHO, of course.

  • Between the ages of 17 and 22, I was a camp councelor / teacher at a computer came (think the kids that went there were nerds? Imagine what the means the teachers were ;-) I taught the 'intermediate' level stuff - basicaly, one step up from LOGO, and one step down from Pascal (which was the advanced course.)

    My trick was to show them some graphical stuff in basic (things like random lines, minor stuff like a really low-tech computer etch-a-sketch with they number pad where they could also change the numbers.

    I would show what was possible, then, begin teaching them the command set nessisary to achieve that small goal (for instance, the random lines demo required teaching them to change the screen mode (this was back in QuickBASIC), the RND statement, line lables, and the goto statement, plus explaining how it worked.

    After each time that I explained one of these programs, and showed how it worked, I let them have time to play with it, and teach them more commands to extend thier command set (for instance, teaching them what the circle command was, what all the parameters for the line command (box, fill so they could do filled rectangles), changing colors, etc. I wouldn't implement the new commands for them - I would just tell them what they were, and how they worked, and let them implement it themselves.

    As the programs got more advanced, I tought flow control, formating the program correctly so that they could look at it later and understand it, variable types, etc., etc., etc. I rotated back and forth between programing new parts for them to play with, and letting them implement things themselves.

    Granted - this was in a teacher-student environment with 20 some odd kids, and someone else helping me out. I'm not sure how well that would work in a one-on-one parent - child relationship. But, the pointer I have that would apply is this: make thier progress very visible. Let them see the results onscreen, so that they have something very visible and tangable to see. Set it up at first so that every minor change produces a change on screen for them to understand. You'd be surprised how excited they can get by very little graphical changes.

    Oh, and one more thing - the kids were age range from 9 to 14 or so. That probably also has alot of bearing on how they react, and what works best for them.

  • by Kernel Corndog (155153) on Friday May 26, 2000 @11:17AM (#1045086)

    I am not exactly sure what age level kids learn algebra these days but I think it is an important step. What I'm really trying to get at is the concept of variables. I know that was at first a hard concept to figure out. If your kids haven't learned algebra then hey maybe it would be a great time to kill two birds with one stone. Finally kids can see where that math pays off!

    Now I haven't looked at all the comments frankly since none of them were at the 4 or 5 level. So there is a chance that I could be saying something already said. So here it goes.

    Make sure that you give them a good lesson in computer history. A person must have good, strong roots in order to grow strong. Teach them binary. Let them know there is more than one way of counting things. Once they have a good foundation don't be afraid to teach them the 'hard' languages.

    How many times would we M$ converts be grateful it we had be taught a real operating system in the first place? I know you say your kids are primarily on windows and playing games but maybe it's time to introduce them to the greater powers of the computer. I started out playing games on the computer too. Then a game came a long named X-Wing. Awesome game. The only problem was when I died my pilot was gone. Everything I worked hard to achieve was gone. That's when I learn the copy command to save my pilot file somewhere else just in case. They've only just scratched the surface and now they are asking you to teach them more. Personally I would not look towards the 'easy' languages that's just seems like scratching a little bit harder at the surface. I rather just get to the root of it and then let the rest fall into place. They can handle it.

    I think C/C++ or Java would be a good place to start. But more importantly the underlying principles of programming is what should be concentrated on. Once you know what algorithms are and what variables are does it really matter what language you learned it in first?

    Which ever language you do choose I'm sure they'll thank you for it later. :)

  • by X (1235) <x@xman.org> on Friday May 26, 2000 @10:30AM (#1045087) Homepage Journal
    Squeak [www.squeak...itlesqueak] is your answer. It a free version of Smalltalk available on whatever platform you want. It's got excellent support for multimedia stuff, and it's nice and graphical. Kids get very immediate support. Smalltalk is actually very easy for kids to learn (they've introduced it in kindergarden classes) and allows them to define their own language and functions. Furthermore, it would instill in them good OO development practices from the beginning. OO is actually very intuitive to young kids, just not to programmers who've been hacking away at functional programing for n years. ;-)
  • by vlax (1809) on Friday May 26, 2000 @10:28AM (#1045088)
    Like many of the others, I started out in BASIC on an ancient 8-bit machine. But what really got me started in serious programming was scripting languages and VB.

    I realise VB is an incoherent mess, and perhaps Delphi is better (I've never used it) but the biggest advantage of VB is that you can quickly and easily produce visual applications. You can see results, right there on your PC, even with simple projects. Learning something more structured like C involves having to deal with too many complicated issues of programming theory and structure, and unless you're willing to sit through complicated stuff like X or Windows GUI coding, all you'll get is some boring text program.

    There may be better ways to do this than VB. Tcl/Tk for example, or tkperl, or even javascript/HTML. But I think the place to start with children is something that produces highly visual GUI output in short order.
  • by Rainy (17894) on Friday May 26, 2000 @11:26AM (#1045089)
    I absolutely agree that python is perfect for studying programming -
    it's easy and at the same time it'll scale down to C. It has been
    said that it bridges the gap between RAD languages like perl and
    serious languages like C.
    One interesting project based on Python is 'computer programming for
    everybody' (cp4e). Parent article links to document with details.
    In short, the idea is to eliminate difference between a programmer
    and a user. Right now there's probably .1% users who participate in
    development and 99.9% users who don't and therefore have only indirect
    influence on development. If the language was easy enough for let's say
    60% of users to be able to go and make minor changes/tweaks, that would
    be quite a revolutionary change. That's what cp4e is trying to accomplish,
    in a nutshell.

    Python highlights:
    * Free, OpenSource
    * Simpler and more elegant than Perl (subjectively)
    * Mature - started in '89 - before Linux.
    * Unix/Win/Mac/etc
    * Some big organizations like NASA and Yahoo use it.
    * Core philosophy is KISS (keep it simple stupid) vs Perl's 'There Is More Than One Way to Do It'.
  • by otterboy (18894) on Friday May 26, 2000 @10:25AM (#1045090) Homepage
    Don't underestimate your kids by teaching them something that you consider sub-par. If they want to learn to program like their old man, there is nothing that should prevent them from programing in a shell account from their windows box. I think it's great that they want to learn, so give them the best tools you know. Believe me, they'll learn faster than you can teach them if they decided they like it!
  • by Azog (20907) on Friday May 26, 2000 @11:44AM (#1045091) Homepage
    YES! LOGO!

    It is a real programming language, designed specifically for children for learning. It is a real programming language, with functions, parameter passing, etc. It is very graphic-oriented, so it's a great way to begin. Bugs in your code are very obvious as problems with the drawing.

    The inventor of Logo, (Seymour Papert??) wrote a great book on Logo. I don't remember the name of it, but it is definitely worth reading.

    The design of Logo was influenced by research into how children learn. One of the main goals is that children program the computer, rather than most so-called educational programs, which are more about the computer programming the children. Bugs are recognized as an opportunity to learn, not as mistakes to be punished.

    On a personal note, I got my start in programming using Logo on an Apple II way back in grades 3 and 4. It was a great way to start. In the twenty years since then, I've programmed in dozens of languages. It's my career now. But I'll always remember commands like "FORWARD 20", "RIGHT 90", "PENUP", and "COLOR BLUE".

    In fact, back around 1992 I started writing a Logo interpreter in Turbo Pascal for Windows. (Hey, it's what I knew at the time.)

    If I had kids, Logo is where I would start them.

    However, for older kids there's other possibilities. One interesting one off the top of my head: UnrealScript, for older kids who like games. It's also a real programming language, and kids can learn to customize Unreal and Unreal Tournament and do all sorts of neat stuff.


    Torrey Hoffman (Azog)
  • by Insyte (64813) on Friday May 26, 2000 @10:24AM (#1045092)
    Python, which also happens to be my personal favorite language, was designed from the ground up to be easy to learn but to teach proper programming fundamentals. In fact, the almighty GvR is actively developing an IDE designed for classroom use.

    http://www.python.org is the main home page, and http://www.python.org/cp4e/ is the home page for his educational projects.
  • by cprincipe (100684) on Friday May 26, 2000 @10:22AM (#1045093) Homepage

    How about Mindstorms? Good introduction to the relationship between programming and results.

  • It isn't dead, by a long mile.. It's just quiet. There's a free interpreter for most platforms called 'UCBLogo', and its derivative for windows environments, called 'MSWLogo'. I've been using MSWLogo as an environment for introducing elementary school children to procedural thinking and logic, and we plan to use Python for a second phase for students who show a desire to continue learning how to program.

    We use Logo, first, because it's got a very high work-to-results ratio for the children. That kind of visual feedback is priceless, for getting them to think in a methodical fashion about a problem. Python requires a bit more of a learning curve before the children get 'interesting' programs that they enjoy, which is why we teach it to them, second.

    The idea is, get them addicted, and identify the ones who want to learn more, then switch them onto a professional, albeit gentle, language. I'm still debating whether I'd rather use Pascal than Python, because it's strongly typed, but the quick turnaround for type-it, eval-it environments is nice for teaching.

    But I agree with earlier comments. The first rule, is never underestimate your students. The second, is to never slow them down. Once you've given them a foundation, hand them a list of projects to do, and let them move at their own pace in accomplishing them. Younger students prefer praise as a motivator, older students will find their own motivations, and will want a more mentor-like relationship.

    Good luck!

  • by CorranW (154516) on Friday May 26, 2000 @10:35AM (#1045095)

    http://www.alice.org [alice.org]

    To quote:

    Alice is a 3D Interactive Graphics Programming Environment for Windows 95/98/NT built by the Stage 3 Research Group at Carnegie Mellon University. The Alice project is a public service to the wider computing and artistic communities; our hope is to make it easy for novices to develop interesting 3D environments and to explore the new medium of interactive 3D graphics. The current version of Alice authoring tool is free to everyone and runs on computers that are commonly available for reasonable prices. Worlds created in Alice can be viewed and interacted with inside of a standard web browser once the Alice plug-in has been installed.

    The scripting language used by Alice is a slightly modified version of Python [python.org], a language itself designed to be used by novices.

    I don't have a windows box, so I haven't played with it, but it looks like it would be a good, fun way to ease kids into programming.

    Corran

  • by jvj24601 (178471) on Friday May 26, 2000 @10:36AM (#1045096)
    Most of us that have been around a long time (me, I started in Applesoft Basic and then to assembly, then Pascal, then C) didn't care about how clean or consistent a language was. We were curious about how the damn things worked, how programs were written, and how we could do the same. Just get them started on something, and just like us, they'll probably figure out what they like when they get older.

    Same goes for anything kids do - expose them to everything and let them decide as they grow.

What the scientists have in their briefcases is terrifying. -- Nikita Khruschev

Working...