Ask Slashdot: Best Book For 11-Year-Old Who Wants To Teach Himself To Program?
New submitter waferthinmint asks "What is the best book for my son to use to teach himself to program? He wants to study on his own but everything seems to assume an instructor or a working theoretical knowledge. He's a bright kid but the right guide can make all the difference. Also, what language should he start with? When I was in HS, it was Basic or Pascal. Now, I guess, C? He has access to an Ubuntu box and an older MacBook Pro. Help me Slashdot; you're our only hope."
Have him learn python. On any OS.
But Python would be great to learn on. It's nice that it can be run interactively, like BASIC.
Print out the datasheet for a microcontroller and hand it to him. It might discourage him, but you could just be creating a prodigy.
Most of the Head First books will be good for the young'n--I'm 30 and I still need their cheery images to keep me interested ;-)
http://shop.oreilly.com/category/series/head-first.do
Python is probably the language he should use first.
I'm an experienced programmer, but I really liked the step-by-step stuff on codeacademy.com, where the language du jour is javascript, actually.
Kids and Computers. Available from Amazon.
Seth
$5 / month hosted VPS on linux = awesome!
A language from the last century. Survives in odd corners, eg some embedded applications which haven't worked out how to use C++.
Check out Code Year: http://codeyear.com/
It teaches OOP via JavaScript.
I can't recommend a specific book, but I would recommend starting with Javascript.
The main reason for this is that he will be able to share his creations with people more easily.
For an 11-year old who's learning, I can't imagine C is a good fit. He'll want to spend his time making working code and not chasing crashes. Something safer.
By Dan Appleman. Covers many concepts and is designed for use by young people.
http://www.amazon.com/Computer-Programming-Technology-Action-Series/dp/1893115232/ref=sr_1_5?s=books&ie=UTF8&qid=1334258291&sr=1-5
I don't know about books, but if you go to http://bluej.org/, you'll find a nice, simple IDE, and some documentation and exercises that I know have been used successfully in high-school level classes. I know there are some other languages and associated programs that are specifically targeted at teaching younger kids, but I figure it's nice to get them into real, modern practices quickly.
I also like scripting languages, like Python, Javascript, Perl and Ruby. The advantage with Ruby is that there's an intro text that's a comic book. Something like "The Poignant Guide to Ruby". Check it out.
The CB App. What's your 20?
and build to that goal. that's how I learned Basic programming. I am still amazed at how much I use what I learned from basic today. As fathers have from time immemorial, teach what you know. Unix Shell Programming is a good starting point.
first post111111
I would like to put in a plug for Alice as a great introductory language and IDE too. Unlike a lot of introductory languages, it teaches actual object-oriented programming, and it's fun to boot.
What political party do you join when you don't like Bible-thumpers *or* hippies?
Break his spirit early (or discover how awesome your kid is).
Women are like electronics: you don't know how damaged they are until you try to turn them on.
I'd recommend any book from Packt. They are by far the best source of books on programming, as evidenced by the many glowing reviews posted on Slashdot.
My nine-year-old is using "Hello World! Computer Programming for Kids and Other Beginners" to learn Python. She's not really very motivated, though.
http://www.amazon.com/dp/1933988495
And the men who hold high places must be the ones who start
To mold a new reality... closer to the heart
I can't recommend a good book, but I can recommend a language. Georgia Tech teaches Python as the default for introduction to computing and this was a great language for me to really get started right. I tried messing with Java and C when I was 13 or so but the ability to use Python (which your Mac should already have) takes away all of the boring (to a kid) steps of compiling, etc.
Of course Python has its limitations but for a good tradeoff between power and learnability it's perfect.
Different languages excel at different things, so It's probably a good idea to figure out what he plans on doing with programming knowledge.
What do I know, I'm just an idiot, right?
I am a self taught programmer. For me it started with video games which I practically grew up on. My mom bought a nintendo to keep busy while staying at home with her new baby. I started playing before i could walk, and my interest was sparked when I basically said "Who set these rules, what if I want to jump higher or have more bullets". My parents got me a Vtech computer from walmart for ages 9 and up. I was 6. It had a single line text-only display with 20 characters. But it had BASIC on it and I learned it myself through reading the book.
Get him going on BASIC. It's not out of date.
C has way too much involved features that would confuse him. Scoping, inheritance, pointers, etc.
Get him to the point of writing a small text based battle system. That's what I first wrote as a kid.
"You encounter the enemy, who has 20hp"
"Press 1 to punch, 2 to kick, 3 for magic list"
1.
"You punch the enemy doing 7hp damage, he has 13hp left"
"The enemy kicks you dealing 12hp damage, you have 12hp left"
"Press 1 to punch, 2 to kick, 3 for magic list"
3
"Magic list"
"1: fireball"
"2: heal"
"3: whatever"
1
"You shoot a fireball doing 13hp damage."
"THE ENEMY IS DEAD, YOU WIN!"
10 PRINT "I am awesome"
20 GOTO 10
30 REM ROFL
Try basic first - no variable types, its all human readable, no semicolon hell, etc.
I want to delete my account but Slashdot doesn't allow it.
Java Programming for Kids is a free e-book which will walk you through creating your first Java applet using Eclipse.
http://myflex.org/books/java4kids/java4kids.htm
I can verify that it is appropriately written for an 11-year-old, because *my* 11-year-old son taught himself how to use Java and Eclipse using it. (Using his own Ubuntu Linux laptop.)
1. Why do you need a book to learn in the age of the internet?
2. the most important factor in learning is motivation - he'll be motivated by some goal, so get him to choose a goal first, whether it is to print his name 99 times, make a website building tool, or make a robot which does his algebra homework for him.
3. Start with a scripting language, not something like c, which is full of traps for the unwary, and requires learning lots about the functioning of the computer before you can produce something concrete. Don't believe people who tell you that our choice of language will stunt growth later on, or the only true language is c etc etc. the only mistake you can make in computer languages is to only look at one or two - where you start doesn't matter too much of you are willing to learn and develop your ideas as you discover the wealth of ideas and languages out there.
It's obvious that the kid will need something age/experience appropriate, but don't discount buying a good college textbook or two. My parents used to let me buy the occasional college textbook while growing up and even though they were way over my head at the time, they turned out to be some of the most useful books I've ever used.
Also, BASIC and Pascal are still very good languages to start with. C might be a bit complex to start with, especially when dealing with pointers and such. Another language to consider is Javascript. A kid could have a lot of fun with interactivity working with JS (as well as sharing the work), although debugging can sometimes be a bit of a pita.
I'm enjoying the JavaScript lessons at www.codeacademy.com . The lessons are great (far easier to follow than the books covering the same subjects), and you get a constant measure of your progress. Honestly, I think it would be great if you have a sharp kid who is decent at math. He can graduate to the more advanced stuff later. Codeacademy is a great place to start.
MIT OpenCourseWare Into to Comp Sci & Prog...all you need is internet access and time
Starting Forth by Leo Brodie. Possibly the best book I've ever read about how to decompose a problem into chunks, and turn those chunks into code to solve the problem. As an added bonus, Forth works very well in immediate mode, allowing one to write and test simultaneously.
All far too dense for an 11 year old, and all pretty much require more background knowledge than an 11 year old is likely to have. I'm not sure there really is an answer to the OP's question though, at that age, even a very bright kid is almost certainly going to lack the prerequisite knowledge to learn to program from just a book.
Probably any head first book is good, I would start him with python or ruby, or maybe Java, but first be clear, what drives him? what has he seen that made him want to program? with that in mind maybe the community could be more specific.
If he wants to be a web app developer I would start him with HTML5 and python or ruby, maybe jquery after or javascript then jquery.
If he wants to be a mobile app dev, maybe java, or javascript...
See what I mean..?
Code Academy is a free website targeted at people learning to program. It will start him off in javascript with how to declare a variable and Hello World! type stuff, but later moves on to functions and object oriented concepts.
I'm not sure if there are modules in anything other than javascript, but it seems like a good free way to introduce him to programming in general. It seems to me it's more useful to know how to program than know a specific language, one can learn a new syntax later once you have the fundamentals down.
From my own experience:
1) Don't use a book. Books can be completely discouraging in this age. Instead, point him to tutorials. Much more fun, because he'll have the feeling that he actually created programs, not boring stuff like age guessing etc. If he's creative, he'll soon start to copy & paste different codes together to create new programs. And he'll eventually learn the important stuff from that.
2) Let him learn a high level language like Javascript/HTML or Visual Basic. Creating good looking programs from day one on is much more fun than having to use the console. And it's better suited for showing off the new skills to friends :)
That is not something one wants to hear.
That's how I made my fortune.
I don't know about a book but I'd teach him Objective C or Java. Something you can use to create an app for a mobile device. There's nothing like being able to carry your work around with you in your pocket and showing it off to people. Personally I'd go for Objective C because making a UI in Xcode is quick and easy and you can then focus and the real coding.
If all else fails, immortality can always be assured by spectacular error.
I'd first look at KhanAcademy. They have courses on Python. See http://www.khanacademy.org/#computer-science-container Python in general is a good first language. I first learnt it with http://www.greenteapress.com/thinkpython/ But, I would highly recommend Head First books to start learning any language. I think they'd be great for an 11 year old. Head First Python http://goo.gl/tKRMu Another option that has been discussed recently as a good first language is JavaScript. It has the advantage of running in every browser and allows the ability to see nice visual feedback right away. When I was in high school I learnt a bit of Java using , which I also enjoyed because Swing gave me the ability to create GUIs right away.
I highly recommend "Learn Python the Hard Way". Best of all, the online HTML version is free! (as in beer) http://learnpythonthehardway.org/
http://scratch.mit.edu/
Explains programming concepts though visual components.
http://www.khanacademy.org/#computer-science seems to have some tutorials for python. I think Khan Academy is a pretty good resource for people who are interested in learning...
Funnily enough, my son has gotten into programming via Minecraft and Lua scripting. Through this he has moved into VB (although he was interested in this prior to Minecraft), Javascript, toying with C++ now, and still tinkering with C as well. All in all, maybe a book may not be the best option.
sigs are like a box of chocolates, they all suck remove the underscores to email me
Java - Good because it's C-like, but more directly useful and without the challenges of memory handling that few computer languages have to worry about these days. If he ends up writing in C++ later, he can learn how. Also in use in a lot of places.
C# - Good because it's also in widespread use, and again, lacks some of the pitfalls of lower-level languages. Much like Java in construction as well, and useful for both native executables and website development. It's also a bit easier and cheaper to get hosting space that will run C# than a Tomcat server for JSPs.
PHP - If he wants to just play with web application development, this is a great place to start. Lots of documentation and examples, and the hosting is super-easy to come by.
Ruby on Rails - Good for putting together apps in a hurry, and will teach him about frameworks early on as well, which will probably turn out to be very useful.
Another thing...once he gets started, he's going to have trouble finding problems to solve. That's another way you can help him. I had the exact same problem when I was younger (I, too, learned to code when I was 11...back then it was Applesoft BASIC). So that's one way that web apps might be better...he can actually produce an app with a functional purpose for the family. Just make sure that you either restrict access to it, or that you ensure that he uses secure coding methods. Sanitizing inputs takes you a long, long way and is pretty easy to do.
For your security, this post has been encrypted with ROT-13, twice.
Does he really want to learn to program or is it something that you want him to?
I suggest C++, C# or Java - they have wonderful IDEs that are availble for free. Free is good because at his age, he's more than likely going to loose interest.
If he were my son, I would teach him to use his hands: carpentry, fixing a car, and something else along those lines.
I would also engourage him to learn basic science: chemistry, physics, and of course math. No, programming is not math and you can do quite a bit without never having to touch the stuff. I think basic science will do the kid a lot more for his future than programming. Programming is becomming a blue collar type of commodity skill and if he really needs it one day, he'll pick it up quite easily - especially if he's got the math and science background. He starts getting basic science into his, he can go on to a career that has some sort of future in the US of A: like medicine and well, medicine is prety much it for a middle class kid. Everything else is reserved for folks who know folks who are connected (read: he'll never be a big shot CEO getting hundreds of millions of dollars in bonuses for drilling the stockholder's company into the ground. Stockholders being us poor slobs and out IRAs and 401Ks.)
Yep, I'm cynical and bitter. Oh yeah, teach your kid to be cynical and pessimistic - cynics and pessimists are almost always right.
I would avoid Gortek and the Microchips, it is a little aged. Scripting seems to be an easy start and there are a ton of Perl or Python tools ready and available on the internet. I am mentoring a high schooler now and let him chose his language and he is using Perl - easy, tons of tools, lots of flexability. One thing I see with these languages though is that you have to unlearn bad habits unless you have some structured education. Personally I learned Assembler, Basic, C and Pascal as first languages but they will ruin his spirit for programming.
Back in the day, I had K-Power and TI 99/4er magazines that had programs to type in and explanations of what the code did.
By learning each segment, function, subroutine, etc it was easy to write your own code or play with "what if" scenarios.
Ended up writing routines that emulated Apple Graphics on the TI which was character re-definition based to get the drop of water into a volume of water programs to work on the TI.
or any of several organizations offering free online classes. The next Udacity (www.udacity.com) term starts up next week, and they're offering CS101 again.
I just finished taking the "How to Program a Robotic Car" class and I thought it was great, especially considering the price.
new free 7-week CS101 starts next week. It teaches python.
Maybe book-learnin is neither the question nor the answer. Instead consider to turn the kid loose on "minecraft". (Minecraft's "redstone" appears to me to be most of a programming language.)
I am not sure if your 11-year old is ready for the K&R text, but if he wants a full stack education, the K&R book will give him in-depth knowledge of how low level languages work. It's clearly written, succinct, and arguably one of the best technical manuals ever written. I will caution that It will require more maturity and self motivation to finish, but he'll go through the book understanding how almost all software works. If he is truly motivated, I would even go lower level to leading him to computer organization and have him play around with assembly using a MIPS emulator. Things like caller or callee saved conventions will make more sense to him, as well as pointers and such. Knowing C opens the doors to all programming languages, and if he's more pragmatic he'll probably pick an interpreted language to learn next, or if he's more math-minded, a language like Haskell will follow.
I'd get a copy of the Python version of "How to think like a Computer Scientist".
It's not too dense and uses a language that's relatively easy to learn but still has practical applications.
Give him some attention. Show him how to use online resources. Do a few projects with him, then let him go and see if it sticks.
Learning Perl
Schwartz & Christiansen
Or just send him to http://perldoc.perl.org/
My kids play on Roblox quite a bit and it uses Lua as a scripting language. If he likes playing games, too, then this might give him something where he can see immediate results. The game is free and comes with an editor to create your own levels/games. You can build with blocks graphically and then script interactions with them or use scripts to create objects. You can start simple, but there are some pretty complex, involved games that people have constructed.
http://wiki.roblox.com/index.php/Scripting
For a straight up programming language, I'd go with Python. I don't know what book would be good for him, though.
Have him read bjarne stroustrup's The C++ Programming Language. Once he makes it through that, everything else will be a piece of cake. And if he can't make it through that, well, maybe he would be better of finding other ways to spend his time.
What century are you in?
http://www.khanacademy.org/#computer-science-container
and may be hard to find. But the best book I always refer back to as what seriously started me on the path to being a programmer was Microsoft QuickBasic Primer Plus. QB may be old, but it is still available and the book is an amazing text as to the details of programming and why/how things work.
http://en.wikipedia.org/wiki/First_Amendment_to_the_United_States_Constitution
I'm surprised that nobody has brought up Hackety Hack and Why's (poignant) Guide to Ruby.
If I was recommending a book for a peer in a non-computer related field, I'd definitely recommend How to Think Like a Computer Scientist, which assumes no programming knowledge and builds up the thought process behind decomposing problems, etc. It's been a while since I read it, but I think it would work reasonably well for an advanced preteen. The version I read used Python, which I think is a great introductory language.
http://www.greenteapress.com/thinkpython/ for a dead-tree version, or in various electronic formats (for free[-as-in-beer-and-in-speech]).
You might want to check out the book Snake Wrangling for Kids
For people who like peace and quiet. A phoneless cord!
It comes with the TI-99/4A and was extremely informative at 9 so should be a breeze at 11.
I learned C programming from a great book by Stephen Kochan: Programming in C. It's imminently readable, practical examples, and doesn't read like a reference manual (e.g.: K&R). I also strongly suggest getting a good understanding of what's going on underneath the hood of a Unix system. Advanced Programming in the Unix Environment would do nicely.
From there you can branch to most any other language. But aside from assembler, C is closest to the metal.
They can take my LifeAlert pendant when they pry it from my cold dead fingers.
"Hello, World" uses Python. It has aged a wee bit, only because Python has moved on, so the "how to install Python" section of the book is slightly stale. Other than that, I think it is great. A Real Computer Scientist(tm) wrote it with his 10 year old son, so the book reflects the interests and questions of a young kid. I used it with my daughter, and she loved it. I've recommended the book to adults that want to learn Python, and they liked it.
As for what language to use, I say use Python. You can teach proper computer science with it, and the language doesn't get in the way. Save C for later. Pascal is of historical interest only at this point. If you don't know Python, work through "Hello, World" with your son (or on your own) -- you will be glad you did.
I recommend C or Java, and echo others' recommendation of the K&R book. Big benefit = it's short. Recommend against dynamically typed scripting languages, e.g. ruby, python, php, perl, et. al. Other benefit = both C and Java are near-ubiquitous. Possible alternative is C#.
Or, he's googled too much, and is suffering from information overload.
You don't have to be a dick about it.
An enigma, wrapped in a riddle, shrouded in bacon and cheese
http://www.amazon.com/Code-Language-Computer-Hardware-Software/dp/0735611319
Then Lua might be a good language to start with. It's what WoW addons are written in, and several other games use it as well. (Minecraft, RIFT, more.) I'd say the main thing is that he needs something that he's interested in making the computer *do*. Working with a goal in mind makes it much easier to learn things beyond what you can learn from "toy" programs.
Snake Wrangling For Kids http://www.briggs.net.nz/snake-wrangling-for-kids.html
Free, python based, and downloadable. Worked for my kid.
If he is 11, get him lego mindstorm. Out of the box it comes with a UI that lets you do logic and control your lego creations. Once he gets the concepts of loops and ifs, wipe the firmware with community Java firmware (lejos) where he can write Java code to control his mindstorm bots.
By this time he would have bootstraped himself into programming and internet would be enough.
In my opinion, ruby is a great choice to start with. A really cool way to learn ruby is: http://rubymonk.com/ . It teaches you and gives you little challenges to solve as you go, a lot more fun and interactive then just reading a book.
I haven't bought a book in ages -- yet have learned a couple new languages and technologies in the meantime without them.
Every language will have a dedicated community site with tutorials covering most your essential topics and lots of code samples and user help forums, where most the questions any novice will have are already answered.
When I did buy books though, I found that ones that were lighter weight and focused more on the practice than the theory, because the dense ones, while a good resource of information has simply too much information to deal with for someone who just wants to get their feet wet and start wading deeper so they can seeing results quickly.
So in closing: Pick a language (Ruby, PHP, Java, Python) and a DB (MySQL is best for now) and associated framework or platform (Rails, Spring, Zend, jQuery), pick a specific and narrow focused problem such as "How to setup a basic Form to save data to my DB using Language X and Framework Y", search Google, start reading articles, chose one that makes the most sense and get busy coding and learning.
If the child already has that one, then give them the Oreilly Linux Device Driver writing book.
Then give them a connection to Google
And then give them a system with Linux that has a device driver that occasionally crashes the kernel
Most Respectfully Yours Mark Allyn Bellingham, Washington
Try Invent With Python: http://inventwithpython.com/
http://www.caerdroia.org/blog/archives/2012/03/a_great_books_a.html
-- Two men say they're Jesus. One of them must be wrong. - Dire Straits
Hello World! Computer Programming for Kids and Other Beginners by Warren and Carter Sande. Uses Python.
Perl Programmer for hire
C++ has kept evolving with Template Meta-programming, the auto keyword, and Lambdas.
One could try Microsoft Small Basic. Some self-directed learning guides are available on the site as well.
Vintage computer games and RPG books available. Email me if you're interested.
For my son (age 10), I started him off with Java and it went no where fast. He then got into minecraft and wanted to learn Java again to be able to mod the game. After learning Java somewhat and making mods, he got a hand me down iPad and started tinkering with it.
For the iPad, I'd recommend something to go step-by-step with like http://www.deitel.com/Books/iPhone/iPhoneforProgrammersAnAppDrivenApproach/tabid/3526/Default.aspx
For Java, we just got a learn it in 24 hours kind of book.
First find what he *wants* to do, whether that's arduino, minecraft, WoW, etc. and then build from there.
Stanley Lippman's C++ Primer, 4th ed. and Inside the C++ Object Model.
Why C++ and not something like Python or Java? Becuase C++ is what you use to program games and I think one of the best thing a kid can to is try to write a simple game.
I'd also recommend a book on Qt 4 or whatever your favorite cross platform GUI library is. He should understand early on that there is more than just Windows or OS X out there and Qt looks good in all 3 major OSes.
If he is interested in writing a simple game I'd also recommend some texts on assembly language so that he can practice using inline assembly in inner loops. Great fun and it helps build intuition about how computers 'think'. Obviously DirectX and/or OpenGL are also quite essential.
He could even play around with game engines like Torque, Ogre, Leadwerks, Unreal Development Kit, CryEngine 2, Unity, or Unigine.
If he is interested in writing internet apps then C/C++ is probably not the best platform. In that case maybe C#/Mono might be better. And don't forget the MIT's computer introductory computer science courses.
Quite an experience to live in fear, isn't it? That's what it is to be a slave.
If you supervise/assist, how about Learn You a Haskell for Great Good!
Perl Programmer for hire
I actually run a website at http://www.programmingbasics.org/ . It focuses on teaching a few simple programming concepts in JavaScript to younger kids. It uses Java applets, but other than that, there's nothing to install. Everything is integrated right into the website (like Codecademy), so kids can dive right in and start programming.
Get an arduino board and some various sensors. There is a lot of working sample code and many available libraries. It is a great way to learn coding that is more focused on problems you solve, and less on the syntax. Plus it's fun.
http://arduino.cc/
Books are all fine and good for reference but if he wants to learn he really should try to find something simple and go from there. The language isn't as important early on as being able to try things quickly and getting feedback / good explanation of errors. Heck in elementary school I was copying Apple II code from magazines just to try to get some silly demo / game to work at school. Without any floppys it all went away when the power was turned off. Pretty much an exercise in typeing but it led to me trying to understand the logic and eventually to an understanding of compilers and binary executable files vs interpreted scripts. Just get a basic interpreter and help him learn some branching and prints to the screen. My sons have spent an immense amount of time playing with switches in Minecraft to do silly things like create clocks or open remote doors or whatever. It makes me laugh to see it because in my mind they are learning to program without knowing it. Legos Mindstorms come with logic / programming modules. Might be a fun and interesting way to include robotics into his learning.
Good programmers program. Doesn't matter where or how just because it is fun is usually enough. Work on understanding logic and execution flow through different systems and the languages will be easier to learn.
One other thought find challenges or projects on the web. Having a goal or a problem to solve usually motivates a lot more than "learning". I know osix has some coding challenges that are fun and may be very educational. They are language agnostic and can be done with any language you are comfortable with. Very fun all together. -Beans
I just picked up Python by myself, and it is fairly straightforward as far as programming languages go. As a college student, I am cheap, so I bought python for dummies and it is alright... But honestly, the internet is the best source for help. As far as learning the concepts goes, just go and try to find a Python book that has good reviews on Amazon or something.
A desire to solve problems is a must, and there might be safer waters to try before you get to all the stumbling blocks and white space sensitivity that certain text editor programming languages will gleefully hurl in the way. There must be other means of analysing and describing attractive problems first, and to drive a thirst for solution-finding, before selecting a tool to go further on the journey. ;-)
I'd want to go at it from the angle of kindling a need to build or fix something, rather than assuming that learning a particular paradigm, at any age, will be of much intrinsic value. I'd like more creators and inventors than career programmers
I learned Dos and Basic from two books back in '89 when I was 10. I had no background knowledge.
My suggestion is to learn Android. Then he can have the world as an audience.
21st Century Renaissance Man
The book, Hello World!: Computer Programming for Kids (And Other Beginners) by Warren Sande, Carter Sande is an excellent book to teach programming to kids.
I believe it depends on how advanced your son is and what it is about programming that interests him. If he is highly analytic and mathematically inclined C could be a good start. Memory management in C is not simple though and pointers can be very confusing. Also, since it is pretty low level he won't be doing much in the way of graphics without learning an API. The good thing is so many languages share syntax with C.
However, if your son wants to learn programming predicated solely on his love of video games for instance, C may be a little too dry so to speak. In that case, I feel Flash is a good learning tool because it lets you very quickly and easily get graphics on the screen doing something. JavaScript/HTML5's canvas are a good choice as well.
If your son is gifted, and I don't mean in the way every parent thinks their child is, I mean truly advanced; I'd highly recommend the text "Structure and Interpretation of Computer Programs". It is the text used for the introductory computer science at MIT and many other colleges. The entire book is available for free online, with sample exercises, answers, etc. And since it is so widely used and well regarded there is quite a bit of help out there. The language this uses is Scheme, a dialect of Lisp. Again, this is if your son is at the level of an honors-student high school senior or college freshman. If he does make it through this book he will have a very firm understanding of important computer science concepts.
http://mitpress.mit.edu/sicp/
No matter what, your son will need SOME guidance. If you aren't able to provide it, you may want to set him up with an account on some web forums related to whatever you choose where he can ask questions.
A world that doesn't buy apps.
Turn him on to sudoku puzzles. Solving them strengthens the same brain cells that put 1's and 0's together. Seriously.
Peter: "Well, lets see, we're catholic."
Sales clerk: "Ohh, then you want: 'You're a naughty child, and that's concentrated evil comming out the back of you'".
Peter: "That's the one."
You may also want to have a look at KTurtle [wikipedia.org].
...that most programming courses assume a working theoretical knowledge. Without knowing basic things like linear algebra, graph theory, probability, calculus etc it is simply not possible to learn good programming.
I started with C when I was 12. And I'm now an accountant. I know that sounds bad, but it was due to circumstances out of my control. But It did create a lifelong interest in the subject. I still practice programming years and years later. But I must say, all the new technology baffles me. RoR and ASP.NET and new whatnots make me feel like an idiot. And that is why I'm probably suggesting C.
It makes me laugh when someone says you can't learn C as your first language. Just because you couldn't do it, doesn't mean it's impossible. C has an incredible amounts of complexity, and with it so many new things to learn. But it starts out very simply with printf("hello world"); and you go from there. I don't think any other language teaches you to be a better programmer given how many ways you can be a bad programmer in C.
I refuse to believe had I started out with any other language (ahem.. java) I would have the same interest as I do now, even when I'm not in the field. And I also believe, after C, it's all too easy to pick up something else.
Disclaimer: Apparently kids are different these days. If he wants to make a game in the second week, you may want some other advice.
Give him any book. Pull the plug on the internet. ;)
Tell him that he will get internet back when he has made a small math- guessing-game.
For an 11 year old? That's easy: Why's (poignant) Guide to Ruby
Just make sure you stock-up on chunky bacon.
(Multiple formats linked from the Wikipedia article)
http://en.wikipedia.org/wiki/Why's_(poignant)_Guide_to_Rubyhttp://en.wikipedia.org/wiki/Why's_(poignant)_Guide_to_Ruby
JavaScript: Hands Down!!!
- Language of the web
- Only way to write cross device apps, iPhone, iPad, Android, windows etc.
- No fancy dev tools needed, text editor and a browser(Chrome)
- Even dev native apps for Windows 8
- Great video tutorials by crockford
I don't have a helpful answer, but are you sure you're looking for a book? There might be a website or application that is aimed at teaching programming in a way that's a little more interactive-- like your changes become apparent without recompiling or anything.
With that in mind, I would wonder if the best place to start would be web development. HTML and CSS are relatively simple and can give instant feedback. He can make a change, reload the browser, and see how the change affected the outcome. He can figure out concepts like grouping information to use the same tags and classes, and inheritance of formatting. It's a pretty good introduction into the idea of data structures and strict logical rules. As he gets to be comfortable with making static pages look the way he wants, you can help him throw in some Javascript, and eventually PHP and MySQL databases.
I started with machine language (yes, I mean machine language - not assembly - wherein I used dip switches to program). Shortly after, I used assembly. Then BASIC. Then C. Then much much more.
Because I incorporated "chip level" knowledge into my learning, I am able to learn languages very quickly - because I understand what happens at the lower level.
I would start him with a micro-controller (like a Microchip PIC) - don't go right for the Arduino to start - high level stuff in the way. Have him learn assembly and basic electronics - he will also be using a PC at the same time. This will allow him to move to C, or whatever, at a much greater pace and with much more understanding.
When I first learned machine level programming, it was hard to comprehend how that turned into characters on the screen - but in a very little time a relatively complete understanding of computing emerges - a very powerful understanding.
All of the Head First books are ridiculously easy to follow and use all kinds of methods of teaching. From pictures to funny jokes. It really is a good time and makes learning programming fun.
Goodbye Slashdot account. It's been fun but it's time to move on.
Gone!
Because it forced people to understand how to write programs, rather than how to hack something that worked in a specific language. Very few people used Pascal in the real world, but because Pascal was so rigid in style, the thinking that resulted would work with any language in any era of programming. That's exactly the approach that should be used in learning programming, since you don't know (and can't know) what will be used in a decade's time (assuming he goes on to take a 3-year degree followed by a career in something utilizing programming skills).
Pascal is not the correct choice for today, but the strategy is still sound. You want something that allows him to learn programming (the subject) with as few dependencies on the specific stylistic choices of any given era as possible. In other words, you don't want something that depends on templates, aspects, objects or other phenomena which may or may not even exist in later languages, in just the same way that you wouldn't teach a person to drive one specific make and model of car where you're guaranteed those skills won't transfer and that the model won't exist for 90-95% of the person's actual time behind the wheel.
Python or Ruby might be good choices - however I dislike modern interpreted languages as they don't have the immediacy of feedback of BBC Basic or PET Basic, and if you don't have immediacy you might as well use a compiled language and get the additional feedback of warning and error messages. I'm not impressed with their GUI support, either.
Tcl/Tk has a really ancient GUI design, but does give you a lot of useful core concepts. The syntax is horrible, though. It looks like a cross between LISP and line noise after being put through a blender. It makes a great second language, but probably not a good introductory one.
MARS D has the concepts, the syntax is good and in most respects it is exactly what you want for a teaching language. It lacks development and debug tools, though, which means it's harder than necessary to make the jump from theory to practice and then from cause to effect. However, if he's willing to put in the extra effort necessary to bridge the gap, I'd say D is the best teaching language currently out there. It's also distant enough from commercial languages that the inevitable bad habits picked up when first starting won't impact him later on, yet close enough that good habits can be adjusted and recycled.
Java is NOT suitable as an introductory teaching language, because it forces a particular methodology. That is absolutely the WORST thing you can possibly do at the start. Java IS correct for teaching OO design and OO methodology as aspects of programming, but should absolutely NOT be used to teach programming itself. Further, because it IS used in the real world, bad habits picked up at the start will be congealed and reinforced rather than eliminated - always a bad move in education, although you wouldn't know it in many modern schools.
It's a small world and it smells funny; I'd buy another if it wasn't for the money; Take back what I paid (SoM)
How to Design Programs.
It was written with zero prerequisites in mind. Works as a CS 101 course, but also works as a do-it-yourself course, and ought to be accessible to a bright young kid.
The language is Scheme, although that's sort of incidental—the point of the book is to teach programming, not to teach Scheme. The good thing is that DrScheme is an no-distractions IDE tailored specifically to teaching. The bad thing is you probably don't have access to the same kinds of bells and whistles (graphics, robots) you would in a more industrial language.
I learned basic when I was 5 from my parents. I taught myself assembler in middle school and high school. And since then I have learned countless other languages and do it professionally for fortune 500 companies. Now I have four kids and we are home-schooling them. So keep all of this in mind that I am both self-taught and have experience working with kids who want to learn to program. I have also taught other homeschool kids using tools like Inform7 and Scratch.
First off, the language doesn't matter much as long as it is flexible and somewhat "real" in terms of writing real applications with it. Scratch is a good toy, but it sucks for abstraction so move past that one. The curriculum matters most, however. It helps to go with a language that is not over-burdened with syntax rules or confusing code semantics (java is not a good first language, and I know that because I remember how long it took me to learn it even after having a lot of experience with C, C++ and Pascal.) Anyway, back to the point: A good computer science curriculum will help your kid build better skills working with Algebra and logic, which are far more important than understanding where to put a semi-colon. Functional languages can be useful here, since they look more familiar and work more interchangeably with math than top-down procedural languages.
Two great resources: Kahn Academy (uses javascript as the language) and Bootstrap (http://www.bootstrapworld.org/), which is scheme-based. Both of these focus on an online curriculum and do not require any software other than a modern browser. Kahn focuses more on programming mechanics whereas Bootstrap is more algebra-focused and could really help your son get a leg up in math later on. Both are free and actively maintained, though I'm sure that Kahn is better funded.
Otherwise, there are some great guides at "Learn code the hard way" for different languages: http://learncodethehardway.org/ Each of these will cover a lot of the core fundamentals of each language (functions, loops, conditionals, logic, abstraction, etc) and help your son understand the mechanics of whatever language he is trying to use. But still, it goes back to the "why." Most programmers don't program because they like typing or because they like being smacked around by a compiler. The fun of solving problems keeps most programmers happy. So it's a good idea for him to find a curriculum that is solutions-focused so that he maintains a set of requirements to follow, thus providing his program with a purpose and direction. Too many times as a kid, I started making a game and only got as far as an awesome menu routine or a display engine because I would quickly loose focus... SQUIRREL!! If I had a way of breaking big problems down into small solvable problems, I would have been even better at programming and better appreciated abstraction and refactoring as much as I do now (well, now that I learned it all again the hard way in college. ;-)
If he really wants to be self-directed then you might want to see if there are any games he likes that are moddable and maybe he can take a focus on modding his favorite game in small measurable steps. That's the sort of the focus I want to take with my kids, by making a minecraft mod that allows you to make your own mod using Groovy and duck-punching (e.g. you can do live coding without restarting the client or sever). Sort of a work in progress.
Best of luck to your son! As long as he maintains a passion for learning and solving hard problems (hint: there's not much difference between the two) he'll likely never get bored of it.
This post would have been more interesting were it in the form of a small animated hologram
If you are fine with Java or .Net, try out http://robocode.sourceforge.net/
I know I'd love to write code as a kid to battle other players.
I learned most of my programing as a kid by picking apart other code. I learned on a trs80 loading up basic games and then in my teenage years, tweaking code for BBS sites when 1200 baud was awesome.
"Only one thing, is impossible for god: to find any sense in any copyright law on the planet." Mark Twain
This site is very useful for your situation: http://python4kids.wordpress.com/getting-started/
Pick up "The C Programming Language", will give him a solid base to work off which is really the important part ... language is less important.
But speaking as someone who learned perl first and went back to work with C, C++, and Java later I wish someone had me learn those first before moving on to others, going the other direction tends to make people stubborn and lazy ( and i will avoid the python topic like the plague since i am not sure if people are trolling or actually believe that it is a good place to start ).
Find something open source that's exciting to him. He'll read the code, compile it, find the tools, edit it, and learn. The language isn't as important as the problem solving part and not getting lost in hello world programs and simple problems.
However, I'd recommend staying away from PHP or Perl. You can learn some bad things there.
I wouldn't limit the search for a fun project to high level software, either. Arduino is an awesome platform for embedded stuff with tons of open source code out there.
//TODO: signature
Honestly, asking what language is probably the wrong question. Asking what environment is closer to the right question. Good programming often is *re-programming* (aka, finding bugs) so if this kid doesn't use what he creates, he's not really going to learn anything. I'd get him into a video game that allows scripting and customization - I think World of Warcraft allows this but I don't play it so I'm not sure. That way he'll actually enjoy playing around with it. I mean, seriously, he's 11. What is he gonna do? Databases? Financial spreadsheets? A useful web app? Not likely. Go with a game.
Since he has a Linux computer available writing simple programs in any of the scripting languages such as Perl or Python is a good way to start. Then move on to Tck/Tcl and simple GUI constructs. http://oreilly.com/ has a good selection of programming books for Linux and would be a good place to start. Some of their titles are available freely on line too.
Seems obvious, but I think it's important for anyone learning programming have a strong visual component tied to what they write. Javascript is perfect for this.
In terms of something more formal and structured, yet highly visual, Foundation Actionscript 3 Animation would also be a good match. It's closely related to Java, is mature, and has many real-world applications, especially for artists. Learning AS3 would allow him to move between other languages much easier than if he were to start with just Javascript.
http://www.amazon.com/Foundation-Actionscript-3-0-Animation-Making/dp/1590597915
Have you considered LOGO (or Turtle)?
It helps teach some basic concepts, while at the same time giving more feedback (which is good for kids). BASIC on a TRS-80 Color Computer and LOGO on a TI-99 4A were 2 of my earliest introductions to programming. I also learned about logic through some very old game that used many types of logic gates to solve various puzzles involving flow of power (I wish I remembered the name).
You could also pick up a copy of the board game Robo Rally, which is an amusing game that involves planning and visualizing instructions that you will be executing at a later time (with lots of uncontrolled variables screwing things up). While not being like actual programming, it's a fun way to exercise some of the types of thought patterns involved.
In my opinion, at that age, the choice of Language isn't really as important as just some of the basic ideas involved, such as sets of instructions, iterations and control structures, and logical decisions.
... is what I tought myself to program out of as an 11 year-old.
http://www.amazon.com/Book-Programming-4th-Edition/dp/0201183994
May not be a programming language, but at least he can make a few pages, and see fast results. He can even learn how to install Apache or some other web server and after he has played around with a few static pages, can then jump into something that involves more logic.
He can even start to understand the way a system is assembled using different resources, like styles sheets, images, etc.
Then improve upon that by adding a form with JS validation. Then add some basic DB logic to store the data in the form. After that, he can send an email notification...
That way he will eventually learn all the basics components of any application.
Squeakland
...richie - It is a good day to code.
Tell him to start studying finance and go into banking or law and go into politics. Anything else and he's got a 99.999% chance of being a fucking sucker for the rest of his life. The other 0.001% manage to make some stupid thing that, through some confluence of luck, gets bought out by a finance person and they can pretend they got rich through good old American hard work.
Oh, I'm sorry. The truth hurt?
I actually think HTML is a great way for a young person to get started with programming. You get pretty much instant gratification and is very easy to pick up. Once they get comfortable with the basics they can start using JavaScript to manipulate the page. Sure, it's might not be the most "pure" approach, but half the battle is keeping interest.
All far too dense for an 11 year old, and all pretty much require more background knowledge than an 11 year old is likely to have. I'm not sure there really is an answer to the OP's question though, at that age, even a very bright kid is almost certainly going to lack the prerequisite knowledge to learn to program from just a book.
Say what?! I was programming at age 11, self-taught, using 'just books.' (Unless you count some early -- and very rudimentary -- Logo exposure in grade school; later scholastic use of the computer was, IIRC, limited to Oregon Trail, though once you got to high school you could take a class that taught Pascal...)
I got started hand-keying source code from magazines and books available at local booksellers. As I progressed, I picked up a copy (likely got it as a present) of the AppleSoft Basic Programmer's Reference Manual.
These days, I have to imagine it would be both easier (every API you need to get started is quickly available online, often with excellent accompanying tutorials and/or with user-contributed sample code snippets), and perhaps more intimidating (as the complexity of our systems has increased precipitously). (On the flip side, much, much easier to get a GUI working under Java than back in the day when you had to hand-code memory bank switching and deal with the bizarre "but it saved a chip!" oddities of Apple II graphics programming...)
Mind you, I wasn't a very good programmer, and honestly wouldn't be until I was finally exposed to proper procedural programming (C), then OOP (C++, and when it was released, Java), in college. But I had fun with it, and my stuff worked. Wasn't terribly robust or full-featured, but, it worked. (My database was a flat-file, not relational, and, um, written in BASIC... ;))
Okay, all that said, it might be worth checking out the Head First books. Head First Programming uses Python and is supposed to be a general introduction to programming. There's also Head First Java. No direct experience with either, but people rave about 'em.
geek. lawyer.
... C++ primer plus by Stephen prata is a good starting point when just beginning, at some point pretty much all programmers come into contact with C and Prata's pedagogy is sound. Teach each concept, have student master that concept, then move onto the next concept, building up as you go.
http://www.amazon.com/C-Primer-Plus-5th-Edition/dp/0672326973/
The Python manual, embedded in the official distribution contains a very nice tutorial.
A lot of people these days recommend Python as a first language. It is easy to learn and powerful. I don't know which of them is best, but here's a list of Python tutorials aimed at non-programmers.
Another interesting choice might be Scheme. There are two very good books that use Scheme to teach programming:
DrRacket is a good programming environment to use with either of them.
.. is to write video games. My son used Megazuex - a self contained ASCII graphics environment for building and playing games. He learned it all on his own - and in 5th grade science project he presented one of his games.
...richie - It is a good day to code.
First and foremost, destroy the apple computer and stick with linux or windows. Since everything is going mobile and android, start by showing how easy it is to create an app for android. He can impress his friends by showing him his app running on his android phone and he can then get some apple nut jobs to switch from iphone to android as well.
Forget C, Python, etc. Start here - it is amazing what you can do and there is a great progamming model:
http://scratch.mit.edu/
Depends on the kid. Some 11 year olds have PhDs and others have a very narrow, but precise focus that makes them experts in a very small area. Get him something current, concise, and the hardware to work with. StackOverflow is the one of the best resources for programmers and leads to just about every resource you could ever need.
The first question you should ask is what do you want to accomplish? If it's "write a game" expose him to Unity or XNA. The best language to use for that is C++, but there are far more programmers that use C#, Java, or Objective-C. Python isn't a bad suggestion. It runs Eve Online.
Artificial intelligence might win him some science projects. This algorithm for flocking is surprisingly simple and not out of reach for someone new.
If he wants to make physical objects using programs, consider getting a makerbot and writing software that generates mathematical objects or just print cool stuff like quadracopters and robotic hands.
Go for Lego Mindstorms or something similar. http://en.wikipedia.org/wiki/Lego_Mindstorms_NXT#Programming
For the basic introduction (so he finds if he likes the idea of creating algorithms from simple instructions) maybe this game will be more enticing.
If he likes it, then you can introduce the more complex stuff relating it to the game.
Why can't
+1, though I was ~13 when I started learning Perl myself and it remains my favorite (if sometimes under-appreciated) language.
More important than the language though is the end goal. For me, I had no interest in Perl at that age, it was merely a means to an end-- in my case a login system for my Starcraft Clan.
Start by identifying what the kid is interested in and/or wants to build, then find the right tool that they can learn in order to achieve their goal.
...and an emulator for an 8-bit computer with some sort of MS-BASIC. Preferably a Z-80 or 6809 version, so maybe some kind of CP/M emulator, or a TRS-80 or CoCo emulator. The 6502 versions just weren't as well made, sorry Apple and Commodore fans. And an MS-BASIC with line numbers! That VisualPoundNet stuff can get the hell off my lawn.
Seriously, typing in other people's code, then hacking it up, that's the best first step. No need to get fancy with programming languages or APIs, just get used to code and how it flows. Super Star Trek alone can give weeks of hacking fun. After a few months he can move to GCC on Linux or something like that.
Just make sure the kid understands he's not going to create the next World of Warcraft in six weeks.
#naabhaprzrag, #sverubfr-000, #agi-fcbafberq, negvpyr[pynff*=' negvpyr-ary-'] { qvfcynl: abar !vzcbegnag; }
I gave my son two books; "Teach Yourself C, 2nd Edition" by Herbert Schildt, and "Programming Linux Games" by John R. Hall. Both are now out of date (my son is 21 now), but both gave him an excellent base to write simple games while learning the language, and they are still available on Amazon. He wrote his first game when he was 12 (TuxBlocks). Since then, he has picked up C++, Java, and Python. He wrote several games while in High School for a Computer Game Design class (the rest of the class was using a game creator that is simple copy/paste development). His current project is Open RPG Maker.
Your focus is not correct. You should think of the long term goal. Should you have your child learn a language or is it something else that you want to achieve? A language is a medium. Eventually, you would be proud that you picked a language for your child early in his life, that by the time he is 16, he has a stronger understanding of systems and their interactions. He is able to figure out the logic flow of data in the mot abstract of systems.
That brings us to a few constraints: layers and platforms.
Start with a language, which follows OOPS. Also, decide whether you want him to start with the web-dev side of things or with system programming.
In any language you choose, make sure it is present across multiple layers. That way, he will face lesser roadblocks in his self-leaning.
I personally suggest he leans Java. The reasons:
Not really. The C Programming Language is really good. It's very straightforward, it tells you everything you need to know about each feature of the language and it doesn't confuse the reader by hiding important details until later. It's much easier to understand than those fancy books that try to be smart about what they tell you right away and what they try to hide because the writer thinks you might be too dumb to understand it.
Speaking one who learned BASIC on various micros , and then taught himself more complex coding using http://www.commodore.ca/manuals/c64_users_guide/c64-users_guide.htm, pretty sure that was the book, assembly code in any case, tom fooled with fortran and pascal, can I just say: none of those languages are well suited to learn coding on one's own, especially. Most importantly, all of those were designed when computers were far more expensive than programmers
And for fuck's sake: not C. Pointers and memory management are not things one should learn when grasping simple coding concepts, as we all know, the only result of this will be: segmentation fault and a bemused look
I started playing around with BASIC at random on the PET, and a few years later had a Commodore 64 where I learned much more. I remember having two books which contained a basic storyline, but had coding problems ranging from fixing the code to writing a lock for a door (or a program that would test all combinations, etc) but for years haven't had the slightest idea of where the books went (and neither do my parents.) They were written for young adults, and general enough to work on any BASIC (at the time C64, Apple II and Atari 400/800 were the targets) Does anyone know of these, or something similar? They are exactly the sort of thing the OP needs. (That being said, BASIC may no longer be the best language to start with, but aside from provided code, these books would have worked just as well with Ruby/Python/Perl/etc...
"There are people who do not love their fellow human being, and I _hate_ people like that!" - Tom Lehrer
I think one of the best resources I had learning to program was the python docs themselves. They have a great tutorial here: http://docs.python.org/py3k/tutorial/index.html ;P
The only language I've really seen better docs for is POV-RAY.
I have a relative around that age who knows a lot about the Xbox and iPad. I remember from my Commodore 64 days how these machines were not "walled gardens" and how I could start programming in BASIC as soon as I turned my Commodore 64 on. So I looked for some programming books for him.
I looked at a lot of books. I suggest cursorily flipping through the first few chapters of books you consider. It came down to two books, I don't recall what the second choice would have been. I picked Invent your own Computer Games with Python. Why? Because Python is a good tool to teach kids a language, but it is also used for real stuff out in the world, it is not a toy language like BASIC. Because kids are interested in games at that age, and with this they can program their own. And because it is basically written for kids and beginners - it is not a "learn Python" book for someone like me, who already knows C, C++, Java, PERL etc. and is just picking up one more language.
I bought a hard copy of the book, but it is also online for free on their website. He mainly uses an iPad, so I installed a free SSH client for iPad so he can ssh into an account I created on my web server and run Python. My web server had an old version of Python, so I installed a local copy of the latest Python and redid the PATH for the account to hit the local python binary first.
I'm still mulling how he can edit programs. I used nano (and vi) when I first was showing him, but might download scp for iPad and an editor for iPad, so he can scp the programs. I want to make it as easy as possible, and he can learn harder stuff later.
Aside from the book needing Python 3, which just made me have to do a little work, so far so good with the book.
If he lives near Los Angeles, UCode (www.ucode.com) teaches kids how to program through worksheets and exercises. Sounds ideally suited for him. The Ruby programming language is used. Ruby is an excellent choice for an 11 year old, easy to get started and serious enough to do amazing production applications (particularly for the web). There are some great tutorials online including tools to try ruby code (http://tryruby.org and http://19pad.charlie.bz/). Code School has a free short course using tryruby: http://www.codeschool.com/courses/try-ruby.
C for Dummies by Dan Gookin is my favorite C book, but it might be a bit beyond the reach of an 11-year-old, what with its two volumes comprising ~1200 pages.
It's better to vote for what you want and not get it than to vote for what you don't want and get it.
- E. Debs
I strongly recommend Python.
The reason I like Python so much is that it has the least syntactic silliness of any language I've used: Python code often reads like psuedocode, but it actually works.
To learn C, you need to start by learning what a variable is, and that means learning what the different data types are, and when you use them. In Python, there really aren't variables: you just bind values to names.
And Python has lots of great libraries, so that he can easily write a non-toy program that does something interesting. In particular, there is the library, which would allow him to write a game.
And Python is useful for doing real work. It would be a poor choice to write an operating system or a word processing program, but it is useful for all sorts of actual problems in many fields. Particularly in science, Python is becoming a top language, thanks to SciPy.
Python is also the language used for SAGE, which he might enjoy using to plot graphs.
P.S. If he loves Python and wants to learn a second language, I would suggest C. Not C++, C.
steveha
lf(1): it's like ls(1) but sorts filenames by extension, tersely
Sam's Teach Yourself C in 24 Hours This looks to be the entire book online!
There is also Sam's Teach Youself Java in 24 Hours, and Sam's Teach Yourself C++ in 24 Hours. If he wants to do web programming there is Sam's Teach Yourself HTML in 24 Hours, however it doesn't go into Javascript so you would need to get another book as well.
I would say the big languages are C, C++, and Java for main-stream languages. If you want to do Windows programming, there is C# and I guess Visual Basic(C# is better in my opinion but Visual Basic is taught to IT professionals who aren't programmers so it may be easier to learn)
I love the Sam's series, especially when I was in High School. Just enough information to make something useful, yet you don't need to be an expert to read it. Definitely a great first book into a programming language, it just highlights the basics and possible differences if you know another language.
Give your little prodigy a shot at the big leagues with this free online stanford intro course: HERE. If he already has that nailed...then he is well on his way to learning a language. For an 11 year old, something that produces a GUI or APP may be more interesting than ASCII art:)
Do it with something that u need nothing to run, just a web page and some javascript.
a 24 hour keeps it simple with simple examples and makes life easier on everyone....nothing to install, and nothing to configure.
he sees the results almost right away, and can actually go further into ajax, & jquery etc....
my top pick for learning stuff and still feeling like it aint rocket science.
Python has a built in LOGO library so I'll add that as another reason Python is a great language to start off with. It's easy to get started with yet powerful enough to write useful programs. I started as a wee lad with Apple's BASIC which is pretty much useless these days but if Python was around back then, I'm sure it would have been on my radar.
I second the Micro-controller idea - I learned z80 assembly language at age 9 using one and it really did help me understand how digital computers work at a very low level. Many programmers today know how to write code, but they really don't understand what is going on underneath - thus the vast amount of poor software that litters the software landscape.
This experience did not, however, teach me how to write good English.
The kids is out of his/her mind. Talk common sense and let childhood be childhood.
By that I mean, don't make him start from scratch. Create the compiling environment. GUIs are fun to fiddle with so if you think C++ or Java are good languages (in the event that you don't want him to learn Visual Basic and then he gets stuck with it till the age of 18 because his brain has developed an affinity for VB like kids do with pets), then give him a skeleton source code which compiles to an empty window or GUI. Then let him have fun adding code that will shape the GUI into a calculator or depending on his drive, maybe he'll want to parse expressions lol... For kids, I think GUIs are fun so he can code: A paint program; A simple car game. The goal is more important (i think). Then pick a language. And when he's faced with a problem, he'll google it or find a Youtube tutorial.
If he lives near Los Angeles, UCode (www.ucode.com) teaches kids how to program through worksheets and exercises. Sounds ideally suited for him. The Ruby programming language is used. Ruby is an excellent choice for an 11 year old, easy to get started and serious enough to do amazing production applications (particularly for the web). There are some great tutorials online including tools to try ruby code (tryruby.org and 19pad.charlie.bz). Code School has a free short course using tryruby: http://www.codeschool.com/courses/try-ruby.
All far too dense for an 11 year old, and all pretty much require more background knowledge than an 11 year old is likely to have.
Baloney! What background is required to program? I assume this kid isn't going to start out writing a new compiler or numerical analysis package.
When I was in 3rd grade (about 9 years old). My dad took a course in Basic at the local community college and showed me a flow chart he wrote. I was fascinated and discovered a bug in his flow chart. Then, I snagged his text book. I taught myself to program Basic from that book. I didn't have access to a computer. So, I wrote out programs on a legal pad. These programs didn't do anything fancy. I simulated dice rolls with a random number generator. Another converted a number to a Roman numeral string. One weekend Dad took me to the college and allowed me to type in some of my programs on a teletype.
I'm bright, but I'm not a genius. I enjoyed math and I had an unusually high curiosity. The arithmetic I learned in elementary school was enough to get me started. Perhaps, it would have been a little easier to grasp arrays if I had already been exposed to linear algebra. But, it only took me a few days to understand them.
Android? LOL
I also learned BASIC from keying in a couple example programs when I was 8...and I would say that if I'd had to start with Android programming, I'd have probably shot myself at 10.
Get him an Arduino kit with lots of LEDs and servo motors and stuff.
The hardest part of learning to program is knowing what program you want to write. "Flash an LED" makes this a no-brainer.
He'll learn programming and plus a lot more besides...
No sig today...
I know a lot of people don't like Java, but for teaching a language to an 11 year old, it abstracts out a lot of the crap and it's easy to get a development environment going.
So, maybe for an 11 year old "Teach Yourself Java in 21 Days" or something. If he gets through that then find the boy a new machine and get him whatever he needs.
Eclipse + Java and your kid is half way to being a rock star. From there, he could probably teach himself most any language out there.
Lost at C:>. Found at C.
it seems now everything has to be JavaScript-based...
I agree with you about Python; I think that for learning, Python is the best. Not JavaScript.
But if someone did want to learn to program using just web-based stuff, maybe CoffeeScript would be a good choice; I have heard very positive things about it here on Slashdot.
http://coffeescript.org/
steveha
lf(1): it's like ls(1) but sorts filenames by extension, tersely
Try http://cscircles.cemc.uwaterloo.ca/ and http://thinkcspy.appspot.com/build/index.html the latter is an interactive version of the famous "thinkpython" book. They both have structured curriculum and interactive exercises starting from ground[0].
After spending some time POKE-ing around, the books I had sound like they might have been Micro Adventures
"There are people who do not love their fellow human being, and I _hate_ people like that!" - Tom Lehrer
I had taken some programming classes when i was younger. First in C and then in Java but it was only by fooling around with JavaScript that I really got the concepts of coding down. With JavaScript all you need is a text editor and a web browser, no compiler. And the feedback you get is so immediate that debugging is much quicker and less frustrating than with other languages. All the instruction is free on the Web, and with HTML5 gaining traction, JavaScript is again a useful language to know.
every stain tells a story
If this were another era.... This book did wonders for me -- http://www.commodore.ca/manuals/c64_programmers_reference/c64-programmers_reference.htm
Omeganon
The Essential Guide to HTML5: Using Games to learn HTML5 and JavaScript - look it up on Amazon - is a pretty basic book and it allows the kid to have immediate results from the browser and notepad.
A friend of mine's 11 year old just started on it - he loves it - 3 chapters in and really enjoying it. The key is each chapter has an entire program / game that they can type it in and see the results - tweak some variables and viola they are "programming".
This is how I started 25 years ago with the BYTE magazines.
To those saying the Python book - I had better results from the HTML5 book with my son than the python one (snake wrangling for kids) which had more "boring stuff" in his words.
I learned C by reading K&R... that method probably isn't for everyone.
I would suggest looking at languages outside of C. Rather than bogging him down with string indices and static arrays, point him toward something that gives maximum results with the least work - something very high level and interpreted instead of compiled. Ruby is my favorite, but Python is also excellent. Learning C is an important step for any programmer, but I wouldn't make it the first step if he's programming on a modern PC.
On the other hand, you could get him an Arduino. That means C, but the Arduino community has tons of good newbie-friendly snippets, tutorials, and documentation to get him started.
I know Qbasic is old school... well anyways, that's the book I read at 12 that got me hooked. I'm sure there are better ones out there now-a-days, but I wanted to nostalg a bit :-P.
Interesting approach, but there is also a theme that some learners need a guide so that the 5 stunning ideas they never thought of don't become warps to their understanding.
You said "don't spend money" - some of the new languages have free mini intro books. We can decide later in Language Wars about Python vs Ruby but for example Why The Lucky Stiff's Poignant Guide To Ruby looks stunning to capture the attention of an 11 year old with humor. That kind of thing is sorely lacking in most texts that feel they have to impress other academics. I have the programming aptitude of a gnat but I'll glance over that just because the sidebars are fun. From what I gather the programming content is well done, and a couple people have praised some of the language design mechanics of Ruby.
My first Journal Entry ever, in 8 years! http://slashdot.org/journal/365947/aphelion-scifi-fantasy-horror-poetry-webzine
Start him off on APL. If he's still interested in programming, have his head examined, then let him do Perl :-)
It must have been something you assimilated. . . .
I recommend he learn some well established api. He should get straight into it. Something graphical with very intense visual feedback. He should start by just getting the demos to work. They are *really* simple to get setup, and give great insight in to the capabilities of the frameworks. Then as he progresses he will learn other things he can accomplish and add to them. http://code.google.com/more/ http://developers.facebook.com/ http://qt-project.org/ https://developer.apple.com/library/ios
As a base. he would need javascript (w3schools), or python (Python: Essential Rererence), or C (Programming in C), or C++ (Programming: Principles and Practises Using C++). He does not need to read these books. He just needs to reference them. All the information in them is available online, but having a physical reference is always great to have within reaching distance.
When I was a kid, I would only read a book if I knew it contained the solution to a problem. I would read the book cover to cover if I had to, but in general, I was always more interested in building rather than reading.
My only intent was to play video games, and I would do anything to get them to work. I would save every penny just to by another mb of ram. I was constantly changing the motherboards and processors as well. When I was 11, I was writing batch scripts. At that time, I was using 80386 architecture and DOS. I moved to windows to play games like ski-free, and to play around with winsock and tcp. I got into irc for videos and music, which also introduced me the concept of a newsgroup. At this point everything changed. Any problem I had could be solved with ease. Generally, somebody else would always have faced the same problem I had, and they had solutions!
I got into web development pretty early, but I got bored with it quickly, since at that time, the specification was pretty limited, and I was always more interested in playing video games and sports instead. I'm 29 now, and I have a bachelors in computer science, and a masters in engineering. I do numerical programming with C++ and OpenCL.
I only got into hardcore programming in university, but my general experience with computing placed me highly with my peers. My university was arguably the best in the country for that particular undergraduate program. Lots of my friends had fathers who were programmers, and taught them a lot at a young age, but none of them progressed faster than I did. I easily caught up to them.
My point is that you do not need to push him into programming, He may loose interest very quickly. My interest in things has always been very volatile, since there are so many other things to be interested in as well (sports, music, novels, etc). If his passion is genuine, he can catch up easily. The one corollary is that each generation is exponentially more intelligent than the previous generation. My generation was the first to have access to an over abundance of information. Before, there was a deficit of information and a surplus of attention, but now there is a surplus of information, and a deficit of attention. Access to such an infinite pool of information has made me much more ingenuous than my father's generation. Our kids will most likely be exponentially smarter than we are. Of course, previous generations more easily focused on one particular field, which had its merits, as they made incredible discoveries. The argument that there are less things to discover now is bulls$%*. We still understand very little in the scope of things. He does need to become the next teenage billionaire. His passion(s) just need to be nurtured properly. LET HIM PLAY! He has to work for the rest of his life.
Googles own language Go would be a better start than C in my opinion. Go is fast enough for low level stuff, more sane than C and includes everything you need to get simple web apps up and going or send e-mails right out of the box.
http://golang.org/
Show him how to use the search box here on Slashdot
He should read "C++, How to Program"
Why C++?
1) It is lower level than Python. Having a solid grasp of these lower-level concepts will make learning any other programming language easier in the future.
2) The sharp distinctions between pointer variables and regular variables, stack and heap, etc., will (when mastered) give him a solid intuitive grasp of the key organizational structures that DO support all other programming languages, even when the grammar abstracts some of them away. This will make it easier for him to troubleshoot broken code written by people who only have a high level understanding.
3) C++ is still in use and in-demand in a much wider variety of industries than Python.
4) He will be forced to deal with cleaning up his own data structures, which will ensure that his code stays clean after he moves to languages that have garbage collection. People who start with garbage-collected languages often forget to release their unmanaged resources in the rare cases that they are used...C++ veterans are much better about this sort of thing.
5) It is an unwalled garden, allowing him to do all kinds of crazy hacky things. He should get that worked out of his system as early as possible, and also get as much experience dealing with the problems hacky code causes, so that he won't be tempted to write like that (in ANY language) once he does anything serious.
6) His brain is young and nimble, making him more able to grasp novel, abstract, and difficult concepts. Dumbing things down for him would be a waste of his potential. C++ is harder than other languages, which is precisely what gives an advantage to programmers who have mastered it.
I second the comment on Scratch. My son started on it around 7yrs old and still uses it at 11. One thing he liked a lot is that in Scratch you can spend time editing your icons in a paint-like subprogram; this activity uses different parts of the brain than traditional programming, so it let him work longer on the system w/o getting burned out. He also liked the online aspects a lot. You should also look at Storytelling Alice or it's newer incarnation "Looking Glass". These were specifically designed to pull in middle school girls, but there's nothing "girly" about the environments. The basic idea is that you control a stage, add actors and props to it and then animate a "play" by telling the different actors to do things like "tell Jane to walk up to Bob", "tell Jane's left hand to hit Bob's left face", "tell Bob to say 'what was that for' " and so on. Has a lot of the "share" features of scratch too. My son started SA at the same time he started Scratch and he still uses both. They definitely teach different things, though both are drag/drop programming instead of typing free text, but they're also both efficient drag/drop programming as opposed to the VeX system which I always found incredibly painful...
This worked really well for me. Admittedly, I was at university - But regardless, it was really good.
http://www.bluej.org/objects-first/
Either that, or have him learn Python
If I had to do it now, I would recommend javascript for many reasons.
First, no IDE is required. I would avoid an IDE as long as possible, that limits what box you can work on, whether XCode, .NET, etc.... With Javascript you can work on either Ubuntu or the Mac, and see results on either via the browser.
Second, an interpreted language doesn't need to be compiled (which is better than C/C++ or other complied languages) so you can code and run your program. Javascript just requires refreshing the page (though you may have to help him understand caching).
Third, there are many good javascript examples out there. I would recommend viewing Crockford's videos.
Fourth, if you setup an external server, he can show his friends what he has made, which has a definite coolness factor. "Hey, look at this program I made to do our physics assignment." "Look at this game I made"
Why javascript over python? Personal preference, plus I think there more answers to problems already documented on the web for javascript, though you can ask python group a question and get an answer quickly.
At 13, I picked up a "How to learn c++ in 21 days" book at a half-price bookshop. I got as far as a the chapter in pointers (ch 18 i believe) before even reading a word of the description text. I just looked at the code and occasionally the comments. It is just like picked up another human language for a kid that young, and you should treat it the same. Find a book with good codehuman readable translations, or code that is human readable as is.
This is why I would not suggest python, as it has syntactical format that feels close to a human language, but does not have a word to word translation like a c++ or java program do.
What he needs is a project. It is far, far easier to learn a language by practice and discovery with some supplementary materials than by reading some book. Books aren't interesting. Writing plugins for a server running one of your favourite games is.
So find something that interests him and is extensible and start there. Language is irrelevant. It's just a matter of learning enough syntax to get started and then learning new things as you need them.
(My bias: I taught myself my first language, C++, by fixing bugs in a piece of open source game server software, a year after completely failing to learn it from C++ For Dummies.)
I commend you for your genuine interest to aid your son now that he's starting to explore the exciting, wild, large, fuzzy, beautiful world of things we usually refer to as "programming".
There are some excellent recommendations for books already posted, but I just wanted to point out a video that might help you get a different perspective on what might be worth pursuing when teaching these things to young people: ART && CODE Symposium: Hackety Hack
It's a talk made by someone that has already been mentioned in other posts, a legendary figure that goes by the name of Why the Lucky Stiff (creator of the Poignant Guide to Ruby), and let me tell you, if you have already read something about him and felt curious about why he did the things he did and in the way he did them, seeing him on video really helps you see where he comes from and what his motivations are.
Make sure to see the bits of the talk where he presents a video made by a kid where he explains in his own words the experience he (the kid) had learning programming from books, and then trying to learn it from a sandbox like Hackity Hack (a creation of Why, but it really could be any other similar tool).
Best of luck to you and your son!
At 11, it's time to become a man.
Learning assembly language with hexadecimal mnemonics is the best option, and not the macro assembler language which is for sissies.
It's important to start by understanding how basic things work, and then look at a higher level.
You cannot build cathedrals without knowing how to build strong foundations, and then walls.
A nice benefit is that he won't learn bad habits, since there is nothing to unlearn, contrary to self-teaching a high level language.
Also, it'll help grow balls !
Focal reference and a PDP-8 assembly book. Worked for me!!
I'd have him read Code by Charles Petzold before you give him anything on actually coding. I think that book will be both accessible and set him up with the fundamental concepts necessary to tackle learning a programming language. After that I'd suggest something on obejct-oriented design, though many of the books that teach OOD through a language like Java, Python or Ruby would probably be okay at that point.
http://www.amazon.com/Code-Language-Computer-Hardware-Software/dp/0735611319/ref=sr_1_1?ie=UTF8&qid=1334265103&sr=8-1
After I got the basics down, I actually learned a lot by going to programming forums and trying to solve other people's problems. Then you can check your results against the responses from more experienced programmers. It exposes you to a lot of different uses for programming, and can give you ideas for writing your own programs. I learned enough that way to get a programming position where I work.
www.devshed.com , www.tek-tips.com etc.
Please mod this "Funny". Really, for an 11-year old? Maybe if he or she has a 200 IQ. Otherwise he or she will need at least a few years to work up to this stuff, user 0111 1110. Sheesh.
I agree Python is pretty good although I don't have much direct experience with it. Javascript in the browser also leads to some quick, rewarding experiments.
For an 11-year old I know, who found an old science experiment book with BASIC examples, I installed Bytewater Basic. It works a lot like the old GW-Basic. Available as C source code and runs on Windows and Linux. Debian (and others?) has a pre-built binary package in its repository.
I started coding when I was 10. Began with QuickBasic (yeah, that DOS thing) which sucked. Somehow, i ended up doing stuff in AS2, later AS3 and then came to C when I was like 13 or 14. I still use C/C++ today and I really like it. The programming books I own are great when its windy and I don't want that my notes fly around. But thats it about them - Give him google, maybe recommend some good pages and give him some keywords to search for (like "How to", "tutorial", ...). He'll find his way easily through the internet and will learn a lot of stuff on his way. What i hated back then and hate still today about books is that IMO the examples are plain boring. I don't want to code some currency calculator - Who needs that? No one. Its not that the applications must make sense, but it helped me a lot because after my work was done I had something I could be proud of and what would help me. For example, I coded an MSN bot and implemented an IRC client thing in that application, so I could talk with random people over my xbox360. Sounds weird? Well believe it or not, but it somehow worked. It was challenging, fun and useful for me at that time. I think it is important to have a goal. Writing yet another calculator isn't one. Is he enjoying computer games? Just an idea, but why not write a hack/cheat for some game? Singleplayer of course. But that would be challenging, fun and entertaining in the end. Plus, this would teach about pointer arithmetic.
When I want to get something done, I pick up a language and make it happen. When I want to learn a language for no particular reason, I pick up a tutorial, poke around, and forget about it within a few days. My first language was POV-Ray. Computer graphics. Raytracing. Kinda outdated now, but at the time it was something interesting to focus my energy on. I like the idea of one of those BASIC Stamps or Lego MindStorms. I think the best approach it to choose a goal rather than a language.
I'll add to the others that BASIC is a great beginners language -- especially the old unstructured kind with (only) an interactive mode.
Python, not so much... It has an interactive mode, but that's about all it has going for it pedagogically.
There are some fantastic beginner programming books from the 1980's that expect the beginner to know absolutely nothing.
Really, snag a working C-64 on eBay (it'll add quite a bit of novelty and fun) and a few Commodore 64 programming books.
There's a lot of magic left in those old micros.
Required reading for internet skeptics
Sure. I actually had Python supported Turtle in mind when I suggested LOGO/Turtle. I imagine it would be pretty easy to step into Python after being introduced to Turtle through Python. Though, I didn't actually complete my thought process in my post.
The reason I mention it (rather than just straight Python) is that it is a lot easier to be visual, and I think that visual representations of patterns of code really does help the learning process. For example, nested loops are a lot easier to create a mental model for when you see it drawing a box or triangle. A 2-dimensional array becomes much easier to understand after you progress through Hunt the Wumpus or Battleship type games. What I remember about LOGO was that it was much easier to make certain types of shapes than in BASIC, and it seemed more analogous to a pen, which was more familiar.
But as I said before, the most important part is really just developing the patterns of the types of thinking that are used. There will be a new cool trendy language by the time he's an adult anyway. ;-)
The Land of Lisp has been a pretty good book thus far for learing lisp http://landoflisp.com/
When I was younger, I learned a lot from pulling apart code and examples.
Whatever language and/or book you choose, I'd recommend something with a lot of example programs, etc.
It's one thing to see a big list of code and description of variables. Often you'll try and put them together and *damn* it doesn't work, which often leads to frustration and/or giving up.
If you have a progressive of working code (here's hello world, here's how to add numbers, here's how to get input from the user and add the numbers, etc) then pulling it apart becomes quite fun as you get to see the full structure. If you make a change and it blows something up... well then you know where the issue is. It's a bit harder when you're trying to build something from scratch and don't know where to start searching for the bug.
Sometimes the best guide is no guide. I started programming with the QBasic help file... it made me approach programming significantly different than everyone else at college which is probably why I was always the one to come up with the creative ways to solve or bypass problems. I'd start with a more simple language though, its most important to just get used to the idea that you write code that a computer reads top down (or in other directions) so that you can start to understand that you need to keep the current state in mind, etc.
I started with the CoCo1 basic books and about 12 months later went on to TRS-80 Assembly language programming and the EDTASM+ book. I started when I was 8..
If the kid is going to program they will do it regardless of what books they have, they either have the ability or they don't.
I would keep them away from java and C#, not so much because they are bad languages but because they don't make you accountable for subtle programming issues.
Start with a non object orientated basic variant and move on from there to C, C++ and then onto Java and C#..
This way they will appreciate the usefullness of each one as they go.
Try to avoid delusions of stardome as a game developer.. If I have to work with another grad who thinks they are a rockstar game developer I will, engage in acts that are not inline with my employers corporate culture..
Getting the kids exposed to the basic programming constructs in a somewhat friendly environment where they can get quick results is the goal. The language doesn't matter as long as kids get feedback and don't have to suffer through too much debugging. Some debugging is crucial though to make them think problems through and see where they went wrong. It should never be just about the language and syntax so pick a language where the fundamental programming constructs (loops, if-thens, etc) are easy to learn and use. When they get comfortable, switch it up and move to a new language. If they find one that clicks with them, go for the deep dive and see what they can do with it.
This made me think back to my days with a TRS-80 Model III. I cut my teeth on BASIC and hand-jammed hex code of precompiled programs that were in the Radio Shack magazine which led me to learn Assembly. (Imagine a vendor nowadays actually telling you how to hack their machine) I kept interested thanks to my parents not freaking out when the computer did wierd things and a teacher who kept giving me new problems to solve.
I highly recommend the MIT OpenCourseWare course on Python. It is written in a very simple and welcoming manner, and includes a free textbook, labs, lecture materials, and homework assignments. Python is probably the best route regardless, as it makes both an excellent teaching language, and a very useful language to use outside the classroom in the real world. http://ocw.mit.edu/courses/electrical-engineering-and-computer-science/6-189-a-gentle-introduction-to-programming-using-python-january-iap-2011/ There are also a variety of Karel the Robot style introductory systems, including at least one ported over from the original Pascal dialect to Python. Karel the robot provides a limited subset of a typical programming language, and labs that allow a student to practice ordering a robot around an obstacle course. The pascal-based version was my first intro to programming, and it makes a great way to learn still to this day.
B. M. Harwani just came out with a very nice introductory Python programming book that covers Python basics in the first part, and then focuses on using PyQT to build GUI applications that link to a MySQL database. This combination of Python, PyQT, and MySQL works well on Windows, Mac, and Linux. The full title is "Introduction to Python Programming and Developing GUI Applications with PyQT" by B.M. Harwani, Dec. 2011, ISBN-13: 9781435460973, 300 pages, $30 -- http://www.barnesandnoble.com/w/introduction-to-python-programming-and-developing-gui-applications-with-pyqt-b-m-harwani/1103826486
I'm a big fan of the Head First series and I recently used the Head First C# book to learn. It's great but requires a Windows OS/VM to use so maybe not the best for you. The upside is it's centered around building games, which would greatly interest a kid. I've been eyeing the Head First Java book for a while now, and for your purpose I just pulled up a comment from the headfirst site: "My thirteen year old son who is new to programming started writing Java programs after reading this book.He had so much fun writing a battleship game after reading this book!"
a book on cobal?
Just because you don't have the brain to understand something, doesn't mean the 11 year old doesn't.
There isn't anything wrong with android.
The Kruger Dunning explains most post on
The free Stanford CS101 intro-to-computers class is going to start April 23rd, so that's worth a shot: http://cs101-class.org/ It introduces programming with code and everything, but it's easier than a full programming course. It's a way to get started, warming up to a full programming course later on. Some people can read a book and poke around themselves. However for many having videos/lecture notes/assignments all geared together is an easier way to get started. Disclaimer: I'm teaching this class!
just sayin'...
Karma: Excer..ex...excellahhh...realll good (mostly affected by drinking not done in moderation)
Start him at 8 AM.
Have him be in a meeting about what he is going to day, be sure someone tangets into personal story for 40 minutes.
Take him to starbucks and have him hang around there for 30 minutes.
Bring him back to his desk and have him load a compiler.
Have him wade through a series of emails that look like they might relevent, but 80% aren't.
Have him write a few lines of code.
Have another programmer come and talk about the cool ST blue ray they got.
Spend 30 minutes talking about lunch.
Go to lunch for 90 minutes.
Have a Nerf fight.
Listen to a coworker bitch about how much work they can't get done.
The Kruger Dunning explains most post on
A cheap, paperback book that is intended for a language that said 11 year old has ready access too. And if HE likes that book, get him another one. Lather, rinse, repeat.
That's what he should read.
Books are boring. I didn't learn to program from a book. I started from some sample code and just experimented with changing a thing here or there until I more or less got the basic idea. I remember hacking up nibbles.bas by changing a number here or there or a line here or there and seeing what happened. Most of the time it didn't work, but sometimes I got something awesome to happen.
http://learnyouahaskell.com/ Haskell is really good for getting you to think about computation in higher level terms; where does this data go, how am I transforming it, etc. Also, functional languages are much easier to learn if you aren't encumbered with an imperative mindset, but you can easily continue on to imperative from functional. It's also the most beautiful language I know and your son will be a wizard.
Don't force him into any particular single language! That is the wrong first choice. You should instead
introduce him to a selection of scripting languages currently in use, because of the short amount of time it takes to produce
results when compared to compiled languages, they are all better tools for learning.
Then let him choose whatever he finds easiest. After he becomes capable in any particular language,
show him interesting stuff in others.
They will all be different when he gets out of high school anyway, so I would suggest also exposing him to
some basic algorithms as time progresses. They will be more important in the long run.
Great website for everyone in the family.Free online courses from major colleges like Harvard, MIT, lots of programming courses and all free.
http://www.openculture.com/freeonlinecourses
I'm 15, I've been learning to program since I was 10 or so. I started in VB.net, and even though I kind of regret that now (ew, .NET) it was still a learning experience.
I've now moved on to Perl, and I absolutely love it. I'm teaching myself - I started with help from the great #perl channel on Freenode as well as my local LUG channel, and went from there. I'm still learning, and the best resource if you need to know something is definitely cpan.org.
Like many of us, I'm another self-taught programmer, started getting into it at around 10 years old with QBASIC and then graduated to C. If my parents had tried to guide my learning I probably would've hated it. I had my own motivations for wanting to learn how to program (making video games!!) but it was something I did on my own. My parents would've probably wanted me to write programs to help me with my homework or something equally boring and I would've quit right then. Maybe I didn't pick the best technologies or the best approaches, but I sure learned a lot in the process. I'd say let him explore and pick the language / framework / toolset that excites him and then support that decision vs. "Oh you want to program? Well let me show you the -right way- to program and the -right tools- to do it. You like PHP? No, no, no, PHP is dead and you should just start with Ruby. No, don't read that book, that guy doesn't know what he's talking about, read this."
I guess what I'm saying is don't be a dick about it and maybe he won't give up and play sports instead.
I think the most important thing at your son's age is for him to be able to write a small fragment of code & see its effect. Something as basic and accessible as an Arduino is perfect for this type of experimentation. To link you to a few resources, the main arduino site is http://arduino.cc./ You can find examples of some of the cool add-ons at http://sparkfun.com/
You might even have some fun with one of these things yourself!
I might sound like an old fool here, but look at how many languages have come and gone in 20 years.
The "cool" kids say Python and Ruby now
The older folks who used to be the "cool" kids say Perl, C++ and Java
The still older folks who used to be the "cool" kids say Lisp and Ada
All languages become passe, and most all the languages I mentioned are good languages to learn.... when you're a kid it's the concepts you're trying to teach, not making you good at coding.
So why not BASIC? It doesn't matter.
Start on BASIC of course
Ti- Basic users manual.
A Ti-99/4a off of eBay.
It's how I started out in 1982. It gives you the background and foundation for programming. Sure, it is not applicable today. But the Ti and the commodore certainly inspired and started many a gen x-er down the programming path.
because it's basically direct-to-graphics output. It's closer to logo than to C, as it's little more than DOM manipulation and you get to see the results directly.
I'd say perl, because it's my favourite, but there are too many advanced structure concepts and hidden context sensitivities that don't make sense until you've struggled without them.
my first was logo, followed by turing, followed by A.I. bugs. Actually, the old 2D A.I. Bugs is also a pretty great first one. Program an insect to look for other insects and fire missles. basically the software-only version of battle bots. might be good, I don't know. but it's very simplistic with direct visual output again.
for the love of code, don't ever go to lisp.
I am surprised at the question. just let him learn Javascript. cheap, tons of online tutorials, all your basic programming concepts are covered in the language.
http://programming-motherfucker.com/become.html
Very few people used Pascal in the real world, but because Pascal was so rigid in style, the thinking that resulted would work with any language in any era of programming. That's exactly the approach that should be used in learning programming...
Pascal is not the correct choice for today...
Why not? Rigid? Yes, and that's exactly whats needed: understand and define your variables via types (learn how NetPay has a binary representation, how arrays work, how logical sets can be used, ..., and learn logical (not goto) flow of control/programming structure. Yeah, you will want to take off the training wheels later, but "rigid style" such as strong variable typing and type checking save much frustration when learning. The logic processes learned will make it easy to transition to other languages and grok why, in C, A[i] is identical to i[A]. You learn that compilers don't work by FM ("fucking magic") and you don't write things that just kinda "look like" what you want to do. At least that was my experience going from a no SC whatsoever background to learning programming for scientific computing. People I know who started with FORTRAN never got past the "it just does what it sorta looks-like stage.")
Its called a commodore 64. Its the kind of book that plugs in and hooks up to your tv. Lots of fun.
Vols 1-4 should be enough material for an 11-year old.
This looks to be the entire book online!
Wow. Teach the kid to pirate, too!
I would recommend that you get him one of those Deitel books and let him start with C, python lacks structure, it is better for him to go crazy because of fatal errors rather than runtime errors, it is better if he writes a long code to simulate a hammer rahter than ponder why import.hammer did not do what he visualized to do. While he is learning C make him learn about API's and OS'es, then he can comfortably start using higher level languages and scripting languages, because he will be aware of the pitfalls.
I would say go with Python. I read a lot of research literature on the subject and it really is a GREAT first language. Pygame ( http://www.pygame.org/ ), is a great resource for creating games in python which a wonderful way to learn. There are free ebooks on that site. The Finch robot from CMU is very cool also http://www.finchrobot.com/ - AND it works with python. It can move around the house and do things, which is great for keeping a kid interested.
this site makes it easy for kids...
http://railsforzombies.org/
I like GOTOs... and so does this this guy, and this guy and the book on writing Linux devices drivers
Can you take your dogma out back and shoot it? 8-)
save him now
... an Altair 8800 and an Intel 8080A data sheet. Make him learn Hex and how to flip switches. Keep some extra switches on hand for when the "Deposit Next" switch wears out.
If you disagree with me on social issues, then it's pretty clear that you are a narrow-minded bigot.
Grab a graphing calculator and some print-outs of code for a simple game and have at it. Punch the code in and figure out what it does as you go.. Four languages and ten years later, I look back on that as more influential than 90% of my high-school classes. And programming isn't even my primary job function... Once you have some instinct for programming you can read dry mathematical books about set theory and programming theory..
As one who has been programming for 48 years most of the Language debate is nonsense.
To program you just have to be able to instruct the computer to do what you want ... Assembly, Compiled+Linked, Interpretrd and/or Managed are all ways of doing that, functional || procedural || object are paradigms for conceptualizing program design. All have a place. If you want a portable, maintainable program written at fast speed do not write it in XXX assembly code. Perl|Python|javaScript are a good place to start, C/C++ is a must, Java, while a huge design mistake, if very popular.
Most of you are just so stupid that you get into tribalized programming as well as tribalized politics.
MFG, omb
Tom Sawyer & a schema book. Schema is pleasant and really gets you to master recursion. Tom Sawyer will him remember what boys do besides learning computer programming. Please remember structure is good for beginners. good luck, jim
funny with more than a bit of the truth
Processing is really great for people who are starting out with programming as it is really good for visual stuff. Source: 4th year computer engineering student with no programming experience before 1st year. (Do most of my coding in Python at the moment but prefer Ruby overall). My university teaches it as out CS101 language, having recently replaced C++. By Comparison to our CS102 course (still taught in C++) we actually wrote much more 'advanced' programs (PAC man level editor/Fire simulation engine compared to writing a linked list class/card deck class in C++) that were more rewarding in terms of feedback. Main advantages I can see is that it teaches a code style that is similar to java or C++ (I guess still the two most commonly used languages) while allowing for creation of drawings, animations and games from the get go. This is probably going to be more interesting to an 11 year old than say generating the prime numbers up to 1000 or other common 'first program' tutorials. I would give secondary preferences to Ruby and third to Python - both are great to program in but Ruby might have a slight edge for first timers.
I'd recommend processing. It's very java like, but focused on visualizations with lots of fun examples for kids.
Both environments teach programming by making it fun to learn programming in a game making environment. Once he has mastered concepts of programming he can pick a language by himself.
http://scratch.mit.edu/
http://gamestarmechanic.com/
C# is a dying language that already has too many MCS looking for work.
He doesn't need a book, he needs a big whiteboard. Huge.
The old 8-bit computers (Commodore 64, Atari 800, BBC micro, etc) were awesome tools for learning programming, because you turned them on and you booted directly into a BASIC programming command line.
There was no other stuff you needed to know to get started. Just turn it on and type.
Setting up the environment so that kids can get that instant feedback loop, that when they type then the computer does something, that is the key thing that hooks them on programming. They learn that the computer will do what they tell it to do, and there's nothing between them and the machine.
For this reason, I think starting kids with HTML and CSS is the best way to go. Because you just need a text editor and a browser. Standard equipment on every computer (though it's still way harder to set it up than turning on an 8-bit was...go, go Raspberry Pi!!!).
Plus, it's the lingua franca of the web, which is the heart and soul of everything worthwhile in the present and future of computing. And everyone knows about and loves web pages, it's so easy for the kids to relate to it.
And then, once they know some basic markup and stylesheet stuff, it is very, very, very, very easy to start layering in some "real" programming with Javascript. And from there, go to Python or PHP if you want.
Simple steps:
1. HTML - make a page
2. HTML+CSS - make it look the way you want
3. HTML+CSS+Javascript - add some neat DOM-related tricks
4. Make a couple pages the same way
5. PHP/Python/Perl->HTML+CSS+Javascript - show how you can use the server to split up the pages into pieces so you don't have to repeat yourself, and you can control inputs from the user like forms
6. Introduce databases if you want...
Not only can they learn programming, but you gradually teach them the whole web stack. Since everyone knows and loves the web, this is highly relatable to kids, they want to get it.
--Julian
One has to learn to crawl, walk and run. Analogously, while most suggestions are based on personal and good matured people, every one thinks that the 11 old will be their mirror image. What ever programming language one wants to learn is secondary. What is to be learned first is the problem solving steps - simple algorithms, bench testing them with some data and to understand and use simple data structures. Then move on to a a procedural language that is simple yet allow most of the problem solving skills to be translated into a well developed procedural programs. At the age of 11, one does not understand the type checking, memory management etc. So, allow to learn BASIC with free software loaded into a reasonable computer and then to write programs. The underlying BASIC code will be useful to the child when he wants to learn Object Based Programming in Visual Basic. Next one can introduce the concept of "typing" and how the data is stored in the memory for easy storage and retrieval. So, move to C without worrying about how the efficiencies related to arrays. The key is some one should be there to help the kid in person. The above approach could be provided by the Dad. Then move on to a true Object Oriented language like C++ and show that the procedural part is almost in C. The boy can then learn Java or whatever he finds interesting to suit his need. No one has to say why learn three different languages instead of just one? The child has to mature gradually and begin to understand the underlying problem solving capabilities of each language and realise that there is no perfect programming language suited to solve problems in every domain. So allow his thinking to improved and he can later decide to learn any language. MIT's approach is based on "the superior intelligence of Undergrads". But for a 11 year old fun is the key to motivate him to learn.
Fun Science with your Computer by Christophe Cornu.
This book explains how to solve interesting (and progressively more complex) problems, using Java to work through the examples, building up from basic principles in Chapter 1 to implementing a chess program by the end of the book. It's not quite as polished as a professionally-edited book (you can tell his native tongue is French, although he writes in very good English), but it's a better self-study aid than any book I've seen from a mainstream publisher.
(Full disclosure: I used to work with Christophe at a previous job).
Small Basic is a great option for kids to learn programming. http://smallbasic.com/ .. The tutorial can be downloaded from http://download.microsoft.com/download/9/0/6/90616372-C4BF-4628-BC82-BD709635220D/Introducing%20Small%20Basic.pdf
INTERCAL, bitches! Your youngster will either kick ass or bail out. Either way they'll be happier.
This did it for me... a while ago: http://www.amazon.com/dp/0553244183
http://www.amazon.com/Programming-Easy-Steps-Mike-McGrath/dp/1840783230
I Believe there is an updated version, but this is the one I read (roughly 2004-2005ish)
Feel free to call me a bastard for suggesting c as a first language or even more so for recommending this book.
But In my defense, it worked for me. Its kind of like teaching a kid to drive in a 1970's two ton steel death trap with bald tires, shitty brakes, and a sticky accelerator, but If you learn to drive a car like that that there's little question that you can drive damn near anything.
Once you've gotten a grip on things and have become proficient with c, moving to another language should be little more than grabbing a cheap reference guide that is nothing more than a rough cheat sheet for syntax and language specific features/limits.
Not to mention they'll appreciate the nicer features of other languages and not bitch and moan just because some otherwise perfectly good language doesn't happen to have function x, y or z, or other form of hand holding and still be able to get things done when those "features" don't exactly work as they should.
If the kid is anything like me he will hate Python for one simple reason: significant white space is evil.
Annoying for a week or two. After that you learn how to set up your text editor.
Eg on *vim put this in the rc file: :set noai ... obviously
au FileType python set expandtab shiftwidth=4
And before you paste:
And if you are a *vi* user of any type learn to indent and dedent (in cmd mode) with ^T and ^D ... the number of folks I see using [tab] and [backspace] sheesh!
Moar Fun LOLCODE! :p
Meh- anyhoo funner langs can be enjoyable too.
on caturday im in yr bed i iz sleepin!!10 visible "z!" kthx kthxbye LOLCODE *nice slashdot eats code tags which translates into a string of messy code, without formatting code looks fugly: bad bad BAD, Plus is yells for caps, moar bads!
This strange comment at the bottom of the message is illogical.
C is a old meat. Start with Java.
BlueJ is perfect for first timers.
Objects rule.
An impressive project of learning Java.
You start with NOT gates and build (in simulation) RAM, CPU, etc. Then you go on to program it in assembly and then implement a VM and compiler. It eables somebody to understand how a line of java code is implemented down to the gates in the CPU. I can't recommend this book highly enough.
Get a Raspberry Pi (might need to wait until the kid turns 13) and the ZX Spectrum emulator.
Its not about the language, its about the project. When I was young I wanted to make the most amazing 3D game ever. My hero was (and still is) John Carmack. He used C, OpenGL used C, and pretty much anything fast used C (or C++). There were scripting languages, like Perl, which were even used for some games (e.g., Frozen Bubble), but if you wanted to get serious, you needed to learn a language that lets you directly manipulate memory and devices. I _wanted_ to learn C because I wanted to do my project right. Ultimately, when I was in 12th grade I used flex, bison, and C++ to make a C compiler for SPIM based on what I learned at a local university. That experience wouldn't have happened in perl. Disclaimer: I use all the languages, python and perl mostly for scripting. My point is C is a great first language, if you want to build something best built in C, which is actually a _lot_ of stuff.
So I guess what I'm saying is your question is being asked by the wrong person. Its your 11 year-old that should be asking about what tool he can use to get his job done. If you want to entice him into programming, then you are asking the wrong question. Maybe you guys should work on a project together, in which case, you can select the language that should be used and teach him what he needs as he needs it. My Dad and I did a lot of carpentry together because he tried to entice me into that when I was young. I found it boring, but he tried. I learned some stuff, but didn't go into carpentry. Hopefully it will be different for you and your son. Good luck.
--"You are your own God"--
My son has used this book, and I can thoroughly recommend it. It leads the kid through programming by getting them to write various games in python - increasing in complexity throughout. When I was kid learning to program, writing games is what I first wanted to do. The book gets the tone just right, and I think my son has enjoyed working with it.
Ever heard of Delphi XE2 (formerly Borland's product). It'll produce 32 or 64-bit executables of ALL KINDS (gui, console, services etc. & more) for Macs, Windows, & soon even Linux in its upcoming next release (again, since Kylix could do that in the past but Borland killed it because the Linux folks were so 'stuck' on C/C++, even though there was a C++ Builder for it also). Free Pascal + Lazarus will do 32/64 bit apps too, & multiplatform also. Not a "huge jump" between using Delphi Object-Pascal & FreePascal + the Lazarus IDE either.
Embarcadero/CodeGear (subsidiary of Borland) took it over and it's still got codebases worldwide in business by the truckloads. Having used it from 1997 after reading the article I note below? It "took me away" from VB largely (even though I used on jobs alongside C++ many times afterwards). It's got the BEST of C++ & VB in one box so-to-speak. The power of C++ (minus multiple inheritance, an 'esoterica' only imo & not of "huge" practical use (unless others can show me otherwise)) & RAD style building of VB, fast (saves time, vs. say, oldschool C for windows building your apps outta the raw API & your own schedulers + bugs galore - things have gotten WORLD better since the Win16 days is all I can say on THAT note).
It's also soundly "dusted" both MSVC++ & VB5 (as well as Java) in tests done in a competing trade journal no less as far back as Sept./Oct. 1997 Visual Basic Programmer's Journal issue titled "Inside the VB 5 compiler engine" and did the same in the 2000's in "Jake's Programming Efficiency Test" (which allowed inline assembly in some tests between C++ & Delphi, others not).
The results?
Delphi literally DOUBLED MSVC++ string & math performances (which every program does) in the VBPJ mag tests, and outdid MSVC++ in the other test challenge. It's out there still & I've just tried the new Delphi XE2 & love it (after years of not having used Delphi 3/5/7 my former favs with Kylix for Linux).
Don't knock Pascal either. It's NOT that much different than C/C++, or even Visual Basic. I'd almost call it a 'cross' between the two, but that'd be incorrect... I am just talking about how it looks/is structured is all. Doesn't take much to port code between all 3, imo @ least, because of that.
I just don't like hearing misconceptions and falsehoods (I don't THINK you meant it that way though, just that you may be unaware of those IDE's + Languages that are PASCAL based that are still out there).
Heck - ADA & Modula 2 are Pascal like also (ADA is used in military applications).
You might want to "take a scan" of this http://en.wikipedia.org/wiki/Pascal_programming_language
Anyhow/anyways: Last year I gave Python a shot though - it's great for string handling stuff!
It's very easy to use + a wealth of information is online for it also to get you 'kick started' fast(er), because if you come in already knowing ANY coding language, face it - you've got MOST of the worst licked!
This is 1 thing kids have going for them today that I didn't (heading 50 now) - the NET. It's got a LOT of working code one could use... this has a 'downside' imo too though, especially for new starters: Instead of sweating to do the work, inventing your OWN solutions? You can 'swipe code' off online & use it. Is this good? Yes & no for those reasons above & these below too:
However - the "flip side" too - For production if the code's not protected by law (what the hell would it be doing out online in the open then though?), a good thing - makes for hopefully FASTER development time. This is also good when your books or help files do NOT have a good example.
Any language is a good starting point, even BASIC/VB, but you have to consider this is a Dad with his kid - he probably wants the kid to get into a more "future & changes proof" language, vs. "here today, gone later today" also.
I.E.-
or however the english title is.
Learn Python The Hard Way.
http://rocknerd.co.uk
Do you know "How to Think Like a Computer Scientist" [http://www.greenteapress.com/thinkpython/thinkCSpy/]?
It is a Free Book available under the GNU Free Documentation License.
I learned Python to my 9-year old kid using this book: “Invent Your Own Computer Games with Python”. You can find it and a new book “Making Games with Python & Pygame” at //http://inventwithpython.com/ . I haven't used “Making Games with Python & Pygame” yet.
Make it playful.
I have worked in the IT industry for 30 years and have been a programmer for the first 15 or so. I also was self taught.
Many of the professional development firms use a 4GL which allows multiple people to work on the same project and has heavy use of libraries. In my opinion, this type of programming usually results in garbage. Code that has to be recompiled and updated every year or so, is full of bugs because the libraries are full of them, and those bugs get inherrated by any program made with them.
The best programmers in the world do their own individual coding and are usually self taught. Even in my agency where we have development teams, when they have something they can't fix, or need something reliable, we have a few solo programmers.
Start with BASIC. (Beginners All-purpose Symbolic Instruction Code). It literally is the basics and it's freely available with almost ever Operating system, and does not usually require a compiler, but can be compiled.
After that, go with another high level language like C or C++. Those Use structured programming and are standards in the business community.
After that is learned, Assembly Language is the next big step. Steve Gibson is one of the top world programmers in Assembly (grc.com)
Give him a football instead.
There seems to be a consensus on Python, which I agree to.
I'd reccomend this book for a kid: http://www.manning.com/sande/
Hello World! Computer programming for kids and other beginners.
It was actually written by a dad and his 12 year old while taching him to program using Python.
All far too dense for an 11 year old, and all pretty much require more background knowledge than an 11 year old is likely to have. I'm not sure there really is an answer to the OP's question though, at that age, even a very bright kid is almost certainly going to lack the prerequisite knowledge to learn to program from just a book.
Rubbish!
The fact the 11 year old wants to learn to program is enough.
I learned to program around age 10/11 on the acorn electron. All i had for instruction was the book that came with the acorn. I didn't understand much to start with but as i copied text from the manual and watched the results i started to understand what was happening.
You cannot teach a 30 year old how to program if he doesn't want to learn
You CAN teach an 11 year old how to program if he DOES want to learn
All the religious fervor for various languages notwithstanding we need to consider what's best for this 11-year old. At 11, he/she is not passionate about compilers or interpreters. The main interest here is to be able to command a computer to do his/her bidding - without a lot of aggravation or a heavily front-loaded learning curve. What the individual wants and needs is instant gratification, mental challenge to stretch the mind, self esteem by self educating in a skill that is still revered and respected and finally, a marketable skill. Given these criteria there are many viable choices. I am a self taught software developer with a career spanning 30 years. I'm also an employer - I screen, recruit and hire a lot of programmers. So rule out any compiled language. This teenager would be well served to learn either or both of Ruby or Python. I'd probably go with Python first because of the large pool of expertise, material, tutorials, ease of learning. It teaches good habits, has some decent GUI toolkit integration and performance is pretty good. A little way into the Python foray I would advise him/her to learn Ruby. Ruby will instill some outstanding programming paradigms and habits. And Rails/Scaffolding etc. will make it possible for this youngster to quickly deliver a sophisticated web site. Time to satisfaction (and therefore encouragement, reward and motivation) will be short with this approach and both Python and Ruby are amongst the most highly paid skill sets on the market right now. .NET/C# are in high demand now also, but have a much steeper learning curve. Go with Python and then Ruby. You will have fun, learn to program well and have marketable skills and a great foundation for furthering your computer programming career. If you lose interest during the Python/Ruby phase, then programming likely isn't for you. Unless you want to write device drivers (like me) - then learn 'C' :-). The Operating System of choice matters little for this purpose - whatever you're most comfortable with. Good luck with your endeavor.
I was in 4th grade when I used "Programming in BASIC for Engineers"* to teach myself the foundations of programming.
* http://www.amazon.com/Programming-Engineers-Pws-Kent-Computer-Science/dp/0534918999
I don't agree with most of the recommendations above. Mixing semantics as happens in a lot of modern programming languages is not good for learning: pointer vs. copy passing as in primitive types vs. objects etc. Floating point vs. integer arithmetic with its automatic conversions ...
When learning to program, there are 2 totally different things to learn:
1. clearly structuring a problem
2. the nitty gritty messy stuff: pointers, floating point number issues (rounding), communication with hardware (I/O),
A language like Pascal (if you have a dialect with supports pointer dereferencing (original pascal only made this possible via var-parameter passing) forces one to structure the problem, has very strict semantics and still lets one learn the complexity of pointers and the essential data structures: trees, lists ...
Complement it with structured programming and stepwise refinement (Dijkstra) to learn to structure problems.
Once one masters all this, it becomes a piece of cake to write a well-structured C program, and picking up on all the additional nitty gritty stuff that C doesn't hide.
With ADT (abstract data type) based programming in Pascal, one approaches OO programming, and the step to OO-pascal or C++ can then be made.
A great language for learning how to structure a problem is a functional language like Haskell. Strongly typed, lazy evaluation, support for unlimited lists etc. Based on lambda-calculus, hence with strict semantics.
Sorry, but have no book recommendations at hand.
The fact is that Arduino is more likely to be the platform or similar for programming into the future as Robotics is where it is going to be at. Also he can get the download of the IDE FREE *Yeah!!!*
In addition he can get all sorts of help and code examples and the devices are cheap and fun to work with.
I'm surprised I don't see more recommendations for codeacademy.org or khanacademy.org. But I am with the majority of respondents in suggesting the Python is a good start and How to Think Like a Computer Scientist is a good book.
Application notes published by manufacturers are a great resource. For example, here is an old Motorola application note that begins with the basic parts and operation of a microprocessor: ccintern.dharlos.de/M68HC05AG.pdf It isn't programming, but it will help him understand what's happening in the box.
JavaScript The Good Parts by Douglas Crockford.
Forget Python and the OS. Just go to the browser.
1) Get Firefox ...
2) Get Firebug
3) Be Awesome
4)
5) Profit!
One thing that almost all of the suggestions to date (with the exception of Lego) is that they don't show how programming can affect the real world. Arduino projects, OTOH, will give him the opportunity to get immediate feedback. Arduino kits are used successfully by many teachers and camp counselors at the elementary and junior high levels. The base kits are cheap, the programming language is simple, easy to graps, yet powerful enough to get the kits to do an amazing amount of stuff.
I quite enjoyed Learn Python the Hard Way from Zed A. Shaw.
Learning to program is not about language. You need the fundamentals first, which means an understanding of what a compture is and how it works. From there things like pointers, memory allocation, stack, and threads make sense. After that you can get into algorithms, at which point the differences between one language and another start to appear - garbage collection, basic types, oopiness, APIs.
TL;DR: if you've got the fundamentals down then the choice of language is really just a choice of APIs.
Few people here have mentioned the "goal" of programming. That should be to write programs to do fun and interesting things. I would put graphics, video games and smart phones in that category. Of the three I'd recommend smartphones. There have wide variety of devices to control inside them, e.g. location sensors. The OS/graphics is relatively simple compared to their more ornate desktop relatives. And clever smartphone program can be lucrative if it becomes popular. Your son can easily show off his work to his friends.
The most accessible smartphone OS is Android. Is base language is Java. Java is part of the half dozen C-like languages. Once you learn one you can learn the others more easily.
My first program implemented the graphical Conways Game of Life on a teletype in 1970 Darmouth BASIC. I stumbled on a listing recently and it wasnt too bad.
There is no substitute.
It would help teach the kid about the real adult world of pain and disappointment and crushed dreams.
To have a right to do a thing is not at all the same as to be right in doing it
Askell could be a good language... :)
Seriously, IMAO you can start with c and k&r, and after approach to python or java
Lordy! Protects us from self taught programmers that never manage to learn structured programming, I've spent many hundreds of hours unraveling and troubleshooting code written by MBAs who "knew how to program". Worse yet I had to interface commercial databases and programs with their kludges. Structured programming, flow charts, internal documentation: What's all that? Now this is not to say all self taught individuals don't get it right, but the odds are against them. We used to have a computing contest for high schools at the university every year. Not once did the kids who were considered gurus even place. They knew how to program in C, and Pascal,(This was before the visual languages came on the scene), but they did not know how to solve problems by applying those languages to the real world which is what the contest was all about. Now, who's to say the kid will be playing, but what does it hurt if he is? Of course if he's serious about programming he's going to have a lot of bad habits that he'll need to unlearn later on.. OTOH there are some special people out there that learn many things quite young. While I was struggling through calculus II in college there was a 14 year old in the same class. But, if he really wants to learn, my recommendation would be the old boring route of structured programming in Pascal first. If he can stand it by the time he finishes that he should know enough to make a decision on what real language he wants to learn. OTOH you could feed him straight C and he'll end up discouraged. C, the write only language.
I started on this book about 6 years ago and haven't bought another PHP or MySQL book since. It is chock full of code examples. The explanations are usually short but concise. It's for more of the "learn by doing" type.
Amazon: How to Do Everything with PHP & MySQL
Javascript. Learn Javascript in 24 Hours or something like that. You'll learn the basic concepts of programming (variables, loops, conditional tests) in an easy-to-program-and-test environment. A text editor and a browser is all you need. (I don't know if Apple/Macs have an actual text editor available but I know Windoze and *nix all do).
Why he needs more - by running into the limitations. When I was 10 I talked my parents into getting my TRS80 coco. I mastered basic, extended and disk basic mostly for the purposes of creating games. I made LOTS of games (and spent LOTS of money (I spent $600 on a floppy disk drive!)). Eventually, I realized that I could never achieve the performance of the real games because the real games weren't written in Basic. I wanted to understand assembler - because I knew that was the only way to get the real performance - but at that time there was really no one to go to who could teach me the concepts. It was really all like black magic to me. I didn't understand the concept of compiling - or really why Basic was so slow. Anyway, I'd reccomend something simple like Python - where jr could focus on the logic in creating a program. Maybe he too will learn that there are limitations, and want to understand the lower level languages. I tried this a couple years back with my 8 year old... He sort of liked it, but definitely didn't have the drive to learn it like I did at his age.
BASIC, never had no luxury like that. :)
My first 'program' that I have any recollection of was in RPN on my dad's HP calculator, it was a privalage to use it because it had cost his company the equivalent of a months wages for a senior engineer. He's almost 80 now but still keeps that calculator in its original box in his wardrobe, nowadays he's reimplementing vintage games in Delphi(*) and maintaing my brother's small bussiness systems. I haven't seen the calculator since I left home in 1977-78 but I think it might be a HP-35 going by the early 70's feel of the memories. I do recall it plugs into 240V Aussie mains, so whatever it is I don't imagine there'a a whole heap of them in existance today, particularly one still in its box with the manual. I hope to turn it into an unusual family hierloom after I die, (assuming the hyperactive old bugger doesn't outlive me).
* Google "Barberic Games" - Please take a look and download if you are intersested, but for god's sake don't slashdot him. "BarbEric" is both a word play on 'barbaric' and a combination of my parents names.
And did you exchange a walk on part in the war for a lead role in a cage? - Pink Floyd.
Godel, Escher, Bach: An Eternal Golden braid.
Wonderful introduction to CS, applicable to all languages, great lessons about hierarchical ontology and human experience as well!
I have no lasting memories from first learning LOGO in grade 4, but I do like the way I was re-introduced to programming in high school...
We didn't even touch the computers for the first full half of the term!
Instead we were introduced to basic concepts in the classroom on the blackboard and worked with pencil and paper.
First getting comfortable with the idea of instructions, the teacher would hand out simple mazes that we would have to write instructions for an imaginary robot to navigate through. There would be a simple instruction set, for example, forward 1 space, turn right, and so on. He would also have us draw our own mazes and solve them or pass them around the class. Eventually the instruction set was expanded after identifying repetitive sequences of instructions and imagining how to condense them syntactically. We would get loops and procedures.
I remember loving the class when we were introduced to arrays. Here is a box that can hold anything.. a one dimentional array is a list of these boxes.. and he would draw that on the chalk board. Describe how they can all have a single name and how to reference the different boxes. Then he drew the two dimentional array... Then three dimentional.... My mind was blown when he said it didn't have to stop after three dimentions.. and how easy it was notationally, but try to draw that on the chalkboard! Not that higher dimentional arrays have come up too often in my many years of programming since then, or that wern't better substituted with a different structure, but what a nice thought experiment.
I've always had a preference for the theoretical aspects though... I enjoyed woods class and metals and electronics shops and always had a very 'physical' sense for the way I would structure and visualize code.. or, I should say, data! In high school math I was always drawn to geometric proofs.. and in University I love Automata theory and proofs.. State Machines were always a lot of fun for me, powerful computationally and easy to associate with real world ideas.
TL;DR Having good ideas about the structures you can use to organize your information and solve your problem is more important that any programming language!
Go back to BASIC.
http://www.calormen.com/applesoft/
Let him learn the base programming.
Though I learned to program at about the same age the Commodore BASIC / 6502 assembly way, my (much) younger siblings got into programming with Processing. It's not a very versatile language, but it has some distinct advantages for young and inexperienced learners: it's easy, its emphasis is on immediate visual feedback, and it has its own built-in IDE with a big "play' button. I consider it the Logo "Turtle Graphics" of our times...
Once the kid wants / needs something more powerful, Python or a Lisp would be great choices.
I know a lot of us adult initiates want to throw the dense and useful stuff out there right away, but that assumes the child's interest is fixed... more likely, the kid still needs to develop a desire to program and a sense of fun in association with programming, as much as actual skills.
You might ask what kind of things your son wants to program, i.e. does he have any other interests. If he's interested in natural languages, for instance, there's a lot of good Python code, e.g. the Natural Language Toolkit (NLTK). I would imagine that other fields have their own programming languages--R for statistics (probably a stretch for an 11 year old), something else for gaming. (You can tell where I'm coming from ;-).)
Personally I love lisp because it doesn't have a syntax. When your kid learns how to program it'll be easier for him to choose a syntax that he likes afterwards.
Don't complain about syntax, grammar, or spelling. There is no.hell like input on android.
Kids Soak Knowledge up, don't concentrate on any one language, go after python and perl for sure but work with C and C++ possibly even some Assembly but the main goal is to find a way to make it fun and entertaining, make projects that have an end goal to do something cool or control some media device / network device / anything external or attached to the real world.
Have him learn Ada. It is clear and close to Pascal in terms of syntax (not the mess of C or Perl!). This makes the program easy.
Ada is used in all context (from high security software, to simulation and Web devs). There is some online free book and
a Wikibook. It has built-in tasking, concurrency and distributed computing. On Ubuntu just use the GNAT compiler which is
part of GCC.
1) learn COBOL Use Google.
2) write a simulator for a three-address machine in COBOL
3) write an assembler for that machine in COBOL
4) write a linking loader in assembler.
5) write a C compiler in COBOL
6) write a COBOL compiler in C.
7) think about what 5) and 6) mean.
8) substitute other languages for COBOL and C and repeat 7).
"They cannot ask questions"
Get it direct from the publisher- http://www.manning.com/sande/
They do ebooks right. No DRM and costs less than the physical book (pbook). Also, if you buy the pbook you get the ebook free. Sign up for their daily deal e-mail to see what book is on sale that day. Every day at least one book goes on sale, and sometimes more. Wait long enough and the book you want will go on sale, probably for half price. Their early access program is great, too.
As for this book, I thought it was well done, but my kids didn't get into it. They didn't express interest up front, though. It was mostly parental pushing/hoping.
Good luck
Start with Scheme. Everybody likes Scheme. Alternatively, start with Haskell. Starting with Haskell is probably not going to work, but if it does, it will be the best thing you can do.
http://www.amazon.com/The-Joy-Sex-Ultimate-Revised/dp/0307587789/ref=sr_1_1?ie=UTF8&qid=1334435480&sr=8-1
Surprised to see that noone mentioned codecademy.com. This site now has a very intuitive course on javascript.
I'll skip the Python/Ruby/Java/Whatever debate, and throw in my 2 cents for the head first series of books. They have a ton of them for every common language as well as a variety of other topics. They're written at a beginner level, aren't insulting and are really alot of fun. The combine all sorts of exercises and gimicky little games to make a more immersive experience, and it really does work.
They're published by Oreilly which gives them all the credibility they should need, but they are written at a level that a novice, even a child can learn from and have enough content, that an experienced reader can likewise expect to learn something
If privacy had a tombstone it would read "We did it for your own good" . -- John Twelve Hawks
http://homepage.mac.com/randyhyde/webster.cs.ucr.edu/www.artofasm.com/index.html
Loved this back in the day.
I only look human.
My mother is a halfling and my dad is an ogre, so that makes me an Ogreling
Definitely "C++ for Dummies", didn't manage to get my copy until age 12, but... I'm sure he'll love it just the same.