So, my 12 year old son is interested in programming for Android. He's never done a real program before, but he did play briefly with Alice. I'm trying to figure out what the best way to introduce him to programming would be, and more specifically, if it would be better for him to just jump into Android programming, or if I should have him do Java first. Any suggestions?

As it currently stands, this question is not a good fit for our Q&A format. We expect answers to be supported by facts, references, or expertise, but this question will likely solicit debate, arguments, polling, or extended discussion. If you feel that this question can be improved and possibly reopened, visit the help center for guidance.
If this question can be reworded to fit the rules in the help center, please edit the question.

If he shows an interest in Android, forcing Java on him will probably only leave a bad taste in the mouth. If he wanted to build a fort in the backyard, would you make him build a picket fence first?
–
Joel EthertonFeb 12 '13 at 15:15

10 Answers
10

As someone who taught myself to program in GWBasic before I knew English (at the age of 12 as well), I would say that he should jump straight at what he is interested in. Just try to help him if he gets stuck with something basic in the beginning.

@EnderMB - agreed. I learned assembler at around 14, and it wasn't that unusual at the time. Admittedly, assembler is pretty simple - or was back then, anyway. It's getting the machine to do anything significant that's tricky. There's a definite cultural shift, though. In the 80s, a kid with access to a computer would program "demos". Now, kids with computers read wikipedia, type up their homework in a wordprocessor, keep in touch with their friends and all sorts of pointless stuff like that - what's the world coming to!
–
Steve314Jun 16 '11 at 11:51

1

+1, 12 is more than old enough to start real programming. No point messing around with play play languages. Just get stuck in and help out with the fiddly parts.
–
user23157Jun 16 '11 at 12:32

1

@vines. I was being silly. Since GOTO means "go to" in english, I was alluding that perhaps "GOSUB" meant "go sub" in english, where sub was... nevermind.
–
Christopher MahanJun 16 '11 at 17:43

As someone who has spent a fair amount of time teaching programming to children, I would highly recommend working with him through the book Learn To Program, by Chris Pine. http://pine.fm/LearnToProgram/

The long being that he learns to program on something easier (preferably in java so he can transfer that skill) that does not require learning a framework just to learn the basics fof loops, conditioning and that basic programming stuff. It has the advantage of giving him skills for the long haul but being very exhausting and not seeing results for a while might mean he will give up quite fast.

The short one is more taxing on you, if he has an idea of what he wants from the app to do, you can sit along with him and help him throughout the process, it's a much faster proccess that means he'll have something he can see (and show) in a short time but it will be tough on you and can introduce some reverse learning (learning how to attach an event to a gui before writing his first loop).

Kojo is a learning environment for kids that uses Scala (which is like Java, and Scala itself can be used to write Android apps [see the writing and work of Michael Galpin for more on Scala and Android]).

Let him do Android, but make sure he has a few good books and/or websites that he can copy-paste examples from.

That's how I learnt basic (started at 7, shifted to c++ at 13).

With something more complex like an Android app, it's invaluable to have a big set of example programs that you can change and alter.

Also, I'd recommend to have him work more with graphical games/apps rather than database:y stuff, as visual stuff is more interesting, easier to grasp and less cluttered with abstract concepts and various thought traps.

You can code, debug and compile simple things directly on the phone with the minimum of fuss. Phone keyboards obviously make this annoying for anything but the simplest of programs, but I've done far more on the phone than I would have expected.

You can code in a variety of scripting languages: python, lua, perl, Javascript, rhino, JRuby, Tcl, beanshell. (I'd go for lua or python as great easy to learn languages).
You can move him onto a proper IDE and more comprehensive language once he gets bored of popping up "hello, world" notifications and making his phone say rude words aloud.

Kids get frustrated or bored quickly and need a constant motivation.
Therefore what you want is a quick feedback loop between writing and seeing effects.
But you don't want to lock them in a dumbed down, limited environment.

My personal advice is to learn Ruby. You can write Ruby programs without knowing a thing about classes (or even too much about types). It takes away all the noise that beginners have to just accept to get started at all.
Also, the IRB (a REPL for Ruby) makes it easy to play around with. No need for compilers or even IDEs.
Unlike Alice, Ruby is an actual general purpose language. He can go down this road as long as he wants to, tackling any task (except some really performance critical things).

With Ruby installed and a guide in hands, he needs something cool to play with.
I'd recommend Shoes:

very easy to use. concise. descriptive.

rich in features. you can place all common controls, load images, draw lines, animate things, play sounds and videos.

splendid manual. when downloaded, you can view it within a bundled viewer that allows to directly run all code examples.

Rubygems offer a great centralized way to download existing libraries. For example persistent is a great straight forward way to store things. With that and shoes you can actually build some really nice apps (that are cross platform on top of all).

I think it's a great way to start programming, without all the clutter that more "conventional" languages have. Dealing with all that mess is hard when you're completely fresh and it takes up a lot of space in your head learning and following incomprehensible rituals. Without this burden, you can focus on programming, which is ultimately the only way to learn programming (and thereby understand the meaning of all that mentioned clutter).
With the approach I suggested, your son will build his first applications within weeks. He only needs to take apart some of the shoes demos and play with them.
Once he's got a feel for programming, for control flow, for reading/customizing code, you can throw him onto Android, assuming he still wants that.

What about the Android app inventor? It doesn't require any programming skills and would help him develop the necessary logical thinking skills and processes involved in programming, as well as allowing him to create something usable quickly. Once he reaches the limits of the app inventor, then he could move on to Java.

This app has the ambition to have a small feedback loop with a complete and full paradigm language. It's goal is to learn progressively programming through actual great languages features and be as closed as possible with industrial standards (c / java).

The paradigms are : imperative, functional, object and aspect.
The features are : in app tutorials and language reference documentation, DEBUGGER (the only app to have a true debugger in the store at the moment), STEP BY STEP (idem. Used to understand where the program goes in real time), Scope inspector (And what is the states of the variables)....
For more details, see http://caron.yann.free.fr/algoid/features.php