Slashdot Mirror


How To Encourage a Young Teen To Learn Programming?

Anonymous Hacker writes "I'm in a bit of a bind. My young teenage son is starting to get curious about computers, and in particular, programming. Now, I'm a long time kernel hacker (Linux, BSD and UNIX). I have no trouble handling some of the more obscure things in the kernel. But teaching is not something that I'm good at, by any means. Heck, I can't even write useful documentation for non-techies. So my question is: what's the best way to encourage his curiosity and enable him to learn? Now, I know there are folks out there with far better experience in this area than myself. I'd really appreciate any wisdom you can offer. I'd also be especially interested in what younger people think, in particular those who are currently in college or high school. I've shown my son some of the basics of the shell, the filesystem, and even how to do a 'Hello World' program in C. Yet, I have to wonder if this is the really the right approach. This was great when I was first learning things. And it still is for kernel hacking, and other things. But I'm concerned whether this will bore him, now that there's so much more available and much of this world is oriented towards point-n-click. What's the best way to for a young teen to get started in exploring this wonderful world of computers and learning how to program? In a *NIX environment, preferably." Whether or not you have suggestions for generating interest or teaching methods, there was probably something that first piqued your curiosity. It seems like a lot of people get into programming by just wondering how something works or what they can make it do. So, what caught your eye?

