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?

29 of 1,095 comments (clear)

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

  2. 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.
  3. 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
  4. 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.

  5. 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.
  6. 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!
  7. Explicitly disallow it. by Anonymous Coward · · Score: 5, Insightful

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

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

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

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

  11. 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
  12. 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.

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

  14. 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!
  15. 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.

  16. 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 *
  17. 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
  18. 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.
  19. 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.
  20. 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.
  21. 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.
  22. 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.

  23. 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 ?
  24. 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.

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

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

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

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