Ask Slashdot: Best Book For 11-Year-Old Who Wants To Teach Himself To Program? 525
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."
Not sure about a book... (Score:1, Insightful)
But Python would be great to learn on. It's nice that it can be run interactively, like BASIC.
Normally C but... (Score:5, Insightful)
Re:Tube classics (Score:2, Insightful)
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.
Re:Python (Score:5, Insightful)
When I entered college I know how to program in about 8 languages (before Google) myself, I was actually codding professionally before I left for college too. And the skills I taught myself was valuable, and gave me a heads up in College as I wasn't fretting over the technical end, and I could put the rest of my focus on good form.
I have seen some other kids wash out of the computer science program because they knew how to write code however their egos got in the way and they never wanted to unlearn their old ways. They will still stick on the superiority of the GOTO statement.
Re:Python (Score:4, Insightful)
I also learned programming myself, over 15 years ago. Yet I have still today learned a lot of useful stuff from others who I have worked with.
This is what I think:
- If he is motivated to learn by himself, that is the best way to start. Not because of what you learn about programming, but because of what you learn about learning and studying new stuff.
- After a year or so, if possible, get a good mentor. This time, to learn about programming. There is a lot of advanced topics which you don't even know to exist unless you have a really good book or a really good mentor. This doesn't mean that you couldn't study this stuff by yourself, but you will need someone to tell you what to study. Here is a list, which contains topics, perhaps a bit too advanced for someone who just started to program, but the list contains a lot of things I wish someone had told me sooner:
-- unit testing (more important than the program itself),
-- more about testing and what you can do with it, e.g. performance testing
-- pair programming
-- writing clean code (e.g. why it is important that you think really hard how to many each variable you create),
-- refactoring (how you can do it and why you should),
-- programming principles and patterns (e.g. why a class or a function should have only one responsibility),
-- usability (how you can analyse it and improve it),
-- user experience (why people think that the software is faster and has less errors just because you changes the error messages more polite),
-- tools(version control, IDE, continuous integration with static and dynamic analysis, and how they can help you do your job).
-- Agile methods, lean, kanban. (these are pretty good to know when you start working for real)
My recommendation for language: Python with pygame (for writing games).
Re:Python (Score:5, Insightful)
Also being a 'seasoned' developer I'm wondering why not a 'real' language like C as opposed to scripting languages.
Dynamic (scripting) languages are no less "real" than compiled languages. Both have their place, their strengths, and their weaknesses, which is something a "seasoned developer" should know.
An instruction language should just get out of your way and let you concentrate on doing stuff and understanding the CONCEPTS, instead of concentrating on making the compiler/interpreter understand you or doing routine housekeeping (eg: memory management). This is true for real-world development, but is especially relevant when teaching someone how to program. For this reason, Python is an excellent choice as a first language -- even MIT uses Python as a teaching language. [mit.edu] (I can't think of a better endorsement than that)
The advantage that Python has over other dynamic languages (Perl, Ruby) is that it is designed for readability and clarity. Even as a die-hard Perl programmer, even I can admit that Python is an easier language to learn and explain, and is probably the first language I'll teach my children. Whether it's (IMHO) dumbed-down syntax is an advantage or a disadvantage for doing serious work is a subject of debate (if not holy wars).
C is a wonderful language for a specific class of problem, but it has lots of problems that make it suboptimal (if not completely unsuitable) for other tasks. Knowing *when* to use C (and, more importantly, when *not* to use it) is as important as knowing *how* to use it, if not more so. It is not a good teaching language for a beginning programmer, any more than it is a good language for general application development. Someone who doesn't understand this has no business calling themselves a "seasoned developer".