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?
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.
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
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!
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
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:
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:
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:
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":
Take a look and feel free: http://www.PieMenu.com
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