What is the best programming language for a child progressing from Scratch?

Someone asked me what is the best programming language for a child to learn after starting (and having success) with Scratch.

Scratch is a visual programming language which actually runs on Smalltalk, though its users do not need to know this. Scratch 2.0 seems to be written in Adobe Flash so you can create and program projects in a web browser. As far as I can tell though, there is no obvious and natural progression from Scratch to a code-centric programming language.

I guess the first answer is not to move away from Scratch until you need to. You can do a lot with Scratch, as the many shared projects demonstrate.

Still, I agree that it makes sense to learn text-based programming before too long. What is the best one for a child to learn, not necessarily with computer science or a professional career in mind, but just to take the next step and create some cool games and applications?

I find myself leaning towards Microsoft’s C#. The reason is that there is a capable free version and  you can add XNA Game Studio for game development. C# is an excellent language and has some family resemblance to other languages including C, C++, Java and JavaScript, and Visual Studio is a strong IDE that is perhaps more approachable than say Eclipse or Netbeans.

Snags with C# are that Visual Studio only runs on Windows, the language is proprietary to Microsoft (though Mono is free and open source) and it is not ideal if you want to run on the Mac, or Google Android or Apple iPad.

That said, I could also make a case for Java, or JavaScript, or Python.

I would value suggestions though: what would you recommend to a teenager?

Related posts:

  1. Visual Programming is back: PopFly, Pipes, Scratch
  2. Apple’s Swift programming language: easy coding for OS X and iOS at last?
  3. Programming language trends: Flash up, AJAX down?
  4. Don Syme on F#, Microsoft’s functional programming language for .NET
  5. Anders Hejlsberg on functional programming, programming futures

8 comments on this post.
  1. Jonathan Creamer:

    Personally, I started with Html and JavaScript. These two things got me in the mindset of writing programs feel like, and it is easy to see the results on any machine since they both run in the browser and can be built in notepad without any fancy compilers or IDE’s.

    I second the motion on C#, or C++ next. C++ helps you understand the foundation of OO programming, C# however would be the easier of the two to understand, IMO.

  2. Michael Washington:

    I make the case for C#. Visual Studio offers the best environment for programming and there is no way I would wish any of the other sub standard development tools on any young person I cared about :). Learning C# will allow a person to understand any of the other C based languages. I feel that C# is easier, way easier than the other C based languages.

  3. Dev{eloper} Stonez:

    Learning Lua with its a simple but yet very powerful syntax is a joy. It supports interactive, scripting, OOP and functional programming with minimal (Pascal based) language syntax. Being used quite heavily for games scripting its also a good context. Take a look at Roblox for how easy is to code games in Roblox/Lua; look at this one for additional resources Using Roblox/Lua as an educational programming language. The main Lua docs/books are located here.

  4. Phillip:

    C# is not proprietary to Microsoft (though, they are pretty much the only ones to provide tooling, aside from the Mono Project, so it can certainly look like it’s proprietary to MS); it’s standardized as ECMA-334 and ISO/IEC 23270:2006:


    However, what about scripting languages, like Python or Ruby? They allow for quick results, without having to deal with a whole IDE. All that’s needed is a text editor (Notepad will do on Windows), and the interpreter.

    After all, with all the “magic” of an IDE, confusion can arise, as my experience with fellow college students that never programmed before has shown me. Of course, a teacher’s presence simplifies many a thing, but why not lower friction from the start?

  5. Andy:

    I think there’s a big leap between a GUI / flow driven language like Scratch, and a strongly typed OO language like C#.

    Static Void Main is not a beginners concept.

    Thinking that Small Basic might be a good bridge…

  6. invarbrass:

    I’d recommend Python. Increasingly around the world Python is being used to teach first-hand introductory courses in programming. The syntax is succinct and beautiful, easy to grasp (almost) and funt to use.

    You can’t go wrong with Python.

  7. tim:

    Many thanks for the comments. I should also add these from twitter:

    @voidspace haha, guess what answer I’d give to that… 🙂 the number of books for kids / young adults on learning to program with Python says I might have a point tho.

    I asked about game programming:

    take a look at pygame – or other bindings to opengl. Several of the books for kids use pygame I think. Hello World!, Python for Kids and Invent with Python are all books / blogs dedicated to Python for kids…

    and from @stuxstu

    small basic (http://smallbasic.com) or machine code… 🙂

    and from Robert Hanwell on Google+

    probably perl just for the basics? Array and List are good to learn in perl then some sorting stuff after that.

  8. gary:

    I would suggest as others have done going the scripting route.

    Why? first the ones mentioned lua/python are truly cross platform. C# is ecma but support on other platforms is trailing. Secondly, instant gratification, with a script you can make a simple change and run. No lengthy build, compile test cycles. And why would you want to offer something like a bloated IDE like VS? First its windows only and second you need to learn the .net framework (not all of it granted) to do anything useful ui related.