Slashdot Mirror


Teaching Programming Skills to Children?

KlaatuVN asks: "My younger siblings are asking for ways to learn to program. If I remember correctly, when I was younger I started programming by writing games like 'Lemonade Stand' in BASIC for the Commodore 64. Short of finding a Commodore 64 emulator and digging up some old BASIC programming books somewhere, what do you think is a good way of teaching children to program? I'm not trying to start a 'language war', but that does enter into it. Should I start with a scripting language? What, O Wise Slashdot Readers, are your opinions?" When I was just starting out in computers, I remember LOGO being a big help in teaching me the logic skills I would eventually use as a programmer. I know LOGO is still around, but it would be interesting to note if there are other similar projects like it. What tools, and programs would you use to teach programming skills to interested youngsters?

7 of 121 comments (clear)

  1. There's always by Judg3 · · Score: 4, Insightful

    Lego Mindstorms and it's RCX language. Fairly intuitive, robust, and you can get it to do cool real-world stuff.
    While I think a child might be ok with making some little PC games, I think they would love it even more if they could build a dinosaur and make it walk like they want it to.

    --
    Looking for hardware (Currently need: Large Etch-a-Sketch) Have one? See my journal!
    1. Re:There's always by llamaluvr · · Score: 2, Insightful

      I'm a teaching assistant for an introductory college programming course, and we used NQC (Not Quite C) to program the Mindstorm robots during part of the course. It was a cool hand-on activity, but the students picked up a lot of bad habits that became evident when we moved to C++ later in the course. A lot of students seemed to think that all functions had zero parameters and always returned the type "void", and that all variables should be globals.

      It was probably more due to the pace of the course, but NQC and the robots kinda messed a lot of students up. I guess it's important to realize that programming the robots is fundamentally different from programming console apps. The Mindstorm robots can help develop basic programming "cause and effect" concepts, but it's not as much help with programming structures like classes and functions.

      --
      Insightful: 76, Off-Topic: 379, Flamebait: 24, Funny: 152, Interesting: 201, Underrated: 55, Troll: 9, Total: 896
  2. flexible by muon1183 · · Score: 2, Insightful

    Go with a flexible language as a first language. You don't want them stuck using only one programming paradigm. If possible, choose something that can do OOP, functional, logic, etc. It will serve them well down the road if they ever want to use it for anything not to be stuck in just one paradigm.

    --

    There's no sig like SIGSEG
  3. go with visual stuff by mikecheng · · Score: 2, Insightful
    No, I don't mean "Visual Basic" per se.

    The reason "we" got into programming when young is that we were all probably maths/science people looking for an outlet for our energy ("I never made the first team, I just made the first team laugh" - billy bragg).

    Unless they already have a flexible and mathematical brain, it's really going to be hard to teach them to cope with the logic of

    x = x+1

    That statement is directly contradictory to anything that they ever learn in maths, and I certainly wouldn't want them believing that it was actually a statement of equality.

    As programmers we contort our brains to think of it as 'x takes the value of whatever x is now plus 1' - but it's us changing our thinking to suit the computers for this specific task.

    I have thought a number of times about trying to teach teenagers computer programming, but after having taught them maths for the last 4 years, I don't think I would attempt this with any but the most advanced students.

    However, programming concepts can be taught using more visual tools. I can't remember the name of the program, but I have seen a Lego Mindstorm programming interface which is ideal for kids: it's visual, it's dragging and dropping program pieces, and it gives kids some concrete feedback on their progress (since it makes the Lego robot, or whatever, do something).

    You and I might be happy to write a "helloworld" or a "prime number list generator", but most people need something a bit less abstract as a proof of their progress. LOGO had the conrete output of a picture (so it'd be a competition between the kids to make the picture). Mindstorms have robots (so it's a competition to make the coolest robot).

    To summarise the summary of the summary
    • Be visual (few things are more boring to kids than grammar and syntax)
    • Pick something with concrete feedback (e.g. making pictures, controlling robots)
    --
    Cool, but useless.
  4. Karel++ by BobTheJanitor · · Score: 3, Insightful
    Karel++ is a great starting point. Karel is a simulated robot that exists in a virtual space that can be modified like a Skinner box.

    Karel takes simple commands (for example, turnLeft(), moveForward(), or pickUpBall()) and has boolean functions that act as sensers (such as hitWall() or wallOnRight().

    When coupled with basic control structures, it's a fun and easy language to learn, and most Karel implementations have a graphic display of Karel moving around its world, so a wall-hugging function like the following isn't purely academic, it can be experienced just by watching.

    repeat forever{
    while(!hitWall()){
    moveForw ard();
    }
    turnLeft();
    }
    You can make Karel programs that solve mazes or that clear the room of balls, etc. It's obviously not a good programming language to do anything of use (although I have seen a Karel half-adder accomplished by picking up and dropping balls), it's a great introduction to OO programming that seems more like a game than education.
  5. LOGO... by netfunk · · Score: 4, Insightful

    ...or Visual Basic. Seriously.

    I have to say this, because someone recommended assembly language with a straight face.

    Some things you should remember:

    1) Programming languages are just an expression of a problem's solution. The less time you can spend learning to express, the more time you can be solving.

    2) Teaching someone logic is really the goal at early stages. Teaching them how a computer works (i.e. - low level programming) is really just noise at the start. Teaching someone object orientation is problematic in the opposite direction.

    3) Your mileage may vary by age. A ten year old learns VERY differently than an 11 year old.

    4) You're probably a genious that learned to program by plowing through manuals and books and scouring the web. This makes you the exception to the rule. Most people do NOT learn this way.

    5) Not everyone will be good at programming, ever, but everyone can make it further than Hello World...they can make it to the point where they are conscious that they are _creating_ something.

    6) Most people benefit from immediate visual feedback. Teaching someone how to compile and link slows them down. Teaching someone to write to stdout slows them down. Slapping together something in Visual Basic and then showing them how to hook up responses gets them moving quickly, especially when they can hit F5 and see what happens immediately. VB adds other complexity, though, which makes something like LOGO better in terms of simplicity.

    7) Not everyone wants to be a coding god. Some people just want to see what programming is, some people _think_ they are l33t hax0rs but don't know shit (you always get these in large classes), some people are there against their will (parents made them do it, etc)...just keep it simple and fun. Most people won't take this to be the start of a career in software development.

    I used to teach programming courses for summer camps. Java is just totally inaccessible as a first language. I tried. Visual Basic actually worked very well. Object orientation is best explained by NOT explaining it (people will naturally understand what a "push button" is, but it's a waste of time to explain how it's "subclassed" from a "widget". These things can come later). Half the trick is not scaring them off in the first few weeks.

    If there was a free Logo package that didn't suck, I'd have used that (maybe there is, I couldn't find one at the time, but that was years ago).

    My response to it all was to develop Toby (http://icculus.org/toby/), which is a variation on Logo.

    --ryan.

    --
    Don't say, "don't quote me," because if no one quotes you, you probably haven't said a thing worth saying.
  6. Re:Yes To HTML by buffy_fan · · Score: 2, Insightful

    Quite Right, I guess I should have been more clear.

    The point I was trying to make is that HTML is a base from which student can explore in whichever directions interest them, and have something to show for it at the end.

    I don't know the students in question so there is no way I can know what will make them happy and capture their imagination. That is the strength of html. So many things can be associated with it, that there should be something for everyone. No, it isn't a programming language, but it can teach them something of structure, and it builds their confidence and competence while they work out what *they* want to learn about next.

    If you have decided that they will make great kernel programmers, fine, give them C. Maybe they will love it!

    *However* They might find that they are happy tinkering with Flash or playing around creating yet another content management system using client/server side scripting. Give them HTML and they have a forgiving environment to explore and play with. I reckon that is important.

    If the students really have a talent for programming, they will quickly outgrow HTML and find something to get their teeth into. If not, then they will still have some basic understanding of the web, and won't have wasted their time or yours getting disheartened and struggling with something that doesn't suit them (I'm making an assumption here that HTML is easier than any programming language, I reckon that stands).

    You can be an accountant without understanding calculus, and you can be productive with computers without understanding the subtleties of pointers. You can't assume everyone wants to or can become a hardcore programmer. The thing to do is to let them explore where their level is.