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?

124 of 962 comments (clear)

  1. Assembly by loteck · · Score: 5, Funny

    We'll see how bright they are then...

    1. Re:Assembly by 77Punker · · Score: 5, Funny

      It might be tough to actually solve a problem in assembly languages, but at least they're straightforward in the sense that it always does exactly what the documentation says it does. Each command is so simple that there's no chance you'll get hit with a language bug. Then again, maybe assembly just seems like a warm fuzzy bed of consistency since I have to use PHP at work.

    2. Re:Assembly by DrLang21 · · Score: 2, Interesting

      I actually learned my first moderately complex programming in assembly, and I found it to be very straight forward. It's easy to step through code and see exactly what went wrong when things don't work (until you run into memory paging problems).

      --
      I see the glass as full with a FoS of 2.
    3. Re:Assembly by Ethanol-fueled · · Score: 2, Insightful

      I'm pretty sure that guy was kidding. As far as calculators go, wouldn't you think that sum = num1 + num2; is much more intuitive than the equivalent assembler instructions? I believe the most useful languages for rudimentary procedural programming are C or C++ (for bare basics C++ because cout
      As far as assignments go, It always bothered me that things that made a computer fun and more interactive were never taught at the early level. For example, using the alarm escape sequence \a in conjunction with an infinite loop, or to make the program beep whenever something happens etc.

    4. Re:Assembly by Anonymous Coward · · Score: 2, Interesting

      I'm pretty sure that guy was kidding. As far as calculators go, wouldn't you think that sum = num1 + num2; is much more intuitive than the equivalent assembler instructions?

      It depends on how you think. If your point is to understand the logical relationship between two values, then you should use infix notation. This is how math and science is generally taught, so it is probably the best way to introduce children to programming. But it isn't necessarily the most logical method for programming. Reverse Polish notation has a lot of advantages, and it teaches students to think with a stack. It also teaches students how functions (programming) really work.

      I think the best way to learn programming (the way I did) is to start with some simple no bells and whistles programming language like QBASIC (which will help students almost immediately for programming their calculators) and then start studying electronics. Once the electronics knowledge reaches the point where the student understands a microprocessor, then have them do small assembly programs with the microprocessor--things like a vector drawn display driver for an oscilloscope that teaches how interrupts work and how a low level programmer can depend on them to take care of the housework when they run their normal programs. At this point, the student will have a fundamental understanding of how software and hardware work together and know exactly what an operating system is supposed to do since they didn't have one and had to make their own hardware to trigger their display refresh interrupts. From here, C and C++ will be a breeze for the student since they won't have to unlearn everything and then build back up like most students. This sounds hard, but it is only because most people have had to tackle assembly language without understanding the electronics first (which is a major, major mistake). If you take it slowly and think of a computer as a piece of electronics instead of something abstract that can be programmed in the abstract, it is fairly easy to do. This was the standard way for high school students to learn programming from the 50s to the 80s.

    5. Re:Assembly by riceboy50 · · Score: 2, Insightful

      You jest, but that is actually a fabulous idea because then you get a little understanding of how computers work at the same time without having to unlearn "magic" later.

      --
      ~ I am logged on, therefore I am.
    6. Re:Assembly by Phydeaux314 · · Score: 2, Interesting

      I agree. In the United States, we teach rudimentary algebra to most students in eighth grade. One of the key concepts of that is that a letter may represent a number. So, having X = Y + Z should be very, very intuitive to everybody entering high school.

      That's why most programming courses require Algebra as a prerequisite - they don't want to spend time explaining logic and representative symbols to students, they want to teach code.

      --
      Never underestimate the stupidity inherent in all human beings.
    7. Re:Assembly by cong06 · · Score: 2, Insightful

      I posted this before in a very similar topic.

      One of the main points of schooling is to get people to find what they're good at. To get them interested in what they COULD be good at. Contrary to popular belief school isn't only about learning hard facts.

      I recognize that there are quite a few things that carry with you, though, too, so I see why many slashdotters seem to recommend assembly to "weed" out the poor programmers. I have seen to many fellow students simply turn up their noes at Science and math simply because they've been taught to be scared of it.

      Please...recognized that assembly would not encourage people to learn programming as much as you wish it would.

    8. Re:Assembly by Iron+Condor · · Score: 3, Insightful

      Umm yeah ok. But if you do sum = num1 + num2, sum _does_ equal num1+num2 after the assignment. I am not sure what you're getting at. Perhaps you meant the expression x = x + 1 is counter-intuitive unless you understand the '=' operator means 'assign to x'.

      No, after the assignment the symbol "sum" DOES NOT equal num1+num2.

      The algebraic equation X=Y+5 is a description of reality. It does not matter what Y is, X is five more. The computer statement "X=Y+5" is an instruction to a machine to perform a certain operation once. It is not a statement of fact and if it were a true description of reality it would lose its validity as soon as the value of "Y" changes.

      Algebra:
      X = Y+5
      Y = 5

      What is X?
      Y = 6

      What is X now?

      [pseudo]Computers:
      X = Y+5 ;
      (possibly an error because Y isn't declared/defined yet. Depends on your language)
      Y = 5
      print X ;
      Do you really expect 10 here?
      Y = 6
      print X ;
      Do you really expect X to have a different value now?

      The fact that you imagine that the statement "Y=X+5" means the same in programming as in algebra indicates that you have a rather weak grasp of at least one of the two.

      On the other hand "take a value; add another value to it" is an operation that is the same in both cases.

      [pseudo-code; really PostScript in this case)
      5 %
      here's a number
      6 % here's another number
      + % add those two numbers.

      At no point is there an expectation that this sum will change if some "variable Y" changes. This is a lot closer to the way kids learn addition: "You have five apples, you receive six more apples, how many do you have total?"

      The point is not whether one uses letters to refer to numbers, it is whether one expresses what one expects the computer to do. There's no conceptual difference between

      [pseudocode, vaguely scheme this time]:
      (sum 5 6 7)

      or
      (sum a b c)

      in both cases what is expressed is the sum of a number of values. Which the string "X=Y+5" doesn't necessarily express.

      --
      We're all born with nothing.
      If you die in debt, you're ahead.
    9. Re:Assembly by Workaphobia · · Score: 2, Insightful

      Both you and the AC GP missed the point - the problem is that of the imperative programming paradigm versus declarative or something with a single-assignment store.

      i = i + 1;

      This is a contradiction in algebra, but just fine in imperative languages. You'd have to do a renaming that distinguishes between the old value of i and the new one for it to work like algebra.

      --
      Evidently, the key to understanding recursion is to begin by understanding recursion. The rest is easy.
  2. Lua? by slime73 · · Score: 5, Interesting

    I learned Lua when I was 14, with no previous programming experience. It's a pretty simple scripting language, and it can be really fun when you make addon scripts for games you play (quite a few games use Lua these days) and see them come to life. :)

    1. Re:Lua? by shirro · · Score: 2, Insightful

      Oh, and if not lua, then javascript.

      It is also a modern language. You can learn functional programming - it has closures, map and reduce functions (in 1.8) etc.

      The performance is getting good with V8, tracemonkey and squirrelfish, and it is embedded in the single most useful non-game app that any teenager uses - the browser.

      Pick up some c as well. Always handy, particularly in a *nix platform.

  3. Logo, LISP, Scala, F#, Erlang, and Haskell by Marxist+Hacker+42 · · Score: 3, Insightful

    Functional programming is making a comeback- it's going to be to the 2010s what OOPs was to the 1990s. I'd suggest these, and make recursive loops a major sticking point. Dr Dobbs has a nice article on why these functional languages make excellent methods for taking advantage of multi-core processors.

    --
    SJW: a person who perceives an injustice, and while correcting it, commits a greater injustice.
    1. Re:Logo, LISP, Scala, F#, Erlang, and Haskell by rolfwind · · Score: 2, Funny

      "Functional programming is making a comeback- it's going to be to the 2010s what OOPs was to the 1990s."

      That's rather unkind. I don't think Functional Languages are going to screw up an entire generation;)

  4. LOGO! by mamono · · Score: 5, Insightful

    It is partially in jest, but LOGO was created to teach kids how to program. Real world wise, though, I would say C or PHP. They are both currently used, relatively easy to learn and require no cost to get started.

    1. 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
    2. Re:LOGO! by laird · · Score: 3, Insightful

      I'll second this. While Logo has a reputation as a limited language, it's actually as expressive as Lisp, which is to say that it's a more powerful language than most, though teachers tend not to go too far with it.

      Back when I taught kids programming, I found that the best languages were the ones that supported iterative development so that users could easily try ideas. For this, Logo is perfect. Once kids learn Logo, they know about variables, scope, functions with parameters and return values, recursion, closures, etc., all of which apply to any civilized language.

      There more modern instructional language options, such as Squeak/Scratch (http://scratch.mit.edu/) and OpenStarLogoTNG (http://education.mit.edu/starlogo-tng/) that are really fun as well. They are (IMO) a bit too complex for very young programmers (I taught 5-6 year olds simple Logo programming, as it's designed to be super-approachable for kids, but I think that a kid would have to be 7-8 to tackle those).

    3. 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.
  5. Python by EvanED · · Score: 5, Insightful

    See subject.

    I started with QBASIC, and I would rather recommend against that. Things like real functions (as opposed to GOSUB) and such, even though you can do them in QBASIC, I didn't see for years.

    1. Re:Python by camperdave · · Score: 2

      Of course, the real objective is teaching them how to break down a problem into logical steps. If your language bogs them down with harsh syntax (like c) or with weird data structures (like lisp) or onerous drudergy to get the simplest things done (assembly) then that gets in the way of the learning. Also, kids thrive on results and experimentation, so you need to have a language that the kids can do something relatively useful relatively quickly in. That means a language with an immediate mode.

      So, I cast my vote for python. It has a relatively simple syntax. It has your basic data types, as well as the ability to recurse. I/O is fairly easy, and best of all (in my opinion) it comes with a turtle library so kids can get graphics running quickly and easily.

      --
      When our name is on the back of your car, we're behind you all the way!
    2. 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
  6. DO NOT by MindlessAutomata · · Score: 4, Insightful

    DO NOT, I repeat DO NOT do what many comp sci departments and high schools do, and that is "begin with Visual Basic".

    NO! NO NO NO NO NO! Okay, so they learn about variables and shit, but, just, NO. Terrible programming practices and weird little things where commenting is done with apostrophes and other typical retarded shit is what you'll end up teaching them.

    Visual Basic is OK for a quick and dirty Windows program. But if you want to teach the basics of what "real" programming is, I wouldn't recommend VB.

    1. Re:DO NOT by Red+Flayer · · Score: 5, Funny

      DO NOT, I repeat DO NOT do what many comp sci departments and high schools do, and that is "begin with Visual Basic".

      I'll heartily second that. Visual Basic is totally inappropriate for a budding programmer.

      Make them use vanilla Basic. I suggest using a C64 emulator (or, if you're feeling perverse, a VIC-20 emulator).

      What? I had to use line numbers, so should they.

      I'd also suggest making them use a cassette tape drive, or even a reel-to-reel drive, to ensure that they understand why bloated code is bad.

      Oh, and while you are at it, make sure to supply them with a limitless supply of Tang (no, not 'tang, you'll get in trouble for that) and store-brand potato chips.

      Finally, make sure that whatever they do, they need to write out their programs in pencil for review first, then enter the code verbatim once it's been signed off on.

      --
      "Trolls they were, but filled with the evil will of their master: a fell race..." -- J.R.R. Tolkien on Olog-hai
    2. Re:DO NOT by MikeS2k · · Score: 3, Funny

      My kingdom for a mod point, high shcool teahesr VB to get the kids to grips with the very basi (If statements, arrays etc)

      This basic launguage got me started today.

      --
      120 characters should be enough for anybody
  7. Look at POV-Ray. by Gavin+Scott · · Score: 5, Interesting

    Consider something like POV-Ray, since it's a programming environment with a visual payoff.

    Show someone a simple program that generates 10 randomly positioned mirrored sphere over a checkered landscape then encourage them to play with the number of sphere, assign colors to them, etc.

    Much more interesting to be able to *see* the output of your program than just reading "Hello World!".

    G.

    1. 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.
    2. Re:Look at POV-Ray. by Eudial · · Score: 4, Funny

      Visual payoff? Luxury. We used to dream of visual payoff. When I was young, we used to be happy if the computer beeped.

      --
      GAAH! MY PRINTER IS ON FIRE!!! PUT IT OUT! PUT IT OUT!
    3. Re:Look at POV-Ray. by spectecjr · · Score: 4, Funny

      ... of course, to get it to beep, you had to turn the display on and off really fast, in the hope of creating an audio carrier that the TV could understand.

      Ah, ZX81... how I ... well, actually I don't miss thee at all.

      --
      Coming soon - pyrogyra
  8. C# is the best alternative... by LibertineR · · Score: 5, Funny
    Yeah, yeah, but here me out, bitches.....

    11-14 years old = NO CASH.

    Nobody has more free resources available to the budding programmer than Microsoft; like it or not.

    Anyone can download FREE IDEs, free Source code, videos, documentation up the wazoo.

    Also, C# is almost syntactically identical to Java, and it is a good language for the beginner to discover whether or not they have a REAL interest and a knack for coding.

    If I were 14 again, wanting to learn how to code, Microsoft would be nirvana with all the free available stuff out there. There really is no contest.

    As always, I got karma to burn, so take your best shot....

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

    2. Re:C# is the best alternative... by fuzzyfuzzyfungus · · Score: 4, Insightful

      Huh, funny. I could have sworn that I'd heard of some other little outfit that let you download free source code and programming tools and stuff.

      I'm not going to disagree with you on MS's offerings; but you make it sound like they are an oasis of free stuff in a sea of unaffordable tools. With the exception of the various outfits that sell pro tools for various languages and scenarios, is there any major programming language(or, for that matter, many minor ones) for which you cannot get the necessary free stuff to get started?

    3. Re:C# is the best alternative... by ion.simon.c · · Score: 3, Interesting

      *nods*

      MSFT isn't the first place that I'd go.
      I was *quite* pleased with my copy of Sam's "C++ In 21 Days", DJGPP, and EDIT.

      Hell, while we're here, why not talk about Squeak? It has an absolutely *KILLER* IDE, is cross-platform, and is free and unencumbered. :D

    4. Re:C# is the best alternative... by ClassMyAss · · Score: 3, Insightful

      If you want to go the Java route, start with Processing instead of pure Java if you really want things to be easy - things like drawing take no work ("line(10,10,100,150);" on a line by itself in an empty Processing file will draw a line, just like any extreme beginner would expect...), and it's very easy to transition to real Java later on (and also possible to use it within Processing, for that matter, so you lose very little). There's also lots of 3D stuff and libraries for advanced students, and as an additional bonus you don't have to hit kids with something as complex as Eclipse or Netbeans when they're just trying to write "Hello, World!".

  9. My best shot by 77Punker · · Score: 3, Interesting

    If you want to use C# because it's similar to Java and is freely available, why not use Java? It has awesome tools available and is just as (moreso?) free as C#. Since we're talking about free, what decent programming language exists that is not free nowadays or does not have loads of free support material available?

  10. Lego Mindstorm by Dynedain · · Score: 5, Insightful

    If you're trying to introduce the concepts of looping, iterations, etc and don't want to get hung up on the details of the language, I highly recommend the Lego Mindstorm kits. They have a flow-chart programming interface that I had great success introducing programming to my 11-13 year old cousins, and if I remember correctly, they also have a lower level interface to let you start writing your own functions.

    For kids this age, nothing is better/cooler at showing them the basics of programming than something that gives a physical response. Loops, conditions, make so much more sense when trying to figure out how to keep your robot from running off the edge of the table.

    Tangible real-world feedback, and a sense of real accomplishment. If you just give them abstract languagues for the sake of language, they get disappointed they can't just whip up the next Madden game. Besides, they probably all already have Legos at home, and a Mindstorm kit is something they can easily get at home, which probably won't happen with Pascal compilers or Basic editors.

    --
    I'm out of my mind right now, but feel free to leave a message.....
    1. Re:Lego Mindstorm by Mista2 · · Score: 2, Interesting

      I did mine with two robots in a ring, and the interface allowed a list of operations on each robot, and the winner was the last one still in the circle when done 8)

      At college (about thirteen years old) we also wrote scripts in logo, but as in my first lab I whad already gotten in early and modified the autoexec.bat file to include:
      myroutine:
      echo "Hamish is a dick!"
      goto myroutine

      I thought logo was a little dull 8)

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

    3. Re:Lego Mindstorm by mothlos · · Score: 3, Interesting

      Of the suggestions I have seen this one makes the most sense to me (with a close second being the games suggestion a bit down). Education simply works better when you are learning to DO something. The language you choose isn't as important here as what the interests of the students are. After you know the student interest you will then have a better idea of what language to write in.

      Another idea would be to use Rails to design a school community website and then later design a site for a local non-profit group. Integrating programming with community outreach and provider client interaction would be great at this age.

    4. Re:Lego Mindstorm by spopepro · · Score: 2, Insightful

      I second Mindstorms. As an educator, it does allow for easier access to different modalities. Also, you can solve authentic problems, (get the robot to rescue a ball out of a maze) as opposed to contrived programming exercises. The programming environment is intuitive, and flexible and a great introduction. I use NXT kits in my high school math classroom with kids who know C++, and kids who have no computer access outside of school with great success. Also, if you have more advanced students, the NXT brick also supports ROBOTC. So if so compelled, you can have your super-driven students working in C and other students getting their feet wet with the legos drag and drop software. More modalities + differentiated instruction = good education. Regardless of the level of incoming student.

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

  12. 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.
  13. 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?
  14. 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.

  15. Try Python. by atomicthumbs · · Score: 4, Informative
    --
    http://pinopsida.com
  16. 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

  17. PL/1 or COBOL by Anonymous Coward · · Score: 2, Funny

    I'd think the only reasonable languages to start programming should be PL/1 or COBOL. Whitespace or Brainfuck could be suitable alternatives.

  18. Re:PHP? by moderatorrater · · Score: 4, Insightful

    PHP or C are ideal for a number of reasons. Enforcing OO from the outset is a terrible way to teach programming, so java should be right out. Functional languages are fun and interesting, but unless a major paradigm shift happens in the next decade, it's not going to be as useful.

    With a procedural language, you get the benefit of showing them with just a few lines of code what you can do. The basics of programming can all be taught from the outset including arrays, loops, conditionals, functions w/default parameters, etc.

    As they learn more, they'll have a natural step up to OO with C++ or php's built in OO. With C, they get the benefit of compiling code and having an avenue for more sophisticated programs, graphics libraries, etc. With PHP, they'll be able to set up web servers and use that as a stepping stone to html, servers, and javascript.

    Neither language needs a large investment to start programming with in terms of money or teaching, both languages are widely used, and both languages give them a clear avenue to more advanced topics.

  19. Close to natural language is best by RJBeery · · Score: 4, Funny

    Lisp.

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

    1. Re:PostScript by Kent+Recal · · Score: 2, Interesting

      Sounds like you have a deep hate for children?
      Seriously, there are valid arguments for Lego Mindstorms, Assembler, Python, heck some twisted mind may even find an argument for Java.
      But how exactly do you intend to explain to a kid why it basically has to write his first program backwards, in a syntax and under semantics that can make even veteran programmers cry for mercy?

  21. simple: use perl by petes_PoV · · Score: 5, Insightful
    You want a language where it's possible to start producing results with very little initial effort. That precludes anything which uses or requires an IDE - just learning to navigate that is a morning of classes with nothing to show for the effort - a definite demotivator. You also want a language that has a printable form - so they can have something tangible to work with - not merely a bunch of files.

    If these children really are the gifted ones you say, they'll already have the basic concepts of an editor: create, change, save, so they can start creating programs much sooner.

    You also want them to become familiar with the basic syntax od computer languages - most of which are quite similar and look a lot like Perl's syntax.

    Perl also gives those who wish, the ability to develop further, after the classes finish.The large amount of freely available documentation and examples on the internet will help then learn from properly written code from other people.

    --
    politicians are like babies' nappies: they should both be changed regularly and for the same reasons
  22. HTML by grege1 · · Score: 4, Insightful

    These are kids of the 21st century. Start with simple web pages in HTML, then add picture loading, tables, etc. If they take to it, then basic javascript. Start by using a text editor then later introduce graphical tools. All free and easy to implement.

    1. Re:HTML by Red+Flayer · · Score: 2, Insightful

      But that's not programming at all... HTML is a translator, that's it.

      Using HTML to teach programming is like using a French-English dictionary to try and get laid in Paris.

      You might be teaching them the grammar and words, but it's not going to enable them to programmatically solve a problem.

      I'd start by demonstrating a finished product that can be programmed using all the techniques you'll teach in the course, and work backwards to teach them the programming logic and constructs. By the end of the course, they should be able to code something similar to the product you demonstrated.

      I'd suggest that at the end of the course, they have a large "thesis" project they've completed... it's the sense of accomplishment that'll drive some of them to continue their studies.

      --
      "Trolls they were, but filled with the evil will of their master: a fell race..." -- J.R.R. Tolkien on Olog-hai
  23. JavaScript by Cyrano+de+Maniac · · Score: 5, Insightful

    I hate to say this since I don't even know the language (heck I'm barely competent with HTML) and came up through GW-BASIC, Turbo Pascal, assembly, FORTRAN, C, Tcl, C++, Perl, and some others I'm sure I'm overlooking, but...

    JavaScript

    First, it's nominally C-like, so it gives them exposure that will help them with a large variety of other languages (e.g. C, Pascal, C++, Java).

    Second, it's available to be used pretty much anywhere the kids have access to a computer. At home. At school. At a friends house where they can show off their newfound coolness. Don't underestimate this, because it's very important that they have access to the necessary programming tools in their idle time at home and elsewhere. It's also important because they don't need to learn how to use a compiler, linker, and all those other tool distractions that will get in the way of understanding programming itself.

    Finally, it's useful in a context they likely already somewhat understand -- web pages. Fibonacci sequences and prime number sieves and such are all wonderful, but an environment that allows them to build something a bit more interactive and, lets face it, relevant to their day-to-day life, will inspire some portion of them to continue the pursuit. Granted, I got a lot of personal satisfaction out of writing BASIC programs to print "x" characters in a sine wave scrolling up the screen, but somehow I think the bar has been raised for today's kids' expectations of what a computer can do.

    --
    Cyrano de Maniac
    1. 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.

    2. Re:JavaScript by cathector · · Score: 3, Insightful

      wait, "debugging" at this level of learning should absolutely be on the order of Print Statements sprinkled throughout the code, which alert() in javascript will satisfy just fine.

      i recommend javascript as the best choice here as well.

      here's what i see as JS's big wins for young, potential coders:

      * it runs anywhere.
          this means the code you write at home is going to run identically at school.
          now, other languages also do this, but:

      * there's no intermediate steps between editing the source and seeing it run.
          no compiler, no server, no runtime library or environment other than a browser.

      * you can share your work in a web page!
          pretty cool.

      * it's a very forgiving language.

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

  25. QBasic still one of the best by Zouden · · Score: 4, Interesting

    If only for the graphics control. It lets you draw text anywhere on the screen, and clear it, enabling quite sophisticated graphics and animations. It can also wait for user input and respond, so you can make games with it. Kids love that sort of thing.

    Logo has good graphics control but poor input-response, and Python is a much better language than both Logo and QBasic, but since it can't (easily) do graphics, it appears quite boring.

    --
    "A week in the lab saves an hour in the library"
  26. Lojban by Sybert42 · · Score: 2, Interesting

    Lojban is a constructed, parsable language that can deliver the same (or greater) information content as natural languages.

  27. Project Euler by MozeeToby · · Score: 2, Interesting

    For different challenges you could put them to, I would recommend http://projecteuler.net/. There are a huge variety of programming challenges (most involving math concepts) across a huge range of difficulty. They also provide a good introduction to recursion and cost of complexity since the 'most efficient' algorithm is not always obvious.

    You could provide prizes for who completed the most problems as well as a prize for being the first to complete a problem. Then when all or most of the class has completed a problem, you can show them an 'efficient' or 'simple' solution depending on which you want to emphasize.

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

  29. Visual Basic by tonyray · · Score: 3, Interesting

    Actually, I started my son off with Visual Basic at age 12. It wasn't very difficult and it may well be better to start them off with event driven programing rather than procedural. Rather than writing the answer on a command text line, put the results in a text box. Push buttons to actually execute code. The kids will really like writing a program that looks more like what they are used to than some antiquated program written for use on DecWriters. My son loved it and now at 24 he is a programming project leader for a software development company.

  30. Ask for input from your students by FreshKarma · · Score: 2, Interesting

    If your students aren't total noobs, ask them about what languages or web technologies they might have thought about trying out, like, someday.

    If they are total noobs, ask them what their favorite sites are. Protip: do not roll your eyes at any point after asking this question.

    Either way, it will give them familiar ground to work from, and a little bit of context. myspace may be godawful, but learning from the mistakes of others is second only to learning from your own mistakes.

    --
    The future ain't what it used to be.
  31. Re:Bright vs. Hard Workers by dsginter · · Score: 2, Interesting

    We'll see how bright they are then...

    I know that I am piggybacking but I thought that the educational world had moved on from the terms bright, gifted and related words.

    A good read, if nothing else.

    --
    More
  32. Why does everyone ignore C? by WarJolt · · Score: 4, Insightful

    I always wonder why colleges start out teaching Java first. Procedure based languages are easier. You learn
    2 + 2 = 4
    before you learn
    a^2 + b^2 = c^2.

    You can learn the basics in any language. The syntax is all very similar. Lets look at the difference.
    in C explain a routine.
    int main(int argc, char *argv[]){
        return 0;
    }
    In java explain a class and a routine. Plus the string class is more complicated than a char * and an int.

    class javaprog
    {
                    public static void main(String args[])
                    {
                    }

    }

    Always start with the fundamentals.
    You should know what pointers are and what memory is before you learn what a class is.

    A programmer needs to know why if he allocates 2 million empty string classes why his memory gets chewed up. To a C programmer the answer is obvious.
    Fundamentals! Fundamentals! Fundamentals!

  33. That's easy... by GFree678 · · Score: 2, Funny

    COBOL.

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

    1. Re:Squeak Smalltalk by Simulacrus · · Score: 2, Insightful

      And for even younger kids, eToys: http://www.squeakland.org/

  35. Something often missed in threads like these ... by dlcarrol · · Score: 2, Insightful

    I'll get modded to oblivion, but I'm leaving others to answer the question actually asked

    The answer is a sound education from ages 3 to 10, not a good text. There's so much of a push-- personally and in our educational systems, to train ourselves in whatever the hot job is for today rather than securing an education that matures one into the kind of person that can span any discipline with ease.

    Looking back to Stroustroup's(sp) article yesterday, the reason there are fewer good programmers is because fewer and fewer are actually -educated- in how to think, much less higher math. If you want to teach your kid(s) useful/fun skills, teach them the liberal arts (in the classical sense); once well understood, picking up a computer language (grammar + math) will be as easy as anything else. I freely grant that a good text will eventually be necessary, but if your child is not chewing your arm off for some kind of resource on their own-- be it chemistry, astronomy, CS, mechanics, or what have you, you've missed something in their earlier education

    /rant

  36. Re:PHP? by moderatorrater · · Score: 3, Interesting

    4x the lines, and the only line that's easily understood on day 1 is the line you'd have in a procedural language.

  37. Comment removed by account_deleted · · Score: 3, Insightful

    Comment removed based on user account deletion

  38. Algebra I by mosel-saar-ruwer · · Score: 2, Insightful


    I wouldn't want to try to teach "programming" to any child who hadn't had Algebra I [and preferably Algebra II].

    I suppose that "programming" could serve as an introduction to Algebra I, but my gut tells me that that's the wrong way to go about it.

    1. Re:Algebra I by caerwyn · · Score: 5, Insightful

      Why? I taught myself BASIC at 7 with an Apple IIgs' built in interpreter- I was a good 5 years from my first Algebra I class at that point.

      Algebra is relevant for the manipulation of expressions with variables, but is completely unnecessary for the *evaluation* of expressions with variables, which is what programming really is. Higher math is generally required for complex algorithm creation, but for introductory programming assignments it's really unnecessary.

      --
      The ringing of the division bell has begun... -PF
    2. Re:Algebra I by readin · · Score: 2

      Knowing a little algebra confused the heck out of me when I was taught programming. How can X = X + 1 make any sense? That would imply 1 = 0! Pure nonsense!

      --
      I often don't like the choices people make, but I like the fact that people make choices. That's why I'm a conservative.
  39. Re:I fully agree by DragonWriter · · Score: 2, Insightful

    It's about knowing what is going on inside computers. [...] Definitely stay away from languages like BASIC.

    I don't get endorsing C and telling people to stay away from BASIC when its "about knowing what is going on inside computers". Unstructured, old-school BASIC is, in many ways, a lot closer conceptually to what goes on inside computers than any structured programming language, C certainly included.

  40. The Problem With Teaching Programming by tknd · · Score: 3, Insightful

    The problem with most introductory programming courses is that they drop you in the deep end and expect the student to eventually figure out how to stay alive based on all the tools they start throwing at you. And I'll be honest, I don't have an answer as to what programming language you should use or if it even matters. Let me explain.

    I first started learning programming at the age of 14 (first year in high school). So I might have been one of these kids. Prior to that I knew how to write html and make webpages. That part was easy because there is no programming there. But when I got to my introductory programming course taught in C/C++ at the time, I didn't feel equipped as a student to tackle the problems presented. For example one of the tougher problems in the course was printing a diamond (ascii art) of stars based on a given number as input. So if they provided you with an input of 5, that meant at the widest point, the diamond would be 5 consecutive * characters with the previous and next lines being 3 consecutive * characters followed padded by one space on each end, and finally the top and bottom lines having one * with 2 spaces padding the left and right sides. Keep in mind that by this point, as a student, the most I had learned was basic algebra and perhaps a bit of geometry. The real heavy math/science courses were to be taught later in high school involving trigonometry, calculus, and physics.

    Continuing on with the story, most students in the introductory programming class failed at this simple task of printing a diamond to the screen. It wasn't because of their lack of knowledge regarding programming, but their lack of knowledge regarding problem solving skills and the application of math. Had the teacher reviewed the problem at hand, by examining the necessary parts (calculations involved) on a black or whiteboard, I think all students could have implemented a solution. But the place where students were struggling was finding A solution. They would start writing 'for' loops knowing that this was a test of how well you understood 'for' loops without having a clue of why they needed the loops or what the loops were going to do.

    So if you want your students to succeed, the language of choice will be the least of your problems since you are not bothering to teach high level programming paradigms (OO, functional, logic etc). The bigger problem will be how to teach the students to apply what they already know in a fashion they've never seen.

  41. 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!

  42. 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!
  43. Re:PHP? by Marxist+Hacker+42 · · Score: 2, Interesting
    --
    SJW: a person who perceives an injustice, and while correcting it, commits a greater injustice.
  44. GET OUT NOW!!!! by Archangel+Michael · · Score: 4, Funny

    FOR $DIETY sake, don't do it!!! You'll end up surfing Slashdot ALL DAY like the rest of us.

    If you're really bright, go into Physics or Chemistry! Better chance at girls than living in your mom's basement for the next 30 years till you're too old to program any longer!

    --
    Agent K: A *person* is smart. People are dumb, stupid, panicky animals, and you know it.
  45. stay far away from BASIC by Tom · · Score: 3, Insightful

    Whatever you do, never ever ever teach someone BASIC. Not QBASIC and not any other flavour. It was my first programming language, too, and it took almost ten years and a study of computer science to finally get all those bad habits you acquire in BASIC out of my system. DO NOT POISON INNOCENTS WITH BASIC.

    You can consider Pascal, which after all was designed specifically as a teaching language. There's also Oberon if you want to go more into OO and make sure that the language they learn on will never be used in an actual real-world context. :-)

    Java, Mono, C++, etc will probably all be suggested, but I wouldn't consider them suitable for beginners.

    --
    Assorted stuff I do sometimes: Lemuria.org
  46. Line Numbered Basic by soundguy · · Score: 2, Insightful

    I started with line-numbered basic on a TI994A. To this day, I don't think I have ever seen a simpler and more perfect beginner's manual than the one included with that machine. I was programming sprite animation with conditionals and loops within hours of opening the manual. Since the TI994A didn't have a C compiler available, I moved on to the assembler, which it DID have. Never got very good with it but it definitely taught me the low-level nuts & bolts of computing. After an eventual transition to x86 hardware, I learned a little C++ to help me manage my servers but backslid to Perl for day-to-day GUI web stuff.

    Considering how much of computing has shifted to the client-server model lately, I don't think starting out with simple html & cgi would be inappropriate. For a 2nd or 3rd project, I highly recommend giving the kids some thumbnail images of fruit and having them build a CGI slot machine. That's how I learned Perl. It's a great base project to build on too, and you can teach them version naming conventions along the way. Once they master the basic mechanism, you can add flat-file I/O to keep track of winnings and results, and then finally convert the whole thing over to a simple MySQL database with the images stored as blobs. (OK, that last bit might be a little over the top for first-week noobs :)

    --
    Nothing worthwhile ever happens before noon
  47. Re:Bright vs. Hard Workers by CopaceticOpus · · Score: 4, Funny

    I believe the currently accepted term is "stupidity challenged."

  48. Scratch by Jimmy+King · · Score: 4, Insightful

    I was just looking into this recently for my nephew. Scratch looks really cool. I downloaded it and played for a few minutes and e-mailed my sister to tell her to install it for her kid. She hasn't done it yet, so I don't know if it was as good of an idea as I thought, but it sure looks cool.

    It has color coded, drag and drop logic stuff that interlock like a puzzle so that kids can see how it fits together. It takes seconds to get a little animated sprite "walking" and do the fancy, whiz bang, pretty stuff today's kids will be wanting to see right away.

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

  50. Re:Bright vs. Hard Workers by porcupine8 · · Score: 4, Interesting

    Unfortunately, we are saddled with the term "gifted" thanks to Louis Terman, who both created the Stanford-Binet IQ test and did the first large-scale longitudinal study of intelligence (which is still going on with the few remaining participants in their 80s and 90s). It was in that study that he classified people with an IQ of 140 or higher "gifted," and the terminology stuck. Personally, I can't stand it and try not to use it, in favor of the more straightforward and less loaded "high ability." But it will be a very long time before "gifted" goes anywhere.

    BTW, that article is dead wrong with regards to grade-skipping. Over 50 years of research has shown that in most cases students who are skipped a grade have no negative social or emotional outcomes from it, and often it's positive socially. This research is summarized in the report A Nation Deceived.

    --
    Warning: Apple/Nintendo fangirl. Likes her electronics cute & cuddly. May be rabid.
  51. Re:PHP? by Anonymous Coward · · Score: 5, Interesting

    Exactly. And then, if your child is reasonably bright, they will be asking why the hell you need an object if all you want to do is dump "Hello World" to the screen. OO definitely has its place, but you need to understand why it's useful. For me that came from hacking around in C and finding the need to work with more complicated data structures than you can get with int/char/float/etc. So I played with struct's. When those were worn thin, my dad brought home a couple OO/C++ books and I continued from there.

    In my opinion, the best way to teach your kids to program is just to give them a couple decent reference books, a computer with a terminal, and maybe just a basic hello world kind of set up to show them how to compile their code, or work the interpreter they're using. I don't think the particular language you use is a big deal. Maybe one that you know best, so you can help them with their questions more easily. I.e., if you don't know C well, you may not be very useful the first time they encounter buffer overflow. For my case, I'd likely give them a little bit of compiled and little bit of interpreted. Some C/C++ and either Perl or Python. These are ones I'm very comfortable with. They are well supported with extensive libraries, and I already have a ton of reference material on each. They all have their problems, but to some extent part of learning to program is learning how to deal with the idiosyncrasies of the language you're working with. If your language has perfect garbage collection, will you even understand the importance of memory management when you try C for the first time?

    You won't be able to force programming down their throats, so if they're naturally interested, they'll be able to take it from there. If they're not, no biggie, you gave them the opportunity.

  52. Yes, the educational world has... by SuperKendall · · Score: 4, Insightful

    I know that I am piggybacking but I thought that the educational world had moved on from the terms bright, gifted and related words.

    Indeed, the educational world has moved well away from those terms.

    The rest of us recognize the realize the reality that some people are in fact academically gifted and prefer to recognize talent instead of trying as hard as possible to homogenize it.

    --
    "There is more worth loving than we have strength to love." - Brian Jay Stanley
  53. Re:PHP? by Anonymous Coward · · Score: 2, Funny

    Evidently not you. 1 * 3 = 3. 1 * 4 = 4.

  54. 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?

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

    Hackety Hack is designed just for this purpose.

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

  57. Re:PHP? by mR.bRiGhTsId3 · · Score: 2, Interesting

    OO need not even be used in python. You can do straight procedural programming in it. The loop constructs are also richer (maybe more intuitive) than what you would get in C.

  58. Seconded: Javascript, but also AutoIt! by raddan · · Score: 2, Insightful

    JavaScript will give young programmers the immediate feedback that I think many of us found so addictive back in the early days. Lots of comments here talk about "kids these days"; about how they're somehow dumber than us for not jumping into C right away.

    But I think we forget: modern computers are extremely complicated. There wasn't much that could go wrong on my old TI (OK, there wasn't much to go right, either, but I digress). How many of you out there have really written something in C? I don't mean something academic, like some command-line thing that sorts randomly-generated numbers into a tree. I mean a program that actually _does_ something. I have, and it's a bitch, let alone getting it to run on both, say, Linux and BSD, which are both, in theory, POSIX.

    Kids need feedback. HTML + Javascript gives them that, right away. They can run it anywhere they get a web browser. They don't need a development environment. They don't even need a server! Or makefiles! Or autoconf! And it's fun.

    Another language, which is really underappreciated in my mind, is AutoIt! Yeah, it's hodgepodge, and doesn't conform to your paradigm-du-jour, but it will give young programmers some idea of how you put together a GUI app. And heck, it's useful! We use it for all kinds of automation of stupid Windows apps where I work, and it's so damn addictive to play with it makes me forget how much I loathe my Windows machine...

  59. 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!

  60. Re:PHP? by dgatwood · · Score: 3, Interesting

    PHP and C are an awful lot alike, minus the notion of strict data types and the clumsy string handling. PHP is pretty darn close to C with dollar signs if you just start the file with <?php and end it with ?> and don't mix it with HTML.... So I would agree that either would be acceptable.

    The way I started learning C was to start with a large code base and tweak it. I studied a piece of code, figured out how it worked, and then started making changes. I started with NUTS 2.3.0, an Internet talker, and used it for chatting with friends while I hacked on the code. By the time college was over, I had reverse-engineered the NUTS 3 NetLink protocol and expanded it, added email capabilities, added games, etc. It was a fun little project, and I'd definitely recommend doing something like that as a way to get young people interested in coding. The best thing about the NUTS 2.3.0 code base is that it is straight C---no OO to make things complicated. By the time you have worked with it for a while, though, you start to see places where data structures are essentially only used with certain functions and vice-versa. Once you reach that point in your understanding, the concept of OO basically sells itself fairly readily. :-)

    --

    Check out my sci-fi/humor trilogy at PatriotsBooks.

  61. MIT's Scratch by Dennis+G.+Jerz · · Score: 2, Insightful

    Someone in another thread noted that kids who haven't yet had Algebra may not be ready for complex programming. I agree. If you're not actually planning to prepare these kids for life as code monkeys, and you're just trying to introduce them to procedural thinking, I'd suggest MIT's Scratch.

    http://scratch.mit.edu/

    It's sort of like Flash for kids, with a modular interface so that kids never see an error message. If you try to put a number in a slot where the syntax demands an operator, the number will just bounce out of the line -- it won't fit. All the elements have shapes that plug in only a certain way. The Scratch website has screencast tutorials (with cute kids narrating them) and a community for sharing creations.

    Unlike Mindstorms, Scratch is free.

    I've taught my own son when he was 9 and 10, using Just BASIC (we created a simple Choose Your Own Adventure story) and Scratch (he created a catch-and-avoid game).

    I have also taught college English majors the fundamentals of computer programming, using Inform 7 (a relatively new developing environment for creating classic text-adventure games).

    I should think that most kids in your target age group would get very excited by making their own mods, which could be a gateway into teaching them actual coding.

    --
    Literacy Weblog http://jerz.setonhill.edu/weblog
  62. 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

  63. RAPTOR Flowchart Interpreter by Arkaine101 · · Score: 2, Interesting

    RAPTOR Flowchart Interpreter

    Web Site: http://www.usafa.af.mil/df/dfcs/bios/mcc_html/raptor.cfm
    Web Site: http://raptor.martincarlisle.com/
    Screenshot: http://www.usafa.af.mil/df/dfcs/bios/mcc_html/raptor_picture.cfm

    RAPTOR is a flowchart-based programming environment, designed specifically to help students visualize their algorithms and avoid syntactic baggage. RAPTOR programs are created visually and executed visually by tracing the execution through the flowchart. Required syntax is kept to a minimum. Students prefer using flowcharts to express their algorithms, and are more successful creating algorithms using RAPTOR than using a traditional language or writing flowcharts without RAPTOR.

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

  65. Python (learned it a 14) by stupidbob307 · · Score: 2, Interesting

    Python is by far the best. I learned it myself at about the age of 14 (16 now). It is very simple. Easy syntax and just makes common sense. And although it is dynamically typed, it is strongly typed so it forces kids to learn types. Also python forces good coding standards by requiring indents.

    Also projecteuler.net is good for kids to develop problem solving skills. Alot may be a bit over their heads, but the first few are doable without being too easy.

    Please do not teach VB or QB. My school does this and it hurts more than it helps. Teaching a friend any other language with a background in these is just annoying. It it not a wise idea. Whatever language you pick make sure it is strongly typed and is based in C rather than basic. This helps learn other languages much more.

  66. 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!
  67. Re:PHP? by lwsimon · · Score: 3, Insightful

    Like anyone on Slashdot is going to take advice from someone who calls PHP a "pathetic insult to programming", then holds on VB.net as a paragon of virtue?

    --
    Learn about Photography Basics.
  68. Check Out Runtime's Revolution! by I_want_information · · Score: 2, Interesting

    Revolution would be ideal for the following reasons:

    1. You can download a 30-day demo for Mac, Windows and various flavours of *nix.

    2. It supports the basic programming concepts you mentioned without being overly burdened by misplaced semi-colons, strongly typed data, or really.hard.to.read.crappy.dot.syntax

    3. It has a GUI with drag-and-drop GUI interface elements that appear platform-native on the platform on which it is being used (and later deployed -- it's truly write once, run anywhere).

    4. It uses a scripting language that is like Hypertalk on steroids and thus leverages the students' naturally occurring understanding of natural English language constructs (e.g., "put 3 into myVariable" etc.).

    Because it's graphical, because you can test without compiling, because you can start something out in class on, say, a Windows or *nix box, then take your project home and continue working on it on, say, a Mac, and then back again, because it leverages natural language, it really is an ideal introductory programming environment.

    Give it a try!

  69. Re:PHP? by Firehed · · Score: 2, Interesting

    I agree with C. I self-taught myself enough to get by from working on modifying a MUD around age 12, though I'd done some QBasic several years before that even (very simple stuff, but what would you expect from a third grader?). I also got into some HTML around the same age, and as that's now my primary source of income it was probably a pretty good choice. Given how much stuff is shifting to web-based apps as compared to their former desktop equivalents (SaaS in particular), it would probably be a very practical choice.

    As others have mentioned, it's also very easy to get into PHP once you know a bit of C. Not so much on the newer OO stuff (in my experience, it seemed pointless until I actually had a need for it, at which point it became the most awesome thing ever), but enough to make some dynamic pages at least. And god knows how many PHP-based odd jobs are out there.

    I don't see what being gifted has to due with anything. Programming isn't hard to learn unless you have no interest in learning it - but that's true of a ton of stuff. Or maybe I was gifted but just never got the label. Whatever.

    --
    How are sites slashdotted when nobody reads TFAs?
  70. FreeBasic? by isaacwaller · · Score: 2, Interesting

    I am 12 years old and now program Java and C++, but when I started I programmed FreeBasic (basically QBASIC.) It was nice and easy and FreeBasic has many advanced features as well so you can learn at any level. But 1 thing - don't teach SUBs - teach functions. Believe me, it's really hard to move from SUBs. Isaac Waller http://www.isaacwaller.com/

  71. Re:Bright vs. Hard Workers by Firehed · · Score: 2, Insightful

    Talent doesn't disappear due to a bad system, though it certainly may be wasted in such an environment. Either you're able to pick up on new concepts and ideas easily or you're not. And if you are able (as the best and brightest tend to be), you'll pick it up somewhere. With the entire knowledge of the human race seconds away, having teachers cram facts down your throat isn't the way that the gifted will be getting ahead. If they don't understand something, they'll look for the answer, and learn along the way.

    It's much more a matter of motivation than one of the learning environment.

    (having said that, I'll definitely agree with anyone claiming that our educational system is in desperate need of an overhaul)

    --
    How are sites slashdotted when nobody reads TFAs?
  72. 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?!

  73. 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.
  74. Kid's Choice by unix+guy · · Score: 2, Interesting

    When my "computer savvy but not programming" youngest was about that age he called me into his room with "Dad, do you know anything about a program called python? Look what I can do with it!" - and he showed me several small things he'd been able to create after reading the online tutorials. He found python intuitive, fun and useful - and that's what a first programming language should be all about.

    --
    "Straddling the sword of technology..."
  75. Re:PHP? by papna · · Score: 2, Interesting

    Python makes sense to a degree, but its trademark The Whitespace Thing might prove especially frustrating, as adolescents tend to pay little attention to subtlety, so I could imagine the somewhat-subtlety of indentation could be problematic. Maybe I'm wrong; this is untested.

    In general, I like the idea of using a clean, interpreted language like python. If a compiled language is used, the interface used should make that automatic. Still, playing with an interactive session might be invaluable.

    I guess that doesn't really conclude anything.

  76. Re:PHP? by Samah · · Score: 3, Insightful

    To be honest, it's the algorithms and paradigms that are the most important thing to teach. The language is merely the tool. I would recommend some form of procedural BASIC (eg. QBasic, GWBasic) since the syntax is very clear and concise. No fancy braces or semicolons for a new person to worry about.

    Which of the following examples would be more understandable for someone who's barely even heard of programming?

    if foo = "bar" then print "Hello world!"

    if(foo.equals("bar")) System.out.println("Hello world!");

    if(foo=="bar") Console.WriteLine("Hello world!");

    if(strcmp(foo,"bar")==0) printf("Hello world!\n");

    if($foo eq "bar") { print("Hello world!\n"); }

    --
    Homonyms are fun!
    You're driving your car, but they're riding their bikes there.
  77. 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.

  78. Re:PHP? by Red+Alastor · · Score: 2, Interesting

    Python makes sense to a degree, but its trademark The Whitespace Thing might prove especially frustrating, as adolescents tend to pay little attention to subtlety, so I could imagine the somewhat-subtlety of indentation could be problematic. Maybe I'm wrong; this is untested.

    So... You believe that they can't pay attention to whitespace but can pay attention to matching braces?

    --
    Slashdot anagrams to "Sad Sloth"
  79. Re:PHP? by kaens · · Score: 2

    Sorry, but Python the language is indeed object-oriented (at least from the "everything is an object" standpoint), it just doesn't force you to write code in an object-oriented manner.

  80. Re:PHP? by kaens · · Score: 2, Interesting

    I personally think "The Whitespace Thing" is a good thing for new programmers. It's more-or-less how most coders indent their code anyhow, and the last thing you want is to have to deal with reviewing code written with a bunch of different brace / indentation styles (there are, of course, editor-based solutions to this on your end, but why not just cut out the middle-man?)

    I took a comp-sci course in high-school, and the teacher enforced a specific style. It was a bit of a pain to keep up with at first, but as the class got more complex, everyone thought that it was a good thing that we all wrote code in a similar manner.

    Not to mention that Python's whitespace thing makes the code look pretty similar to pseudo-code - which is good for beginners, IMO.

  81. 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
  82. 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.

  83. 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
  84. Re:PHP? by terjeber · · Score: 2, Insightful

    what other language could have done a better job in easily developping web pages for the past 10 years

    Honestly, I am not too concerned with "hastily" doing anything at all. In my experience things done hastily is usually done badly. Are there better strategies for putting applications on the web than PHP. Absolutely, various Java technologies for one. Ruby (which has been available for that long, but not with Rails) is another.

    The problem is that hastily done stuff usually ends up with a much longer life span than was intended when it was hastily put together, and in the long run the cost of ownership is significanly higher than would have been the case if it was built a little less hastily from the get-go.

    I have seen a lot of what has hastily been put together with PHP and MySQL (for example) and it is usually put together by people who don't even know what normalized means. Friends of mine have twice walked away from lucurative contracts because they were not allowed to do the only sane thing, which wast throw out everything that was written and start from scratch.

    Enabling "developers" with tools that encourage hastily throwing things together means that a lot of people who should never be allowed to write SQL are given tasks they are not qualified for.

  85. Spring! by msormune · · Score: 2, Funny

    Wow, he already answered the question himself:

    I will be teaching an enrichment programming course to 11-14 year old gifted children in the Spring

    Spring it is!

  86. VB YES by anorlunda · · Score: 2, Interesting

    I disagree, and I'll tell you why.

    An introductory course in programming does not have the purpose of teaching people how to program, or to learn good practices etc. It should help the students to decide whether or not programming is something they are interested in pursuing. Further, those students who decide not to go further, should walk away with some value that enriches their lives anyhow.

    I've taught several introductory courses and I use VB as the vehicle. In only 3 hours of classroom work I can teach complete beginners how to create a rudimentary Pong game. The students squeal with delight when they see the results of their effort come alive.

    Graphics and the motion are appealing to students. They are also the best way I know to teach students how something seemingly real can arise from such abstract things such as program statements. For this use, VB is the best tool I can imagine. Logo would be my second choice.

    Using the Pong example, I've been able to teach many novices the central lesson of the course which is, "Programming is not magic. It is something that even I could understand and master if I so choose."

    Students who choose not to go further lose much of their fear and incomprehension of things digital for the rest of their lives.

    Students who do choose to go further can then go to a programming 101 course that picks a more appropriate language and concentrates on methods. Do not confuse programming 101 with introductory programming.

  87. Re:Bright vs. Hard Workers by Justin+Hopewell · · Score: 2, Insightful

    I skipped kindergarden and my parents and myself ended up regretting it later. I was almost always the youngest in the class, and some of my classmates resented me for having the "nerve" to be smart enough to start regular grade school early. I got so tired of getting picked on for making good grades, I stopped trying as hard and my grades suffered because of it. I also became lazy, but I'm not sure if that was a result of all of that, or just because I have a natural aversion to work.

  88. Re:PHP? by shutdown+-p+now · · Score: 2, Insightful

    Actually, VB.NET is sort of okay (it's little more than C# with a verbose syntax +/- a few extra minor features). Most of the flak that VB gets is from the days of VB6 and before, where it was indeed a monstrosity, QBASIC++ (I speak this as one who actually developed production apps in VB6).