Best Introduction To Programming For Bright 11-14-Year-Olds? 962
firthisaword writes "I will be teaching an enrichment programming course to 11-14 year old gifted children in the Spring. It is meant as an introduction to very basic programming paradigms (conditions, variables, loops, etc.), but the kids will invariably have a mix of experience in dealing with computers and programming. The question: Which programming language would be best for starting these kids off on? I am tempted by QBasic which I remember from my early days — it is straightforward and fast, if antiquated and barely supported under XP. Others have suggested Pascal which was conceived as an instructional pseudocode language. Does anyone have experience in that age range? Anything you would recommend? And as a P.S: Out of the innumerable little puzzles/programs/tasks that novice programmers get introduced to such as Fibonacci numbers, primes or binary calculators, which was the most fun and which one taught you the most?" A few years ago, a reader asked a similar but more general question, and several questions have focused on how to introduce kids to programming. Would you do anything different in teaching kids identified as academically advanced?
Snake Wrangling for Kids (Score:5, Informative)
I know several young people who've got hooked on programming because of this free book: http://www.briggs.net.nz/log/writing/snake-wrangling-for-kids/ [briggs.net.nz]
There are versions of the book for Windows, Mac, and Linux. Although the book targets kids as young as 8, it would still be able to speak to an 11 or 12 year old I think.
Objective C (Score:4, Informative)
UML? (Score:2, Informative)
Instead of teaching them how to write a dummy program in a particular language, it is by far better idea to lay the foundation work by teaching them how to design and formulate a solution to a particular problem in a logical, concise, and efficient practice. Being able to diagram out an idea, condense it into a formula, and then simplify will be much more useful than knowing how to write hello world in one particular language. In a sense, you would do them the favor of prepping their minds to be able to handle any language their future employer will throw at them.
Alice? (Score:5, Informative)
I would judge how quickly those concepts are being integrated and then move on to an easy-ish language like BASIC.
Re:C# is the best alternative... (Score:3, Informative)
I'll tend to agree with you, at least as far as the free IDEs go. However, I'd recommend exactly what *I* did when I was that age that got me my start.
Sam's Teach Yourself C++ in 21 Days by Jesse Liberty is a fabulous book that I still (ten years later) use for reference on occasion.
C# is good, but you miss out on a few things that I think are important concepts for budding programmers to learn, the most important of which is memory management.
Try Python. (Score:4, Informative)
Scratch (Score:5, Informative)
Re:Look at POV-Ray. (Score:3, Informative)
PostScript (Score:4, Informative)
I recommend PostScript.
For kids, PostScript has the advantage of nearly instant gratification, because it allows them to draw graphics quickly. It has loops and conditionals. It uses stacks and variables and functions.
All you need to get going in PostScript is a text editor and a PostScript to PDF converter. On a Mac, it's built in. On Windows, I use GhostScript in CygWin and run ps2pdf, just like I would on Linux. Alternatively, Acrobat Distiller should do the trick.
wikipedia (Score:5, Informative)
I (and others) wrote a good wikipedia page on this topic
http://en.wikipedia.org/wiki/Educational_programming_language [wikipedia.org] . I'd look at this list
I personally love and can recommend Alice http://www.alice.org/ [alice.org] and had a great deal of success with my daughter with this.
LOGO and LOGO for Legos (Score:2, Informative)
Re:LOGO! (Score:4, Informative)
Squeak Smalltalk (Score:2, Informative)
http://squeak.org/ [squeak.org]
It's not just the language, it's the whole dynamic multimedia environment. It's great for adults; it's perfect for young'uns.
Python (Score:3, Informative)
It uses language as close to natural as I think a programming language can. It also forces proper indentation, which, as we all know, is very important for readability. It's also a scripting language that is very useful in RAD. All in all, it's a very good first language for those that don't want a C, hair pulling out, first experience. It also runs pretty much everywhere. Also, if you want to do graphics and/or games, there's Tkinter, PyOpenGL and PyGame.
Happy Hacking!
Scratch is a programming language for kids (Score:4, Informative)
Re:JavaScript (Score:2, Informative)
Debugging js with firebug is not so bad.
Libraries like jquery, mootools etc fix most compatibility issues.
Javascript has design flaws but it is a much better language than most people seem to realise.
As an introductory language it has a lot to recommend it. c-like syntax. real world, not a toy language etc.
Re:Lego Mindstorm (Score:5, Informative)
I would not recommend the default graphic programming language for 11-14 year-olds, however. There are a lot of third part languages [wikipedia.org] you can use to program it, which not only allow you to do more, but also will be more educational and feel less like a toy to the kids.
I agree with you that programming something like a robot is nice because they get to do something in the real world, but at that age, the kids should really be doing something more than sticking blocks together on a screen.
On a similar note, you may want to try Processing/Wiring. Both are based on Java, so they are pretty easy. Wiring is used in a lot of micro-controllers, so it might be interesting to try that route instead of the Lego kit if the kids are really into it.
Language (Score:3, Informative)
Something With Immediate Visual Feedback (Score:3, Informative)
The problem you're going to run in to with beginning programmers is that they have to learn the environment as much as the language. I remember back in the day we had to adapt to an assortment of editors and operating systems. To an extent the lack of choices in this arena is going to help you out here. I'm assuming kids these days have some computer experience coming in to your classroom, too. If that's not a safe assumption, you might consider covering how to operate a computer first.
You can go with a compiled language like C or... well C. No java? I've tried to explain classpaths to IT professionals with little success. Maybe it'd be easier to a 14 year old. If you do that, you should probably set up the environment and gloss over stuff like building a makefile. It was not uncommon for our professors to hand us a cheat sheet describing how to build and run the code along with the vi cheat sheet. Those languages will be visually more boring than the ones with immediate visual feedback, but they might make it easier to explain what's going on inside the computer.
Check out Robocode (Score:1, Informative)
http://robocode.sourceforge.net/ [sourceforge.net]
Get the to create bots and compete, the language is simple, but can be quite complex as well. There are many samples to play with, and competition always gets the kids going!
Hackety Hack (Score:2, Informative)
Computer Science Logo Style (Score:2, Informative)
Alice/Storytelling Alice or Myro/PyroRobotics (Score:3, Informative)
Alice and StoryTelling Alice [alice.org]
"Alice is an innovative 3D programming environment that makes it easy to create an animation for telling a story, playing an interactive game, or a video to share on the web. Alice is a teaching tool for introductory computing. It uses 3D graphics and a drag-and-drop interface to facilitate a more engaging, less frustrating first programming experience."
Thank you Randy Pauch. We miss you.
Or try
Myro [roboteducation.org] using Microsoft Robotics Studio
or Pyro [pyrorobotics.org] which was the non-MS precursor to Myro... program bots in Python with either real bots or simulation.
Either way, the graphical environments and real bots give kids a great way to SEE and TOUCH their results, which is more how they learn. You can cover all the important software constructs (variables, loops, events, data structs, etc) and avoid some of the abstract conceptualization required in more conventional languages/applications. They will learn the concepts through doing & using them. Then once they are hooked, they can dig into other languages.
Works great for middle school & college kids.... Pyro's got years of track record teaching intro to AI - to liberal arts majors!
Re:Python (Score:3, Informative)
I second the recommendation for Python.
Python will let you focus on the fun and interesting parts. Compare "Hello, world!" in C vs. in Python; in Python you jump right in and print something, whereas in C you need to declare your main() function and import before you can do anything.
I recommend you grab Python 3.0 and use that to teach the kids. It's Python 2.x with a few sharp corners knocked off. For example, integer division is now unsurprising:
print(1 / 2) # prints "0.5"
In older versions of Python, (1 / 2) evaluates to 0 (just like C, C++, Pascal, Ruby, etc.). In recent 2.x versions you can get the new behavior if you want it, but it is not the default.
Here is an essay about why Python 3.0 is better than Python 2.x for teaching.
http://www.comp.leeds.ac.uk/nde/papers/teachpy3.html [leeds.ac.uk]
P.S. I know that Ruby fans probably think Ruby would be a good choice for teaching. IMHO Python would be a better first language. However it would not be unreasonable to offer Ruby in an advanced class. IMHO, Ruby is not as straightforward and tidy as Python, and it would be needlessly harder for an introductory class. No flames intended, YMMV.
steveha
Silly Rabbit, C Family Languages Aren't for Kids (Score:3, Informative)
I've been following along this semester's CS61A Lectures by Dr. Brian Harvey out of UC Berkeley (audio and video podcast). He devotes two lectures to a 20 some year old videotape of Alan Kay talking about the coalescing of OOP principals in SmallTalk. Kay makes an important point: at different ages we learn differently. He also shows kids doing clever things with drawing and computer animation and they do it by writing programs. Look for Sept. 12 and 15 [berkeley.edu].
I also found a book from Apress "Squeak, Learn Programming With Robots" which I think is very good, once one gets over the disappointment that the robots are graphics producers and not metal crushing monsters or lovable rogues, a la Bender Bender Rodriguez. Author: Stephane Ducasse. ISBN 1-59059-491-6
Re:wikipedia (Score:1, Informative)
I taught a summer camp for 8-10th graders using ALICE, and while it generally worked out well, there are a lot of weird bugs and limitations to it. The next version is due out soon, and is reputed to be much better, but there are frustrations with Alice without experienced help around.
That said, we did have kids making choose your own adventure or other games after just a few days.
Alice (Score:3, Informative)
I have found Alice (www.alice.org) to be a great introductory language for this age group. Depending on how quickly them come up on it, Ruby would be a great follow-on (assuming they have some experience with HTML, so they can use it with web apps).
Jordan
Re:Use Alice (Score:3, Informative)
Think Python (Score:2, Informative)
May I suggest Think Python, [greenteapress.com] which originated as a book written for middle schoolers.
Originally it was called How to Think Like A Computer Scientist: Learning in Python, written by one high school teacher for Java, and translated to Python by another teacher. A collaborative project resulted in the present volume, which is being published in hard copy by Cambridge University Press, but the linked page has a free downloadable PDF.
Written for kids and partly by kids, I think this volume might fit the bill. It's also free, just like Python itself.
Did I mention the book is free? Free?!
Lego Mindstorm supports multiple languages (Score:3, Informative)
Mindstorms is far from being a dead end toy and is used in many university programs too.
Robotics is an excellent way to learn about programming. You see real stuff happen, not just pixels on screens. You see the algorithm actually working. A bug is impressive ... crashing debricking robots make you really think. My kids (and I) have two Lego NXT sets and one RCX set. We build our own sensors too.
Re:HTML (Score:1, Informative)
Writing words in a text editor to produce a result is programming.
No, it isn't. If that's what you think programming is, you don't have the knowledge to answer the OP's question.
Re:Close to natural language is best (Score:1, Informative)
Lisp.
Agreed, and so does the student in the following article: http://www.trollope.org/scheme.html
Re:Mod parent up. (Score:3, Informative)
Re:PHP? (Score:2, Informative)
Then why not:
print "Hello world"
Python would be great choice. Procedural could lead right into OO programming. Functional programming could be touched on as well.
The greatest advantage to python is how similar to English it is. When 'while a equals b print c' involves swapping only a single word for a symbol and adding a colon:
while a == b: print c
the students wouldn't feel like they where learning a new language, just a new way to express one which they already knew. Using a language which has an interactive environment would also be a plus since code the kids could quickly test code they write. Also, using a dynamicly typed language would remove the kids from having to deal with type specifics. The kids don't need to learn why a number is anything but a number in an introduction to programming course.
Re:Java? (Score:3, Informative)
Python and Ruby are pretty popular and far from weird. Logo was designed for kids, and many of us have fond memories of using it as kids, so it isn't odd that people recommend it.
Java is actually a really poor choice. Java started as a language for set-top boxes but it made it big time because it was a pretty successful attempt to address the concerns of large-scale commercial software development in the late 1990s:
Those are just the warts that come to mind right now. The worst thing about Java is that its warts and oddities can only be explained by saying, "You'll understand someday when you have to work on huge software systems," which to kids sounds the same as, "You'll understand when you're older," the classic parental cop-out.
I think for kids it's better to use a language based on a clean set of abstract concepts, because when a kid asks "Why?" you want to be able to give him an answer that he can grasp without having any experience of large-scale software engineering. Otherwise you're just teaching him that he'll never understand the reasons for things, and the most important decisions are made by people who know better than him. That's not the right lesson to teach a kid, unless you want him to grow up intellectually passive and easily controlled.
Re:LOGO! (Score:4, Informative)
Multicore (Score:3, Informative)
I might as well make the silly claim that "the inability of any true functional language to have any side effects whatsoever, makes FP utterly useless". You made it sound like OO can not be run in parallel and I made it sound like a fact that functional languages can never have any side effects. I do not doubt that OO languages could do with some new ideas, but there is no need for this type of FUD.
The linked to article suggest the use of F# or Scala. Don't get me wrong, both seem like fine languages to me, but they do allow you to reuse object oriented code in your new FP program (you can access
By redefining that all the "dirty" stuff resides in OO-land and then to continue to actually use those OO-components won't change anything. You might as well define a new block-type in OO-languages where you say:
stuff in here can be run in parallel and is not allowed to have side effects. Then you let the compiler/verifier ensure that this is the case and that you can really take advantage of muliple cores.
How is it with Monades? Are they blocks of the program that can have side effects?
FP has brought a lot of good ideas, but I can not help but feeling that a lot of FP FUD is going on right now.
StarLogo TNG, then Python (Score:1, Informative)