Take the 2-minute tour ×
Programmers Stack Exchange is a question and answer site for professional programmers interested in conceptual questions about software development. It's 100% free, no registration required.

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?

share|improve this question

closed as not constructive by gnat, Walter, Glenn Nelson, Thomas Owens Feb 12 '13 at 15:48

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.

+1 for adorableness –  Hannes Jun 16 '11 at 11:00
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 Etherton Feb 12 '13 at 15:15
possible duplicate: programmers.stackexchange.com/questions/9621 –  Walter Feb 12 '13 at 15:35
To start with, try AppInventor. Highly recommend it to start off with –  Jatin Feb 12 '13 at 16:04

10 Answers 10

up vote 17 down vote accepted

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.

share|improve this answer
me too. I didn't know GOTO meant something in english. Still trying to figure out GOSUB. –  Christopher Mahan Jun 16 '11 at 8:26
@Christopher Mahan: GO SUB - go (to) subroutine :D –  vines Jun 16 '11 at 11:19
@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! –  Steve314 Jun 16 '11 at 11:51
+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. –  user23157 Jun 16 '11 at 12:32
@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 Mahan Jun 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/

share|improve this answer

I believe there are two ways - the fast way and the long way.

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).

share|improve this answer

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]).

Kojo: http://kogics.net/sf:kojo

I will be doing some lessons on Kojo in the weeks to come, here: http://young-programmers.blogspot.com/

share|improve this answer

Basic4android can be a good way to start with Android programming. It is an IDE similar to Visual Studio and the language is similar to Visual Basic.

share|improve this answer

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.

share|improve this answer

Scripting Layer For Android (SL4A) springs to mind.

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.

share|improve this answer

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).

There are (at least) two great beginner guides to Ruby:

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.

share|improve this answer

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.

share|improve this answer

Actually I am programming a little app for Android platform called Algoid.

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

share|improve this answer

Not the answer you're looking for? Browse other questions tagged or ask your own question.