12 of 1,095 comments (clear)

  1. python by utnapistim · · Score: 5, Interesting

    Teach him python (or ruby, or whatever else that is high-level and easy).

    It's the same as basic was twenty years ago, just much more powerful, easyer to learn and more fun.

    --
    Tie two birds together: although they have four wings, they cannot fly. (The blind man)
    1. Re:python by Fingerbob · · Score: 3, Interesting

      I second this. most folks I know who love programming learned a nice easy language as a kid (BASIC in my case, a long while back). Python is easy enough to learn how to program in, but flexible enough to draw stuff on the screen, play sounds, talk to remote machines - mess with what the machine is capable of. I'd definately pick a friendly language to begin with (and I'm not sure C or C++ fit that bill, I'm still learning good C++ practice after a decade of commercial use).

    2. Re:python by tb()ne · · Score: 3, Interesting

      Definitely not. Python is a terrible teaching language. It is often easier to do the wrong thing than the right thing in Python (which makes it okay as a prototyping language). For a first language, you want something where the good solution is also the easiest. Then, when you have learned good practices, you will apply them in any language you learn. I'd still recommend Smalltalk as a good first language. There really is no better environment for learning to code than Squeak at the moment.

      Python is absolutely fine as a first language. It easy to learn, easy to read, and has an interactive interpreter, which makes it easy for a student to quickly test code. It supports most programming styles (OO, functional, etc.), is well documented, and comes with a large standard library of packages with which a newcomer can quickly become productive.

      I don't follow your statement about python making it easier to do the wrong thing. Perhaps you could provide some examples. Also, if you're going to push Smalltalk/Squeak as a first language, what makes it a good candidate as language to learn general programming concepts?

  2. Re:Write a game by Anonymous Coward · · Score: 5, Interesting

    I'll second that. Many of us learned on 8-bit home computers, where you could understand everything that was going on, and we made games. Brilliant self education.

    The best way of doing that now is with the Hydra console. The hardware is completely documented and described at the beginner level in the book. And there is no OS or APIs to deal with, disguising what's really going on. You code straight to the bare metal.

  3. Javascript? Facebook apps? by 6Yankee · · Score: 3, Interesting

    No, really. That way he can share his games or whatever with his classmates, simply by sending them a link.

    Of course it'll be a longish road to get to that point, but it might be a goal he can relate to - and I know I simply wouldn't learn anything unless I could see the point. Still don't at 34, come to think of it :)

  4. My experience by mtxf · · Score: 5, Interesting

    I started programming when I was about 12, and I am completely self taught. My parents knew nothing about computers, and still know nothing now despite my efforts. Anyway, i started with javascript, html, and php. (This was around 6 years ago). I think it was much easier to start learning the basics of this kinda stuff when you don't have to deal with all the boring (to a 12yo) details of memory management, libraries, and compilers etc. Web programming is something were you can get the instant results and action, you can just keep tweaking the source file and hitting F5 until you get something that works and looks vaguely like what you're after; this is especially useful when you don't know what you're doing. :)

    I had a few books which taught me the basics, a javascript book and a html book. They only covered simple things, (I think the js book was a For Dummies..., actually), but it was enough to get me started. After that I found the php.net docs and a friend showed me loads of his php code and i picked that up fairly quickly.

    Being a website, it's something easy to show off too, it was kinda cool to be like "dude, the whole world can see my webpage!". Following that theme, i got started on irc bots, eggdrops are written in C, and you can script em with tcl. Be careful tho, tcl is kinda quirky and weird (at least, that's how i remember it). But it's great for simple stuff, get the bot to parse some text and reply etc. This might also be a good time to learn some networking stuff. Also since eggdrops can also have C modules written, this is a possible path into C, although I didn't go that way so I don't know how good it is.

    I eventually learned C(++) from some online tutorial, http://www.cplusplus.com/doc/tutorial/ I think. And I wrote a load of code for manipulating some large binary files (game resource files, from Halo). I certainly don't recommend letting anyone learn C solely from some tutorial, since I had rather large gaps in my knowledge at this point (that code i wrote is terrible), but it was some great experience anyway. I played around with some .NET (ugh!) gui stuff, because I didn't know how else to make a gui program at the time (seriously, I don't know how I was meant to know about qt, gtk, or win32 etc at this point) and a program that just prints text on the command line got boring real fast.

    Hacking at computer games was what really drove my interest in C at that time. Reverse engineering of the file formats was fun! Even if I did kinda suck at it and just found most of the info on the web.

    Looking back, I'm thinking I probably would have liked someone to show me python (and maybe perl) much earlier than when i eventually discovered them. php sucks as a general purpose scripting language and C gets tedious for those little tasks.

    Sorry that was all probably a little incoherent, I spent the time I was meant to be doing english homework programming ;)

  5. Not NetHack! by Anonymous Coward · · Score: 3, Interesting

    Not NetHack! It was written by the evil Wizard of Yendor with help from his idiot minion Eric S. Raymond; consequently, the source is a horrifying abomination worthy only of the renegade god Moloch. It is not a good learning example. You should be at least a level 20 Kernel Hacker to venture inside.

    Can I suggest instead that you look for a simple game written in Python or Ruby. They are likely to have source that is possible for level 1 Noobies to understand.

  6. Re:Write a game by thegrassyknowl · · Score: 3, Interesting

    My first (memorable) program was written with my dad on the C64. He's not a programmer, but we got a C64 when I was about 4 or 5 and I was keen to know all there was to know about it.

    He started reading magazines and got some books that taught him the basics then we'd spend time together building basic (pun intended) things. The first one that did anything memorable was a christmas tree on the screen complete with a flashing light on the top.

    It was all downhill from there. Once the basics are in place more and more advanced things follow. Soon you've outgrown your interpreted language and are sitting at the machine level to make it do things fast enough.

    Of course, back then it was all very easy. The 8-bit machines only had a handful of opcodes and a small amount of unmanaged memory (well the C64 had a ROM bank that you could cut out if you needed the RAM it shadowed). To make graphics it was a simple matter of poking in a few registers and then writing to the graphics memory directly.

    There was no pesky OS or memory management getting in your way. The machine also wasn't very fast, so to do cool things you had to learn about interrupt driven events, 'multi tasking', and designing for optimisation from the start.

    These days learning programming like that is nigh-on impossible. The OS hides the machine from you and presents a not-so-neat interface to all the hardware. The machine is fast so there is never any real desire to optimise and programmers aren't learning good principles for it.

    If the GP's teenage son is really interested in learning programming perhaps a small microcontroller project would be a good place to start. PICs and AVR cores are quite simple to implement and program. Investigate a development kit instead of diving into programming the PC.

    --
    I drink to make other people interesting!
  7. Re:Do what my father did by dvice_null · · Score: 3, Interesting

    IMHO, if he has already started teaching C, then that is what he should use. Not because C is superior language, but because teaching multiple languages will certainly confuse the student.

    I think that C might actually be pretty good language to start with. You have to do a little more work to write something you might be able to write less lines in e.g. Java, but then again it is pretty logical how things work. E.g. first you initialize SDL, then you get the surface where to draw. Then you draw into it, then you display it.

    In Java, you initialize by creating certain classes inherited from certain classes, get the drawing surface as a method parameter for a method, which name must be something special then you draw to it and then it is automatically displayed. Then you have to study API to find out how is it updated.

    I'm not saying that Java is hard to use for experienced programmer, I think it is very easy. A lot easier than C. But IMHO it is harder to understand for someone new to programming. Or even someone new to Java programming.

  8. Re:No ShortCuts !!! by QuantumHobbit · · Score: 4, Interesting

    No job prospects?

    At his son's age I learned to program in Pascal and was grateful for the privilege. I even had to compile in the snow uphill both ways. See if I put that on a resume.

    Python is a great language to learn on, and there are more and more serious projects that use it especially in the scientific community. If he enjoys python, he'll move on to more powerful and commonly used languages lick Java, C++, and how could I not mention Fortran. (Actually Fortran wouldn't be a bad language to learn on if he's a math nerd. I'm not entirely joking with that.)

  9. Re:No ShortCuts !!! by Tim+C · · Score: 5, Interesting

    For most people programming is a long road of breaking your head against a problem until it gets solved. Long hours spent tapping away at the keyboard and honestly "normal" people think we're all out of our minds.

    And then most of them go back to driving a truck, or waiting on tables, or shuffling paper, or laying bricks or whatever "normal" job it is that they do.

    Don't get me wrong, I'm not saying that there's anything wrong with any of those jobs, but let's face it - they're not exactly riveting, and yet we are the mad ones...

  10. Re:No ShortCuts !!! by baxissimo · · Score: 4, Interesting

    Agreed! I think graphics are a great way to get young folks interested in programming. They were the thing that captured my interest the most anyway. I can still remember trying to figure out some Apple BASIC code that made a little blip bounce around the screen back when I barely knew what a less than sign meant. But if making things move around on the screen doesn't motivate your kid, then find out what does. Other projects I remember working on early on were tools to make D&D characters, because I liked playing D&D but thought the process of re-rolling the dice a thousand times till I got the stats I wanted for a character was too laborious :-) Also my friends and I tried to create a computer version of the BattleTech board game. We had know idea what we were doing, and never got anything even close to playable, but I still learned a lot from it, and over the subsequent years as I learned knew tricks and techniques I always could recognize them as something useful, as something that would have helped us get over one hurdle or another I faced on those early projects.

    These days I think maybe young folks might be more motivated by web stuff that they can show their friends. Hey check out my web page! (Which would suggest javascript or java as the first language) We didn't have a modem till I was in high school so those things weren't really an option back when I was learning. It looks like a lot of kids are writing silly plugins for Firefox too.

    But still I think graphics is good, because before long you start to see that you need to learn some math to do more interesting things with it.