Possible Duplicates:
What is the easiest language to start with? [1]
What are some recommended programming resources for pre-teens? [2]
My son is 11 years old and he would like to learn a programming language. Of course his primary goal is to develop some (simple) games.
Do you know of a programming language that is suitable for this situation?
Learning to Program with Python.
Copyright © 2007. All Rights Reserved.
“Snake Wrangling for Kids” is a printable electronic book, for children 8 years and older, who would like to learn computer programming. It covers the very basics of programming, and uses the Python 3 programming language to teach the concepts.
[1] http://www.briggs.net.nz/log/writing/snake-wrangling-for-kids/Scratch [1]. Don't underestimate it just because it's drag-and-drop. MIT uses it for their intro computer science class.
[1] http://scratch.mit.edu/Have a look at Small Basic [1] from Microsoft's DevLabs. It is designed as a simple (.Net based) language and comes with its own editor with intellisense. It also has an option to "graduate" to Visual Basic.
A description from the DevLabs site:
[1] http://msdn.microsoft.com/en-us/devlabs/cc950524.aspx
- Small Basic derives its inspiration from the original BASIC programming language, and is based on the Microsoft .NET platform. It is really small with just 15 keywords and uses minimal concepts to keep the barrier to entry as low as possible.
- The Small Basic development environment is simple, yet provides powerful modern environment features like Intellisense™ and instant context sensitive help.
- Small Basic allows third-party libraries to be plugged in with ease, making it possible for the community to extend the experience in fun and interesting ways.
I started with Visual Basic 6 when I was 11. Then moved on to some pure BASIC because that was all my own computer had. Although I'm no fan of Visual Basic today, the fact that I could drop a button in a window, click on that button, write some code for just that button etc. made it a bit easier to understand what was going on.
A good list is here on Wikipedia [1].
Also see many related SO questions, especially this one [2]
[1] http://en.wikipedia.org/wiki/Educational%5Fprogramming%5FlanguageHow about Processing [1]?
It's not really aimed at games, but more at creating interactive visual widgets.
It's basically simplified Java, and right off the bat you have visual feedback - here's a complete sample program that will draw a multicoloured line with your mouse:
int oldX;
int oldY;
void draw()
{
stroke(random(255), random(255), random(255));
line(oldX, oldY, mouseX, mouseY);
oldX = mouseX;
oldY = mouseY;
}
The Processing IDE gives you a very easy way of managing "sketches" (programs) and a means of publishing your programs as web pages with applets. Also the built-in examples show how you can get some pretty cool effects with just a page or so of code.
[1] http://processing.org/I like Alice [1] a lot. You can do pretty cool things using it.
The Blender Game Engine [2] is really interesting too, it's a bit more difficult but you can create amazing games.
[1] http://www.alice.org/You have the opportunity to start him out right. Start him with Lisp.
I would try python. It's easy to follow and intuitive, without a lot of magic or mystery. Also, it's one of the top languages in the industry - might as well learn a job-maker :)
Whatever you choose, kids need immediate feedback. Myself, when I was 11, was amused by the simplicity of Qbasic's PLAY command (plays musical notes using the PC speaker):
PLAY "CEFG."
Later I learned the drawing commands, and then I built my first games. So keep in mind:
If those 3 things are easy to do, it will keep him interested.
My son started learning Hypercard when he was 7 years old, using a 2-inch think book called the Hypercard bible. At age 11, your son should be capable of handling a reasonably powerful programming environment as long as it doesn't require too much domain knowledge. Either C or C++ would be too advanced for that age.
Java is a possibility if you use a teaching environment such as BlueJ [1] to avoid the hard bits until later. However, if he is thinking of graphical games, then this framework might not provide enough support for him.
Another, even more scaleable environment is Squeak Smalltalk [2], but the risk with that is that as he gets more advanced, it will be beyond your ability to help him unless you already have a grasp of Smalltalk, are or good at learning new languages.
A nice balanced choice is Python with the PyGame library. You have an object-oriented language so that he will learn concepts that will be useful later in other languages, and the PyGame library supports writing some fairly sophisticated games. In addition, Python can be used to produce binaries with everying in one .EXE file to share with friends. Have a look at the PyGame site [3] where you can find many sample games that have been created for the many PyGame programming contests. With 370 arcade games on offer, he should be able to find something interesting and perhaps begin by modifying it rather than starting from scratch.
[1] http://www.bluej.orgInform [1] is a domain-specific language for writing text adventure games. Inform source code looks almost like a script for a play.
If your son likes reading, I can't think of a better first programming language; if he's more visually inclined it might not be such a good choice.
[1] http://inform7.com/I coulda done python and pygame at age 11.
I was a QBasic kid myself, the simpler python constructs are probably even easier, and it scales upward to harder concepts.
As a programmer, if you want to develop the skills on your boy then I would recommend you teach him the Scheme language. its most popular implementation, Dr. Scheme [1] has very detailed documentation for learning and game programming using the functional paradigm. If he learn Scheme now, C and Java will be a breeze.
[1] http://www.plt-scheme.org/Lego NXT-G, the graphical Labview-based programmer included with Lego Mindstorms is a great product. You can use it to develop trivial games on the NXT device, but it wouldn't be suitable for learning general-purpose programming (or PC-based game programming).
I'd say NXT-G is a good starting off point for learning concepts in an engaging environment before going to something more text based.
Now that Conrad Barski's Land of Lisp (see my review on Slashdot: http://books.slashdot.org/story/10/11/03/1238213/Land-of-Lisp) has come out, I definitely think Common Lisp is the best language for kids (or anyone else) to start learning programming.
Between Land of Lisp, David Touretzky's Common Lisp: A Gentle Introduction to Symbolic Computation (http://www-2.cs.cmu.edu/~dst/LispBook/ really great book for people new to programming, available for free) and The Little LISPer (3rd edition, editions four and up use Scheme) you have three really great resources to get started.
Lisp's syntax is a great advantage because it is so simple to learn and has so few special cases. The interactive, iterative development style combined with full late-binding and reflection means you can build programs in parts and add to them as you go, and you always have the ability to look at any part of your program and its state to find out what it's doing/what's wrong. The HyperSpec and Common Lisp The Language are two of the best programming language reference manuals ever written.
The best parts about Common Lisp is that it's a language that's hard to outgrow and it makes difficult things easy. One of the chapters in Land of Lisp explains HTTP and HTML and has you build a basic web server. That chapter is only 15 pages! There's tons of ideas in the language, and because you're not restricted to a particular programming paradigm, you're always discovering better ways of doing things and developing a personal style.
There's a pretty active Lisp game development community at http://lispgames.org/
Depends on the kid. :)
But eToys [1] might be a good start, it at least makes it simle to develop simple gaines. Although eToys is more or less a point&click language.
It might also depend on the kid's knowledge of English (if it isn't its native tongue).
[1] http://en.wikipedia.org/wiki/Etoys%5F%28programming%5Flanguage%29I have heard some good things about Phrogram [1]. It is a simple language, designed for kids and it targets the .NET platform.
[1] http://en.wikipedia.org/wiki/PhrogramGive him C#, seriously, and don't be suprised when he knocks up code in few years of better quality than majority of dump out there.. Many people around me were at that age already picking at C and various asm dialects, they all have kids and love looking at them ripping it apart so quickly although gaps to fundamentals become very obvious (just like it is with pure orange Java grads)..
C# makes it too easy, a kid just eats it especially with VS2008 and its designers and popular refactoring tools. Try it out and you'll be shocked how quickly he'll rip through it.. what else to expect..
Don't let him/her program games straight away but do encourage him to analyse other people's code (as well as simple game code, XNA and friends say, many libs out there).. to go through what he thinks are interesting portions.. Demos will attract him too and is the best way imho. API or framework is not that relevant at all and by the time he finishes high school it will be a new one anyway, whatever v10 CLR and v15 Java and v8 Google shove down the throat of goats..
Btw, there are 15 year olds working through git and managing pretty complex builds of C and C++ tools and sure that's an extreme example.. but don't underestimate their capacity and ability to take on complexity, it's incredible..
I would have thought JavaScript would be a good language for him to start out with. The language is compact and safe (can't crash the operating system), and runs in a web browser. What's more, JavaScript is a nice language to learn.
Jeff seems to think you should get kids started with "C++ GUI Programming" [1]
[1] http://www.codinghorror.com/blog/archives/001242.htmlIf you're looking for a real-world programming language that can be understood by an 11-year old, Ruby is a good option. Toy languages are cool, but limited in what they can accomplish. At 9, I was copying BASIC programs out of magazines. By 10, I was writing in C, because I'd gone way past the limits of what BASIC could accomplish. If I had had Ruby back then, I would have been very, very happy.
I highly recommend Chris Pine's Learn to Program [1]. He also has an online tutorial [2] that contains much of the same content as the book.
I would, however, recommend not pushing your kid into programming if he's not showing an interest in it. Just because you love it doesn't mean your kid will.
[1] http://pine.fm/LearnToProgram/Try VisualBasic Express. It's a simple language that will teach him concepts he will need for lower level languages. It's also free.
The language itself isn't important; kids are capable of amazing things where they're interested and motivated. The challenge is finding something that allows them to do "cool" stuff with their computer, to spark that motivation. That's why LOGO and BASIC were popular in the 80s, and Hypercard in the 90s, because they targeted the core functionality of the computer on which they ran. Python/Ruby/etc. may be appropriate as a language, but they alone aren't suitable for getting someone interested in programming.
There was a project called Shoes that provided an easy SDK for graphics, media, and web, on top of Ruby. It was designed specifically for kids and casual programmers. Unfortunately it's not around anymore, but was the most interesting and suitable LOGO/BASIC/Hypercard replacement for modern computing that I've seen.
Im posting this through a proxy, because I do not ant this associated with my account. I am 14, and I am very well fluent in c#. I started learning it at 13 through web development
Programs like MIT's Scratch [1] and Microsoft's Kodu [2] are very good ways to teach the fundamentals behind programming without being overwhelming.
Kodu is geared towards developing games on your xbox so this may appeal to him.
[1] http://en.wikipedia.org/wiki/Scratch%5F%28programming%5Flanguage%29I think C# is the way to go (someone already mentioned it, but whatever). I actually am 12 years old right now (no joke) and I'm doing C#, but I started programming at 7, so who knows. C# is quite easy to pick up as long as you can understand some of the most important concepts, but that's why we have Stack Overflow. I was able to do so, and I've done some work for a non-profit, so I think, after a little bit of learning, a kid can really get going with C#.
Now, the kid in question is oriented towards games, so why not try XNA? XNA provides a great design interface (very simple to use - drag & drop!), and once you understand the basics, it is very fun, especially for a kid this age. I really think you should try going the XNA route, and see how the kid feels.
Revolution at http://runrev.com
It's an english like lang based on HyperTalk, though it's grown a lot since the 80's. Runs on Mac, Windows and Linux. VERY easy to learn.
I don't use it much anymore, since it's VERY hard to find developers for. And in the real world it's about being marketable. But it's a wonderful language.
Turbo pascal should be the best choice :)
He is 11 and he is into games. That's a hint. You should get him started in something that will not only be fun but he will learn something. In fact, there are two projects geared towards beginner programmers and/or those who are into games and would like to start programming.
Karel programming: This is use by Stanford university. In fact, all comp. sci students must use this before jumping into Java or Scheme courses. This is very beginner. If you wanna look at the environment, the link below is for the course where Karel is introduced to the students:
Alice programming developed at CMU. In fact, the whole concept of Alice project is to teach programming to kids while making it fun at the same time. There have also been books published on the subject. You can search for Alice on Carnegie Mellon University site or or google it.
Karel Programming - introduced to Stanford students [1]
[1] http://www.youtube.com/watch?v=0LoKDDRlfZc11-year old kid is old enough to tackle any language.
I'd recommend Scratch, Logo and similar for kids up to, say, 10.
I'd suggest trying out some of the tutorials at http://squeakland.org/tutorials/
Squeak [1] is an implementation of Smalltalk with an emphasis on interactive graphical programming.
The squeakland tutorials and material has been designed to help teach maths and science to children using interactive programming... and sometimes they use games programming to motivate participants.
[1] http://www.squeak.org/I was glad to see someone recommend Squeak. It is Smalltalk, and is easily graspable by anyone -- anyone with a sustaining interest, that is. And it comes with games. It is the only programming language my son was exposed to at roughly the age of 11, and it kept him busy for many a happy hour while I toiled away in C++ and enjoyed myself with ruby at the office. He's not interested in programming now (which I think is a fine thing -- it's way too time consuming unless you have a real bent for it), but it was accessible at the time, and it IS Smalltalk, which we all know is foundational in much the same way as Scheme or Lisp or even Fortran.
I remember when my nephew got really interested in programming, just about that age, when he gave up model railroads for PC's. He'd be embarrassed to be reminded of this now, but he developed the idea that what he really needed was a Fortran compiler. But no one really agreed enough to get him one! Too bad, but I think now, ten years later, that when he isn't using Fortran he uses Mathematica in his daily work. Ha ha on all of US!
Today, for a game, I think a good option would be Objective C for the iPod touch. Sad to say it is not really open, but it is interactive in a way that ought not to be ignored by someone who wants to write games for the future, and the SDK is free although you do need an Intel Mac. There are aspects of interacting with the iPod/iPhone that are a bit of a chore, and if that seems to pose too much of a barrier (not to mention the $100 to get your program onto the device), then there is nothing wrong with coding Actionscript 3 for Flash to get going with games. The SDK is free and downloadable and although it does not have multitouch support in its release version (fairly essential for really nice interactive gaming), it eventually will, and AS3 is a modern enough language, having the concept of interfaces, to be able to get across some essential ideas of design patterns. And the virtual machine (the flash player) is everyone now, even Linux.
The advice to learn Ruby or Python seems unnecessary. These are both wonderful high level utility languages with loads of opportunities to pick up first class concepts of object orientation, generation of executable code, full feature libraries and first class objects themselves, but he will pick them up himself as necessary. I have found the documentation for both to be quite thorough, and the documentation for Ruby to be more useful on a day to day basis. I am thinking in particular of the pickaxe books and the fact that the libary modules and their members were rendered into a windows help file for easy searching. Google, though, have chosen Python, so what do I know?
I'm posting this as myself, rather than commenting on someone else's post, because I don't have enough cred points or whatever the points are called, in order to vote something up or down.
Lots of great choices: Inform 7 [1], Scratch [2], Ken Kahn's ToonTalk [3], Logo, DrScheme [4], Alice [5]. DrScheme will teach the most principles but is limited pretty much to 2D graphics-style games. Inform 7 is brilliant for text adventure games, but it is deep and wide and probably beyond the cognitive development of the typical 11-year-old. In ToonTalk, every program is a 3D animation—and it teaches concurrent, distributed programming! Way cool.
Have fun!
[1] http://www.inform7.comHackety Hack [1] is a free Ruby-based environment aiming to make programming easily available to beginners, especially teenagers. Its driving force was an essay titled The Little Coder's Predicament written in 2003 by why the lucky stiff (AKA _why). It argued that programming isn't as readily available as it was in the Commodore 64 days, and that something should be done about it to help beginners tinker with their computers.
[1] http://en.wikipedia.org/wiki/Hackety%5FHackWhen there are 11 year old network admins out there [1], I wouldn't worry about picking an easy or starter language. Kids pick up things fast if they have the interest. If you give your child a mainstream programming language he will be much better off after learning it (and finding a lot of code samples online for further discovery) because then he can start immediately applying it. Too often we try to dumb things down for kids.
Edit: So my vote of languages to start with are either C# (Microsoft platform) or Java (for other platforms, even Windows)
[1] http://www.networkworld.com/news/2008/032708-netkid.htmlKids can learn anything, if you can teach it.
Do NOT underestimate them.
Start with the language you know best and love.
I started mine with C (18 years ago) when SHE was 4 years old.
She understood pointers before she was 5 and was touch typing before she could write.
She is better than me nowadays and sure has a better job and education than I (works for a bank in the City).
If Blender Game Engine or XNA is worth considering, you should also consider
Unity 3D [1]
It's impressive how much you can do with it without much programming. Also it is much more beginner-friendly than the Blender Game Engine (although this is subjective).
Supported languages are JavaScript (default), C# and/or Boo (Python variant). Note that these are not languages meant to learn programming.
Bonus: Basic version is free (as beer) since version 2.6
Overview on all three here [2]
[1] http://unity3d.com/I can't believe no one has mentioned Lua [1]. It has a simple yet readable syntax, powerful features, and above all Does Not Use Zero-Based Arrays! Great for any young kid learning to program.
[1] http://www.lua.orgBe prepared to try several languages. The write/run/test feedback cycle is more important than the syntax.
With my daughter I did some Logo, then some html/jquery/svg, then some Java, then most recently she's taken to Python. She's not an expert in any of them but each time she had a little interest we sat down and ran some code.
Spend the time talking about their goal and writing a little code that they can play with. It can be a great shared experience if you don't get hung up on details and just make it part of playing. Give up when they get bored and just come back to it another time.
Okay... I am 11 years old, and I can program in C, C++, C#, PHP, Java, Perl, Python, ASP, ASP.NET, BASIC, and pretty much everything else that is used by "real programmers" For example, I would use the win32 API, instead of scratch. So, pretty much any programming language is good for an 11 year old, as long as he has a fairly big brain capacity.
No matter what language you start him on, when you try and discourage bad habits remember to take the effort to properly demonstrate the better methods you're trying to push him towards.
I started on QBasic during my primary school years (not that long after learning to read and write). I made heavy use of goto in my programming, which was discouraged by my father. While I got the message that this was a 'bad' way to code he didn't really do enough to teach me a better way.
It wasn't until many years later, when I was working my way through a QuakeC tutorial for creating a flamethrower that the concept of subroutines clicked. The light just went on and goto became a thing of the past.
Point is, I didn't learn to avoid goto by being told not to use it. I learned not to use goto by learning better techniques.
It would really depend on what skills your child already has. If they are completely new to programming, you might want to look at doing simple web design with HTML or Javascript. It's an easy way to get them to interact with the computer. The advantages are that there's immediate visual feedback of what they are doing and coding errors are easy to spot.
Most kids might be excited at being able to put a dog on the screen that barks or makes a funny face when they click it. That can be taught pretty quickly with HTML/Javascript. Once they are familiar with functions, variables, program flow, etc. should make the transition to a more standard programming language a little easier to grasp.
For starting languages, I would probably start with Pygame or XNA. Pygame is a really good choice because there's not a lot of "overhead" to teach before you can start getting things on the screen. That is very important for beginning programmers. There's also a lot of online resources available for games compared to some other lesser used languages. XNA is another great toolset for quick implementation, but there would be a bit more background needed on the syntax.
Depends on the kid..... I don't know any languages in which it easy to develop games (except gamemaker script language).. bu personally I'd start with a serious language.. C#, or java, or whatever you use, and actually learn him the basics of programing, if he get it, he will thank you indeed when he'll grow up. if not, nothing happened, search for something simpler.
I've done so with my brother.. and he found his own way to develop games with .net's WinForms :)
At the age of 13 I wrote my own Minesweeper in Pascal (including mouse and cheats). Unfortunately, at the age of 14 I learned how to format my harddrive with int 13.
Definitely your son should try a more advance programming language than Basic. These days, Python is even simpler/popular than Pascal. Give him a computer to play with (including installing operating system and taking it apart) and let him learn by trying.
VisualBasic 6 was great as an introductory language. I used to teach it to kids (mostly simple games like frogger and pacman -type things) in that age range. If they wanted, they would later move to more advanced courses in Java and C/C++. When we had to transition to .NET, it was a little rough at first and it wasn't as teachable.
I still think VB .NET is probably a good choice. The syntax being in plain words (rather than cryptic symbols) seemed to help with beginners. The visual Forms Designer is probably plenty powerful enough for whatever he needs, he can have a nice interactive GUI app up and running in no time. Also, if you set him up with the Express Edition, it's not likely he'll be turned off by a complex IDE (seen it happen with Eclipse).
Microsoft Small Basic [1] is a great environment for learning programming. It's free, and he can get started and work through the PDF documentation...
Once he's mastered that, he can move on to Dark Basic [2].
Finally, he can learn C programming and use the DarkBasic engine's C bindings to leverage the graphics knowledge he'd have at that point combined with a real language.
[1] http://msdn.microsoft.com/en-us/devlabs/cc950524.aspxHow about Logo. In Coders at work the interviewer in the second chapter talked about how you wrote a game in Logo.
One thing that might be very cool for an 11-year old, is iPod Touch programming. While Objective-C may seem a bit heady at first, it is not unmanageable for a young kid if you start out using some game creation frameworks like Cocos2D [1].
The thing that makes it compelling is that's it's something easier to take along with him to show friends what he has done.
[1] http://code.google.com/p/cocos2d-iphone/Take a look at ruby.
Let him play with irb and start with these 3 programs:
first:
puts "hello world"
second:
puts 1+2
third:
1.upto(10) do |n| puts n end
times
, upto
, etc. methods more closely complement the way people (not just children) think. - Justin Poliey
I think a good language would be c#
Python with PyGame [1]. It should allows him to writing game, such like Mario, etc. Perhaps Ruby is more flexible language, but I never used it.
[1] http://www.pygame.orgGroovy Programming Language with GroovyConsole and buy him his first programming book =)
I remember finding BASIC very interesting when I was 11. However, a few years later when computer course came to our school we started with LOGO.
I guess there are many languages like ruby, C#, python which are the BASIC's of today in terms of easiness to get started with. Of course, at 11 years I'd probably stick to the very basics of these languages.
Unlike programs though, I would suppose the examples would not change from my days to today. I'd suppose lesson will still start with simple loops, and be complete with the Tower of Hanoi!
Flash and actionscript. You get visual feedback easily and you can then start to program games with simple onKeyPress methods.
SmallBasic from Microsoft. We use it to teach artists and designers how to make simple games. Some -not I - say the 11 year old would be more advanced.
StarLogo [1]. Mitchel Resnick wrote a whole book ( Turtles, Termites, and Traffic Jams [2]) about exploratory simulation of parallel living systems based on examples coded by students using the language. It's a thin book but interesting from the ALife perspective; I've always wanted to try playing with it (but never had the time).
[1] http://education.mit.edu/starlogo/QBasic? I had a lot of fun with it :)
This past summer I started my 12 year old out with "Game Programming for Teens" by Maneesh Sethi published by Course Technology PTR in 2009 (ISBN - 10:1598635182, ISBN - 13:9781598635188). It uses Blitz Basic [1] which is a bit different from the other suggestions here but it is targeted for game programming which is reflected in its API. He has really enjoyed using it.
The language is procedural. The API is, however, well suited for creating games.
The book does a good job of explaining how to create programs and it progresses nicely from simple to complex. It stats out with character (as in alphabetic) based games and moved on to graphics.
We would recomend it,
Ian
[1] http://www.blitzbasic.com/LOGO. I learnt it when I was 12. It was quite fun then. I heard Alice is pretty good too.
I started on an ancient version of BASIC when I was 10. By 11, I'd moved to Turbo Pascal, and at 12 I was on C++.
Don't under-estimate kids' abilities: if they're interested, they'll learn it :)
I would have to say BlitzBasic [1]. It is very easy to learn and he can get a game up and running in no time. Or he can try darkBasic which is a fun language too. BlitzBasic featured a Book called programming games for teens.
Sample Code:
' drawline.bmx
' draws a cross hair at the mouse position using DrawLine
Graphics 640,480
HideMouse
While Not KeyHit(KEY_ESCAPE)
Cls
x=MouseX()
y=MouseY()
DrawLine 320,240,x,y
DrawLine x-2,y,x-10,y
DrawLine x+2,y,x+10,y
DrawLine x,y-2,x,y-10
DrawLine x,y+2,x,y+10
Flip 'Refresh Frame
Wend
[1] http://blitzbasic.com/Try blender you can make the models and use logic bricks to program them or python you can make any type of game from simple to complex.
I say, don't enforce a language for him... Try to give him choices of languages that he might like, and let him choose which one he likes best... Also don't think that he can't grasp a big language like java or C++, he can... Every language may be appropriate, if he chooses it. I've started using Delphi, when I was 12, and three years later I was grasping a little of C. And I had to do all this single handed, without anyone to tell me which language to use, or not to use.
I am write now 11 and I know C# of the back of my head. I only started this year too. Look up C# for sharp kids on the internet and you can download a free ebook from microsoft because they did create the language. I think it is easy though.I create complex programs in it.
go to www.youtube.com/user/Kidtech101 and you can see my C# videos there
80x6 Assembler. Get them while their young ;-)