Slashdot Mirror


Best Introduction To Programming For Bright 11-14-Year-Olds?

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?

38 of 962 comments (clear)

  1. Snake Wrangling for Kids by caseih · · Score: 4, 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/

    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.

  2. Objective C by Foofoobar · · Score: 3, Informative

    Objective C gives them the ability to build applications quickly and easily using GnuStep or Xcode. If they have iPods, this also gives the them ability to develop apps for them as well. The intrigue and excitement in their ability to do that often will get them excited in developing in other languages.

    --
    This is my sig. There are many like it but this one is mine.
  3. UML? by nobodylocalhost · · 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.

    --
    Where is the "Ignorant" mod tag?
  4. Alice? by SpectraLeper · · Score: 5, Informative

    It wouldn't start with any specific languages, but using Alice and its younger cousin Storytelling Alice might provide a good intro to concepts.

    I would judge how quickly those concepts are being integrated and then move on to an easy-ish language like BASIC.

  5. Re:C# is the best alternative... by HeronBlademaster · · Score: 2, 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.

  6. Try Python. by atomicthumbs · · Score: 4, Informative
    --
    http://pinopsida.com
  7. Scratch by Num6 · · Score: 5, Informative

    http://scratch.mit.edu/ Scratch is very cool, comes with an educational program for kids. It's an mit/ucla project

  8. Re:Look at POV-Ray. by Facetious · · Score: 2, Informative

    I was just thinking of suggesting POV-Ray. In addition to your very valid points, it is also a great way to teach certain math concepts. I once taught math at the secondary level and found that there was a real "Wow" factor associate with POV-Ray.

    --
    Let us not become the evil that we deplore.
  9. PostScript by Colz+Grigor · · Score: 3, 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.

  10. wikipedia by jbolden · · Score: 5, Informative

    I (and others) wrote a good wikipedia page on this topic
    http://en.wikipedia.org/wiki/Educational_programming_language . I'd look at this list

    I personally love and can recommend Alice http://www.alice.org/ and had a great deal of success with my daughter with this.

    1. Re:wikipedia by Anonymous Coward · · 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.

  11. LOGO and LOGO for Legos by BennyBigHair · · Score: 2, Informative

    i got a mild introduction to programming from learning LOGO and LOGO for legos (that may be deprecated by now). anyways, the first 'big' project i did was a Mastermind clone. it taught me the basics of looping, random number application, and how to make use of the mouse.

  12. Re:LOGO! by themba · · Score: 4, Informative

    Seconded. You can't beat designed for the task. It's got an extremely low learning curve, immediate feedback, and lends itself nicely to exploration. And contrary to popular belief, it's not exactly limited. Brian Harvey at UCB has 3 downloadable books suitable for varying skill levels here.

    --
    /t
  13. Squeak Smalltalk by _greg · · Score: 2, Informative

    http://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.

  14. Python by Secret+Rabbit · · Score: 2, 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!

  15. Scratch is a programming language for kids by macz · · Score: 3, Informative

    It was developed by MIT (http://scratch.mit.edu/) and has some cool stuff to keep their interest.

    --
    ...But I digress. TREMBLE PUNY HUMANS!ONE DAY MY SPECIES WILL DESTROY YOU ALL!
  16. Re:JavaScript by shirro · · 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.

  17. Re:Lego Mindstorm by tylerni7 · · Score: 4, Informative

    I remember getting the RCX a few years ago, I think that was probably one of my first experiences programming even...
    I would not recommend the default graphic programming language for 11-14 year-olds, however. There are a lot of third part languages 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.

  18. Language by TheBradshaw · · Score: 3, Informative

    I would suggest Alice http://www.alice.org/. It is a drag and drop interface to a 3D environment. It is FREE and was designed at Carnegie Melon University. I teach high school sciene and have almost zero programming background. I learned the basics in two weeks at a summer workshop at Duke University. The last week of the workshop was a summer camp for middle school aged children. They picked it up easily, enjoyed making worlds, and learned quite a bit about basic programming. Once they learn it, they can easily start exploring languages like Java.

  19. Something With Immediate Visual Feedback by Greyfox · · Score: 2, Informative
    It's very helpful to be able to make a change to the code and see how it affects the application. Good candidates would be Logo, Postscript or Squeak (A smalltalk dialect built for just such purposes.)

    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.

    --

    I'm trying to teach myself to set people on fire with my mind... Is it hot in here?

  20. Check out Robocode by Anonymous Coward · · Score: 1, Informative

    http://robocode.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!

  21. Hackety Hack by __aabvlw4075 · · Score: 2, Informative

    Hackety Hack is designed just for this purpose.

  22. Computer Science Logo Style by ambulatorybird · · Score: 2, Informative

    I recommend Computer Science Logo Style by Brian Harvey, one of the best CS instructors at UC Berkeley. You can get the books for free here (scroll down a bit).

  23. Alice/Storytelling Alice or Myro/PyroRobotics by isdale · · Score: 3, Informative

    Alice and StoryTelling Alice
    "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 using Microsoft Robotics Studio

    or Pyro 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!

  24. Re:Python by steveha · · Score: 2, 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

    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

    --
    lf(1): it's like ls(1) but sorts filenames by extension, tersely
  25. Silly Rabbit, C Family Languages Aren't for Kids by DannyO152 · · Score: 2, 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.

    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

  26. Alice by jordandeamattson · · Score: 2, 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

  27. Re:Use Alice by kniLnamiJ-neB · · Score: 2, Informative

    +1 for Parent. I just finished teaching a semester course in Alice. For their group project, my class made a tank game where you drive your tank around on a map and try to kill the enemy tank. The enemy tank (for time's sake) was run on a series of waypoints, but it detected when you were in range and fired in the appropriate direction. Alice is VERY VERY easy to pick up for non-programmers, and it gets them used to concepts in a pretty friendly way. Plus the 3d graphics gives it a bit more appeal than a console-driven application can. The language is a bit clunky, but rumor has it they're releasing a new version. Bonus: Open-source software!

    --
    Windows isn't the answer... it's the question. NO is the answer!
  28. Think Python by tbg58 · · Score: 2, Informative

    May I suggest Think Python, 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?!

  29. Lego Mindstorm supports multiple languages by EmbeddedJanitor · · Score: 2, Informative
    Apart from the regular Lego language there are a whole host of other third party ports including LeJos (Java) and many others.

    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.

    --
    Engineering is the art of compromise.
  30. Re:HTML by Anonymous Coward · · 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.

  31. Re:Close to natural language is best by Anonymous Coward · · Score: 1, Informative

    Lisp.

    Agreed, and so does the student in the following article: http://www.trollope.org/scheme.html

  32. Re:Mod parent up. by Xaoswolf · · Score: 2, Informative

    You ever see Alice? http://www.alice.org/ Not a language per say, but it teaches you the structure of programming, and you can look in at the code to see what it is doing behind the gui. We used it in a beginners class in SRU once, thought it was kinda neat.

  33. Re:PHP? by bluecrux · · 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.

    --
    "As near as I can figure, the shit is supposed to hit the fan!" -Richard K. Feynmann
  34. Re:Java? by try_anything · · Score: 2, 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:

    • Reliability, for which the language designers chose garbage collection, exceptions, and lack of direct memory access. Those choices are pretty good for beginners, though it's a drag that you have to learn about exceptions right away before you can write any real programs.
    • Easy, manageable deployment. Beginners don't lose anything here. But now it gets bad....
    • Easy no-brainer mixing of code from different sources. That means a literally global package namespace based on domain names: com.yourcompany.Foo instead of Foo. For professionals, using this system for a few weeks, especially with IDE support, is enough to convince you that every language should do it that way. It just works without thinking. But for kids and beginners? They get frustrated at having to type a bunch of lengthy imports. They don't need a literally global namespace, but they have to pay the keystroke-and-readability cost of it anyway.
    • Conceptual tractability of extremely large programs. That means no macros and no operator overloading. The lack of operator overloading is a real frustration for beginners. Beginners don't like special cases; special cases just slow them down and take up extra space in their brains. Why are operators and methods different? If operators don't belong to classes, why can't I define functions that don't belong to classes? Why can classes override toString() but not +?
    • A language that isn't bristling with features but which contains a fairly idiot-friendly implementation of class-based OO, the most widely understood form of OO in the industry. These two priorities conflict a bit. After adding objects, interfaces, and polymorphism, they started to feel like the language was complicated enough, so they left out everything else. I think that's why there are no namespaces and no free-standing functions -- they hit the limit of their conceptual budget had to do some brutal elimination of features. Classes are used as namespaces and as homes for functions that should be free-standing -- which is a really confusing overloading of the class concept if you're a beginner.
    • Good-enough performance for the compilers and VMs of the time. That's where we got the stupid difference between Objects and built-ins. It's obvious to professionals why it makes sense -- avoid the overhead of heap Objects with built-in mutexes! But beginners shouldn't have to be exposed to weird language inconsistencies that exist solely as performance hacks.
    • An easy transition, both intellectually and emotionally, for C++ programmers. That basically determined the entire syntax and (see above) determined that the OO system would be a simplification of C++ classes. Obviously beginners don't benefit from the fact that Java has a lot of superficial similarities to C++, and once again they pay the price without reaping the benefits.

    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.

  35. Re:LOGO! by Lars+Arvestad · · Score: 3, Informative

    Aw, I got it wrong: I mean Scratch (from MIT), not Squeak. Scratch is great! We have not looked at squeak.

    --
    Reality or nothing.
  36. Multicore by I+cant+believe+its+n · · Score: 2, Informative

    So you have not been able to use muliple threads in an OO-language? Is this what you mean by "OO's inability to handle multi-core processing properly"?

    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 .NET and java class libraries). The advantage of this of course being that you would not need to have to recreate all those graphical widgets and other side effect stuff.

    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.

    --
    She made the willows dance
  37. StarLogo TNG, then Python by dibau · · Score: 1, Informative

    Modern software is an organic soup of interacting components. To plant in your students the sense of perceiving complex system with many interacting components, I would start with the great StarLogo TNG software, which allows children to program 3D simulations & games, almost without any training. After that, I would recommend the best programming language out there (IMHO of course), Python, which is easy to learn, built on good OOP principles & powerful for any task at hand. For letting your students really use what they've learned, teach them also Web development, e.g., with Django, & teach them how to deploy Web applications to the Google AppEngine cloud. By experimenting with this & building useful stuff that is available for all, they'll truly learn what's programming all about.