I have a 12-year old son to whom I would like to teach some basic programming skills. I am not a teacher. I know some basics of programming from my school days years ago. (We were taught BASIC in school. Later I self taught myself some C, where I learned how to do the basic stuff, but never really mastered output control.) Lately, my only programming has been creating spreadsheets (with some complex boolean cells). I can’t make the visual basic macros work for me for my life (although I’m self taught, and I guess a lesson wouldn’t kill me).
What is considered good as a first programming langauage these days? Does anyone have a suggestion for a book or curriculum that would be good for that age group?
We run on Macs at home.
(If it makes a difference, I think it would be neat to learn how to create Iphone/Ipad apps someday).
Well… since no one else has replied, the non-programmer will take a stab. I’d try khan academy. Don’t know if the age range is quite right, but it’s worth a try. They used to have straight forward python programming videos, but last I checked they made it much more accessible and game oriented (in a good way I thought).
You might just check out YouTube. The have thousands of programming instruction videos, I believe. Also, checkout Google Plus hangouts and helpouts. Lots of programming there also. In addition, a good logic class would be very helpful.
I think Python is the defacto standard nowadays. It has its problems and beginner traps, but every language does. It’s certainly better than any language with memory management, and there’s a ton of open source work in it meaning a potential learner can poke around and learn how things work.
I’ve heard extremely good things about Learn Python the Hard Way:
The way I did it was take a game that was already programmed, type it in, and start making it better – change it from a text-based game to graphics, etc. It helped that I found a couple of games you could play against the computer, which gave some fun end to the hours of programming.
The book I had was 101 BASIC Computer Games by Dave Ahl (original book PDF; second edition PDF). I don’t know if it helped or hurt that I had the book for years before I had a computer to put them on. I just programmed it all on paper. By the time I got my first PC I had a ton of games to test out.
The language of choice now for me is Processing which is Mac compatible and is graphics orientated. It is also similar to Arduino programming when your son wants to get into that. I’m probably not the one to ask about programming languages. I had gotten books on FORTH, COBOL, and APL at the same time as BASIC, and thought they were all fun.
Heh – don’t put off programming games in Excel. Just google “excel games”.
When I was twelve I set up and ran a fairly popular visual chat server. It didn’t really require serious programming per se but over time I learned various things that peripherally required programming.
It was something I set up on my own without any guidance from an adult, and in hindsight it was a horrible way to learn. The chat server itself used an obscure scripting language that used reverse Polish notation (1 2 +, a true == if, etc) which really was not the right way to start.
On the other hand, I was learning it to create something I really cared about and that was incredibly motivational. By the time I was in high school I was able to create reasonably complex Web applications that we actually used to administer some things for a club I ran.
So in short my advice would be 1) do figure out an appropriate language and and teaching method, but 2) have an eye toward creating something your son can seriously sink his teeth into. An iOS App would definitely fit the bill except that Objective C doesn’t seem like a very good place to start learning programming to me.
Figure out what will motivate your son. If it’s games or graphics (seems most likely) then do something that will get him some results quickly. I never did better with kids than I could with an Apple ][. You could just type in lines of BASIC to make stuff appear and move on the screen. Once kids get interested they’ll absorb information rapidly.
I don’t know what to do for this anymore, but when I first started learning how to program several centuries ago I found the greatest aid to be looking at well written code. I could see the techniques being used and how well organized code should look.
Unfortunately, she never tried it so I don’t have a practical review to offer. But I do think that being able to quickly do things that are visual, while still writing real text-based code, is the right approach. Of the things I reviewed, this seemed like the one which hit that nail on the head best.
IN UK schools I believe they start with Scratch, which is a visual tool/language that introduces the basic concepts. Whether your child is too old for this I do not know, but it could be worth investigating.
Yea, I think most 12 year-olds do a lot better when they have some concrete project to work on, and just have to hack around to figure out how to make it work. I think even most self-motivated kids will get kinda bored with stuff like the Khan academy, where they start from the ground up and give a bunch of not very intrinsically interesting example problems.
Once they have a project to work on that they’re interested, then they will want to sit through a bunch of online lectures and the like.
For the language I’d recommend Python, Lua, or Ruby as a first language and then move on to C or Java. Since he’s 12 you might want to go with games to get him interested, there are many great libraries like PyGame for Python and Love2D for Lua. I’ve also heard of games that support development in Lua, like Garry’s Mod and Roblox, but I don’t know if those would be a decent way to learn.
If you want to get him into electronics(Which I’d recommend) then you could get him an Arduino, RaspberryPi, or BeagleBone. The Arduino uses C, C++, and Assembly, the RaspberryPi and BeagleBone can use almost any language.
I wouldn’t recommend Scratch or any similar programs, since they are very limiting and don’t teach much about actual programming.
I was your son’s age when I taught myself to program, and no one particular subject really held my interest, I wrote everything from games to web servers. I think the best thing you can do is introduce the idea of programming and teach him the basics, then let him figure out what he wants to do.
Get an Arduino and find a fun project! There’s something special about coding to make stuff work, and it’s a lot easier than writing a typical interactive program. Plus you don’t have to be a graphics expert, because there ARE no graphics!
Python and Ruby are good languages to start. Since you’re on Macs, you should note a couple of things. First, for these interpreted languages, it’s good to start on a command line. The Terminal app is in /Applications/Utilities, and is a fully functional Unix bash shell. Second, get a good programming text editor. TextWrangler from Bare Bones Software is their free, stripped down version of BBEdit, which is a gold-standard editor (you can, of course, also use vim or emacs from the shell). BBEdit is no longer sold on the Mac App Store, though TextWrangler might be (since it’s free).
Ruby and Python comes built-in to Mac OS, but they are not the latest versions. To get the latest versions of open source software, I recommend Homebrew.
Xcode is free on the Mac App Store, and is the only way you can sensibly make iOS apps. Training videos from various Apple WWDCs are available at the Apple developer site. Apple’s new Swift programming language is kind of cool, and the Playground feature in Xcode lets you do a lot of experimenting with it in real time, even though it is normally a compiled language. Warning: you cannot actually put an iOS program on a device without joining the dev program, which is $99/year. You can run the program in the Xcode device emulators on the Mac for free.