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?

110 of 1,095 comments (clear)

  1. No ShortCuts !!! by Axe4ever · · Score: 2

    Problem solving ability grows only by tackling small small challenges at first.Again, u build that ability by slowly advancing your level.Not to mention that, you have to burn out to really learn something. To write great code, you have to go through great code that others have written. In short,there are no shortcuts .

    1. Re:No ShortCuts !!! by h4rm0ny · · Score: 5, Insightful


      Perhaps, but there are many elements to programming some of which are perhaps easier to learn than others. Teaching his son to program may benefit from being able to distinguish these elements. My initial suggestion would be to give him Python because this will let him learn the critical elements of program structure and algorithms without getting bogged down in learning the idiosyncracies of a language like C++ (which I do love). For similar reasons, Python will also offer fast return on investment. He'll be churning out programs that do what he wants them to in half the time he would be in C++ or Java.

      Of course the most important thing is probably to let him drive the learning for the most part. If he's a bright and technically minded lad, he may appreciate the power and intricacies of C++. He'll need the language sooner or later if he gets involved in many of the big open source projects which would also be a great way to get involved. Things are usually more fun when done as part of a group.

      --

      Aide-toi, le Ciel t'aidera - Jeanne D'Arc.
    2. Re:No ShortCuts !!! by Swizec · · Score: 2

      Yep, if he doesn't have the drive to learn programming on his own he never will. I remember back in the day I used to go through Pascal's help index to find interesting new stuff to learn because what the teacher was teaching was simply way too slow and uninteresting for me.

      In the same light, perhaps you should try the observing approach. Give him a problem that will pique his interest and just observe. Don't meddle, don't teach, wait until he gets truly stuck.

    3. Re:No ShortCuts !!! by D'Sphitz · · Score: 5, Insightful

      Nobody starts out with kernel hacking. Kernel hacks are bragging rights for adult geeks, sweet myspace pages and guild websites are bragging rights for teenagers.

      Teach him some PHP and HTML, or if you're an elitist teach him Ruby, or if you're a sadist teach him Perl. Teach him some JavaScript and Flash and Photoshop, and then let him go do the things that will impress his friends and therefore hold his interest, like rickroll pages and guitar hero videos.

      If he's really into it the serious stuff will follow naturally in time, no point in intimidating him right off the bat.

    4. Re:No ShortCuts !!! by montyzooooma · · Score: 4, Insightful

      Yep, if he doesn't have the drive to learn programming on his own he never will.

      Is that really fair? When a lot of us started programming every home computer had a built in version of Basic (or Forth if you had a Jupiter Ace... you lonely lonely soul...) so jumping in wasn't too hard when the first thing you looked at after bootup was the Basic interpreter.

    5. Re:No ShortCuts !!! by Swizec · · Score: 4, Insightful

      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.

      So no, if he doesn't have the drive to learn and problem solve he's better off outside playing with a ball ... or girls since he's a teen.

      I didn't mean that he's gonna have to learn programming himself, guidance is awesome to have, but the really good programmers out there are mostly self taught, people who were able to absorb knowledge wherever it came from, be it a peer, a book or an actual teacher. The ones who were "taught" programming are code monkeys with a very limited ability of actual programming, sure they can code, but they can't Code. If you catch my drift.

    6. Re:No ShortCuts !!! by hobbit · · Score: 5, Informative

      I'll feed the troll today.

      So he can learn how important white space is

      Indeed. Unlike most other programming languages, Python mandates readability, which is an excellent discipline for a youngster to learn.

      and write entire apps with a single line of code

      This is possible in most languages, but somewhat less likely in Python owing to the aforementioned discipline.

      and no idea how it happened

      This is impossible in most languages, and Python is no exception.

      and learn to program with no job prospects?

      You just keep telling yourself that; the world will change around you.

      I have nothing against Python

      In that case you need to brush up on your writing skills.

      but as a learning language I put it down there with Perl.

      A lot of people cut their teeth on Perl. I am not one of them, so I can't comment.

      --
      "Wise men talk because they have something to say; fools, because they have to say something" - Plato
    7. Re:No ShortCuts !!! by donaldm · · Score: 2, Insightful

      You are right there are no short-cuts although I would suggest he become familiar with the basics of using a *nix system such as how to use the command line and why this is still preferred for certain tasks. This is not to say that GUI should be disdained but you should be able to point out when a GUI is the best solution to a problem and also when the command line may be the better way to go.

      Now to programming. It is easier to explain the basics and it is very easy to show by example (keep it simple at first and let him get comfortable) if you use the shell (ie. bash, ksh or just sh - there are others but ksh/bash/sh are the most common) as a basic introduction to programming. You can later on get into languages like Perl and eventually C although I would recommend a formal course on the basics of programming before any he tries to learn a language that need to be compiled. As to more advanced languages it is very difficult to recommend one since the choice of a language should depend on what you as the programmer want to achieve, although as you probably know you may not have any choice in the matter.

      --
      There ain't no such thing as proprietary standards only proprietary formats. Standards are by definition open.
    8. Re:No ShortCuts !!! by jimicus · · Score: 3, Funny

      (or Forth if you had a Jupiter Ace... you lonely lonely soul...)

      I had a Jupiter Ace, you insensitive clod!

      (No kidding. I did. And a crappy little machine it was too. Think "ZX spectrum without the software library").

    9. Re:No ShortCuts !!! by Orkie · · Score: 4, Funny

      Nice way to write off everybody between the ages 13 and 19 there.

    10. Re:No ShortCuts !!! by bhima · · Score: 2, Interesting

      Back when I first learned PERL people were still using it as a Practical Extraction And Report language. A replacement for Sed & Awk. I was taking snippets of Perl from the web, futzing with them, and searching instrument logfiles and pushing the output to comma separated text files and then to excel. I don't remember if they were one line scripts but I do remember frequently using snippets that I wasn't really sure why or how they did what they did but only that I wanted the output they provided. Wow! I remember the first time I really had that going... it was like effing magic.

      --
      Nothing in the world is more dangerous than sincere ignorance and conscientious stupidity.
    11. Re:No ShortCuts !!! by Fred_A · · Score: 3, Funny

      So no, if he doesn't have the drive to learn and problem solve he's better off outside playing with a ball ... or girls since he's a teen.

      In that case just lock him in behind a card locked door with a blank card and a card writer. Leave the ball and girls outside and he'll learn eventually (you might want to prepare some flat food in case he doesn't figure stuff out fast enough).

      --

      May contain traces of nut.
      Made from the freshest electrons.
    12. 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.)

    13. 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...

    14. Re:No ShortCuts !!! by twistedsymphony · · Score: 4, Insightful

      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. So no, if he doesn't have the drive to learn and problem solve he's better off outside playing with a ball ...

      I know at least for me the DRIVE comes from the desired destination... My advice for the fellow in TFA is to have his son pick a project. Start with something simple.. maybe it's just a slideshow or a tick-tak-toe game. Then start building it. Guide him a bit in the basics but encourage him to learn how to search for solutions that are beyond his knowledge. Once you have a basic program built start adding features.

      Maybe it's just because I'm partial to this but consider getting a few microcontrollers and teaching him to program on that platform. Writing something that interacts with a mouse keyboard and monitor on a computer is one thing... making something where you physically assemble the hardware as well is something else altogether. This will also test the waters in other tech areas... maybe he decides that he doesn't like programming but loves electronics, or maybe he like them both and wants to get into computer system or robotics.

      But seriously... just pick a goal, and work towards it... the best way to learn is though experience.

    15. Re:No ShortCuts !!! by eonlabs · · Score: 2, Insightful

      I can't vouch for python because I haven't learned it yet, but the gist of the parent is dead on.
      Show him a prototyping language. Something he can dev in quickly before diving into the deep and mucky bowels of pointers, references, mixed languages, and memory management. These things are not obvious to a novice programmer, and program flow is far more important to pick up early on than that.

      I KNOW I'm going to get flack for this, but many people I know who are excellent programmers cut their teeth on QBasic. This language was simple enough to pick up that you could really get coding some complex stuff in under an hour. I would recommend text parsing stuff as a first thing. "Can you pull the hours out of the time?" or "Can you print in words what the date is from the seconds since...". This can be extended to stuff like "calculate Fibonacci numbers" and then teaching how to clean that code up. This is a good time to teach stuff like "code first, optimize second" and how to time code for optimization.

      It's also a good time to get him into commenting the code. The way I usually get newbies started on that is to have them write pseudo code or explanatory text before coding, using the comments as a guideline to keep them on task.

      If I were to suggest an order of action, try variables & output, input, conditionals, loops, complex conditionals (switch/select statements), objects, collections (sorting searching and maybe memory management here). It's hard to do GUI stuff off the bat because for c/c++ there are so many different flavors available that you can't say "This is how this is done" and be done with it. What might be a good approach is to have him build a game. Start with a MUX and evolve it to a side scrolling platformer, and then to one with 3D graphics (can still be side scrolling, but this way it at least gets flashy).

      It's really important to show how to make a responsive program early on. It's a lot more interesting to work with something that can give you feedback in some way. Even a lexical parser could be fun. Find the verb in the input sentence.

      When you've done all that, try implementing low level c/c++ code like the String class or Vector class.

      Python might be a good way to go, if it really is just print "Hello World" and you're done.

      Don't forget:
      import antigravity

      PLAY

      --
      I wouldn't consider the mad hatter mad. Just reality impaired. He sure can make a mean cup of tea.
    16. Re:No ShortCuts !!! by Asgerix · · Score: 4, Funny

      I'll feed the troll today.

      Considering your nickname, I would have thought that you had learned to stay away from trolls - or would that be orcs?

      --
      Life is wet, then you dry.
    17. Re:No ShortCuts !!! by SpinyNorman · · Score: 2, Interesting

      jumping in wasn't too hard when the first thing you looked at after bootup was the Basic interpreter.

      Get off my lawn you whippersnapper!

      I started with a NASCOM-1 1MHz 2K RAM (1K for you, 1K for the "monitor" program) Z80 kit in 1978. When I finished soldering it together the only thing I got after bootup was a prompt at which you could enter hex bytes (after you hand assembled your program on paper) to a chosen memory address.

      I'd actually consider this approach for someone learning about computers today. Buy an Apple II off eBay ($20 or so) and start programming in assembler. Write an interrupt driver serial driver or something that interacts directly with the hardware. There are too many kids nowadays who may know how to program in some modern scripting language, or maybe even in C/C++, but still don't really have an intimate knowledge of how computers work at the lowest level.

    18. 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.

    19. Re:No ShortCuts !!! by Keeper+Of+Keys · · Score: 2, Insightful

      It was quite a bit faster, though. And you got to learn FORTH rather than bloody BASIC.

    20. Re:No ShortCuts !!! by IamTheRealMike · · Score: 3, Insightful

      That's not "writing them off", that's being realistic.

      When I was a teenager learning to program, I wanted to write video games. And I did. It was my first exposure to open source - a Delphi 3D MMORPG project. It was hopelessly over ambitious for our little team but it was fun, and taught me a hell of a lot about programming. And actually the maintainer/founder of that project went on to work for Ubisoft, so it worked out OK for him.

      Now the problem is that writing video games is actually pretty hard. Writing simple web apps is much easier. It also has the HUGE benefit that you can show your friends. I was very rarely able to show my friends what I'd written but when I did, it was a great feeling, because my friends intuitively understood that making a 3D world was hard.

      So I think writing web apps is not a bad place to start. The main problem is that web apps aren't video games, and all teenagers want to write video games. If our kernel hacker isn't too hung up on Freedom, I'd strongly recommend getting an Xbox360 and setting him up with the XNA framework. It's very much oriented towards hobbyist and beginner programmers.

      There are lots of tutorials, you write software in C# which is straightforward enough for novices but won't limit him, and the result can be uploaded to XBox Live or played when his friends come round. Importantly, it looks a whole lot more cool and professional (imho) if your work is running on a real games console.

      There is also a full, free 3D engine available (TorqueX) which can help him get started with writing simple 3D games without needing to master trigonometry and Direct3D. Back when I was doing this stuff, you had raw OpenGL or Crystal Space if you used C++ and were feeling brave.

    21. Re:No ShortCuts !!! by geminidomino · · Score: 4, Funny

      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.

      Note to submitter: If python leads to licking Java, just imagine what's next! It's a gateway drug, I tell you!

    22. Re:No ShortCuts !!! by Floritard · · Score: 4, Insightful

      I dunno though, do many teens even like 2D side-scrollers? He probably grew up on Playstation. I was going to say go ahead and get him going on some OpenGL. NeHe's tutorials really make it pretty easy to get into. Of course he's be using C++ so maybe something easier.

      Graphics is what got me interested in programming. I remember my high school Pascal classes. Unfortunately they were pretty boring. We did do some simple EGA graphics at one point but that was really the only interesting thing we did in class, though I did end up learning the fundamentals.

      Thing was, to do anything cool you had to do all this VGA initialization stuff that was forever out of our reach at that level. Not to mention the computers were pretty obsolete even at that point.

      I know there's a lot of (mostly unreasonable) hate around here for Flash, but I'd say get him into Actionscript3. It's really easy to do graphics in without having to setup windows and rendering contexts or getting to know huge APIs. It will introduce him to object oriented programming, but won't involve pointers or memory management or any of the more esoteric aspects of something like C++. Another thing is he can easily share whatever he produces with most anyone else who has a browser. If he is at all into social networking online (all that myspace bullshit) he can make some pretty interesting stuff for his friends' pages. Using Actionscript could also lead him to branching out into other web technologies, something probably more important in today's world than ever. It also has a similar syntax to Java or C++ if he wants to go in that direction. And as far as help and tutorials, there's really one of the richest communities around Flash, being a technology that was practically born in the middle of the blogging phenomenon.

      The best thing about Actionscript is how quickly you can put something visual together and how little setup it requires. Graphics is definitely the way to go, and nothing in programming has a more immediate "wow" factor than throwing something pretty up on the screen.

    23. Re:No ShortCuts !!! by gfxguy · · Score: 2, Interesting

      I don't know about, but agree with the graphics aspect... I got into computing first because I was into games. I stayed with graphics all the way through and work for a post production company writing tools and utilities... not exactly graphics, but I do get to write plugins and scripts for Maya and other high end apps.

      Anyway, I was pretty much self-taught BASIC on my Atari, but BASIC was just too slow to do any cool graphics, so I started teaching myself assembly language.

      I don't advocate having a young person teach themselves assembly language, but it gave me the kind of knowledge about how computers really work, what's going on at that lowest level, how memory is used, what a stack is, pointers, everything... you don't have to become an ace assembly language programmer, but it's a great introduction to how things work at a really low level.

      By the time I was in college, I was writing graphics libraries in assembly language to use with Turbo-C++; I was writing that VGA setup code, I figured out how to do real memory mapped scrolling (and was even listed in the graphics FAQ for a time, along with my code).

      Now I don't touch assembly language anymore, but I think when someone understands everything that's going on, they can gain a much better grasp of what's going on - they understand memory management better, they understand the limitations of the machine, they can learn about cache... I really think the people I've known that had that low level experience actually learned how to structure high level code better.

      It can even go in parallel... here's the C++ code for "Hello World," and here's how you'd do it in assemble language.

      If they can grasp that, then explaining byte-code languages becomes even easier...

      I know a lot of people would think this is like learning how to build a car before learning how to drive one, but I don't think it's a good analogy; but it is true that in many places in the world, some basic maintenance skills and understanding of how the car works are crucial to getting a license to drive.

      When using the high level language and a library like OpenGL, it becomes important (IMO) for them to know what OpenGL is doing; it's important to know what different types of shading are, the difference between indexed and RGB (or other colorspaces), the basic algorithm for drawing a line (again, I implemented things like this in assembly because, at the time, computers were just too slow... not necessary now, but a grasp of the algorithm is beneficial, IMO), matrices and how to calculate rotations... if you understand what OpenGL is doing, it becomes a lot easier in the long run.

      --
      Stupid sexy Flanders.
    24. Re:No ShortCuts !!! by Culture20 · · Score: 3, Insightful

      driving a truck, or waiting on tables, or shuffling paper, or laying bricks [...] they're not exactly riveting

      Laying bricks is close (both construction), but nothing is as riveting as... riveting.

    25. Re:No ShortCuts !!! by h4rm0ny · · Score: 5, Insightful


      There's a lot of very good advice here, but the most important of all is to listen to your son closely to see what interests him. For me, prodding away, I had a fascination with memory storage. Arrays in particular stunned me with their beauty and the first programs that I really applied myself to writing were strategy games that were at heart nothing more than 2D arrays that stored types of units, resources etc. Of course the units themselves were arrays. I might have been an odd child, but the thought of all those numbers lined up and structured absolutely thrilled me. Who knows what will really grab your son's attention? Well, actually, only your son does, which is why he most of all, is the one you should listen to.

      You don't have to be a great teacher when the pupil is interested. Just try to learn to answer questions at the right sort of level of detail. That's 90% of it when you think about it, it really is.

      --

      Aide-toi, le Ciel t'aidera - Jeanne D'Arc.
    26. Re:No ShortCuts !!! by AmaDaden · · Score: 2, Interesting

      Java is a great language to get started in. Just about anything that you want to do you can do in Java. It might not be best when written in Java but it can be done. I started programing in QBasic moved on to VB and then C/C++ but I only got sucked in to it once I started with Java. It's also the top language out right now so it's very practical.

      More important then the language is that you figure out what he likes about programing. Keep his interest alive. I started coding when I was 10 but around the age of 14 I almost entirely stopped. I lost my drive. I was using mostly VB at the time and it was just too much of a pain in the ass and I had nothing to really show for it. Additionally I got to the point where I could not learn anything else about the computer when using Windows. Yet I was not able to jump in to Linux because 1)I knew too little about it 2) I had no one to show me the way. I basically got stuck until I got to college.

      So basically keep his drive alive by...
      1)Let him pick the projects and just grease the wheels. "Oh you want to do X? learn language Y." "Let me see if I can help you with that bug." He might not be at all interested in the same things you are and there is nothing wrong with that.
      2)Give him the guidance he needs but don't force him in to anything.
      3)Don't be afraid to learn something new so you can help him with it. It is far easier for you to learn something new then for him, you already know programmer speak.
      4) On the topic of programmer speak show him Slashdot or Digg or something like that. Programmers have started there own culture in these places that he might be interested in seeing. Digg might be best for him for now but once he learns more Slashdot is likely to be more his speed.
      5) Be a mentor not a coach. Just make sure he is not going to any dead ends like Visual Studio or Windows. You can only learn so much about them before you are not allowed to learn any more.
      6)It sounds cheesy but be proud of him. Getting started in this is a lot of time that he could be using to hang out with his friends or play games. It's hard to keep going when your not getting anywhere yet AND no one is impressed with how hard you are trying. Just don't embarrass the kid by telling EVERYONE you meet "Little johnny just started programming!"

    27. Re:No ShortCuts !!! by IamTheRealMike · · Score: 2, Insightful

      Dudes, don't bite my head off. Nobody ever said teenagers couldn't do kernel hacking, they said that shouldn't be how they are introduced to it. And that's totally right!

      Here are some aspects of kernel hacking from a beginners perspective (and really this is what it's about - being a beginner, not being a teenager):

      • Abstract: concepts like scheduling algorithms are way too removed from achieving useful results
      • Unforgiving of mistakes: Messed up? Time to reboot. This is amazingly frustrating for professionals, let alone novices.
      • Way too limited: kernels are written in C. C does not teach you modern software design, in particular, object orientation. Knowing this stuff inside out is crucial if you ever want to get a non-shitty job writing non-shitty software.

      Here are some attributes of video game programming:

      • Immediate: you can see the results of what you do.
      • Forgiving of mistakes: if you make a mistake, you get a backtrace showing where. You fix the problem and continue. Fast turnaround time on mistakes is crucial to learning.
      • Many possibilities for learning: even a basic video game will involve complex data structures, maths, non-trivial algorithms, file and network IO, designing data formats, user interfaces .... you name it, video games need it.

      Nobody is trying to insult you by saying teenagers should start with video game programming instead of kernel programming. Believe me, I'm 24 so it wasn't that long ago I was a teenager. After I finished with that video game I moved on and by 18 I was debugging race conditions in Wine. But doing that video game was some of the best experience I ever had - it let me practice object oriented design, high performance coding, memory management on a large scale, user interface design, OpenGL, and implementing complex algorithms like A* pathfinding.

  2. 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 Eudial · · Score: 2, Insightful

      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).

      What you choose as a first language matters. It should be easy, and teach basic flow control in a very direct matter that allows for an intuitive understanding of those subjects (BASIC was the name of the game when I was young, python is where you'll want to go today). But I'd definitely leave the door open for C or C++ as well (hell, I learned C when I was 15). Buy a good book on python, and K&R to teach him C, and tell him to start out with python, and get into C if and when he feels like it.

      It's also good not to micromanage too much.

      --
      GAAH! MY PRINTER IS ON FIRE!!! PUT IT OUT! PUT IT OUT!
    3. Re:python by Olix · · Score: 2, Interesting

      Don't teach him anything, its better if he sits down and learns it himself.

      I know that learning in lectures in college is a very different ballgame to learning from instruction by one person, but I found that I only really improved my coding ability when I sat down and got myself a project I wanted to work towards. If the kid is interested in learning to code and wants to do interesting things with the computer, then he'll learn it himself - just give him some easy IDE and supply him with ideas for something interesting to write. He should be able to learn the rest himself with online tutorials and the like.

      Some people bitch about it a lot, but Java is nice and simple to learn and there is something like 2000 published books on it.

    4. Re:python by Malekin · · Score: 5, Funny

      Forbid him to learn python. Then he'll do it himself to spite you.

    5. Re:python by xalorous · · Score: 4, Insightful

      Dude, this guy's kid looks up to him, as a role model. The number one reason he wants to program is because his dad does it. By all means, give the kid the tools he needs to learn to program. Pick a language with lots of tutorials and books and wide acceptance (C or Java perhaps?). Get him to draw flowcharts or write pseudocode (people still do that?). Give him some fun problems to work out. Go over code with him. Show him ways to improve his code and explain the reasoning behind them. His interest in spending time with you will keep him at it until he's hooked on programming itself.

      --
      TANSTAAFL GIGO Acronyms to live by!
    6. Re:python by silentcoder · · Score: 5, Insightful

      >I'm still learning good C++ practice after a decade of commercial use
      Don't worry, so is Bjarn Stroustrop

      --
      Unicode killed the ASCII-art *
    7. Re:python by Anonymous Coward · · Score: 2, Funny

      From the summary: 'My young teenage son is starting to ...'

      > Let the kid figure out his (oops, presume it's a he)

      There are mighty few female sons, so it's a fairly safe presumption.

    8. Re:python by croftj · · Score: 2, Informative

      You know what they say about presumptions...

      --
      -- Many men would appreciate a woman's mind more if they could fondle it
    9. Re:python by Cal+Paterson · · Score: 2, Informative

      Hmmm...as someone learning Smalltalk at the moment, I cannot agree with this post. Smalltalk itself is actually relatively straightforward, but actually learning OOP is very difficult indeed. There are tough, abstract concepts here, and OOP has a higher barrier to entry than functional languages (which I learned first) or proceedural languages.

      Additionally, there is only one book currently suitable for learning Smalltalk (Squeak by Example), and while it's a good book and not exceedingly hard, it would assume to much of someone who doesn't already know how to program. There might be a text I don't know of, though.

    10. 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?

    11. Re:python by Anonymous Coward · · Score: 2, Insightful

      By all means, what the previous poster said. Spending time with your son is the most valuable gift you can give him, regardless of the language you think he should learn. Pick a language, buy a For Dummies book, and spend quality time with your progeny. Even if he decides that he hates programming after a year, he will still take away the time spent you as well-spent.

  3. No, it is still correct. by Corporate+Troll · · Score: 2, Insightful

    Your approach is still correct. The point and click gives results fast, but doesn't actually teach you anything. If he find the basics, boring, don't even bother anymore. Programming isn't for him.

    Heck, I can say that programming for me became boring the day I started doing it professionally. I would rather direct my son in a completely orthogonal direction.

    1. Re:No, it is still correct. by jank1887 · · Score: 2, Insightful

      heh, he said orthogonal

      I would recommend you pick up some sort of embedded logic kit. Something, anything, that translates code into real world manipulation. Even if it just winds up being a fancy digital clock kit, the fact that he can write some code and see something physical happen can completely enamor a kid.

      I'm saying this from the perspective of an engineer. Circuit theory class was one thing. But when we could controllably vary the intensity of a lightbulb, and then in digital logic class pattern an LED array, and then in electronics move a robotic arm... etc. Things like that made the theory 'real'. Simple algorithms in a microcontroller producing sensible output can help make programming more than just words on a screen.

      I'm a bit out of touch with what's available, however. I know there are a number of LEGO kits (mindstorm or something?) that let you do things like this. Get a starter kit, give the kid a challenge, and tell him if he accomplishes 'X', you'll buy him a bigger set.

  4. Re:Son? by __aamdex1616 · · Score: 5, Funny

    I thought geeks didn't have sex ...

    Geeks clone themselves, it provides the same benefits without all the hassle with bodily fluids.

  5. Write a game by gsslay · · Score: 4, Insightful

    Write a game, perhaps based on a favourite book. Or something that involves a subject he's already interested. Doesn't matter if it's a simple text game. Let him write it on his own. Then when he's finished suggest a few improvements. Repeat. Once he's bored with that, start a new project.

    That's how I learnt.

    And for pity sake, do not ask him to kernel hack. It's way too abstract. You need something user-level with immediate and very visible results.

    1. 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.

    2. Re:Write a game by dkf · · Score: 2, Interesting

      Doesn't matter if it's a simple text game.

      It's better if it is. Fewer moving parts, much easier to see what's going on.

      A pretty good one to start with is a number guessing game. Teaches about control structures, IO, state and validation of input. Go from there on to something like the Animal Game. You can use that to teach about decision trees and persistence. And that covers a very large fraction of the foundation of computing.

      --
      "Little does he know, but there is no 'I' in 'Idiot'!"
    3. 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!
    4. Re:Write a game by Jesus_666 · · Score: 2, Insightful

      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.

      If he's also interested in electronics you can get a small Atmel and the neccessary components and build your own Lego Mindstorms workalike. Low-level programming and electronics sure sound interesting to a geeky kid if they allow him to build his own autonomous robot. Plus, he learns how to use a soldering iron, a skill I would dare call essential.

      --
      USE HOT GRITS WITH STATUE OF NATALIE PORTMAN (NAKED AND PETRIFIED)
  6. Start him off here... by blahplusplus · · Score: 4, Informative

    C++ primer plus by stephen prata.

    http://www.amazon.com/Primer-Plus-5th-Stephen-Prata/dp/0672326973/ref=pd_bbs_sr_1?ie=UTF8&s=books&qid=1216718603&sr=8-1

    It is one of the best ways to learn programming from absolutely knowing nothing! Because it explains in very accurate, precise and simple language that is very well expressed.
    This is where I learned to program years ago, and I'd challenge anyone to find a better place to bring an absolute know nothing about programming into the fold.

    It explains all the simple functions and whatnot for console programming, etc, if he can't dig that then he's not fit to program, the book makes C++ as easy as something as python, or the old visual basic.

    The old visual basic 6 is not a BAD place to start if you can find some good programming books, because the old VB gave "immediate" results that kids often look for.

    1. Re:Start him off here... by dargaud · · Score: 4, Insightful
      I don't usually write flaming posts, but C++ as a teaching language ?!? You are smoking crack. It has the worst and most complex syntax of any language ever invented. Even Brainf*ck has a cleaner syntax than C++.

      Wanna teach a language, then take one that's both interpreted and compiled like Python, Lua, Ruby. Take something that is radically efficient like Erlang or OCaml. Take something that is meant for teaching like Logo.

      But C++ ?!? Hah, why not Perl, then !

      --
      Non-Linux Penguins ?
  7. Solving problems by Yetihehe · · Score: 4, Insightful

    Show him how he can solve some simple problems for school, so he can later try to solve some more complicated problems. I have started this way when I was 12.

    --
    Extreme Programming - Redundant Array of Inexpensive Developers
  8. Graphics Programming by Destrius · · Score: 4, Insightful

    Being able to produce pretty pictures is always fun. I learnt programming by spending all my time drawing bouncing balls that changed colour in 320x200 VGA. Of course nowadays kids can use a lot more powerful graphics libraries like the aforementioned SDL, which can let them make a lot cooler stuff.

    If he gets the hang of it, you could even teach him how to write a raytracer. That would also be good for his math, and be a nice project where more advanced programming techniques (e.g. data structures, recursion) and more advanced math (calculus, 3D geometry) have practical uses.

  9. Start with basics. by mimada · · Score: 2, Interesting

    Get him on a typing tutor first. It'll come in handy regardless of whether he sticks to programming. As he's learning to type, print out some interesting program listings (or get a book). Have him type in the programs (don't let him just cut and paste). Once he has the programs entered and debugged, have him modify or customize them.

    Once he's done a few of these, he'll have experienced the rewards and tedium of programming and should be able to decide if this is the right path for him.

    1. Re:Start with basics. by drx · · Score: 3, Funny

      Right, and let it save him on cassette tape, that, if it doesn't get corrupted by itself, you should demagnetize in random intervals. Just like we learned the true stuff!

  10. Javascript by dgun · · Score: 2, Insightful

    Javascript is not really a best first language to learn, I don't suppose. But my teenage son was more interested in it than in the C 'hello world' example I showed him, because he was familiar with web pages and web browsers and he could immediately see the implications.

    My guess is that if you do a simple script that moves something around on the screen and then let him play around with it some, that this will spark his interest.

    Good luck

    --
    FAQs are evil.
    1. Re:Javascript by TheRaven64 · · Score: 3, Informative

      JavaScript has some horrible syntax, but semantically it's a very clean Self-derivative. If you learn JavaScript well, you learn about Lieberman prototypes, closures and late binding. It also has the advantage that it's easy to write JavaScript code for the web that actually does something useful. I'd still probably recommend Squeak over JavaScript, because Smalltalk has much simpler and cleaner syntax, but JavaScript isn't a bad second choice.

      --
      I am TheRaven on Soylent News
  11. Re:Games by aero2600-5 · · Score: 2, Insightful

    I have to second this one. I got hooked on programming in high school in a class where we had to program robotic Lego sets to do specific things using BASIC. Regardless of what you use to interest him, I would avoid projects longer than 3 months. If kids work at something too long without any reward, they're likely to lose interest.

    --
    Please stop hurting America -- Jon Stewart
  12. NetHack! by ThePhilips · · Score: 4, Insightful

    Give him nethack (or any other OSS game) to play. After a while when he will get interested - give him the source code for it.

    Programming games is probably most engaging activity. I'm 31 now - but still on it ;)

    --
    All hope abandon ye who enter here.
    1. Re:NetHack! by ThePhilips · · Score: 2, Insightful

      btw, there are bunch of games written in Python using PyGames framework. That to me sounds definitely as good idea. Using PyGl you can also utilize 3D things.

      --
      All hope abandon ye who enter here.
  13. The best language... by IBBoard · · Score: 4, Funny

    The best language to teach him is $trendy_language_of_the_moment. If you don't teach him that then he'll never get anywhere. How can people hope to encourage people to learn when they're using $formerly_trendy_language? It's just so horrible that I'd rather gouge someone else's eyes out with a spoon that use it instead of $trendy_language_of_the_moment!

  14. 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 :)

  15. Make it about programming and something else by shaka · · Score: 5, Insightful

    First off, I think you should start with a language such as Python or Ruby. I started with BASIC which was easy to grasp, and more modern languages are easy yet more powerful.

    Second, when I started programming I was first looking at my brother, writing really simple BASIC programs on the C64. Later, I was interested in fractals and wrote algorithms for drawing fractals. I had a book with code examples for different fractals, but in some other language (I don't remember which). The process of interpreting the algorithm in the first language and translating it to BASIC was very good for learning. Tweaking and extending the algorithms and seeing the changes visually was very encouraging.

    Today, if I were to teach a kid programming, I think I would look into Lego Mindstorms. It helps if the kid is into Lego or robotics, of course. That's a contained environment with a powerful and easy language, which is also part of something else, with immediate feedback on the changes. You can program it in either the Lego-supplied RCX Code (BASIC-like) or ROBOLAB (LabView-based), or any of a number of languages supplied by the community (C, C++, C#, Java, Lua etc).

    --
    :wq!
    1. Re:Make it about programming and something else by wcboyd · · Score: 2, Informative

      I would tend to agree that this is a great way to provide immediate feedback and still give someone a basic enough knowledge of programming. Another alternative would be REALbasic (www.realbasic.com) It is about as platform independent as you can get and will also provide immediate feedback. Plus, for Linux users the standard version is FREE!

  16. Explicitly disallow it. by Anonymous Coward · · Score: 5, Insightful

    That's THE way to get ANY teenager to do ANYTHING.

  17. How about Logo? by nithinsujir · · Score: 3, Insightful

    I think logo was my first programming experience and I enjoyed it. It's great to see the fruits of your labor instantly in graphical form.

  18. Personally by ledow · · Score: 5, Insightful

    I don't see that not having a flashy GUI means anything. I grew up in a world where I saw flashy GUI's for exactly what they were. I was much happier hacking DOS to get that extra few KB of base memory than I was playing about in Windows 3.1.

    The problem is that you can't foster curiosity, which is the main driver here. Nothing will make you sit down and learn a programming language more than curiosity for what you can make the computer do, whether you can do something better than Microsoft, etc. You can try very hard to keep interest, though, and there practical results tend to have greater effect - this is why most basic ICT in schools is based around roaming turtles, Lego RCX, "traffic-light" kits etc. Computer-controlled with visible, physical effect.

    Personally, I think the best way to foster the right computer skills isn't to use a computer much at all (this is a philosophy I've held for most of my life - the best way to program is in your head, not a machine - the best way to write a story is on paper, not a word-processor, etc.). The best things to use to learn are simple gadgets. I'm not a gadget person. I'm not even very good at electronics but I struggle along and get a lot done.

    Wire your house for a burglar alarm, controlled by a computer, and involve your children in every step. If your practical skills aren't up to scratch (good, you can "learn" by your mistakes together and your child can try to "out-think" you when you both hit the same problem), you can get X10/DMX-style equipment that makes it a cinch. But there's nothing like a bug that'll scare the crap out of you when the alarm goes off because you didn't cater for a niche-case (opening the back-door while the power was out etc.). It only needs an ancient "sacrifical" computer that doesn't matter if you blow its parallel port, and it introduces every single reason behind having computers - automate tasks that a human could do using simple, cheap components.

    You can learn programming, you can learn embedded programming, you learn about the importance of bug-checking and clean code, you learn about interfacing, buses, serial/parallel data transfer, physical and real-world effects and how to counter them in software (e.g. switch debouncing). You even get to learn how the damn computer does its job so that it's no longer a magic box that does stuff. You get to interface with all types of cool gear. You get to bring practical, real-life skills into the learning environment which can help immensely if your child learns better that way. (And I don't count "how to write a letter in Office", I mean REAL life skills, like practical problems, electricity and electronics, wiring, why the bloody ladder won't stay still and why Daddy put his foot through the roof).

    The rewards are instant, visible, practical, extendible and "show-off-able". The "reward" of having the whole family laugh at a a doorbell that plays a WAV when someone presses it is very rewarding especially when "it was all my son's work". My particular favourite is a doorbell that goes "knock knock" when you ring it. I also bought an old-fashioned door knocker which has an integrated switch in it and want it to set off a "ding-dong" sound, just to see the postman's face. I'm doing it with simple electronics and one of those recorable greetings-card chips but you can do it with a PC easily. Ten minutes of very basic wiring to an old-fashioned joystick port (ancient laptops are great for this sort of thing), a WAV file off a free website and a twenty line program. You can see exactly where his skills lie. Is he a better programmer? Is he a better thinker? Is he better at practicalities? But no matter what he is, it's so simple to do that you can have great fun wiring it up (probably with Mum in the background tapping her feet because she's getting sick of "Yankee Doodle" every time the neighbour's call).

    Then you need to get to the point, as quickly as possible, where he can *think* of new stuff to do himself. You started with a doorbell

  19. Low-level game programming by 4D6963 · · Score: 2, Informative

    Video games are fun, and making your own video games is fun too.

    Start by making him learn text game programming, like the price is right. That's both on the very basic level of programming, and a quickly gratifying game to learn.

    Then, maybe I suggest low level game program. And by low level I mean no SDL (well, maybe a wrapper), but writing your own pixels to a frame buffer is more gratifying. As in, teach him how to make a function that write a rectangle on a frame buffer depending on the rectangle's size and the coordinates of its center, then make him move the rectangle around by pressing keys.

    Build on top of that by making he do a very basic game like pong. My first graphical video game was a pong and I coded it in two days, that's how easy it is.

    From that point on, he will probably start to get ambitions. As in, he'll want to draw lines, load sprites, rotate them, use physics, learn about tcp/ip network, signal processing theory and techniques, etc, to achieve a precise purpose. All of these things will fuel his interest towards mathematics and physics, and give him a good reason to learn about and understand these things.

    Finally, introduce him to more "real world" type of programming, by giving him some of the stuff you have to do at work, for uhh.. the sake of his education!

    --
    You just got troll'd!
  20. 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 ;)

    1. Re:My experience by codeButcher · · Score: 2, Insightful

      Oh, and remember that until you kick him out of the house (or at least to the basement), his job is to play, not work.

      --
      Free, as in your money being freed from the confines of your account.
  21. Re:Son? by Darfeld · · Score: 4, Funny

    I know you're lying : you actually enjoy telling him.

    --
    (\__/) This is Lapinator
    (='.'=) copy it in your sig
    (")_(") so it can take over the world
  22. Do yourself a favor... by Chineseyes · · Score: 5, Insightful

    Don't try your to encourage your child to do anything for which they don't have a natural inclination, they will end up hating anything you try to push them towards to forcefully. Give them a well rounded education and make programming one of many things you expose them to, this was what my parents did and I am thankful for it. I lost count of how many people I met in college whose parents had enthusiastically encouraged them to learn one topic or another, especially the children of professors. Some people took off with whatever topic their parents introduced to them but most of them ended up switching majors 4 or 5 times and spending years and many dollars on undergraduate education. Demand excellence in whatever your child has interest in, with the caveat that as they get closer to 18 they have a plan on how they will feed themselves (so you want to be an actor Johnny? Great, better double major in something practical otherwise you'll be waiting tables cause I won't be paying your bills).

    --
    I think the invisible hand of the market has its middle finger extended

    --A wise old fart named SC0RN
  23. Draw on the experience of the community by jeevesbond · · Score: 2, Funny

    Draw upon the extensive knowledge of the GNU/Linux community, for example:

    • whenever he asks a question, reply with either: 'OMG RTFM!!!11!One' or 'man *question*'. The shortest and most arrogant answer is always most helpful.
    • if there's a piece of hardware not supported, the best way of helping a newbie is by shouting, as loudly as possible, 'IT IS THE MANUFACTURERS FAULT!' Calmly explaining the situation with hardware support in GNU/Linux is not a good idea. It only leads to further questions (to which the answer is 'OMG it's Free software, code the driver yourself you n00b!');
    • if he finds any shortcomings in the software, ensure you encourage him by assuming the problem is his fault. Make certain to chortle condescendingly whenever he points anything out to you. If it is at all possible to blame the shortcoming on him, ensure that as you wander off -- chortling as before -- say, just audibly, 'luser error';
    • newbies feel most secure when their mentors display their superiority, always make sure your boy is aware of your vast knowledge and epic intellect;
    • loudly proclaiming that, 'next year will be the year of the Linux desktop' makes GNU/Linux newbies feel secure about the platform's future;

    If he actually does find a bug, here are some of the basics you should tell him about bug reporting:

    • keep it vague - developers don't want your life story, don't bother with debug traces and all that guff;
    • always gush - the ideal bug report is at least half gushing about how he loves the software;
    • demand developers contact him personally - this is very important, developers prefer communicating privately, private e-mail is best;
    • always raise new reports - it's never worth the bother of checking whether your bug has already been reported;
    • bug reports aren't just for bugs! - feel free to use bug reports for idle chat about the issue, or related things, even for just storing your shopping lists, tricking people into viewing goatse, or even rickrolling the devs;
    • most bug reports are the highest priority - if you're raising a bug report, it's of the highest priority to you, right? So generally, enter bugs with the highest priority possible.

    Now this post may seem like a troll, but if you do exactly the opposite of what I advise, he should do well.

    --
    I'm going to transform myself into a mighty hawk. Either that or I'll just go and work at Dixons, haven't decided yet.
  24. Show Your Enthusiasm by Dean+Edmonds · · Score: 3, Insightful

    Whether you teach him programming or someone else does, the most important thing you can do for him is to show your enthusiasm for programming and demonstrate why you love it. Those kinds of things are infectious. If he catches the bug then he'll learn it, one way or another.

    --

    -deane

  25. 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.

  26. Re:First the dirty stuff.. by whistlingtony · · Score: 2, Funny

    10 print "No Freaking Way"
    20 print "Who starts on C?"
    30 print "Seriously!"
    40 goto 10

  27. Re:Son? by pclinger · · Score: 5, Funny

    Geeks clone themselves, it provides the same benefits without all the hassle with women.

    It seems you made a mistake in your post, I've gone ahead and fixed it though.

    --
    /. editors made it impossible to link to file:///c:/con/con in my sig. Please just type it in
  28. Choose-Your-Own-Adventure... by cbrichar · · Score: 2, Interesting

    I've seen a few other people mention story writing, and I'd second that whole-heartedly. My friend and I first got hooked on programming when we started writing simple 'Choose-Your-Own-Adventure' style branching games in Q-Basic (complete with sqealing PC speaker musical soundtracks).

    My friend even got more sophisticated and started creating simple RPGs - random number generators with modifiers for the attacks, variables for vital character stats, etc. They were alwasy *very* simple, but we had a great time, and learned a lot as a result of it.

  29. Re:PHP will ruin your mind by SimHacker · · Score: 4, Insightful

    There are so many reasons not to start with PHP, that I'm not even going to start listing them here. PHP is a HORRIBLE first language, and a horrible second, third or forth language. It corrupts minds, and makes it harder to learn other languages. It's a lot worse than corrupting someone by teaching BASIC as a first language.

    You should be ashamed of yourself for suggesting teaching PHP to a kid.

    -Don

    --
    Take a look and feel free: http://www.PieMenu.com
  30. Do not teach, Provide by Dersaidin · · Score: 2, Insightful
    Don't teach him anything.

    Provide him with a computer. Provide him with help when he asks (or not, figuring things out yourself is best).

    Show him how useful it can be to write programs to make the computer do whatever you want.

    If he wants to learn, he will. If not, bad luck.

  31. JavaScript: It's right there in the browser by moshez · · Score: 2, Insightful

    Teach him JavaScript.

    Set up Firefox and Firebug, and you have a wonderful console for programming right from the browser. You can do fun animations, effects, and various cool things.

    And showing it to friends is as easy as uploading to a host...

  32. Re:Games by irtza · · Score: 2, Funny

    3 months? I lose interest after just a couple of sec

    --
    When all else fails, try.
  33. My own remembrances by OpenSourced · · Score: 3, Insightful

    When I was 15, I had never seen a computer, but I knew that I wanted to work with them. The _idea_ of computing, of writing instructions to make the computer do what I wanted, of playing with something that exhibited some of the powers of human mind, was terribly interesting to me. Getting my hands on my first PC, a thing with a BASIC interpreter and graphics! display in a TV monitor, was an intense experience, even if I cannot say why, what clicked inside me. The making of my very first BASIC program, unaided, reading a manual in a foreign almost-unknown language (English) was a triumph. The making of a program that draw a circle on the screen by calculating the distance to the center, was making mathematics come alive for me for the first time.

    What I mean is that, in my case, no stimulation was needed, and probably difficulties just added emotion. The interest and emotional attachment to the computing world was immediate and intense. I don't know if I'm a typical case, but my anecdotal evidence is yours for what's worth.

    --
    Rome taught me patience and assiduous application to detail. Virtues which temper the boldness of great, general views.
  34. MOD PARENT UP by Asmor · · Score: 2, Insightful

    Javascript was my first programming language. It's something everyone's got simple access to, it's very forgiving (though it does set you up for some bad habits), and it's very simple to make GUIs and interact with the user.

  35. From NAND to Tetris by STFS · · Score: 3, Informative
    I guess this really depends on how interested your kid actually is in learning the internals of computers. It might be a good idea to start with a "high level" tool, and I'm not talking about using Python or some such thing, but using Alice and/or LEGO Mindstorm. I've played with Mindstorms myself in a robotics course and I can vouch that you can do a lot of fun and interesting things with it. There's even a C-like programming language and compiler that you can switch to when the "block interface" becomes boring and your kid gets interested in learning more "orthodox" programming.

    Once he has a solid knowledge of basic programming and if he's still interested in learning more of the basics of how computers work and if you are willing to dedicate quite a lot of time and effort to destroying the social life of your kid once and for all and turning him into a full blown geek I'd recommend that you take a look at a course that has been called "From NAND to Tetris" in which students are given a NAND logic gate and must construct their own (simulated) computer out of that by gradually building on top of that NAND gate. Eventually they end up implementing a simple game, such as tetris or snake in a computer that they build from the ground up.

    Here are some links for this material:
    A short introduction to the course: http://www.youtube.com/watch?v=JtXvUoPx4Qs
    A long introduction to the course (Google Tech Talk) http://video.google.com/videoplay?docid=7654043762021156507
    The course material itself: http://www.cs.rpi.edu/news/colloquia/December8_2005.html

    Above all else I think you need to be sensitive to your kids needs and longings. Who knows, maybe he will not be interested in all about learning the internals of computers but more interested in the usability and design of interfaces (I know, your worst nightmare I'm sure). My point is, don't push him into a direction that isn't to his liking.

    --
    You don't think enough... therefore you better not be!
  36. Re:Son? by K.+S.+Kyosuke · · Score: 5, Funny

    More than half of the a woman's body is water. So without loss of generality, he could just have written "without all the hassle with opinionated bodily fluids".

    --
    Ezekiel 23:20
  37. 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.

  38. Find something he wants to be able to do... by OrangeSpyderMan · · Score: 4, Insightful

    I've often found that by far the best way of teaching him to do this kind of thing relies on finding something he wants his computer to do for him.

    This could be just about anything - if he likes sports, it could be a sports results and stats database, if he likes RC modeling it could be an interactive application for setups for his radiocontrolled cars. Your only real role here is to ensure he chooses something feasible in a reasonable timeframe (don't suggest writing Quake5 :) )

    The thing I like about this approach, is that it will teach him far more than just "how to do it" - you can start it with a discussion about how he wants to go about it, to start with which language (pros and cons, quick GUI development vs. old school stuff - basically just see what ticks his boxes) and it'll then take you through the basics of data models, and the fact it'll be useful will keep him motivated. Help him break the task up into little bits, and use the first few to teach him the ropes, and then let him try some on his own.

    Make it clear it's his project, that you're there to help whenever and wherever you can - but don't judge. If he wants to start with an Access DB - by all means point out the pros and cons, but it's his toy - let him do it, he should be old enough now to see for himself whether it's "right" or "wrong".

    --
    Try NetBSD... safe,straightforward,useful.
  39. Re:Son? by Savage-Rabbit · · Score: 4, Funny

    ...the hassle with women.

    It seems you made a mistake in your post, I've gone ahead and fixed it though.

    Why don't you two just stop complaining and fix the problem once and for all by writing a proper manpage on women?

    --
    Only to idiots, are orders laws.
    -- Henning von Tresckow
  40. Personally I say, start with modding games by Moraelin · · Score: 4, Insightful

    While I'll aggree that kernel hacking won't get anyone interested in programming, I think programming web sites is somewhat lacking in motivation. As you were saying, you want it to provide some serious bragging rights.

    Whatever you want to do on the web at teen level, has been done before and better. Publishing photos? There are a ton of providers which achieve the same thing. Forums? Ditto. All you need for a good guild web site are webmaster skills or maybe graphics design, _not_ programming. Approaching it from the programming side is the way to get the least bragging rights, with the most effort. Everyone won't go "woot, what an original forum you programmed!", but the more discouraging, "geesh, why don't you use PhpBB like everyone else?"

    Personally, looking back at what motivated _me_ back then, I'd say start with games. That was my motivation. I could throw together a game as good as Psion and the gang made for the ZX 81 and later ZX Spectrum, and show it to my classmates and get some serious appreciation. The first game I wrote, when I invited a couple of classmates to see it, they ended up playing it all afternoon. Mind you, it was uber-simplistic by today's standards, but it was as good as anyone could possibly do on a 1K ZX-81.

    It was motivating enough to get me started on assembly and converting it by hand to hex.

    Nowadays I wouldn't advise anyone to write a game from scratch at home, but there's a _lot_ you can achieve as a mod. And mod-friendly games are getting rather common these days. I can think of a few where most of the game logic (i.e., minus the graphics and such) was Python, one even TCL, and one was scripted in Java.

    So basically I'd say, show the guy how to make his own mods. Even if it's just for cheating it's a start.

    And the distant carrot of making it big and famous is there too. Both Counter-Strike and Team Fortress started as mods, and ended up major successes.

    --
    A polar bear is a cartesian bear after a coordinate transform.
  41. Well, for one thing... by hyades1 · · Score: 5, Insightful

    ...you're his dad. The time you spend with him will be one of the highlights of his life, and will determine how he, in turn, raises his kids. Whether you suck as a teacher or not isn't even on the scale. Try to learn. Do the best you can and encourage him to let his interests take him to other sources. ALWAYS answer his questions.

    Sorry for the polemic, but believe me, your son will stretch himself to understand you far more than he will even for the most gifted teacher. What I owe to my parents can never be repaid, and there isn't a day goes by that I don't miss them.

    --
    I've calculated my velocity with such exquisite precision that I have no idea where I am.
  42. Let Infocom be your shepherd by spyrochaete · · Score: 2, Informative

    Games are what got me interested in programming. I used to read Creative Computing BASIC games compilations in bed as a youngin'. They had the source code of a game along with a couple of printed-out test runs. I found this an interesting application of programming that spoke to my hobby of video games.

    Why don't you write a game with your son? A text adventure a la Infocom, or a slot machine or dice rolling board game?

  43. Re:Son? by PopeRatzo · · Score: 4, Funny

    Just show your son these comments. It'll convince him to learn to play the violin or become a social worker instead.

    Can he sing? Tell him to get three of his friends and start a boy band. Then you can retire and hack your kernel in style.

    --
    You are welcome on my lawn.
  44. Effing Magic by Keeper+Of+Keys · · Score: 4, Insightful

    You've hit on something there. I started messing around with computers when I was 12, and got such a kick out of getting them to do the simplest things, like print messages on the screen. And I can't say the thrill of getting one of these dumb lumps of matter to do what I want it to has never really gone away.

    I think Python would be an excellent starting point, but the language I would choose for a kid's first taste of programming is javascript. They're already familiar with browsers, and within seconds they can be bossing one around, leveraging all its graphical power.

    1. Re:Effing Magic by minister+of+funk · · Score: 2, Insightful

      I've had many conversations with various peers around the question, "What do you think is a good first-language?"

      When I was first exploring computers, I was using Basic, Pascal and Logo. I don't remember Pascal, and I can't forget Basic or Logo. My first big passion-driven project was developing a Choose-Your-Own-Adventure engine in Basic. It got me into abstraction, simple databases, and eventually graphics.

      I think JavaScript is a GREAT learning tool. You can simulate writing to files using text areas or new windows and Firebug is an excellent debugging tool. The language is very approachable and forgiving. Maybe using a strongly-typed language as a first language encourages disciplines that are missing in new programmers, but inference-typed languages offer tremendous power and can lower frustration levels.

  45. Re:Son? by sjs132 · · Score: 4, Insightful

    There are girl geeks... Few, but some... So you can't assume your % of woman / water, it could have been % of male / water, etc..

    Off topic, but...

    One GG that I know, and is rather pleasant to view, decided the biological ticking was too loud. Having not found a suitable male after being hurt/rejected a few times, she decided to completely forgo the male part of the equation. A few Dr. visits, lots of $$ for fertility drugs, and some frozen sperm = twin babies on the way, no father needed.

    Now, in reality, a male was the initial donor of the frozen sperm, and I told her that she could of saved a lot of money by just going to a bar and drinking a lot of vodka, but she went on spouting about genetic core, family traits, selectability, et al...

    I almost wanted to point out the story of Dr. Jacobs who was convicted of fathering children with his own sperm instead of the donor sperm that was selected, but figured that would only cause too much angst.

    BTW, I guess this is becoming a trend among some women today, so the available men better figure things out soon, or the next generation will all be wearing "popsicle"(tm) T-shirts... (I'm out of the game, married with 2 kids myself, so don't blame me.)

    --
    --- Relax, that mass muderer is just trying to reduce our carbon footprint, one fetus at a time...
  46. Re:PHP will ruin your mind by Anonymous Coward · · Score: 5, Funny

    Hey, I learned PHP as a first language you insensiti-Warning: Cannot modify header information - headers already sent by (output started at /home/a9286564/public_html/x/forum/bb-settings.php:169) in /home/a9286564/public_html/x/forum/bb-admin/install.php on line 10

  47. Re:PHP will ruin your mind by SimHacker · · Score: 5, Informative

    If you're a PHP programmer, you're irresponsible if you're not already aware of its flaws, because you have not educated yourself by reading any of the following well publicized articles. Once you understand the flaws of PHP, you can't honestly make the statement that it's a well designed language suitable for teaching programming to kids.

    First there is this classic article, Edwin Martin's "What I don't Like about PHP", which goes into detail about the following fundamental flaws:

    1. Bad recursion
    2. Many PHP-modules are not thread safe
    3. PHP is crippled for commercial reasons
    4. No namespaces
    5. Non-standard date format characters
    6. Confusing licenses
    7. Inconsequent function naming convention
    8. Magic quotes hell
    9. Framework seldom used
    10. No Unicode
    11. Slow

    Then there is the mind-set of the PHP language designers and community, which is deeply flawed. Ian Bicking's "PHP Ghetto" article sums up the problem with PHP's design and community pretty well:

    I think the Broken Windows theory applies here. PHP is such a load of crap, right down to the standard library, that it creates a culture where it's acceptable to write horrible code. The bugs and security holes are so common, it doesn't seem so important to keep everything in order and audited. Fixes get applied wholesale, with monstrosities like magic quotes. It's like a shoot-first-ask-questions-later policing policy -- sure some apps get messed up, but maybe you catch a few attacks in the process. It's what happened when the language designers gave up. Maybe with PHP 5 they are trying to clean up the neighborhood, but that doesn't change the fact when you program in PHP you are programming in a dump.

    Jonathan Ellis' "Why PHP sucks" article makes a lot of good points and links to many other sites with more information to back up the claim that PHP sucks.

    He perfectly summarizes the yapping of the PHP apologists when he says: Basically these all boil down to, "I don't have enough experience to recognize PHP's flaws because I haven't used anything better."

    He summarizes:

    In short, PHP sucks because, PHP's authors are prone to confuse "pragmatism" (a fine design goal, if done well) with "adding random features without considering how they impact the language as a whole." Thus, its authors have found it necessary to correct obvious flaws in both minor and major releases, with the result that the recent PHP5 breaks with the past to an unprecedented degree while still leaving many fundamental flaws un-addressed. I don't know if this is because they didn't recognize those flaws, or more likely, because they were willing to impose "requires a lot of pain to upgrade" but not "requires a complete re-write."

    There is also a lot of great stuff about why PHP is so bad on http://www.ranting-wolf.info/category/technology/programming/php/ including a concise description of why the "Smarty" templating system is such a horribly ill conceive and terribly implemented idea.

    And if you're still not convinced the design of PHP is deeply flawed, because language design is HARD and should only be attempted on purpose by experienced people, here's what the Father of PHP Rasmus Lerdorf himself said in an ITConversations interview, quoted in "Why PHP sucks, Part III":

    "I don't know how to stop it, there was never any intend to writ

    --
    Take a look and feel free: http://www.PieMenu.com
  48. Re:Son? by ShieldW0lf · · Score: 5, Informative

    I can't comment to a teenager, but I've been having success getting my 7 year old daughter interested in programming with Scratch. She's been using it to make movies and games. The thing that really captured her attention was that she could publish her work through Scratch and get positive feedback from the community on the Scratch website. The idea of building a fan base really appeals to her. I've also told her that if she develops the skills, when she's ready for her first job, we will give her part time work instead of her having to get a job in some fast food joint or convenience store, and that seems to have made an impression on her.

    Seems to me the best thing you can do to get your teenager involved in *nix programming is to get them involved in an online community that will give them some positive feedback and the possibility of celebrity, then show them some of the success stories out there that started in just that way. And, of course, let them know you're genuinely proud of them when they create something.

    --
    -1 Uncomfortable Truth
  49. Airwolf Episode by sesshomaru · · Score: 2, Interesting
    Well, how about this Episode of Airwolf?

    Moffett's Ghost

    Hey it worked on me when I was a kid!

    --
    "MIT betrayed all of its basic principles."
  50. Push him into it! by elrous0 · · Score: 4, Funny

    If you're going to pursue this dream for your son, I suggest the "stage mother" approach. Force him to program, drag him to computer conventions and force him to take computer classes, and when he starts to cry tell him you're going to put his dog to sleep if he doesn't perform. It may sound harsh, but if you're ever going to exploit and live vicariously through your kid. It's the time-tested way.

    Granted, to date, it's mostly been used for singers and actors. But there is no reason it couldn't work for other professions as well. Just be careful to dodge the whiskey bottles when he gets older.

    --
    SJW: Someone who has run out of real oppression, and has to fake it.
    1. Re:Push him into it! by 19thNervousBreakdown · · Score: 4, Funny

      I was going to suggest dressing him in unmatching polyester outfits and knocking his books out of his hands and telling him to "pick it up, faggot." Maybe find a pretty girl to laugh at this occasionally. In my experience, this is almost certain to drive someone to program.

      Maybe combining the two would create the perfect uber-coder.

      --
      <xml><I><am><so><damn>Web 2.0</damn></so></am></I></xml>
  51. Re:Son? by The+Great+Pretender · · Score: 4, Funny

    If this thread can even touch on how to encourage a young teen to do anything, I'll be impressed and grateful. My current strategy is to let mine be and hope that when he screws up he doesn't die. If he can make it to the end of the adolescent years, with all limbs and senses, then he may be able to achieve something.

    --
    A positive attitude may not solve all your problems, but it will annoy enough people to make it worth the effort.
  52. Lego Mindstorms + Java by dougwhitehead · · Score: 2, Insightful

    Get Lego Mindstorms and download Java for it, called leJos. That way his programs can start simple and still get real feedback.

  53. Re:Son? by rapierian · · Score: 2, Informative

    Along those lines I would point out that Smalltalk was designed to be easy for children as well, so you might want to take a look at http://www.squeak.org/ It's never too early to pick up good programming habits.

  54. Re:Son? by mweather · · Score: 2, Funny

    I fail to see how procreation without mean will make bugs squish themselves.

  55. Heck, if he plays WoW the lua by Tran · · Score: 2, Interesting

    is perfect - immediate gratification as well as using APIs.

  56. Re:Son? by Deagol · · Score: 2, Interesting

    I have kids around the same age, and got them into the Alice environment for a while. It fell out of favor after a bit, but some of the concepts seemed to help later on when my son got a Lego Mindstorm set. My son is currently digging showing off pics of his lego creations on the lego community kids portal. He keeps bugging me for a "real" digital camera, as he has one of those cheap $15 deals from Wal Mart. I've been toying with getting him a better camera, registering a domain name for him, then teach him the basics of HTML and see what he does with it.

  57. Re:Son? by TheoMurpse · · Score: 2, Funny

    I started programming in BASIC when I was after my dad taught me
    1 CLS
    10 PRINT "My brother smells",
    20 GOTO 10

    I later improved after getting AOL in elementary school and picking apart Pong Kombat, a Pong-Mortal Kombat hybrid. I learned the fatalities by reading the source.

  58. Re:Son? by Who235 · · Score: 2, Funny

    My dad always told me, "Women are like martinis for lunch. One is never enough, but two is just too goddamned many."

  59. Instant Gratification. by NoobixCube · · Score: 2, Informative

    Try teaching something that will instantly set off the endorphin rewards. You certainly know a whole lot more about what makes him tick than anyone on Slashdot, but most teenagers, myself included (though I'm 20 now...) play games. Get him started on Python and PyOpenGL, that way he can easily get some 3D graphics on screen.

    For some reading on education in general, in case you're curious, Dimensions of Learning is a good place to start. It's a relatively current teaching model. I have the textbook on it, but you can find general outlines of it everywhere; though, curiously, it doesn't have it's own Wikipedia page. I might need to do something about that, unless it's in another article.

    --
    Admit it. You post strawman arguments as AC so you get modded Insightful for refuting them, rather than Troll