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?

962 comments

  1. PHP? by arizwebfoot · · Score: 1

    Hello World, it's Foo Bar!

    --
    Beer is proof that God loves us and wants us to be happy.
    1. 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.

    2. Re:PHP? by ILuvRamen · · Score: 0, Troll

      PHP? A scripting language? Are you freaking kidding me? Scripting languages are pathetic insults to programming. You don't even have to declare variables before using them or choose their type. There would be some serious oversights of programming basics if you teach them php. In high school I took C++ and that worked out just fine. It was intimidating to think about writing a whole piece of software with that ancient language but it did teach the basics so later when I learned VB.net I could identify all the stuff they screwed up and improved and understood how a framework worked. At my college anyone in the IT field, even if it wasn't programming, had to take intro to VB and that class was pretty well structured. Plus you could actually write something with a GUI like modern programs have. I'd lean towards either C++ or VB.net.

      --
      Google's Super Secret Search Algorithm: SELECT @search_results FROM internet WHERE @search_results = 'good'
    3. Re:PHP? by Anonymous Coward · · Score: 1, Funny

      "With a procedural language, you get the benefit of showing them with just a few lines of code what you can do."

      class HelloWorld:
          def __init__(self, msg="Hello World"):
              print msg
      hw = HelloWorld()

      OO with only a few extra lines

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

    5. Re:PHP? by iamhassi · · Score: 1

      "PHP or C are ideal for a number of reasons."

      I agree with C or C++. Seems those are the first program languages taught to computer science majors in most major universities, and many of those freshmen are 17 or 18 yrs old. I see no reason why "11-14 year old gifted children" can not handle a basic course in C or C++. Besides, if they do decide to go on to become programmers, might as well teach them the first language they'll learn.

      Use the C++ for dummies as a guide to writing the lessons.

      --
      my karma will be here long after I'm gone
    6. Re:PHP? by Anonymous Coward · · Score: 0

      3x but who's counting....

    7. Re:PHP? by Marxist+Hacker+42 · · Score: 2, Interesting
      --
      SJW: a person who perceives an injustice, and while correcting it, commits a greater injustice.
    8. Re:PHP? by binarylarry · · Score: 1

      Wow, that's really going to bite the PHP developers out there on the ass.

      No more multicore goodness for them.

      Shucks!

      --
      Mod me down, my New Earth Global Warmingist friends!
    9. 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.

    10. Re:PHP? by swimin · · Score: 1

      Unfortunately chances are the first language they will learn is java. I however think that C++ might be a good start.

    11. Re:PHP? by Anonymous Coward · · Score: 2, Funny

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

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

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

    14. Re:PHP? by Hojima · · Score: 1

      You can teach them a scripting language like autoit (http://www.autoitscript.com/autoit3/downloads.shtml). The reason for teaching them this language is very simple: it's easy to do a lot of things with very little code. Since they're young, you'll find that even the interested and capable students get bored. If you want your computer to beep, tell it how load in the parameters, if you want the mouse to move, just say where (and how fast) in the arguments, and if you need a gui, just say how big and where etc. You can also do advanced things such as networking with ease. I remember the woes of text-only learning. I would have killed to get an assignment where I can truly play with the computer. However if you want the kids to learn a powerful language right off the bat, one that requires skill to master well, there is no better alternative than c++. It's slightly better than c (not performance wise of course) since object oriented programming is very important. I don't really need to justify c++ however, since you can find articles praising it anywhere you look. If you really want to make it fun, just look around for libraries that they can play with. I have to say, you never really feel computer savvy until you go beyond text programming.

    15. Re:PHP? by calmofthestorm · · Score: 1

      Or straight functional programming. Or mix and match. I love python.

      --
      93rd rule of Slashdot: No matter how obvious my sarcasm is, my comment will be taken seriously by someone.
    16. Re:PHP? by xonar · · Score: 1

      Peeeh aiich PEEEEE!

    17. 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.
    18. 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?
    19. Re:PHP? by zeptobyte · · Score: 1

      Yeah Python definitely isn't an object-oriented language, and its object-oriented programming is sketchy at best. But its simplicity makes it excellent for novices, particular for the 11-14 year old demographic who needn't concern themselves with things like pointers and types. In such a situation, we are not preparing them to become professional software engineers or computer scientists, but rather attempting to foster an interest in programming as a hobby. These kids aren't even in high school yet, or if they are, they're just beginning. They can build programming skill without being taught the advanced concepts. Then they can self-teach or take classes as they get older and become more mature. Then at the beginning of their formal computer science education, it will still be easy to start teaching them about memory and like, because they will come in with a fresh slate as far as formal education goes. They will have background knowledge, but they will likely be able to separate that and view it as background knowledge, and treat what they are learning as new or "correct", rather than as contradicting or complicating their existing knowledge.

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

    21. Re:PHP? by ElizabethGreene · · Score: 1

      Stanford's CS106A Programming Methodology course is available on free YouTube. I wish it had been there when I was 14. It would have saved a lot of bad code over the years. Thanks Mr. Sahami.

      It teaches object oriented programming and top down design in an accessible way. It also passes my equivalent of the Girlfriend test. (You didn't think we knew about the girlfriend test, 'eh? )

      -ellie

    22. Re:PHP? by Nemyst · · Score: 1

      PHP, definitely. Although I've started with Java myself, I'd say PHP is an extremely simple (yet powerful) language to boot with. Its flexibility and rather clean code mean you don't have to delve right into more abstract concepts such as pointers or classes right away, but it does offer them if you need it. I also like things such as expandable arrays or dynamic typing. They might not be the best things to rely on to write clear code, but they have the advantage, again, of being simple to use. Arrays can get pretty messy when you need to determine their length and then initialize them.

      I'd also suggest working with more than just programming. While some children will like it, I think there are other potentially interesting paths to take. For example, you could let them program robots. The Boe-Bot is a good start with basic features and a host of options if you want them. The language is a modification of Basic called PBasic. The main advantage of robots is that they get a goal. Programming software, when you have no specific need for something, can be hard; you look for a reason to make something, a plan, but you find nothing. With a robot, they'll immediately want to try to make tons of stuff with it so it can move around, react to movement, touch, sound, color, light, whatever... There can be quite a bit of fun to be had with that!

    23. 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.
    24. Re:PHP? by BountyX · · Score: 1

      I learned C when I was nine years old. Not trying to brag, just letting other commenters who calimed "C" is too hard is nonsense. Agree with op, learn procedural before OO.

      --
      Trying to install linux on my microwave, but keep getting a kernel panic...
    25. Re:PHP? by terjeber · · Score: 1

      Thing is, PHP is a pathetic insult to programming and a horrible way to develop anything sensible and manageable. On the other hand, VB is at least as bad, and in the hands of a lot of developers, significantly worse.

      Both PHP and VB.net are examples on what happens when the mediocre (as in mediocre software developers and architects - and mediocre here is probably giving too much credit) gets too much work due to lack of reasonable alternatives. In a sane world VB would have been dead eons (in software time) ago and PHP would have been dismissed out of hand when it was released.

    26. Re:PHP? by Neeth · · Score: 1

      1. Basic
      2. Java
      3. C#
      4. C
      5. Perl

      Now, where is my money?

      --
      Yes, I am the one with the legendary sig.
    27. Re:PHP? by Red+Alastor · · Score: 1

      Yeah Python definitely isn't an object-oriented language, and its object-oriented programming is sketchy at best.

      What makes you believe that Python's OO is sketchy?

      --
      Slashdot anagrams to "Sad Sloth"
    28. 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"
    29. 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.

    30. Re:PHP? by voidphoenix · · Score: 1

      Read the question he asked again.

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

    32. 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
    33. Re:PHP? by tzot · · Score: 1

      He said "4x the lines", which is correct, not "400% up", which is incorrect.

      --
      I speak England very best
    34. Re:PHP? by FornaxChemica · · Score: 1

      And replaced by what, please? It's marvelous you can haughtily proclaim PHP is worthless but that'd be more convincing (and sane) if you had told what other language could have done a better job in easily developping web pages for the past 10 years.

    35. Re:PHP? by vtcodger · · Score: 1

      The kids will be familiar with outlining, so the whitespace thing will probably look OK to them. They'll most likely end up wondering why any language designer would use brackets instead and maybe develop a lifelong habit of occasionally forgetting to use them. I'd worry more about Python's unimpressive and sometimes idiosyncratic error detection.

      --
      You can't see ANYTHING from a car, You've got to get out of the goddamned contraption and walk...Edward Abbey
    36. 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.

    37. Re:PHP? by TFGeditor · · Score: 1

      10 Print "Hello, World"
      20 Loop 10

      OR

      10 Print "Hello World"
      20 END

      It doesn't get much simpler than that.

      --
      Ignorance is curable, stupid is forever.
    38. Re:PHP? by Neil+Hodges · · Score: 1

      Yeah Python definitely isn't an object-oriented language, and its object-oriented programming is sketchy at best...

      Are you sure you aren't talking about C++?

    39. Re:PHP? by dkleinsc · · Score: 1

      How about the Python version

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

      That seems pretty easy to explain to me. And I say that as someone who's taught a lot of 12-year-olds about programming.

      --
      I am officially gone from /. Long live http://www.soylentnews.com/
    40. 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).

    41. Re:PHP? by mdwh2 · · Score: 1

      Really?

      #include <stdio.h>

      int main() {
          printf("Hello World\n");
          return 0;
      }

      I'm not sure how you get 4x the lines compared with C, nor do I see how all the lines in the C version are easily understood.

      But if that's the most important thing, then I take it that BASIC is the best beginner language?

      10 PRINT "Hello World"

    42. Re:PHP? by sqldr · · Score: 1

      The Whitespace Thing might prove especially frustrating, as adolescents tend to pay little attention to subtlety

      That's exactly why it's there. It's to force them to indent properly. Newbie programmers take a while to "get" indentation. If you get a line like:

      while 1:
      print hello

      File "helloworld.py", line 2
      print hello
      ^
      IndentationError: expected an indented block


      Instant education! INDENT YOUR CODE BOY!!!

      --
      I wrote my first program at the age of six, and I still can't work out how this website works.
    43. Re:PHP? by Anonymous Coward · · Score: 0

      The best way to learn programming at that age is to combine the key elements:

      1. Basic C Compiler
      2. A Few Days Away Normal Life
      3. A Programming Book w/LOTS of Errors and No CD

      Nothing motivates you to understand programming like typing in a few thousand lines of code only to have the compiler tell you that it's no good and you have to figure out why.

      I owe my programming ability and interest largely to the terrible typo's in most of the C books of the late 80's and early 90's.

    44. Re:PHP? by knails · · Score: 1

      What the hell are you talking about? VB is a horrible language that shouldn't be used. It's biggest problem is that things that should be easy aren't, and things that should be complex are nearly impossible. A scripting language such as Perl or Python is much better suited for teaching, and if you used Python, you would inherently teach good programming practice of using whitespace well and good variable names.

      --
      "I disapprove of what you say, but I'll defend to the death your right to say it" -Voltaire
    45. Re:PHP? by knails · · Score: 1

      The university I attend uses Java for its intro programming courses, but I don't see what the problem with that is. It uses simple syntax, is easily scaled down for simple projects (OO wasn't taught until the end of the first semester), and is simple for object oriented, which has a lot of advantages and application. Maybe it helps that there was no mention of the Java API libraries, except for I/O, until the middle of the second course, so noone learned to rely on them, but I, for one, happen to like Java.

      Easy things should be easy, hard things should be possible.

      --
      "I disapprove of what you say, but I'll defend to the death your right to say it" -Voltaire
    46. Re:PHP? by knails · · Score: 1

      Why is it that so many people have such big issues with Java? It was the language taught at my University, and I, for one, like Java. It scales really well, from doing simple, small, learning programs, to larger, more complex projects. It has simple syntax and is well structured. Maybe it helps that we weren't taught about the Java API libraries, save I/O, until the middle of the second course, so most students, myself included, didn't learn to rely on them.

      --
      "I disapprove of what you say, but I'll defend to the death your right to say it" -Voltaire
    47. Re:PHP? by sholsinger · · Score: 1

      At ages 11-14 I had attempted to learn C++ on my own. I attempted to get through my Dad's old Zortech C book, though without the systems they use as examples it was difficult. I hadn't yet gotten that far into Linux to figure out that I could just use gcc. I had mastered HTML by the age of 12. I know it isn't a hard feat by any means. Then I began using Javascript.

      I was then introduced to ASP (Visual Basic Script), by a mentor, which was pretty easy to figure out. I took a VB6 class freshman year of high school. (I mostly taught it myself)

      Then by age 15, I set off to learn PHP by myself. I was successful because the documentation is freely available online with an over abundance of resources for help, tips, and tutorials. Not to mention I could install it on whichever platform I wished.

      I highly recommend the PHP route, because of the common syntax with C, C++, C#, ECMAScript and Java, which would allow developers to transfer that syntactical knowledge easily across any of those languages.

      That said, I HIGHLY suggest providing a primer on HTML simply because it is so ubiquitous. Or XHTML 1.1 if you'd prefer. This will also let them into the web realm which allows easy satisfaction for the green developer. Plus, the majority of PHP programming is done for the web. Whether that be for server-side automation, or for actual website building. That way, when they leave your class they have a skill they can use and market if they choose to.

      Now at age 21, I am working as a contractor providng .NET development services. Specifically with ASP.NET and data-driven websites. I am also highly capable with table-less design and standards compliant html & css. If they are interested, provide your kids as much information and resources as possible.

    48. Re:PHP? by ShieldW0lf · · Score: 1

      Or, you could go in the other direction, and reduce the typist burden, allowing them to use concepts to get things done quickly so they get positive feedback.

      I'd suggest Scratch, from MIT:

      http://scratch.mit.edu/

      The code is designed like lego blocks, and you attach things together. You can publish to the MIT website from within the development environment and develop a fan base, which gives more positive feedback. You can also download someone elses program from the site, tear it apart in the IDE, change things, then republish your new program and it will automatically attribute the program as being built by Jack, but based on work by Jill.

      If you want something a little more sophisticated, you can teach them Squeak.

      http://www.squeak.org/

      Squeak is a full featured implementation of Smalltalk, which was designed from the ground up to teach OOP.

      http://en.wikipedia.org/wiki/Smalltalk

      My 8 year old has used both of these, and I've introduced Scratch to 13 year old children to it and had them get very excited at what they could do with it.

      --
      -1 Uncomfortable Truth
    49. Re:PHP? by Athaulf · · Score: 1

      I agree with this too, not only as a red-blooded Microsoft hating Linux commie, but as a programmer who started out in this age group. The second language that I learned was VB6 (right after Liberty BASIC, a classic line-by-line language that I found in Programming for Dummies). Trust me, the complexities of programming through a GUI like Visual Basic takes much more thought than simple code. The class should focus first on getting the students to understand core programming fundamentals such as arrays, control structures, and the fact that the program is simply running a series of commands. In my view, Visual Basic is built against these core fundamentals because it takes over control of the program and keeps the kids from seeing the code underneath. Also, the interface of VB is overly-complex for the beginning programmer. The biggest obstacle of the language seems to be searching Microsoft's interface to find the thing you want to do.

      I had a lot of trouble finding ways to practice arrays and loops in VB because it can be difficult to find ideas for programs that require a simple GUI such that you can create with VB. Besides that, most kids wanting to learn to make programs don't usually see writing GUI applications as a goal to their efforts. They usually have one thing in mind when they decide to learn programming: Video Games. Trying to create basic games would be much easier in a classical line-by-line programming language than having to manipulate a canvas for drawing (or however you do it in VB, gave up after a while) or a text box for outputting the text of a too-high-too-low guess-the-number program.

      Even though it's a favorite of mine, I also wouldn't really recommend JavaScript as a first programming language. It can be extremely difficult to debug code in IE, or even in Firefox. Also, the fact that it's integrated with HTML, Flash, and God knows what else to actually do anything cool is a major negative to me. Kids don't really care about programming if they know their programs suck, and these are going to be kids that know their way around the web. It seems to me that they would end up focusing too much on the looks of their website rather than on the actual programming task. In addition, they have to first be introduced to HTML, which I don't think is really a good starting point for kids.

      The language that really, really got me into programming was Blitz Plus (evolved from Blitz Basic, which the website is named after). The language is based on game creation, but it has extensions for GUI applications. I'm pretty sure you can still find the free trial version of their software on their site, along with user-submitted work and great forum support (if you pay $20 for the full language). It's missing support for final compiling of exe's, but still includes nearly complete, integrated documentation of the language and awesome drawing, GUI, networking (TCP and UDP), sound, and console commands (though it doesn't actually use stdin or stdout). The other thing about B+ is the amazing debugging support. It allows you to step through your program line by line and browse variables to see how they're changing and evolving. It does lacks support for project management, but honestly most of their programs probably won't be complex enough to require it. There's also a great (for me at least) book you might want to check out by Sethi Maneesh named "Game Programming For Teens" that starts off with a basic Pong game and guessing games (cool graphics included).

      Obviously, I'd definitely recommend a BASIC language over anything hard-core like Perl (Regex's, odd syntax, difficult documentation of some libraries, and terrifying object orientation support) or C++, but you may also still want to look into other lesser known languages that are a bit newer (I first started in on B+ about 5 or 6 years ago), but I'd definitely recommend a BASIC language with a good debugger and plenty of simplicity. Hope this helps and good luck, I still remember what it feels like to be in their situation.

    50. Re:PHP? by Athaulf · · Score: 1

      Oops, meant to respond to the VB Post, but the thread had changed by the time I had typed up my response. Sorry PHP.

    51. Re:PHP? by Austin+Milbarge · · Score: 1

      > Enforcing OO from the outset is a terrible way to teach programming

      I couldn't agree more! I've always taught C first. Give them good foundations on data types, functions, argument passing, how memory works with pointers in C, arrays, dynamic memory management, etc. Once that stuff is locked in, then OOP principles can be applied later with relative ease because the fundamentals are now there.

    52. Re:PHP? by Samah · · Score: 1

      Yeah Python is relatively clear, but I think "then" is clearer than a colon for a new person, and forced indentation may cause problems for people just starting out. Nothing wrong with it, but I personally think an "if then end" is clearer than "if : ". Whichever works for you. :)

      --
      Homonyms are fun!
      You're driving your car, but they're riding their bikes there.
    53. Re:PHP? by Count+Fenring · · Score: 1

      Your procedural argument seems like a reasonable one to me, but your language choices seem a little off.

      PHP seems like a bad choice to me, not on account of the language, but on account of it being primarily embedded in the web server environment, and the problems inherent there.

      C seems like a sub-optimal (although not really bad, per se) choice on account of the verbosity and awkward syntax of basic string operations, and the overhead of the preprocessor language (Not a big deal, but the first time you say "Erase everything" and they erase #include , it'll be unpleasant).

    54. Re:PHP? by sqldr · · Score: 1

      I see your point, but python, as much as it was originally designed as a teaching language, is now a REAL language, and with functional concepts, a committee that doesn't just say what goes in and out of the core library, but how it should be implemented for utmost usefulness and simplicity (unlike CPAN which is a free-for-all mashup of bad code), and a very clear definition about what is "pythonic", it's a language that is as old as perl, but has stood the test of time better. People are leaving the sed/awk replacement (and a very good one) in droves, and yet, while I see new languages appear, like "boo", "groovy", and the rather pathetic ruby, as a "language slut" who tries out any language out of sheer nerdy interest, I'm yet to find a language which is as perfect as python, and this is a self-perpetuating phenomenon created by perfect-language-zealots who like python and would like to make it progress with the times and keep it that way. The debate on how to implement tertiary operators in python has gone on for FIVE YEARS!!! It still doesn't have one, because nobody can come up with a clean and unambigous (and pythonic) way to implement it while more versed language philosophers simply argue that it's unnecessary (a: what's wrong with an if statement, and b: if you're writing functional code, then...)!!

      My other favorite languages are: haskell, D, REBOL, ARM assembler, and Amos basic, the latter out of nostalgia. The other four are what I would call building blocks of the future of computing if anyone would listen to reason :-)

      --
      I wrote my first program at the age of six, and I still can't work out how this website works.
    55. Re:PHP? by I_want_information · · Score: 1

      How about this:

      if "foo" = myBar then
      answer myBar
      end if

      Revolution

    56. Re:PHP? by Samah · · Score: 1

      Hehe, for bonus points (no cheating!):
      if foo=="bar" then DEFAULT_CHAT_FRAME:AddMessage("Hello World!") end

      If foo = "bar" Then Response.Write("Hello World")

      (cond ((string-equal foo "bar") "Hello World!"))

      If foo = "bar" DrawText("Hello World!", 100, 100)

      Couldn't be screwed with the conditional for the next one...
      >"!dlroW olleH",,,,,,,,,,,94+,@

      ...and I'm out of ideas 5 minutes before hometime.

      --
      Homonyms are fun!
      You're driving your car, but they're riding their bikes there.
    57. Re:PHP? by Barryke · · Score: 1

      even simpler, its GOTO not loop. :)

      --
      Hivemind harvest in progress..
  2. 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 fm6 · · Score: 1

      You can do the same thing with a high-level language and a debugger. 4

    6. Re:Assembly by Ymerej · · Score: 1

      For some people, "sum = num1 + num2" is not intuitive at all. To people not familiar with programming languages with this kind of syntax, it is downright puzzling. Why should "sum" and "num1 + num2" be equal? What happened to make that condition become true? Of course we all know that "=" is the assignment operator, but that's not obvious to a rank beginner. I like Pascal's assignment operator, ":=", because in the above statement it would make it clear that the above statement is not an equality test or an assertion that the two _are_ equal.

    7. Re:Assembly by Anonymous Coward · · Score: 0

      it's no different than a basic algebraic expression like:

      x = y + 5

    8. 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.
    9. Re:Assembly by zach297 · · Score: 1

      If you really want to see how bright they are give them a hex editor and a hefty x86 reference manual.

    10. Re:Assembly by Red+Flayer · · Score: 1

      Teach them assembler. Make them bootstrap a C compiler before they can begin coding in C.

      Then you'll see how bright they are.

      --
      "Trolls they were, but filled with the evil will of their master: a fell race..." -- J.R.R. Tolkien on Olog-hai
    11. Re:Assembly by Repton · · Score: 1

      Well, the problem with assembly is that it neglects the theoretical side. I don't think I'd want to put a ten year old through an assembly course without giving them a thorough grounding in automata theory at the same time.

      Have them sit down and write a primality tester in 8086 assembler, and then build a turing machine to do the same task. That'll learn 'em!

      --
      Repton.
      They say that only an experienced wizard can do the tengu shuffle.
    12. Re:Assembly by Shinobi · · Score: 1

      Thing is, knowledge of assembly is needed to properly verify the debugger output. AND to spot compiler/debugger fuckups.

    13. Re:Assembly by Anonymous Coward · · Score: 0

      got pentium?

    14. 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.
    15. Re:Assembly by Eudial · · Score: 1

      It isn't that terribly hard, especially in real mode with all the stuff BIOS sets up for you left intact. It's just cumbersome. I wrote small assembly programs when I was 14 (I drew some primitive shapes on the screen I think). Compared to the abstract concepts of OOP (that were a bit over my head at the time), I thought it was easier to program assembly.

      --
      GAAH! MY PRINTER IS ON FIRE!!! PUT IT OUT! PUT IT OUT!
    16. Re:Assembly by FLEB · · Score: 1

      On the flip-side, learning to program can give you a good leg-up on algebra. I ended up knowing some of the fundamentals long before it came up in school, just because I'd been working with functional examples since X=X+1; ?X; GOTO 10

      --
      Information wants to be free.
      Entertainment wants to be paid.
      You just want to be cheap.
    17. Re:Assembly by FLEB · · Score: 1

      I agree. Kids these days do need motivation to get out of the house more often.

      --
      Information wants to be free.
      Entertainment wants to be paid.
      You just want to be cheap.
    18. Re:Assembly by robvangelder · · Score: 1

      I learned assembly at age 14. That was on the Amiga writing intros for warez. Writing stuff that was visual was a great way to start.
      Thinking back, understanding machine code opened the door to every other language.

      MC680x0 assembly is beautiful though, unlike x86 which is sex with barbed wire.

    19. Re:Assembly by nanospook · · Score: 1

      I learned assembly when I was about 1 or 2.. Thanks for the building blocks mom!

      --
      Have you fscked your local propeller head today?
    20. Re:Assembly by __aasqbs9791 · · Score: 1

      The key is to teach them together. The computer will give the the reason to learn the math. Rather than just being a bunch of abstract concepts, they have a reason to learn the math. And learning electronics will teach them complex numbers, which are very important to electronics. Just as learning a programming language is easiest if you have a project that requires it, math is easiest to learn if you have a problem that requires it.

    21. Re:Assembly by spectecjr · · Score: 1

      That's how I learned how to program. BASIC at age 6... assembly around age 11.

      --
      Coming soon - pyrogyra
    22. 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.

    23. Re:Assembly by Psychotria · · Score: 1

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

    24. Re:Assembly by Anonymous Coward · · Score: 0

      Or X = infinity :P

    25. Re:Assembly by Basje · · Score: 1

      I learned assembly when I was eleven. BASIC when I was nine. All on a commodore 64.

      I know you're joking, but at the same time you're condescending. Unlike my generation, children today are exposed to computers from birth. Given an intelligent and interested kid, there's no reason he or she cannot learn a low level language like asm. For them it's like playing with lego.

      --
      the pun is mightier than the sword
    26. Re:Assembly by residents_parking · · Score: 1

      Age 12 I had a ZX81. I started with the built-in BASIC and moved quickly to machine code, since I didn't possess an assembler. I didn't always understand what I was doing but I did progress and had a lot of fun. Writing out the machine code was fun in itself.

      Z80 isn't a bad place to start but it was real important that I could read the keypad and poke characters to the screen. Naturally when I got access to a BBC B (someone else's, of course) I would focus on visual stuff. If it had been headless box I don't think I would have done anything at all; I would have lost interest very early on. At that age, if you can't impress your mates (or yourself) you're not going to bother.

    27. 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.
    28. Re:Assembly by Anonymous Coward · · Score: 0

      While I don't think that Assembly would be the best choice, it is not as bad as you imply.

      The major problem with Assembly is that the programs they are likely to be able to write are too short and trivial to interest kids. But as complexity goes, Assembly can be very easy: it has almost no syntax.

      Take a look at this:

      http://jbit.sourceforge.net/doc/tutorial.html

    29. Re:Assembly by Anonymous Coward · · Score: 0

      While assembly itself might have been a joke, I think it would be an excellent idea to start kids off programming LC-3 assembly. Understanding the stack and how pointers and subroutines work is an excellent foundation for just about any sort of programming.

      After about a month or two, you could then move to a higher-level language, be it C, Java, Python, etc.

      Python sounds like a particularly good idea, really. Learning to format code is a pretty important part of writing maintainable code.

    30. 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.
    31. Re:Assembly by Xest · · Score: 1

      You jest, but I learnt C when I was 12 and was doing a little assembly by 14 and I was never classed as one of these "gifted" pupils, far from it.

      If they really are gifted then they should be capable of picking up even the hard languages if I could and was't "gifted" so I'm not sure you even need to do much research on what language to teach- anything mainstream should do fine.

      I think this stems from the often repeated idea that to a good programmer, language is irrelevant and at this age or even regardless of age- at this point in their programming studies they aint gonna be good progammers. I think anyone can learn to program but not so many can become good programmers- that takes real talent and real experience.

      So forget about OOP, good design practices, testing and all that, just pick a language whether it's Pascal, C, C#, PHP or whatever and get stuck in with some simple programs and work your way up. Let whoever is teaching them how to become real programmers (the type that know what language/library/framework/development paradigm to use and when) worry about whether they should be teaching them about design patterns, about paradigms, language concepts in a year or two.

      The key right now is to not bore them with the comp sci. and software engineering stuff, it's far less interesting at that age than it will be to them in a few years when they're ready to learn it for real. The best you should be doing right now is giving them a taster of how programming works- i.e. you write code using variables, conditional statements, functions and so on and get a specific output. It's upto them then whether they enjoy it enough to continue on to learn the real stuff. More to the point, at this age if they really enjoy it and are inquisitive they'll go and learn more themselves- that's what I did and how I became skilled enough to become a professional developer before even starting my degree.

    32. Re:Assembly by Ashtead · · Score: 1

      Expressions containing the assignment operator, like x = y + 5, might look the same as statements of algebra, but the value on the left of the assignment operator does not behave as an alias for some specific value, but as a kind of box into which the result of the calculation ends up stored. Hence we get "impossible" statements like x = x + 3, which is perfectly OK in a fair number of programming languages, but inconsistent and illegal as a statement of algebra, where one of the important rules is that any variable name always is an alias of the same value wherever it appears in each equation.

      To someone who is shaky in regular algebra, this exception is mind-boggling.

      --
      SIGBUS @ NO-07.308
    33. Re:Assembly by aaron+alderman · · Score: 1

      In BASIC there was an optional LET command which reads more intuitively.

      10 LET sum = num1 + num2

    34. Re:Assembly by Anonymous Coward · · Score: 0

      Each command is so simple that there's no chance you'll get hit with a language bug

      Yes, but then you will get hit with a hardware bug.

    35. Re:Assembly by Phreakiture · · Score: 1

      Each command is so simple that there's no chance you'll get hit with a language bug.

      Does FDIV count?

      --
      www.wavefront-av.com
    36. Re:Assembly by Anonymous Coward · · Score: 0

      it always does exactly what the documentation says it does

      In theory maybe... So what are the values of the flags (especially the overflow bit) when you perform a SBC (subtract with carry) operation on a 6502 family chip... in decimal mode. :-)

      For consistancy, you want Brainf**k or a turing machine :-)

    37. Re:Assembly by Sean0michael · · Score: 1

      I think that we could (and sort of do) teach early algebra at a much younger age than we currently do. I remember learning to do math with those sheets of fill-in-the-box equations. Something like a long list of:

      3 + 5 = [ ]
      2 * [ ] = 8
      [ ] - 15 = 6

      All we have to do is replace the boxes with letters, then ask them what number the letter would be. Conceptually, I don't see how it is very different from using a box.

      --
      Funtime Candy Wow! - my plan for eventually conquering Japan.
    38. Re:Assembly by LordNimon · · Score: 1

      No one can learn how to program without having a good grasp of the operators of a language. Students need to learn that symbols and words used in programming languages are only similar to their meanings in English. The "=" in "sum = num1 + num2" is not "equal", but an assignment operator that does a specific thing at a specific time. The fact that it looks like the mathematical equation "Y = X + 5" means absolutely nothing. The sooner a programmer learns that, the better off he'll be.

      --
      And the men who hold high places must be the ones who start
      To mold a new reality... closer to the heart
    39. Re:Assembly by agentultra · · Score: 1

      Assembly isn't so bad. That's what I started with using the Lisa assembler an my uncles "donated" Apple II. Those Hi-res routines were fun to muck around with. I later found a book on BASIC at the library that summer and moved on from there pretty quick.

      Red Code is an assembly-like language used in a programming game called, Core Wars. When I was a kid teaching myself programming, it was games and puzzles that kept me interested. Learning about bits and bytes was just a side effect to me. The theory didn't interest me until I was in my twenties, so save all that stuff for later.

      The great thing is you can take assembly and work on microcontrollers and build robots. Nothing is more cool than building a robot when you're a nerdy kid.

      The wonderful thing is that they'll be able to move on to C or Lisp and have a very solid foundation.

    40. Re:Assembly by feldicus · · Score: 0

      Damn kids with their rock and roll rap music and their integrated development environments...

      feldicus

    41. Re:Assembly by easyTree · · Score: 1

      That'll learn 'em! dagnabbit!

    42. Re:Assembly by Anonymous Coward · · Score: 0

      I don't understand why these kids need to be gifted. I would not consider myself gifted as a child, but my mom was teaching my second grade class Logo programming.

    43. Re:Assembly by fm6 · · Score: 1

      Nonsesne. Ever used Delphi? Turbo Pascal? Any Java IDE or debugger? The Perl debugger? All of these allow you to trace program state without reference to assembly level code.

    44. Re:Assembly by Strake · · Score: 1

      Each command is so simple that there's no chance you'll get hit with a language bug.

      Well, it's entirely possible that in a modern CISC architecture, an instruction such as MMAJNZFKL (multiply, move, add, jump if not zero, and then flash the keyboard LEDs) would be mis-implemented.

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

      Yes Lua.

      You can run it on a PDA or PSP. It has relevance because it can be used to script well known commercial games and networking tools.

      It has a very friendly and informative community.

      The ease of c/c++ integration can be a helper getting started on those.

      Being exposed to first class functions, closures, coroutines etc will help learning other languages.

    2. Re:Lua? by aaron+alderman · · Score: 1

      So you were a script kiddie?

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

    4. Re:Lua? by SanityInAnarchy · · Score: 1

      Considering how many of them will be playing WoW, I think Lua would probably be the most immediately useful, yes.

      --
      Don't thank God, thank a doctor!
    5. Re:Lua? by Gorgeous+Si · · Score: 1

      Lua's a great place to start - the syntax isn't too fiddly, and it's versatile enough to handle anything you would want to show them. It's free, and all you need is a text editor. If you get a semi-decent editor (I use Crimson Editor, which is old but does everything I need) you should be able to set it up so that it executes the program on a hotkey.

    6. Re:Lua? by JasterBobaMereel · · Score: 1

      Lua
          Teaches programming better than Basic/VB
          a better language than PHP
          a better language than JavaScript
          Simpler than Java/C#
          Can Teach Conventional/OO/Contractual/Functional programming
          can be taught on the PSP...and used in WoW (which they might be playing anyway...)

         

      --
      Puteulanus fenestra mortis
    7. Re:Lua? by shutdown+-p+now · · Score: 1

      The problem with JS is that it carries some needless baggage such as the clunky syntax of C. Its prototype-based OO system is also probably overkill for learning. Lua shares many of the same principles, but it does not impose any OO style out of the box (though you can build either class- or prototype-based systems on top of what's there, much like you can in e.g. Scheme), and overall it's quite a bit cleaner.

    8. Re:Lua? by mysticgoat · · Score: 1

      I think Javascript would be an excellent choice, especially on Firefox 3.1+, with a well chosen set of extensions (the Web Developer for one, and the spell checker active). You'd also need to standardize on a good text editor. I'm assuming this will be taught in the Windows environment, so I'd recommend PSPad Editor. It supports syntax highlighting, tabbed editing, and search and replace across multiple files. There are several other good ones, and frankly I don't recall what it was about PSPad that caused me to choose it over the others when I was setting up a similar course in an adult education milieu a couple of years ago.

      This package would get them started with a tool set they will not outgrow for the next five to ten years, no matter where they take their education. The tools are all FOSS so you and the school would be free from worrying about the students violating copyright licenses. There are portable versions of these that fit very nicely on a 1 GB thumb drive with plenty of room left for the student's work: if the budget supports it, you could outfit each student with a portable development environment for under 10USD. You can use Firefox bookmarks to provide them with access to on-line tutorials and reference materials.

      Javascript is excellent in its support of all the facets of programming that can be fitted into a first year introductory course. And there are a couple of big but maybe not so obvious advantages in teaching an intro course with Javascript:

      1. From the beginning the student is shown in a very pragmatic way the differences between a declarative language like HTML markup and a procedural language like Javascript. Teachers of college level programming courses will thank you for that!
      2. The student necessarily learns how to use code libraries appropriately and how to treat imported functions as black boxes. Courses in Basic and Pascal have the unfortunate side effect of teaching the student that he has to re-invent the wheel every time he wants something to roll. Students who first start with these languages tend to have problems with ego involvement in their code later on. But students whose first experiences in programming involve borrowing code that others have written seem better prepared to join collaborative teams.

      Or of course you could teach them Basic, which is adequate for a structured programming approach, and would prepare them for an excellent 1980s educational experience. :-)

  4. T.A. by iconic999 · · Score: 1

    Tiny ALGOL

  5. 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;)

    2. Re:Logo, LISP, Scala, F#, Erlang, and Haskell by nschubach · · Score: 1

      Just make sure that it's done on a Microsoft machine. We wouldn't want any of those teachers telling you you're breaking the law by using non-Windows systems.

      --
      Every time I start to have faith in humanity, I ruin it by driving to work between 7 and 8 am.
    3. Re:Logo, LISP, Scala, F#, Erlang, and Haskell by Nazlfrag · · Score: 1

      11-14 year olds are not going to be making the most out of multi-core CPUs. Scala, F#, Erlang and Haskell won't fit the math abilities of these kids either (and the syntax doesn't help). I like your suggestion of Lisp and Logo though, especially the Logo.

    4. Re:Logo, LISP, Scala, F#, Erlang, and Haskell by Marxist+Hacker+42 · · Score: 1

      Thus my mention of Scala and Erlang, which run just fine in Linux, and F#, which is actually part of Visual Studio 2008.

      --
      SJW: a person who perceives an injustice, and while correcting it, commits a greater injustice.
    5. Re:Logo, LISP, Scala, F#, Erlang, and Haskell by Marxist+Hacker+42 · · Score: 1

      That level of recursion could screw up anyone!!!!

      --
      SJW: a person who perceives an injustice, and while correcting it, commits a greater injustice.
    6. Re:Logo, LISP, Scala, F#, Erlang, and Haskell by Marxist+Hacker+42 · · Score: 1

      Logo and LISP are the oldest functional languages. Scala, F#, Erlang, and Haskell are just modern corruptions of these originals. As for their math abilities- I was doing recursive algorithms at 14 (long division), as well as advanced algebra. Are you saying that these "gifted" students won't have the ability to handle that, which is just about the limit of functional languages anyway (you're NOT going to be programming a non-iterative approach to calculus in any of the languages mentioned)?

      --
      SJW: a person who perceives an injustice, and while correcting it, commits a greater injustice.
    7. Re:Logo, LISP, Scala, F#, Erlang, and Haskell by camperdave · · Score: 1
      From the article:

      Which is a big deal, because the chipmakers have essentially said that the job of enforcing Moore's Law is now a software problem.

      Why on Earth would you want to enforce Moore's law? It seems to me that we should be doing everything in our power to break it. Why merely double performance every 18-24 months? Why not quadruple it, or ten-tuple it? Seriously, has there been a change in the laws of physics that now allows us to put 1024 transistors in the space that one would have fit twenty years ago? Is it that the machinery that we make chips with now would have been physically impossible to build decades ago? Will the universe kerplode if we triple the transistor count instead of double it? As far as I know it's still spray, expose, etch, dope, repeat - just with smaller wavelengths.

      --
      When our name is on the back of your car, we're behind you all the way!
    8. Re:Logo, LISP, Scala, F#, Erlang, and Haskell by Anonymous Coward · · Score: 0

      Scheme! There's something great about starting out with an interpreted language - instant results keep kids interested.

    9. Re:Logo, LISP, Scala, F#, Erlang, and Haskell by hal2814 · · Score: 1

      Is F# part of as in right out of the box? That's pretty cool if so. In Visual Studio 2005 it was hidden in a room in Microsoft's basement with a sign reading "Beware of the leopard" on it.

    10. Re:Logo, LISP, Scala, F#, Erlang, and Haskell by Stalinbulldog · · Score: 1

      Nah, start them with Scheme and really scare them away from programming languages. On a more serious note, stay away from Java, cin beats (new BufferedReader(new InputStreamReader(System.in))).readLine(); any day of the week.

    11. Re:Logo, LISP, Scala, F#, Erlang, and Haskell by Anonymous Coward · · Score: 0

      Wow, I hope you're right. I could never fully get my brain around OOP, no matter how much I try.

      Some brains are just more linear than others. That will be especially true, I think, in a group of 11 to 14 year olds.

    12. Re:Logo, LISP, Scala, F#, Erlang, and Haskell by jdh3.1415 · · Score: 1
      I love Haskell. I really, really do. However, I think Haskell is a bad choice for a beginning programming language. Since it is strictly typed and uses type inference, a mistake in one part of a program can produce an error in code far from the original mistake.

      When I was learning Haskell, I spent ridiculous amounts of time fixing some very frustrating type errors. I've been programming for over 20 years; someone who is starting would likely become discouraged.

    13. Re:Logo, LISP, Scala, F#, Erlang, and Haskell by try_anything · · Score: 1

      Scheme! There's something great about starting out with an interpreted language - instant results keep kids interested.

      Scheme also has the advantage of two brilliant books for beginners, The Little Schemer and The Seasoned Schemer. I think eleven-year-olds would get a kick out of the fact that these books are written for adults, written in fact to be challenging and engaging for adults, yet are written in a very simple format with very simple language, exactly as if they were written for children. The message to adults -- set aside your burden of knowledge, become childlike, start from scratch with Scheme. The message to kids -- this is an area where you can approach serious stuff on equal terms with adults.

      As a child, it is always gratifying change to hear that adults would understand better if they were more childlike and less handicapped by experience. That alone is enough to fire a kid's enthusiasm for programming.

    14. Re:Logo, LISP, Scala, F#, Erlang, and Haskell by Anonymous Coward · · Score: 0

      Can someone pass me the kool-aid please?

    15. Re:Logo, LISP, Scala, F#, Erlang, and Haskell by Anonymous Coward · · Score: 0

      I agree. Though I'd say Scheme has a very clean feel to which makes it easy to learn.

    16. Re:Logo, LISP, Scala, F#, Erlang, and Haskell by shutdown+-p+now · · Score: 1

      F# is not a part of VS2008 at the moment, and there was no final F# 1.0 release either. For now, you still have to download it separately. That said, its VS integration is certainly much better than what it was.

      It does get a lot of publicity from Microsoft lately, though: it has its own section on MSDN, there were a lot of mentions of it on PDC 2008, including a dedicated session, but also in other presentations (e.g. Anders spoke about F# as one source of inspiration, and demoed it, during his C# futures talk), and so on.

      Finally, it has been known for a long time that Microsoft is going to "productize" F# (that is, release it as a boxed commercial product). And finally, just now, Don Syme has announced that F# will be shipped as part of VS2010, and that further F# releases won't be separate, but will be part of VS2010 betas.

      And yeah, it's a big deal. To the best of my knowledge, it's the first time a functional language (not just in name, but with roots in the traditional academic FP - ML/OCaml) is commercialized and pushed together with a development environment by the company of size and influence of Microsoft.

    17. Re:Logo, LISP, Scala, F#, Erlang, and Haskell by Anonymous Coward · · Score: 0

      When I started my AI degree at Edinburgh all the informatics (AI, compSci,software eng, etc) started out by learning haskell for the first semester. this worked out pretty well, but I don't think many of us have used it since.

    18. Re:Logo, LISP, Scala, F#, Erlang, and Haskell by shutdown+-p+now · · Score: 1

      Logo and LISP are the oldest functional languages. Scala, F#, Erlang, and Haskell are just modern corruptions of these originals.

      Lisp is also the oldest imperative language :) I wouldn't really call it functional, anyway - at best, it's multi-paradigm.

      F# is not a "modern corruption" of that anyway - unless you could every single language released after Lisp as its "modern corruption". F# is a rehash of Caml, which is derived from ML, which is most definitely not derived from Lisp (I mean, static typing & Hindley-Milner? c'mon).

    19. Re:Logo, LISP, Scala, F#, Erlang, and Haskell by slipnslidemaster · · Score: 1

      It's a TRAP!!

      --


      "What the hell is an aluminum falcon?"
    20. Re:Logo, LISP, Scala, F#, Erlang, and Haskell by Marxist+Hacker+42 · · Score: 1

      I remember using Pocket Scheme on Windows CE for X10 access- and I'd have a tendency to agree.

      --
      SJW: a person who perceives an injustice, and while correcting it, commits a greater injustice.
    21. Re:Logo, LISP, Scala, F#, Erlang, and Haskell by Anonymous Coward · · Score: 0

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

      I certainly hope not. We don't need another bunch of religious zealots pushing their paradigm on everybody else to the exclusion of all other methods. I would like to see more functional programming myself, but I don't want to see the OOP revolution happen again with another paradigm.

  6. 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 Swizec · · Score: 1

      LOGO is too basic for 11-14, when I first started learning programming it was in LOGO yes, but that was at 9 ... when we were 11 we were taught a "real" language which was Pascal and that's what I'd suggest.

      The main advantage of Pascal is that it's nice and simple while still feeling leet enough the kids aren't getting the feeling they're being taught how to use a toy and I can assure you 11 year olds, let alone 14, will look at you funny when you tell them to move a turtle (that's what I remember it being called) around the screen drawing senseless shapes.

    2. Re:LOGO! by LWATCDR · · Score: 1

      Take a look at Squeak. I feel that it is the new Logo.

      --
      See my blog http://ilovecookes.blogspot.com/ for light hearted technical information.
    3. 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
    4. Re:LOGO! by DragonWriter · · Score: 1

      can assure you 11 year olds, let alone 14, will look at you funny when you tell them to move a turtle (that's what I remember it being called) around the screen drawing senseless shapes.

      Sure, moving a turtle around drawing "senseless shapes" is probably not going to be very interesting to 11-14 year olds, especially those on the older end of that range, but then even the versions of Logo I used at 11 could be used to a lot more than that, and modern, agent-based versions of Logo are designed to do quite a lot more, easily. Take a look at NetLogo or StarLogo TNG.

    5. Re:LOGO! by deniable · · Score: 1

      Squeak feels like a playground to me. Any 'real' programming tool feels like work. A first lesson with Squeak would include time to find the neat stuff buried inside it. Combine that with the fact that you can alter pretty much anything and you work with a single file VM image and kids could go wild with it. The eToy (?) interface is also pretty cool from a simple, not really programming, but making things happen point of view.

    6. Re:LOGO! by DragonWriter · · Score: 1

      I feel that it is the new Logo.

      I think Logo (in forms like NetLogo and StarLogo) is the new Logo.

    7. Re:LOGO! by cptdondo · · Score: 1

      Cool! Logo is a great choice since it covers everything form the very, very basic to the really complex. Thanks for pointing out netLogo! That's one I can use.

    8. Re:LOGO! by Swizec · · Score: 1

      True, LOGO can be used to do some spunky stuff. But how much of that is available, even graspable, to a completely complete beginner to programming? They have to first go through the senseless shapes.

      Personally I think if I hadn't started learning programming at a very early age when I was still easily amused I'd never be able to learn. The drag of getting to somewhere useful ... it's just too much.

    9. Re:LOGO! by iris-n · · Score: 1

      I beg to differ.

      PHP has an important drawback. It's awful. I've once showed a kid the scripts (beautifully indented, of course) I use for the my site, and he was all "what the bunch of $$$s ?". These arrays filled with "" didn't help either.

      It doesn't sound like much, but a clean, nice syntax is a lot less scaring than some uninteligible mess.

      --
      entropy happens
    10. Re:LOGO! by Blyry · · Score: 1

      Everybody in my middle school took a class in logo during 7th grade (12-13 years old) - it alternated with keyboarding and was taught by a math teacher. The first half of the class was basic programming and logo concepts, and the second half was a "final project" - a program that had to be at least a few minutes long and tell a story..basically a primitive flash movie.

      The story was completely up to us with some constraints.

      My project replicated a mario level. Mario dropped out of the sky, with his theme music playing. There were text boxes that had narration. he moved his way across the level, ducked under and jumped over arrows from Zelda guys, squashed them, used a turtle to kill Wario, entered the castle to rescue the princess, only to find it empty (the princess is in another castle!).

      I loved that class, and although I was relatively clueless to the concepts I was being taught, what I did learn was very helpful later when I actually got interested in programming and started toying with vb.net, asp and php.

      I wish I could list what I did learn, but it's been 10 years... There's no reason to view logo as "senseless shapes" or too basic - it depends on your area but you would have to balance that with your knowledge of the students prior knowledge.

      Also, The first "real" language I used was vb.net, and looking back, while I didn't learn alot about data structures and such (that may have been my teacher though, I don't think he knew that much in retrospect), I did make tetris, brick breaker and tic tac toe. I liked the gui aspect. There was some overhead learning the windows forms, but it was pretty intuitive with .NET, probably moreso than with a gui tookit addon for something like Python. Also, it gave me an intro to using Visual Studio, something I haven't even seen in my 2 years of college as a compsci major. When I get to my senior year and apply for design projects, some of which are (very well) funded by Microsoft, that experience will be nice and hopefully give me a leg up on other applicants

      Sorry, I ramble

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

    12. Re:LOGO! by Anonymous Coward · · Score: 0

      Somewhere along the line, as my ambition and my skills both grew, my ambition outpaced my skills and programming started to really suck. Every time I wanted to do something cool, I did about ten percent of it and then realized that even if the last 90% was as easy as the first 10%, it probably wouldn't be worth it.

      Then I thought, I'll get my friends to help. But they wanted to do different stuff than I did. Then I thought, what about management? But when I thought about that I realized that management didn't mean you were an artist with a bunch of assistants. It was more like being a hostage negotiator between a repressive government and a band of smelly terrorists, with the product as the hostage.

      And then I basically dicked around for a few years trying to figure out what I was interested in.

      I'll let you know where the story develops from here ;-)

    13. Re:LOGO! by Arancaytar · · Score: 1

      I took my first steps around computers with Logo (as well as MicroWorlds, which uses a variant of it).

    14. Re:LOGO! by Lars+Arvestad · · Score: 1
      My 12-year old son has had a great time with squeak, and so has a couple of his friends. You can make some simple but fun games and you work with graphics all the time, which that age group really wants.

      Using squeak, you get acquainted with all the basic concepts of programming, so I believe it is a terrific starting point. Both my son and a friend of his are now ready for the next level, writing programs, and we just have to find what would be the suitable continuation (no pun intended!)

      --
      Reality or nothing.
    15. 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.
    16. Re:LOGO! by Alpha-Toxic · · Score: 1

      Pascal has a lot of advantages as a language for teaching.

      First or all, it is very verbal and this makes it very easy to understand and "read" the code. This also forces you to write well formatted code as you have to put the intervals around "AND" and "OR" and so on. This will stay with the kids long after they have switched to other languages.

      Also Pascal is not a very high level language (similar to C), so it does not hide the inner workings of the computer. The kids _have_ to learn how the computer works, or they'll never really become programmers. LOGO, Python, Java... they all hide what is going on bellow. Although I'm a Java programmer ATM and generally like it, I find it ridiculous to teach Java as a intro to programming (and a lot of unis do that).

      Another thing, I think that one should not use a "production" language for teaching. Counter intuitive, but let me explain. As I see it, a good programmer has to be language-independent. The inevitable change will make them realize that the language just does_not_matter and the main concepts are all the same in any language.

      BTW, I have not seen LOGO before, so I just checked it and I personally don't like the syntax, though it's just my opinion.

      As for BASIC, well Dijkstra said it best "It is practically impossible to teach good programming to students that have had a prior exposure to BASIC: as potential programmers they are mentally mutilated beyond hope of regeneration.". He also said somewhere that teaching BASIC should be treated as criminal offence and I completely agree...

    17. Re:LOGO! by ResidentSourcerer · · Score: 1

      Some of this depends on what the previous experience of these gifted kids (sorry, I like the term...) is. I found in teaching that a lot of kids in grade 8 and 9 had a real struggle with the abstractions of algebra, and a year later had no trouble with it.

      On the flip side, I see kids in my computer lab during their free time playing with exceedingly lame java script games, the best of which (while still lame) allowing construction of courses for their 2 dimensional glyph motorcycles.

      I think there is a lot to be said for logo. You get a connection between text and graphical elements, a connection between abstract and "real"

      As to senseless shapes: That can change very quickly. I saw one logo into class where the teacher spent most of the first hour teaching kids how to type the program in, and getting across to them that "almost right" wasn't good enough for the computer to understand you. By the end of the class each kid could draw a box. Hello World!

      By the end of the second period he'd introduced procedures and they were drawing mullioned double hung sash windows.

      The end of the next period saw them drawing a house, then the first assignment -- to draw their own house.

      I was fascinated just watching this class and stayed after school to play myself.

      With a combined graphic/command world you could implement all sorts of neat things that would keep kids fascinated:

      Swarm behaviour, automata, fractals, simulations.

      --
      Third Career: Tree Farmer Second Career: Computer Geek First Career: Teacher, Outdoor Instructor, Photographer.
    18. Re:LOGO! by DragonWriter · · Score: 1

      True, LOGO can be used to do some spunky stuff. But how much of that is available, even graspable, to a completely complete beginner to programming? They have to first go through the senseless shapes.

      Not really. Sure, in an agent-based logo you might have an exercise or two about moving a single turtle around that would cover some of the basic movement commands, but the natural progression there wouldn't be to more senseless shapes, its to the kind of simulations you can do with multiple turtles that interact with each other and with their environment ("patches").

    19. Re:LOGO! by mooterSkooter · · Score: 1

      You should become a motivational speaker.

    20. Re:LOGO! by Anonymous Coward · · Score: 0

      When I was 10 (1997) we were taught LOGO and I absolutely hated it. Did not get anything out of that class. I still remember the R90 and the turtle. I would not say it taught me how to program at all (playing around with my Ti-83 did more of that). From personal and relatively recent experience, I would advise against using it, if you want your students to actually like programming.

    21. Re:LOGO! by Anonymous Coward · · Score: 0

      Yeah, I agree. I learned on Logo, and it's very fun. It's simple to get going, and you can do a lot more with it, but it's not overly complicated.

      You can do loops, functions, etc. It won't be "real world" as in you aren't writing for the main OS, but it's very fun, and interesting for younger kids.

      If they were much over 14, I wouldn't suggest it, but for younger kids, it's great.

    22. Re:LOGO! by Anonymous Coward · · Score: 0

      NetLOGO http://ccl.northwestern.edu/netlogo/ is pretty sweet. Posting as AC so my employer doesn't find out the website is powered by turtles.

    23. Re:LOGO! by Anonymous Coward · · Score: 0

      My 10 year old cousin recently asked me to teach him to program, and logo is what I've started him off on. It's what I started on, and it worked for me ;)

  7. 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 morgan_greywolf · · Score: 1

      I completely agree with your choice of Python, of course. ;)

      Python is a multi-paradigm, dynamic language. You can use Python to teach functional programming, object-oriented programming and imperative programming. And you don't have to worry about getting bogged down in technical details such as memory allocation, garbage collection, etc. The fundamentals such as hashes, lists, etc., are already built-in to the language and Python is batteries-included (tm) -- you have everything you need to do basic GUI programming, databases, simple and complex math, systems-level programming, etc., right in the box!

      Of course, you can say the same thing about Tcl/Tk, Ruby and Perl, too.

      But I don't recommend teaching Perl to anyone. My theory is that the reason Larry Wall is losing so much of his hair is that he pulled it all out writing Perl code...

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

      I have some experience teaching a little python to adults (community college physics students). It was mostly pretty good. If the choice was pascal or python, I'd have a hard time imagining why anyone would pick pascal in this day and age. There are free books that use python as an introductory language, e.g., this one.

      Another reasonable possibility other than python would be ruby. When I taught python to beginners, the significant whitespace really was a source of confusion. Ruby avoids that. There's this book for beginners (incomplete).

    3. 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!
    4. Re:Python by Petronius · · Score: 1

      Agree. With Python, you can start with a simple script block and progressively introduce functions, classes...to full OO. You don't need the full-blown object apparatus to create a simple program, yet you can go full OO if you want to. You can also introduce lambda functions (to some degree). Plus, with Python, you teach a key element of programming: elegance.

      --
      there's no place like ~
    5. Re:Python by MikeBabcock · · Score: 1

      Naw, he probably pulled it out seeing the crap people have written with his language.

      --
      - Michael T. Babcock (Yes, I blog)
    6. 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
    7. Re:Python by Anonymous Coward · · Score: 0

      "Python"

      qft

    8. Re:Python by unTrainedUser · · Score: 1

      In high school I started with QBasic, and I would certainly recommend against that. Maybe it was just my teacher, but QBasic taught nothing but bad practices (we were encouraged to use GOTO!).

      However, I would personally recommend against Python as a first language. Not because I think it would be difficult, but I think the use of white space as syntax is not a good habit to introduce to beginning programmers. C can be syntax heavy for beginners, but if you actually teach what the purpose of it is, such as why you have a main function, it will get beginning programmers into hopefully good codewriting practices. Ruby is pretty clean and would be OK for beginners as well. Perl lets you get things done pretty easily, but I don't think I would recommend it over C or Ruby to start with.

      Pick something that will be somewhat interesting to them, but at the same time make sure you pick something that will teach them good coding practices. They won't be happy if they need to learn how to program all over again later because of bad habits.

      Oh, and stay away from VB. Besides some abnormal syntax (like 'comments), it is useful to teach something cross platform and it is always good to sart with easily portable code - your students may not use the same OS at home as you do at school.

    9. Re:Python by genjix · · Score: 1

      i say python as a developer.

    10. Re:Python by hoytak · · Score: 1
      Definitely python. Here's a few unmentioned-so-far reasons:
      • Widely used, not obscure,
      • Great intro to OSS as there are tons of great OSS libraries to do almost everything -- website development, science, games, guis, etc. I.e. when the kid asks, "how can I do X?", you don't have to say "Learn another programming language."
      • 11-14 year olds? PyGame. Enough said.
      • Legibility of the language encourages tinkering.
      • Legibility of the language streamlines your ability to teach the algorithmic aspects of the code.
      • Has a command line shell, so you can be teaching them to use it as both a super-calculator as well as a programming language. Makes it easy to get the "Hello, World" stage.
      --
      Does having a witty signature really indicate normality?
    11. Re:Python by bobolikebeer · · Score: 1

      Python all the way. Its stated goal is HUMAN READABILITY what else could you want in a first language? Also, it's not a "kiddie" language. You can get really low on the comp stack, or you can interface with other languages and script some web stuff really high up. Also... big reason... GOOGLE!!!

    12. Re:Python by ggeens · · Score: 1

      Recently, I came across this book: Hello World!

      It's geared towards kids with no programming experience and it uses Python.

      (I haven't read it, but I am considering buying it for when my daughter is old enough.)

      --
      WWTTD?
    13. Re:Python by try_anything · · Score: 1

      I think Python would be great for a first language for kids. Pascal would be a great second language, or a first language for kids who have a desire to be hard-core.

      It's easy to forget how fascinating something like Pascal or C++ is the first time you learn it. "Each piece of data lives in memory as a pattern of bits. Because memory is just strings of bits, the program must know what kind of data is encoded in the bits before the memory can be interpreted as a data value."

      If you're a jaded C++ programmer, reading that makes you think, "Oh, hell, I see where this is going. I'm going to have to declare the type of every single &^*)&*ing variable. Why the hell do I still have to do this stupid stuff in 2008? Screw it; I've had my fill of shared_ptr<vector<shared_ptr<shared_ptr<Blob> > > > > > > > > > > > > > > and I don't waste my time on type declarations unless I get paid for it."

      A kid, on the other hand, thinks "Oh. So that's how it works. I knew Python was too good to be true! The computer doesn't 'just know.' There's a way that it knows, and I'm going to understand it! I'm going to know the secret!"

      And then polymorphism, which is especially cool if it's presented to you from two directions, like a cheap paperback thriller bringing two strands of the plot together. Motivation... implementation... motivation... implementation... motivation... implementation... until suddenly you are blown away by the awesome power and simplicity of the vtable.

      It gets a lot harder to appreciate things like that when you get old and jaded.

    14. Re:Python by Anonymous Coward · · Score: 0

      I support your view of Python, but was Qbasic really that bad? It was my first programming language too, and I really enjoyed all the time I spent with it. :-)

      As a less practical alternative (cost), but one that would resonate with math-interested folk, how about Matlab?

    15. Re:Python by shutdown+-p+now · · Score: 1

      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.

      Well, it depends on how you actually go about teaching QBASIC, right? If you teach kids FUNCTION and SUB and FOR/WHILE rather than GOTO & GOSUB, then that's what they're going to use. And vice versa.

      The really good thing in QBASIC was its simplistic but readily-available graphics library. A lot of algorithms and concepts (such as code reusability via functions, and recursion) are most easily explained on concrete examples of drawing some pretty stuff on that screen. For that, you need a basic graphics library that makes it really easy to open a graphics output window and draw some simple primitives there (lines, circles, ellipses etc). I am not aware of anything like that for Python - oh, I'm sure there are interfaces to full-fledged graphics libs such as Cairo, but that is overkill and actually detrimental to the task at hand due to extra complexity.

    16. Re:Python by changos · · Score: 1

      I taught my 7 year old nephew phython, nothing fancy. We used the console and I told him how to use it as a calculator. Then he learned how to store answers in variables that could later be used. He also learned how to create very simple functions that did the same as what he had learned previously.

      It was a good experience, we didn't go past what I mentioned previously since he was 7. But now that he is 12 he like to do web pages. But he knows what a language can do.

    17. Re:Python by EvanED · · Score: 1

      Well, it depends on how you actually go about teaching QBASIC, right? If you teach kids FUNCTION and SUB and FOR/WHILE rather than GOTO & GOSUB, then that's what they're going to use. And vice versa.

      You act as if the teacher will be the only resource out there; but he won't be. There are tons of websites, books, etc. that people will turn to, and my impression is that most of them don't cover that.

      The really good thing in QBASIC was its simplistic but readily-available graphics library.

      Sure it does. It's at least not bad at all, and as an instructor you could provide code that does any boilerplate that's necessary. (I don't know how much is necessary, but I think it's at least only a very little bit.)

    18. Re:Python by Anonymous Coward · · Score: 0

      I think Python with PyGame would be a great starting place.

      It's almost always a mistake to say "when I was a kid", but when I was a kid I really enjoyed starting with simple games (like a shooter in BASIC on the Apple ][+, remember the 40x40 with 4 lines of text 16 color mode?) and tweaking things.

      If I were teaching programming these days, I'd write a simple space-invaders sort of thing in PyGame (or find a super simple one someone else had already done), and start by having them tweak enemy speed, or shooting rates, or something like that, and work from there.

    19. Re:Python by Anonymous Coward · · Score: 0

      I'll second Python. Simple, easy, not platform specific, and it forces (somewhat) structure for code readability.

    20. Re:Python by Simozene · · Score: 1

      I use Python all the time at work and I remember my boss telling me he taught his 8 year old daughter Python. It's an incredibly useful language that is simple and easy to learn.

    21. Re:Python by shutdown+-p+now · · Score: 1

      You act as if the teacher will be the only resource out there; but he won't be. There are tons of websites, books, etc. that people will turn to, and my impression is that most of them don't cover that.

      Actually, when looking for resources on QBASIC specifically, I don't think you'll find any that will ever use GOTO/GOSUB - especially today.

      Sure it does. It's at least not bad at all, and as an instructor you could provide code that does any boilerplate that's necessary. (I don't know how much is necessary, but I think it's at least only a very little bit.)

      Looks pretty nice. So far as I can tell, all you need is:

      import pygame.display
      import pygame.draw
      import pygame.color
       
      pygame.display.init()
      screen = pygame.display.set_mode((640, 480))
      red = pygame.Color("red")
      pygame.draw.line(screen, red, (0, 0), (100, 100))
      ...

  8. TI-85 by Brigadier · · Score: 1, Insightful

    Always enjoyed programming teh old TI-85 calculators. Not sure if yrou still required to use them in school, it allows simple graphical stuff, plus it is mobile which woudl appeal to a kid.

    http://tibasic.wikia.com/wiki/Main_Page

    1. Re:TI-85 by Anonymous Coward · · Score: 0

      Most schools use TI 83/84s now for the lower level courses, and some use TI-89s for calc and fewer still for pre-calc. The TI-89 supports C in addition to TI BASIC, but I actually did much less programming on the TI-89, because between the builtin functions, and the ability to define custom functions in terms of the builtin functions, pretty much any simple math related need could be filled.

    2. Re:TI-85 by Anonymous Coward · · Score: 0

      no ti-83s

    3. Re:TI-85 by Anonymous Coward · · Score: 1, Interesting

      Nowadays the TI-83+ (or the more-powerful and compatible 84+) are standards for high school math classes. My first programming experiences were on those. I'm not sure I would recommend it, if only because you don't have the pleasure of a full-sized keyboard. On the other hand, you can teach the kids how to make programs to do their math homework for them. :)

    4. Re:TI-85 by Anonymous Coward · · Score: 0

      84+

    5. Re:TI-85 by Yuuki+Dasu · · Score: 0

      My earliest progamming experience was with clunky, limited TI81+'s TI-BASIC. I had the hardware with me throughout the school day, so I could use it whenever I wanted. I couldn't make very many spelling mistakes, because you chose actions from a list. If your program quits, your variables stay in memory, so you can do basic analysis of your program as you go from the normal-function level (use A as your variable, quit program, type "A", press enter, and see what your variable is at).

      There were downsides to this method, too. The documentation was poor (more like nonexistent, trying things out on my own and discovering syntax by poring over friends' programs and trial and error). Formatting was lethal - I probably went crosseyed a hundred times trying to find the missing parentheses. Commands were hard to input if you didn't memorize where to find them ("ok, third menu item, then fifth menu item gets you if(...").

      Bottom line, though, I feel that language choice isn't the most important issue for you, by a long shot. A lot of people are talking about establishing strong coding practices as if expecting them to enter the workforce at the age of 15; this seems a bit misdirected, to me. You have some really bright kids, who are going to be mostly more interested in what they can do than how they can do it, and you should not try to pidgeonhole them all into a professional programmer role. I know it goes against the orthodoxy here, but quick and messy is the better way to teach people for whom coding will be a casual means to an end - those who need particulars of garbage collection and data typing can cross that bridge when they need to. Especially when they're only 12 years old!

    6. Re:TI-85 by siwelwerd · · Score: 1

      I got my start programming a TI-89. First in TI Basic, then on to C with tigcc (http://tigcc.ticalc.org/). It has the advantage that kids can drag their calculator around and show their friends the stupid little game they made.

    7. Re:TI-85 by secretcurse · · Score: 1

      Agreed. I spent many, many hours in boring classes programming for my TI-86. I'll never forget the look on my algebra 2 teacher's face when I programmed my TI-86 to multiply 2x2 and 3x3 matrices and show the work so that I could do those stupid calculations in seconds rather than waste time doing them by hand. For bonus points, have the kids write a program for the calculator that accepts input from the calculator's buttons that looks exactly like you cleared the memory. This will prove invaluable in high school.

      --
      I'm using all of my mod points to mod ancient memes down. Please join me.
    8. Re:TI-85 by 77Punker · · Score: 1

      The first programs of any significance I ever wrote started when I was in the 8th grade and realized my TI-83+ could do most of my homework for me if I learned how to program it. That was the beginning of an academic downward spiral, but now that I'm in the working world I don't regret it at all because writing programs to do work in the place of humans is my job now.

    9. Re:TI-85 by rdnetto · · Score: 1

      We use TI-89 Titaniums, but I'm pretty sure the language is the same.

      --
      Most human behaviour can be explained in terms of identity.
  9. 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
    3. Re:DO NOT by Frans+Faase · · Score: 1

      Visual basic, I mean the version before .Net, has one of the most beautiful event mechanism I have ever found in a programming language, which allows truely elegant programs. Also the fact that every object has a COM interface, allows you to perform interprocess communication in a very nice manner. I have seen Visual Basic being used for a communication stack for controlling a scientific measurement intrument, through a series of communicating servers. The measuring instrument involved was of world class, sold all over the world, a price ranging between 100,000 and 500,000 dollar depending on the configuration.

      Okay, I agree, it does have its limitations, but as it is with each type of programming language, it can be abused to write the most ugly type of programs but also be used to write the most beautiful and elegant programs. Just simply bashing a language because it is misused simply shows that you have no understanding of what is writing programs is all about

    4. Re:DO NOT by iamhassi · · Score: 1

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

      What "comp sci department" starts with VB? The local universities all start with C/C++ for computer science majors. Only students starting with VB are those majoring in information systems, who go on to become office workers that can use a computer rather than programmers.

      --
      my karma will be here long after I'm gone
    5. Re:DO NOT by Anonymous Coward · · Score: 0

      Cut the crap sheeps! VB(pre-.net) and BASIC in general is a superior approach to teach programming. Because the poor programmer isn't exposed to having to deal with brain-dead libraries. Output functions are abstracted and just work.
      In BASIC you PSET(x,y) and you have drawn a nice dot that can be part of a function or a 3d raytraced model. Do that in C or even Python bloat.
      Modern(as in 1980s) dialects have structured and oo programming paradigms in them.
      Classical BASIC is really assembly with a good library, and it teaches the right mindset for low level programming, as opposed to C that shoehorns CS to low level programming.
      And incidentally ' comments are much more sane than int a,*c; if(a/*c){ /* TODO: Pray that this is parsed correctly */

    6. Re:DO NOT by bishiraver · · Score: 1

      Well, that explains your spelling ;)

      In all seriousness, when I found out that the games that came with QBASIC were editable, I immediately asked my father how to cheat at them. He handed me the Learn QBASIC book. I was probably 7 at the time.

      Went through Logo in middle school (in a LEGO robotics class), and then Pascal and C++ in high school; C++ again and PHP as well in college (not university.. I'm a drop out...)

    7. Re:DO NOT by Red+Flayer · · Score: 1

      WTF? That was a completely tongue-in-cheek post, intended as humor only.

      The fact that it was modded up as insightful scares the bejeezus out of me.

      Note to anyone who is tempted to take the parent post seriously:

      DO NOT TEACH PROGRAMMING ON BASIC TO 11-14 YEAR OLDS.

      Sorry for the all-caps, but it's that important. Basic is useful as a tool to teach very introductory programming logic to young kids, maybe 8 or 9 years old. Logo is just as useful for this purpose, and is less apt to confuse them once they get into more advanced topics. By the time they are 11, but especially 14, you should be steering them to a more modern language, for example one that has memory management. At that age, they shouldn't need the use of line numbers to help them with sequential logic, loops, etc.

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

      I completely disagree. When you're dealing with 11-14 year olds you are trying to capture their interest in the field - not train them to be software engineers. If they aren't presented with some sort of visual feedback thats similar to what they are exposed to every day (i.e. the web) I could easily see them losing complete interest. Why not start out with something a little more fun, like adobe flex? You can get them rolling with free tools for educators with flex builder, they get immediate visual feedback for their applications with a drag and drop interface, and you still teach them the basics of loops and OOP. Kids don't grow up dreaming about Fortran. I me

    9. Re:DO NOT by zoid.com · · Score: 1

      Our professor made us use punch cards for our first project to show us how they had to do it. TRS-80 basic was so nice compared to that.

    10. Re:DO NOT by MindlessAutomata · · Score: 1

      I was going to take C++ but found out that VB was a prereq for it. I was not pleased. I easily passed the class as I have had the experience with VB already but if you're going to go on learning more programming I wouldn't recommend VB simply because of habits it promotes etc.

      I'm not saying VB doesn't have its uses. But as a serious teaching tool? Come on.

    11. Re:DO NOT by moosesocks · · Score: 1

      Perhaps BASIC is good as a very brief introduction. (Eg. spend a few days on it, and move on as soon as you're vaguely comfortable)

      Concepts such as line numbers and GOTO simply don't exist in other languages (or are extremely bad practices if they do). The thought processes that go into learning a BASIC program are somewhat different than what goes into any programming language that's actually in widespread use. (I also have issues with languages that rely on whitespace. It just ain't natural)

      Personally, I learned on C++, and although today I would shy away from actually writing a full-fledged application in the language, it was a damn good place to get a start. The concepts that are fundamental to C tend to be present in virtually every other language. It also teaches you to really appreciate those higher level languages for when you don't want to implement quicksort by hand.

      If nothing else, C's syntax seems to be the baseline to what all other languages are compared.

      --
      -- If you try to fail and succeed, which have you done? - Uli's moose
    12. Re:DO NOT by cylcyl · · Score: 1

      I rather disagree. Kids at that age, even bright ones, tend to have short attention span. VB allows programmers to achieve lots of visual output more easily than most other languages. As kids grew up with visual paradigm, it is far more relateable than command line oriented languages like C, pascal, and assember.

      I would prefer Java over VB, to teach idea of cross platform performance, while still having a few GUI APIs available from the standard Java SDK to enable them free visual expression.

    13. Re:DO NOT by Red+Flayer · · Score: 1

      Heh, my post about vanilla basic was intended entire tongue-in-cheek.

      Basic is useful to teach elementary-school-aged kids concepts of logical progression, loops, etc. Instructions in a program are likened to whole number stops on a number line... at 10 do this, at 20 do that.

      Tweens and kids in their early teens are fully capable of learning loops and iterations without the crutch of numbered lines.

      I fully agree with you wrt C. I learned to program in Basic, but that was because I had a Commodore PET... once I learned assembly (which we called "computer language" at the time) and FORTRAN, things started to make more sense... though I find for teaching basic concepts Pascal works better than C because you don't get as bogged down in the syntax.

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

      I second this advice. I got just a taste of Logo when I was in grade 3, and then various flavours of basic until I finished high school. It was enough to get me into a computer science program at uni, but....well now I'm in law school. Draw your own conclusions.

      YMMV, anecdote =/= evidence, yeah yeah yeah.

      --
      Rule of Slashdot #0: You and people like you are not representative of the larger population. - A.C.
    15. Re:DO NOT by Farmer+Pete · · Score: 1

      If I was teaching basic, basic, programming skills...I'd almost want to use VB Script. It's very simple and everything (well, mostly) you learn can be transferred to Visual Basic.

    16. Re:DO NOT by Anonymous Coward · · Score: 0

      VB.NET is pretty much only for VB6 holdouts, C# is pretty similar but way more advanced and sane.

    17. Re:DO NOT by FLEB · · Score: 1

      Hear, hear.

      I think part of the problem with getting people excited about programming these days is that the capabilities of the machine have grown so much, and talented people and teams are using that capability. It's hard to get something out that looks comparable to a "real computer program", at least with many of the "hard" languages. Thinking back, when you had 16k, 64k or 128k of RAM, and user-driven "Applications" weren't nearly as ubiquitous, the mere fact that you could throw up an image on the screen was exciting enough to get you to learn to program. I suppose, though, that this gap is filled by things like, as you said, Flex, memory-managed scripting languages, or even something like JavaScript+HTML, where you can make something respectable on the same sort of time/payoff scale.

      --
      Information wants to be free.
      Entertainment wants to be paid.
      You just want to be cheap.
    18. Re:DO NOT by Anonymous Coward · · Score: 0

      You have to be kidding me. If there really are comp sci departments using VB for any of their classes, they shouldn't be allowed to call themselves that.

      Now if they are vocational schools as opposed to an educational institution, that's a different story.

    19. Re:DO NOT by electrosoccertux · · Score: 1

      Perfect time to get them a graphing calculator. I started with a TI-83+, like the rest of our high school. I was bright, and always bored in math. My teacher said if we could program our own functions to solve problems we would be solving on tests, then we could use them ON the test. Of course I wasn't allowed to sell them to other students; but it was nice that I got to goof off for most of class. So I spent the first 5 minutes of class figuring out what we were learning for the day, and the last 50 playing calculator games, programming functions to solve the stuff we were being given on tests, and doing homework.

      The fun thing was finishing my test in 20 minutes when the rest of the class took 45 :)

      I wouldn't get them a TI-83+ though, those can't do much useful beyond Algebra; get them a Casio or possibly a TI-89 (be warned though, the TI-89 is terrible for complex equations because a). it's not RPN, and b). you can't see more than about 30 characters in your equation at once, and scrolling from the beginning to halfway through a complex circuits equation with imaginary numbers and all that to fix some parentheses takes about 15 seconds, but you have to do it about 4 times because you inevitably put the parentheses in the wrong places the first 3 times. HUGE waste of time on tests).

    20. Re:DO NOT by stor · · Score: 1

      Heh, and here I was about to violently disagree with your post. I'm glad it was a joke, and can't believe I missed it. Emulator, tape, sign-off... lol.

      I too am scared by the fact it was modded Insightful. Hum.

      Although unintentional, it made your .signature appropriate :)

      -Stor

      --
      "Yeah well there's a lot of stuff that should be, but isn't"
    21. Re:DO NOT by spectecjr · · Score: 1

      Sorry for the all-caps, but it's that important. Basic is useful as a tool to teach very introductory programming logic to young kids, maybe 8 or 9 years old. Logo is just as useful for this purpose, and is less apt to confuse them once they get into more advanced topics. By the time they are 11, but especially 14, you should be steering them to a more modern language, for example one that has memory management. At that age, they shouldn't need the use of line numbers to help them with sequential logic, loops, etc

      Modern Basics don't have line numbers. Actually, come to think of it, I'm not sure the original BASIC had line numbers either.

      I wouldn't teach them a memory managed language until much later to be honest. Much more useful to go from BASIC (hey, this is how you program!) to Assembly (hey, this is what a computer really is... here's this memory thing... it's on a chip... each thing you store in it has an address). Makes it much easier to learn about things like pointers later.

      What'll also help is a good understanding of flag registers, and bit arithmetic. That's a skill which from all the interview candidates I've seen over the past 4 years has nearly completely died out.

      --
      Coming soon - pyrogyra
    22. Re:DO NOT by KingMotley · · Score: 1

      I would completely disagree. For an introduction of programming, using visual basic is an excellent choice.

      The parent is getting caught up in syntax issues which is weird. Does it really matter what is used to denote a comment?

      Visual basic is nice (well the development environment) because it allows people with little or no experience to actually get things working without getting tied/tripped up by things unrelated to programming concepts (Like syntax). The visual studio environment with it's auto-complete, and real-time syntax checking will help keep the student frustration level low. Later, you can move them to a different platform that is more complex to setup and use if you so choose.

    23. Re:DO NOT by Canazza · · Score: 1

      My first Officially assesed self-written programme was written in Visual Basic for my Advanced Higher computing, I chose VB because we had learned TrueBasic in standard grade and thought "It'll be just the same but with more stuff I can do, like graphics" - Don't believe it, seriously, it's nice as a scripting language for Office but for anything else it's superceeded in ease and function by practically any other language.
      I learned more about programming from my TI-83 Graphing Calculator than I did from Visual Basic, and the reults were more fun too.

      --
      It pays to be obvious, especially if you have a reputation for being subtle.
    24. Re:DO NOT by mcvos · · Score: 1

      Modern Basics don't have line numbers. Actually, come to think of it, I'm not sure the original BASIC had line numbers either.

      Then how can you do GOTO 10 if you don't have line numbers?

    25. Re:DO NOT by mcvos · · Score: 1

      I would prefer Java over VB, to teach idea of cross platform performance, while still having a few GUI APIs available from the standard Java SDK to enable them free visual expression.

      No, Java is way too verbose. I'd start with a language where you don't have to write a new class for every little thing you do. I'd go with either a functional language, or a much cleaner OO language like Ruby or Python.

    26. Re:DO NOT by BoneFlower · · Score: 1

      Pre-.NET VB I'd agree. That language was a mess. It theoretically had the language support for proper programming practices, but it was a ridiculous pain to actually code that way.

      VB.NET changed that a great deal. It's actually good.

      That said, I've seen books, and the VB course I took in college, that did little more than update VB6 material to use VB.NET syntax. This is not going to work. VB.NET was not a simple syntax update, it is basically a new language with a few coincidental similarities. It's about as close to VB6 as C# is to C.

    27. Re:DO NOT by rpsoucy · · Score: 1

      It depends on the target group.

      Visual Basic can be a good teaching tool if you're working with students who have never written a line of code before, because they can actually produce results that resemble what an application is supposed to look like in their mind. For these students it can be very empowering and may actually get them interested in programming.

      The important part is that you don't waste time teaching the IDE or the Syntax, but rather you focus on programming concepts (variables, operators, loops, control, etc).

      If the class is filled with gifted students who have already written some code, it might be better to jump into C and teach them the things that most new programmers struggle with like pointers, computer architecture, and operating systems. For these students, starting with VB would be an insult.

      I agree there are a lot of people who abuse VB and use it for too long (a full semester of VB for example). But it is more than appropriate for a short introduction class targeted at young children who may have never seen a command line.

      You also have to acknowledge that Visual Basic .NET is a different beast than VB. VB .NET is a fairly strong and powerful language and more than suitable for a large variety of applications today... .NET isn't my first choice, personally, but I'm tired of all the fanboys here making emotional statements on programming languages being horrible because it's not their choice, rather than being pragmatic and acknowledging their individual strengths.

      VB .NET might be the perfect fit for this guy.

    28. Re:DO NOT by Anonymous Coward · · Score: 0

      Why the sarcasm ? I learned to program that way, although it was using an Amstrad CPC 6128. Still have it today in fact. Excellent machine. I learned both Locomotive Basic, Z80 machine code and some COMAL-80 that way.

      And starting on paper is not a bad idea either, to make you think what you need to do.

    29. Re:DO NOT by Anonymous Coward · · Score: 0

      Why not? When I started programming at 11, Visual Basic was my first language... I think it's quite nice. It doesn't let the motivation die by being easy. The only thing I don't like about VB is that it's not portable (Mono is crap atm)

      And about bad practices - now I'm 15 and programming Ruby and C and I don't feel influenced by the VB habits. (I'm rather influenced by bad C habits :D)

      I think VB is nice to start with and the current VB.NET is really object oriented.

      At our school we learn Java... I think it's a quite good choice - it's portable, it makes the children learn C-like syntax and bringing GUI is not as hard as in many other languages. So Java is what I would suggest as well.

    30. Re:DO NOT by Anonymous Coward · · Score: 0

      These are 11-14 year old kids.
      You may have mastered a more complex language at that age, but if so, you are the exception.

      I think VB is a good choice for new programmers. Sure they may learn some bad habits, but odds are that things are going to change drastically from whatever language they use by the time any of them are actually in the industry. It does allow them to get an application running fairly quickly with syntax that may be easier for them to understand.

    31. Re:DO NOT by Anonymous Coward · · Score: 0

      I coded some AOL proggies when I was around about that age in Visual Basic :P

    32. Re:DO NOT by Anonymous Coward · · Score: 0

      10 Print "NO"
      20 Goto 10

    33. Re:DO NOT by Anonymous Coward · · Score: 0

      I learned BASIC on my ZX Spectrum in the early 80's and it (squeezed into a Visual Environment) still keeps me gainfully employed to this day.

      Thats what it stands for dummy... Beginners All-purpose Symbolic Instruction Code.

      Only a C++ or C# Idiot would berate BASIC this way. BASIC variants are used in many many places, especially in MS circles (VBA for example). Knowing how to control and interact with a variety of MS products is a useful skill indeed, if for example, you would like to be able to run your code on 90% of the worlds computers.

      The whole point of coding in the real world is to make a computer do things, not massage your developers ego by being incredibly complex and unreadable. 'Write Less code' is a pretty good mantra and BASIC does help with this.

      I know plenty of C/Java Variant Languages but i still choose VB because it is so much easier for other developers (with less experience than i) to pick up. Thats not to say that BASIC cant write bad quality code, it easily can but that takes no less discipline than using a C biased language.

      Lets not forget BTW that C# and VB both compile to P-code so what difference is there there anyway?

      I much rather be a MS/Basic w**ker than an C/Apple one..

    34. Re:DO NOT by Anonymous Coward · · Score: 0

      I know you're joking, but I actually think making them use a cassette drive to learn about code bloat sounds like a great idea. Now if we could just get Microsoft programmers to try one...

    35. Re:DO NOT by MindlessAutomata · · Score: 1

      Okay, I'd concede that as a very basic intro VB can be useful to introduce variables and a few other concepts. But a full semester of VB, I agree, is not ideal. It's really a waste of time and is windows-centric. IMO, I'd rather not shove an OS-specific language down intro student's throats so they don't get the wrong idea.

    36. Re:DO NOT by Anonymous Coward · · Score: 0

      I find it funny that one of your main problems with VB is the apostrophe commenting. There is so much else wrong with it, why does the comment character matter?

    37. Re:DO NOT by Anonymous Coward · · Score: 0

      I'd also suggest making them use a cassette tape drive,

      One of the 1st useful things I wrote for my C64 allowed not-really-random access to the cassette. You could turn the tape motor on and off by POKEing a value into memory location (for some reason, on my machine, you had to do it twice.) I also wrote a simple FPS in a maze with their line characters and Sprite graphics. You could do worse than a C64 emulator.

    38. Re:DO NOT by Anonymous Coward · · Score: 0

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

      Finally, someone saying it the way it should be done. Make them slow down and think about it and why and where there might be an error in it. You know use the matter between their ears to check it instead of machine feedback. It'll force them to actually find out about and think through the effects of the commands they are putting together rather than "the machine did/didn't like it". They'll be a lot better at programming and logical thinking with the practice. Practice that many get to little of these days.

  10. 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 agendi · · Score: 1
      I think that is an excellent suggestion. Kudos.

      I think though that often people don't have a problem with the "first" it's coming up with a good transition plan that helps kids move on to the second and third languages or paradigms etc. When to expose them to other approaches before they get too set in one and it over-fits them to what programming means.

      --
      I just can't be bothered.
    3. 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!
    4. Re:Look at POV-Ray. by Anonymous Coward · · Score: 0

      sorry for the off-topic post, but maybe you could explain to me what rendering geeks' obsession is wit mirrored spheres and checkered landscapes??? Thanks!

    5. Re:Look at POV-Ray. by dafrazzman · · Score: 1

      I disagree. Just being able to see something with eye candy is way different then programming at the low level. With C++ it's like "I'm telling the computer what what to do, how to handle things." The higher level you get, the less that impact.

      Also, I think one of the most important aspects of beginning programming is learning how to solve problems. Anybody can learn syntax, but if that's all you're doing, it can get boring. With C++, a beginner will undoubtedly run into problems, both syntactical and algorithmical. Solving those problems is the key to programming skill.

      Furthermore, if graphics is the only thing it does, however, it would probably be a bad choice, even if it presents useful problems. With C++, you can do console programming, Windows programming, or just about anything.

      --
      My preferred name is frazz, but someone keeps taking it. If you see him, tell him I said hi.
    6. Re:Look at POV-Ray. by FLEB · · Score: 1

      CSG was the first time I actually realized there was a use for geometry class, you know, short of "suppose you're landing a plane, and nobody taught you how to fly a plane, and all you have is math".

      --
      Information wants to be free.
      Entertainment wants to be paid.
      You just want to be cheap.
    7. Re:Look at POV-Ray. by jpmec · · Score: 1

      if you want "visual payoff" why not an interpreted language like python?

    8. 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
    9. Re:Look at POV-Ray. by -+r · · Score: 1

      well, how old i am. in my first hardware course, we were supposed to make an 8008 play the stars and stripes. i *think* i got a squeak. first language ? mine was pascal, and i loved it. it very much provided a direction for the furure. c ? well, in those days, you don/t terminate your string correctly, you terminate the computer for the rest of the users. pascal at least would check for range errors you could easily get by in c. can not say i recommend java (and not c++, and *certainly* not any of the microsoft only languages). back in my school days, i was so interested in the language question i took all the courses i could - ada (run thru a lisp interpreter !), lisp, prolog, apl ...when i retired, i ended up liking perl the best. but it is *not* a good place to start.

      --
      - r
    10. Re:Look at POV-Ray. by benzzene · · Score: 1

      Great suggestion. POV-Ray is an excellent way to introduce people to programming concepts *and* to help them visualise those concepts. For example: you could make a loop that generates a line of spheres n units long, then incorporate that into another loop to make an array of spheres, and then to 3-dimensions. POV-Ray taught me a lot about programming.

    11. Re:Look at POV-Ray. by Iron+Condor · · Score: 1

      Jeeezus, you're not serious about this, are you? The POVray is an absurd clusterfuck of arbitrary (and constantly changing) assumptions without any kind of structure to it. Quick: what is "x": is it a number or a vector? (and is it a three- or five-dimensional one) and why? And in what context. And yes, you can kinda contort it into looping (barely) but, wow, better not get your variable names be such things as "x" or "y" because then they conflict with reserved words. And, oh, no common rule as to when you need {}s and when you can omit them, or what can be an element of what else and ... and ... and ... and not a line of documentation about the parser anywhere.

      Sorry for the rant, but POVray can make grown hackers cry; as an introductory language it is completely inappropriate.

      --
      We're all born with nothing.
      If you die in debt, you're ahead.
    12. Re:Look at POV-Ray. by Jraregris · · Score: 1

      You were lucky! We didn't even have a TV! We had to get up half an hour before we when to bed, clean the pond, eat a bucket of freezing gravel and we got cut in half by our father when we came home.

    13. Re:Look at POV-Ray. by stealmyaltima · · Score: 1

      Coding a porn site has a visual payoff as well but I would not recommend it. Although it would be a good intro into database driven web design.

  11. Bubble sort by finnw · · Score: 1

    The first algorithm I actually understood and was able to re-implement (in Sinclair Spectrum BASIC) was a bubble sort, so I would recommend that. I had been experimenting with the graphics functions for a couple of months before but I did not learn much from that. I think the important thing is to avoid pointers and also avoid dependence on any OO concepts (it's easy to forget how hard they were to learn.)

    --
    Is Betteridge's Law of Headlines Correct?
  12. Ruby/Python by robbrit · · Score: 1

    These languages are clean, easy to learn, and abstract away from the machine architecture enough that young'ns don't need to worry about all that stuff just yet.

    You don't really expect things like Fibonacci numbers or binary calculators to entertain a 12-year old do you? Why not make something actually fun, like a game. One class when I was in university had an assignment where you had to remake the "Hunt the Wumpus" game. Little games like that might be better for getting kids into programming than the boring stuff like Fibonacci.

    1. Re:Ruby/Python by Swizec · · Score: 1

      Maybe I'm just a regular slashdotter, but I remember being fascinated by fibonacci, bubble sort and other similar stuff when I was 12 ... sure I was working on an "operating system" on the side and made a few games. But you want to know those lovely numbers first.

      I still have fond memories of how much love I held for finding prime numbers and just seeing all those digits roll down the screen, knowing they're all primes. It was magnificent!

    2. Re:Ruby/Python by DiamondMX · · Score: 1

      Someone mod this man +1 Ubergeek

  13. 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 LWATCDR · · Score: 1

      So why not Java?
      It is available for Free.
      IDEs for it are also available for free.
      Tons of documention , books, source code, and tutorials are available for free.
      And it runs on Linux, Windows, and OS/X so you are not limited to using Windows or working with Mono.

      --
      See my blog http://ilovecookes.blogspot.com/ for light hearted technical information.
    3. 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?

    4. Re:C# is the best alternative... by ion.simon.c · · Score: 1

      Um...
      Delphi?

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

    6. Re:C# is the best alternative... by Anonymous Coward · · Score: 0

      If you're still using that book as a reference 10 years later, I think the book failed to live up to the promise in its title.

    7. Re:C# is the best alternative... by HeronBlademaster · · Score: 1

      You've never had to look up a rule or interface or function that you learned 10 years ago? I envy your memory.

    8. Re:C# is the best alternative... by Tom · · Score: 1

      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.

      Why?

      No, seriously. I don't see a single reason to calall C# (or Java, for that matter) a good language for beginners.

      --
      Assorted stuff I do sometimes: Lemuria.org
    9. Re:C# is the best alternative... by s_p_oneil · · Score: 1

      I agree that MS is not the way to go for free stuff. Like a drug dealer, they offer the first few hits for free to get you hooked.

      About major languages that aren't free, I'm not sure how it stands today, but the last time I looked at Flash you couldn't get started with it cheaply (which is why I never tried it). Having said that, to keep the kids interested, you should go for a high-level language with rich built-in multimedia capabilities (for making games). Something like Flash would be ideal for young teens, but if it's not cheap, you could go with Python + PyGame, Ruby + RubySFML (or some other similar multimedia extension), or perhaps Lua with multimedia extensions.

      I'm a bit biased because I wrote RubySFML, which I wrote so I could teach my son how to program by helping him write simple games.

    10. Re:C# is the best alternative... by Anonymous Coward · · Score: 0

      Just throwing my hat in the ring for Squeak. This is pretty much what it excels at.. It's

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

    12. Re:C# is the best alternative... by lordSaurontheGreat · · Score: 1

      Having been forced to go through other Java programmer's code, I'd have to agree that being aware of memory management is good.

      Having also learned how to program, I'd have to disagree that C++ is a good place to start.

      Why not Objective-C? It's like C, and you can use GnuStep if you don't have a Mac Lab.

      --
      Consider yourself spoken to.
    13. Re:C# is the best alternative... by HeronBlademaster · · Score: 1

      I've never used Objective-C, so logically I would be unable to recommend it ;)

    14. Re:C# is the best alternative... by lordSaurontheGreat · · Score: 1

      It's never too late to start.

      --
      Consider yourself spoken to.
    15. Re:C# is the best alternative... by Anonymous Coward · · Score: 0

      Why not BlueJ with Java?
      If you've never seen BlueJ, check it out and hear my point before you move on. http://www.bluej.org/
      Be sure to view this page as well.
      http://www.bluej.org/about/why.html

      The IDE was designed to provide a gentle environment to learn object oriented programming. There is a textbook that goes along with it, but you could easily develop your own content. (eg. the "Person" class)

      BlueJ helps eliminate the initial problems with learning how to program. In Java, it's primarily the main method. Do you remember seeing this for the first time?
      public static void main(string[] args)
      The other problem is I/O and the concept of exceptions.

      With BlueJ, you get started with objects first through the object test bench.

      I've said enough. Do yourself and your future students a big favor and check out BlueJ.

    16. Re:C# is the best alternative... by Anonymous Coward · · Score: 0

      XNA offers a lot of potential for getting kids interested in programming.

    17. Re:C# is the best alternative... by iYk6 · · Score: 1

      Holy fuck! That was the exact same book that I used to learn C++, about 14 years ago. I strongly recommend AGAINST it. Typos up the wazoo, missing semi-colons, parentheses, and entire statements. The English was poor too. If it was an advanced book, the typos wouldn't be so bad; an experienced programmer could figure out what was wrong from the compiler errors. But for a beginner, who doesn't know exactly what the errors mean, and who has never seen a working example of what this book is supposed to teach, this book is a terrible suggestion.

      It's been 14 years, and I still remember this book. I'm blaming you if I have nightmares tonight, sadist.

    18. Re:C# is the best alternative... by HeronBlademaster · · Score: 1

      Surely you're thinking of a different book. Jesse Liberty has an excellent command of English, and I didn't encounter any errors in the code.

    19. Re:C# is the best alternative... by DSmith1974 · · Score: 0

      Absolutely, start 'em off with Emacs and makefiles, M-x compile, C-x o, M-g [np] RET. Weed out all non-hackers at an early stage! Also, get the brightest sparks to look up recursion in the K&R C index.

      --
      It is not immoral to create the human species - with or without ceremony, Samuel Clemens.
    20. Re:C# is the best alternative... by Anonymous Coward · · Score: 0

      Keep in mind that VC# Express is free...

    21. Re:C# is the best alternative... by bigngamer92 · · Score: 1

      I was looking into C# but after coding in VB (yeah that's what my HS taught) I had learned that Microsoft documentation is large and confusing. The school had been using VB 6 and going to VB 2005 had me constantly looking up how to do things. This meant I spent 20 min in MSDN every time something broke (a lot). Python however has the best tutorial I have ever seen to come with a compiler and as long as you can get over the no Screencast advantage that MSFT has then Python is beautiful.
      With their experience Syntactical whitespace is as strange as Java's Semi-Colons. (And don't get me started with String [] args)

    22. Re:C# is the best alternative... by jonaskoelker · · Score: 1

      It has an absolutely *KILLER* IDE

      I'm only leaving emacs for it if it comes with a decent editor!

    23. Re:C# is the best alternative... by Lumpy · · Score: 1

      Funny... a single install of Ubuntu (FREE) and they have an entire development suite that is not crippled or tied to bad programming practices. (Visual Studio)

      So I agree! get them an Ubuntu disk and let them know it will run like a screaming squirrel on that old Piece of crap P4 3ghz machine that their dad gave to them for playing around with. They will have the entire world of programming AND a powerful and advanced Operating system as well.

      Thanks for the TIP!

      --
      Do not look at laser with remaining good eye.
    24. Re:C# is the best alternative... by tehcyder · · Score: 1

      I admire your bravery, but surely one criticism even the biggest MS fan couldn't make about Linux was that it was too expensive (as in, er, root beer)?

      --
      To have a right to do a thing is not at all the same as to be right in doing it
    25. Re:C# is the best alternative... by claytonjr · · Score: 1

      Just to reiterate the above point, if you go the java route, then I'd recommend BlueJ. It is an IDE, of sorts that visually introduce the java programming language.

      http://www.bluej.org/about/what.html

    26. Re:C# is the best alternative... by Anonymous Coward · · Score: 0

      Wow, cool, free shit.

      Wait, what do I want shit for? Maybe I'll learn Python instead.

    27. Re:C# is the best alternative... by Anonymous Coward · · Score: 0

      It got rated funny,

      but it's true? Microsoft does a lot of effort to attract the hobby programmer:
      * free Express IDE's
      * robotics studio, xna gaming studio
      * msdn channels
      * 101 source code examples
      * video tutorials
      * free express sql database

      If you attract the kids, they'll stay with you when becoming a programmer.

    28. Re:C# is the best alternative... by DiamondMX · · Score: 1

      Throws and Catches
      OO-only
      Object.java.problems.tooManyReallyLongWords

    29. Re:C# is the best alternative... by logixoul · · Score: 1

      Great but you forgot to address his point about documentation.

      MSDN is a pain to browse but damn is it comprehensive

    30. Re:C# is the best alternative... by lordharsha · · Score: 1

      When you try to post an insightful comment, and it gets modded to +5 funny, there's something wrong with your logic. And yes, this IS my best shot. Pathetic, I know.

      --
      I am, and that is sufficient.
    31. Re:C# is the best alternative... by Anonymous Coward · · Score: 0

      You are smoking bad junk, my friend.

      Their OS isn't free. Go with Linux and thousands of free programs, including every free IDE and language you can imagine.

      Microsoft and free should never be mixed in the same sentence. That is like reversing the polarity of every atom in the universe.

    32. Re:C# is the best alternative... by Anonymous Coward · · Score: 0

      I concur - either Squeak or Processing would be much better.

  14. Robo Rally by amclay · · Score: 0

    For the times where you want to have fun in class - it's a fun game, and it really teaches you the aspects about thinking ahead when doing functional programming.

    --
    It's all fun and games till someone divides by 0. Then it's hilarious.
  15. Games! by argent · · Score: 1

    The most fun things were games. There are some very simple games that you can write programs for relatively easily.

    If you can get ahold of an old book that got ME interested in programming in the '70s... David Ahl's 101 Basic Computer Games... it will have a lot of examples of games that are readily implemented. Don't worry about the code, of course, but consider the games themselves as exercises.

  16. Squeak by LWATCDR · · Score: 0

    It really is a great looking learning environment.

    --
    See my blog http://ilovecookes.blogspot.com/ for light hearted technical information.
  17. 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?

    1. Re:My best shot by Anonymous Coward · · Score: 0

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

      Not quite as awesome. I'll take Visual Studio over Eclipse any day.

    2. Re:My best shot by Anonymous Coward · · Score: 0

      Why?
      As far as I can tell, when it comes to actually helping you _write_ code, Visual Studio is inferior in every way...

    3. Re:My best shot by spectecjr · · Score: 1

      How do you figure? Or are you one of those strange and weird people who think that having a drag & drop UI builder means that somehow the IDE is writing all the code that does something with the UI for you?

      --
      Coming soon - pyrogyra
    4. Re:My best shot by pfafrich · · Score: 1
      Indeed for gifted students Java is a good choice. I know one 15 year old home ed kid who started on Java using eclipse at 14. I was quite amazed to see that a year later he was writing fully object oriented code.

      Contrariwise the syntax can confuse some. Some students I've had to teach seem to get on a lot better with VB type syntax than the C type syntax.

      One thing I would recommend is something which has a good graphical output: drawing lots of circles squares etc. These give a good feedback between the code and results and plenty of oportunity for loops and logic. I provide students with a simple framework with a Canvas and a timer and then let the student develope on top of that framework. Plenty of oportunity to develope classic games from the framwork: tennis, snake ...

      --
      There are four sorts of people in the world: fools, lunatics, idiots and morons. - Umberto Eco, Foucaut's pendulum.
    5. Re:My best shot by Doctor+Faustus · · Score: 1

      what decent programming language exists that is not free nowadays or does not have loads of free support material available?
      Flash?

    6. Re:My best shot by T+Murphy · · Score: 1

      Good point- there are no good languages left unmarred. I say skip all of them and just have them write their own languages from scratch.

  18. 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 retech · · Score: 1

      Legos in general. With all the various bits out there have them make a Goldberg machine to accomplish a set goal. It's a great way to see cause/effect, logic and think outside the box.

    2. Re:Lego Mindstorm by rolfwind · · Score: 1

      I second this. If you want an actual programming language, as a lisp fan I can only put forth scheme or perhaps better, LOGO:

      http://en.wikipedia.org/wiki/Logo_(programming_language)

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

    4. Re:Lego Mindstorm by peterofoz · · Score: 1

      We had gen 1 of this which was great and are planning to get the NxT version. For schools and clubs there is also a challenge competition at local, state and national levels. http://firstlegoleague.org/community/HomePage.aspx

    5. Re:Lego Mindstorm by bigkahunah · · Score: 0, Flamebait

      The software is LabView from National Instruments in Austin, TX. If you contact them they would probably give you at least one cd for free. I'm interning with them in the summer. LabView is a visual programming language that they sell with the fact that you don't have to get so worried about the little details i.e. semicolons in the wrong place and such.

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

    7. Re:Lego Mindstorm by SydShamino · · Score: 1

      They have a flow-chart programming interface that I had great success introducing programming to my 11-13 year old cousins

      For the record, it's a version of NI LabVIEW, and it's a good precursor for those students who may end up in the F.I.R.S.T. robotics competition or in a job in research or engineering.

      --
      It doesn't hurt to be nice.
    8. 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.

    9. Re:Lego Mindstorm by Anonymous Coward · · Score: 0

      I was programming C at that age, and when my grandmother bought me Lego Mindstorms it was an insult. Don't patronize these kids; let them learn the real thing.

      Not to mention the fact that that stupid Lego junk was $200 and my little Linux box was a piece of crap I bought at a garage sale for $5. Maybe Mindstorms is more available to wealthier people, or maybe it's cheaper now, but you have to be joking if you think kids these days don't have ready access to computer software.

    10. 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. Re:Lego Mindstorm by TimeOut42 · · Score: 1

      The nice thing about Mindstorms is that you can also use a C-Like language called RobotC (www.robotc.net), Java (lejos.sourceforge.net), NXT (comes with the robot made by National Instruments) and/or LabView (grown up version of the NXT language, www.nationalinstruments.com)

      If you are really ambitious take on the FIRST Tech Challenge (FTC, www.usfirst.org) and setup a robotics program.

      Being able to get the immediate feedback from a robot after programming it is a good motivator for the students. It also adds a dimension for those students who are more mechanically inclined.

      If you are interested in more info about this program take a look at Texas Institute of Educational Robotics, Northwest Vista College, San Antonio, TX.

      http://www.accd.edu/nvc/programs/tier/default.htm

      TimeOut

    12. Re:Lego Mindstorm by djodom · · Score: 1

      I twelfth this idea, Lego Mindstorms NXT is based right on top of LabVIEW, which is a graphical programming language that abstracts the need for syntax. Absolutely perfect to demonstrate the idea of programming- IE loops, variables, subroutines, etc without the constant stumbling block of "does not compile" errors.

    13. Re:Lego Mindstorm by TimeOut42 · · Score: 1

      I work with high school students programming both Lego Robots and National Instruments cRIO-based controller robot. We program with that with C++ and LabView.

      You can actually put a JVM on the Lego NXT (brain for the Mindstorm). You can also program the NXT with the full blown version of LabView. You can even program your NXT in C# or VB.Net using Microsoft Robotics Studio.

      If you were insulted by the Mindstorm, you didn't do enough research into the extraordinarily open platform that you had within your reach.

      Also, don't make the assumption that all students have the same access to computers that you do. In my team of 4 students beta testing the new National Instruments cRIO for FIRST robotics, we only had one student with a computer and internet at home.

      TimeOut

    14. Re:Lego Mindstorm by Anonymous Coward · · Score: 1, Insightful

      One step up over Mindstorms is the producer, National Instrument's LabVIEW. I is graphical and is a commonly used system in Industry.

      The FIRST robotics program is a good place to go, It is a robotic competition run through high schools. I started at 16 and now have a basic understanding of c/c++ and am learning LabVIEW along with several Freshmen and Juniors.

      With FIRST the programming team actually learns how to write code for the robot, involving everything from drive code, to sensor inputs, and writing autonomous code

    15. Re:Lego Mindstorm by Lars+Arvestad · · Score: 1
      I am also a fan of mindstorms, as many others replying in this thread, but I have seen that kids tend to "get stuck" simply building Lego... With motors and whatever of course, but the actual programming part has become parenthetical and very simplistic.

      There is nothing wrong with that, of course! I have recommended mindstorms as a xmas present just a few days ago, but if you are really looking at teaching programming, then you will have to work a little extra to make the kids focus on the programming part.

      Squeak is quite similar to the mindstorms programming environment, all graphical, and the kids will have a blast.

      So, buy the kids Lego Mindstorms for christmas and use Squeak for teaching programming...

      --
      Reality or nothing.
    16. Re:Lego Mindstorm by Lars+Arvestad · · Score: 1

      Someone got me to mix up the programming environments! My son has tried Scratch, not squeak...

      --
      Reality or nothing.
    17. Re:Lego Mindstorm by Savantissimo · · Score: 1

      The site processing.org has a beautiful gallery of projects, all with very little coding. In fact, all the most impressive simple demos I have seen in the past decade were written in Processing.

      --
      "Is life so dear, or peace so sweet, as to be purchased at the price of chains and slavery?" - Patrick Henry
    18. Re:Lego Mindstorm by ch33zm0ng3r · · Score: 1

      I would go that same route except I would recommend robotbattle http://www.robotbattle.com/ It probably bypasses more than a few real programming concepts but it is fun and can introduce kids to creating logical instructions for a machine. Plus, it's free.

    19. Re:Lego Mindstorm by Anonymous Coward · · Score: 0

      A good example of a tangible feedback is the four 4's problem.

      http://www.wheels.org/math/44s.html

      Get them to try it by hand first, it's hard. Then get them to write a program to exhaustively search for solutions. The language is secondary to the task. I wrote a simple program to do this back in grade 7 in plain old Microsoft Basic (C) 1981, the Basic which uses line numbers and goto's and fit within a few k of RAM.

    20. Re:Lego Mindstorm by PTMH · · Score: 1

      I've never used Mindstorm but I was a kid, way back when. This is clearly the way to go. You want them to come back the second day after all.

      Another alternative would be making little games in Flash. Actionscript 2 was really easy to learn and you get to make things explode! You can trick them into learning...

    21. Re:Lego Mindstorm by MrEd · · Score: 1

      Education also works well when you're doing something competitive! That's why I spent so much time learning to program in RoboWar back in elementary school. You built a robot, then program it, then set it loose in an arena against other robots. Competition winners from 1992-2003 are available for download, so there's lots of examples. It's open source, and has a Windows version...

      --

      Wah!

    22. Re:Lego Mindstorm by dubz · · Score: 1

      LOGO turtle. Also, Python turtle.

    23. Re:Lego Mindstorm by Ted.Brewster · · Score: 1

      I agree. Lego Mindstorms, the old one or the new one. Lego has an educational program to make the kits easily available to schools. It's programming, but in a graphical, orderly way that prevents too many obvious mistakes. Advanced students can then go on to use the kit with Java or C, for which there is plenty of information available. Plus, you get to build a gadget that rolls around and picks up stuff.

      Otherwise, I would recommend either some flavor of Logo or Smalltalk/Squeak, both of which were designed with education in mind.

      On the third hand, many of us learned programming with a simple version of BASIC, like QBASIC, or even GW-BASIC. Microsoft now has available a free thing called Simple BASIC (http://msdn.microsoft.com/en-us/devlabs/cc950524.aspx).

      There's always AppleScript for the Mac fans, which is supposed to be like English ... but isn't.

      And APL was originally designed for teaching math. But you don't want to go there.

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

    1. Re:Snake Wrangling for Kids by caseih · · Score: 1

      Forgot to mention, this book is about Python! Just so the moderators know! :)

    2. Re:Snake Wrangling for Kids by Anonymous Coward · · Score: 0

      You karma whore! :P

    3. Re:Snake Wrangling for Kids by sciurus0 · · Score: 1

      I'm seconding Snake Wrangling for Kids. I'm really impressed by the amount of care the author has put into it. The text has already been updated for Python 3 (the Python 2 version is still available). There are separate editions for Windows, OS X, and linux so that the screenshots will match the system the reader is using.

  20. 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.
    1. Re:Objective C by Stele · · Score: 1

      Sure, but the syntax will make them blind and they won't be emotionally ready to work around all the bugs in iPhone OS. I think the OP is trying to help them prepare for the real world, not experience it first hand before puberty. Besides, everyone knows Objective C is only really used by Apple and all we need are a bunch of smug 12 year old UBER smart-asses.

    2. Re:Objective C by Anonymous Coward · · Score: 0

      Of course, if some of them don't have iPods, they can sit around with their thumbs up their asses while their hipper friends do cool things to their iPods.

    3. Re:Objective C by GrahamCox · · Score: 1

      If they have iPods, this also gives the them ability to develop apps for them

      Only the iPod Touch. Most iPods do not run OS X, and there is no publicly available SDK. Anyway, even if, not really all that suitable for beginners.

    4. Re:Objective C by shutdown+-p+now · · Score: 1

      No. Just no. Starting with any OOP language is an extremely bad idea. So is starting with any kind of visual RAD tools. If the programming course starts with dragging a button onto a window in the designer, then it's crap (coincidentally, that's how most VB/C# courses out there start - unfortunately, as it doesn't have to be this way; blame the teachers, not the tools).

    5. Re:Objective C by Foofoobar · · Score: 1

      Actually NONE of them run OSX; they run Cocoa though. Though Apple states it is OSX, it is not and is a new creation that they are calling OSX just for branding.

      But my point was that passion often stirs people to drive themselves to learn more. And by being able to make something they enjoy (like their iPod) run something they made... well, thats exciting for a new developer. And it usually spurs them on to learn more and do more. Not only in that language or platform but in others as well.

      --
      This is my sig. There are many like it but this one is mine.
    6. Re:Objective C by GrahamCox · · Score: 1

      But my point was that passion often stirs people to drive themselves to learn more

      Absolutely, no argument there. But as a Cocoa developer myself I would say that unless the kid was ultra-bright and ultra-motivated, the learning curve would be just too steep for a beginner to programming, of that age. The resulting frustration would be counter-productive, and might even put them off programming altogether. Starting with something that provides instant rewards such as BASIC or Logo would be great, even if it's well short of being able to create a cool iPod game. For those whose enthusiasm is inspired by that and want to move to something "real-world", then I could just about see Cocoa as being introduced.

      When I started I learned BASIC, first on the Commodore PET, then the C64. I didn't initially understand the limitations of this, and I wanted to create a cool arcade game - based on the "Hitch-Hikers Guide To The Galaxy" in fact. I seem to recall I had some sort of bulldozer-meets-house scenario... Anyway, I started to write it in BASIC but of course even the most simple three-step animation took up all the processor speed, and so the realisation dawned. But I'd seen enough to know I had to learn assembler to get anything realistic done, and by then I'd learned enough fundamentals with BASIC to keep me wanting to learn more. I think if I'd started with assembler and nothing else I'd probably not have been able to do enough to keep me motivated.

    7. Re:Objective C by Foofoobar · · Score: 1

      Well I may be giving too much credit to kids, this may be true. But Most simple iPod apps are very basic. If you have played with the SDK at all, it is so simple, that an 8 yr old COULD do it with just a basic intro on Xcode.

      Still you are right, it is better safe than sorry. I'd hate to have a kid burn out too early.

      --
      This is my sig. There are many like it but this one is mine.
  21. 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?
    1. Re:UML? by Dynedain · · Score: 1

      That's exactly why I recommended Mindstorms above. The basic programming interface isn't code, it's a flow chart, really emphasizing the idea of doing problem solving and breaking it down into components instead of worrying about language and syntax.

      --
      I'm out of my mind right now, but feel free to leave a message.....
    2. Re:UML? by nobodylocalhost · · Score: 1

      Lego Mindstorm cost $ and i don't know how well funded OP's class is. ArgoUML is a piece of junk, but it's free. Well, if OP got the funding, i'm all for doing it the lego way. If not, then UML would work.

      --
      Where is the "Ignorant" mod tag?
    3. Re:UML? by DragonWriter · · Score: 1

      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.

      You can teach all that along with any programming language, probably more easily than you can without one; that's basically the approach taken by How to Design Programs (which uses a series of Scheme variants, which I think is a good way, though the general outline would be usable with standard Scheme or even a completely different language.) HtDP may be a little steep for the age group (but perhaps not if they are gifted), but you could probably follow HtDP as a "course outline" and make things friendlier, and the Dr. Scheme environment that supports its is pretty nice for educational use.

    4. Re:UML? by Mista2 · · Score: 1

      One of the best things I learnt in Polytech studying Software engineering is that all languages try to do very similar things in different ways with differnet syntax.
      Also that no matter what, machine code was the fastest.
      One week our project was to use the pascal syntax reference to compile a list of commands (about a dozen or so) into a working binary.
      From this we learnt string handling, expression parsing, error trapping, IO, memory handling etc.
      When I graduated I could code competantly in 2 highlevel languages, and knew enough to understand the manuals for others, and knew how to optimise for Motorolla and Intel CPUs, etc but I got a good foundation just by messing around with my ZX81 and Spectrum at home well before I left college for University.
      Considering how expensive computers were when I was growing up, I am continually impressed at how brave my father was in letting me open up our speccy and messing around with it's innards. Yes I blew up a RAM pack once and one of the first things I did with our IBM PC was to try and delete the . file, and the .. file too "Why were they still in the directory I just deleted?" *)
      And then I think would I let my son/daughter mess around with the innards of my $3000 pc? Shudder! Thank god for Asus and the eeebox! Oh, and my two old x-boxes - they are great little machines just waiting for a bigger hard drive.

      I look at the current shool curriculim for computer studies and dispair - they lean how to use MS Office (not just wordprocessing in general) and how to create a wiki or a blog (not how to craft html and use a scripting language) and almost nothing on networking protocols or security.

      Once my kids are old enough, I'll try to get them to help build their own computer from parts, just like my father helped me build my first car. I still have fond memories of that hunk of junk even though a Toyota corolla would have been faster and more reliable 8). I mourn the passing of VW air cooled engines and simple easy to build computers as I guess my kids will probably never want to look under the hood of either. They will just want it to work and play their MP3s

    5. Re:UML? by nobodylocalhost · · Score: 1

      you are so wrong on believing that teaching programming is easier with a real language. The reason being there are many pitfalls people tend to get into while using a real language to start off. The biggest of all is transition between procedure oriented programming and object oriented programming. Some people can think in sequence very well, even if you throw spaghetti code at them, they still are able to do what they want. That can be a problem because team work, integration, and debugging with others become virtually impossible. The pitfall of modern programming languages is that regardless how they are designed, people always find ways to write spaghetti code. Especially when you teach people how to write code using examples like hello world and read file. All these programs can be written easily in a single function. That's why transition between C and Java in lots of universities get ugly. OOP isn't hard, but it just requires people to think in a different way than what we are naturally accustomed to. A visual representation would be much easier to be accepted by kids than words and theories later on.

      --
      Where is the "Ignorant" mod tag?
    6. Re:UML? by DragonWriter · · Score: 1

      you are so wrong on believing that teaching programming is easier with a real language.

      You are, of course, entitled to your opinion, though nothing in your post says much about how using UML would be any better, even if all of your claims were true, except a little handwaving in your last sentence.

      The reason being there are many pitfalls people tend to get into while using a real language to start off. The biggest of all is transition between procedure oriented programming and object oriented programming.

      I don't think that the transition between structured imperative programming and object-oriented (but still imperative) programming is bigger than the transition between unstructured imperative programming and structured imperative programming or between any kind of imperative programming and any kind of declarative (functional, logic, etc.) programming. So, I'd have to disagree that that is the biggest paradigm transition pitfall of them all.

      Some people can think in sequence very well, even if you throw spaghetti code at them, they still are able to do what they want.

      True, but that's not a problem.

      That can be a problem because team work, integration, and debugging with others become virtually impossible.

      No, actually, the fact that some people can't deal with spaghetti code is the problem here, not the fact that some people can. OTOH, you are correct that there is a problem here that is manifest if people learn to program without learning good program design process. My point is that the best way to learn good process is in the context of actual progamming, which requires using a programming language as part of the course. It doesn't mean you just teach the language, you have to explicitly teach process. I think How to Design Programs is a good model here.

      Especially when you teach people how to write code using examples like hello world and read file.

      I would agree that starting with I/O is a bad way to start programming, which is I think that a good way to learn is to use a language with a REPL in which you can teach, initially, in a functional style, even if it is not a purely functional language.

      All these programs can be written easily in a single function. That's why transition between C and Java in lots of universities get ugly.

      In lots of universities, if there is a transition at all, its the other way, since Java is at least as common as C as a key language for a first course. But at any rate, I don't think any first course at any university with even a moderately well-respected CS program, whether taught in a multitude of languages, or expressly in one, whether that's Scheme, Java, or C, Pascal, Python, or whatever, lets students pass without ever producing a program which requires more than one procedure/function/method (and, for OO languages, class.) So I doubt very much that the "the first program you right can be written in a single function" issue is a major source of paradigm-transition problems between the language used in a first course and the languages used later.

      OOP isn't hard, but it just requires people to think in a different way than what we are naturally accustomed to.

      Actually, I think people naturally do thing of operations on objects. But then, I don't think teacing OOP is the center of teaching programming, or even necessarily essential in a first course. I think more general programming process is more important, and that a concrete language is necessary to that, and the particular special considerations of OO design can be handled later.

      A visual representation would be much easier to be accepted by kids than words and theories later on.

      Maybe, maybe not, if your concern is simply about

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

    1. Re:Alice? by edalytical · · Score: 1

      Alice is great, but after that move on to Python instead, not BASIC.

      --
      Win a signed Stephen Carpenter ESP Guitar from the Deftones: http://def-tag.com/?r=0008781
    2. Re:Alice? by bonkeydcow · · Score: 1

      I agree with this, i let my kids play with alice, they love it and don't realize they are learning. They are just making movies...

    3. Re:Alice? by Anonymous Coward · · Score: 0

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

      I teach Compsci in a high school setting and I used Alice this year with my intro to Compsci kids (mostly 9th and 10th grade) for the first couple of weeks and I can say that it was very interesting, pretty effective, and a little strange. I've taught the rest of the course in Python, which I love and would HIGHLY recommend, especially with the excellent textbook "Think Python". The syntax overhead (for both Alice and Python...) is very small and its quite easy to get off the grond and do interesting things.
      Good luck and have fun!

  23. Java, Scala, C. by FatherOfONe · · Score: 1

    I would start off with Java if I wanted to learn an object oriented language and the tools and documentation are abundant. There are many good IDE's out there to "help" you with the syntax and it is cross platform, so if you like Linux, Apple, or Microsoft you are covered (and many others).

    I would then learn Scala, that is a functional language. I can't speak a ton for it because it is so new but if I had to pick a functional language to learn Scala wold be it.

    Next I would learn C. This one could take you a while, but by this point you should have a solid understanding the basics and thus you can focus on C specific things.

    This is unfortunately not what I did.
    I started out doing machine code on a Z80, then some BASIC, then Pascal, then some assembly thrown in there and then some simple C, then Java. The jump to object oriented programming what tough for me, and I have seen guys go from object oriented programming to procedural far easier.

    Hope this helps and I am not trying to start a coding war.

    --
    The more I learn about science, the more my faith in God increases.
    1. Re:Java, Scala, C. by B4D+BE4T · · Score: 1

      I agree, although I would pick only one of these languages assuming this will be only a single quarter/semester course. I think Java (using Eclipse for the IDE) would be a great place for a young programmer to start. Both are free, very easy to install/use, and will run on whatever operating system is installed on their parents' computers.

      Many universities and businesses use Java. I believe that an early introduction to Java would best prepare them for a wider range of future university courses or business opportunities.

  24. Try Python. by atomicthumbs · · Score: 4, Informative
    --
    http://pinopsida.com
    1. Re:Try Python. by Diordna · · Score: 1

      I also suggest Python. You can Just Write Code like in BASIC, the syntax is simple, it also has all the major OO language features, and is well-supported. It has a bunch of libraries that let you do fun things like make games (see the pyglet library).

    2. Re:Try Python. by Anonymous Coward · · Score: 0

      Python, Python, Python. A great language for learning because it's interpreted and it has OO capabilities. Plus, the syntax is very logical, and instead of relying on semicolons for structure, it uses spaces and indents (which is more logical to a beginner).

      I recommend this book: http://en.wikibooks.org/wiki/Non-Programmer%27s_Tutorial_for_Python

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

    1. Re:Scratch by cazwax · · Score: 1

      my son, now 10, as been programming ( the most silly and non sensible ) games in Scratch for a couple of years.

      I encourage him to send them as birthday presents.

      It's readily 'get' able, and their site is full of examples created by other kids in this age range.

      There is a 3d mob world version as well. (!)

    2. Re:Scratch by PancakeMan · · Score: 1

      My eight year old really likes playing with Scratch and I think it introduces programming logic well. I've looked at the aforementioned Alice, too: it looks similar but more complicated - and maybe more age appropriate for your needs.

    3. Re:Scratch by Anonymous Coward · · Score: 0

      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.

      My kid has been using Scratch for over a year now, and programs her own games. Next up is Lego Mindstorms, so she can get some Robot programming in too.

    4. Re:Scratch by Grey+Haired+Luser · · Score: 1

      I second this. I've got both my sons, aged 8 and 12, totally hooked.
      The 12 yr old is off writing games where sharks chase divers collecting
      pearls, with 3 lives and game over, the whole 9 yards. It's incredibly
      easy and intuitive, and teaches a distributed, message passing programming
      style.

      Enjoy!

    5. Re:Scratch by DrNico · · Score: 1

      I cant recommend scratch enough. I downloaded it for my just turned 8 year old. Within 5 minutes he'd figured out the basics. Within an hour we had a simple game with a dalek and a cat we'd drawn chasing each other around, shooting energy bolts and cat spit at each other, complete with a scoring system. I hung back and let him do it, just to see how he'd go and he had not trouble. With a couple more hours he'd recreated his school with multiple rooms you could move between, and a principle who chased you if you entered his office. Scratch is well motivated in that is has sprites, sound events, mouse control, all easily useable, so kids get positive results very quickly. As with any language, the best way to learn it is to have a problem you want to solve, and scratch makes you want to do things. There are also lots of examples to learn from, as well a large user community sharing examples. It's also a proper programming language in that it has loops, flow control, boolean expressions, events and so on. I've had lots of interesting conversations with my boy about structure and flow control to get the results he's after. His depth of thinking in this area surprised me ... and was also almost as quick as me (programming since 11 when I learnt Basic on a ZX81). He prefers Scratch to his Wii! Can there be a better recommendation for anything?

    6. Re:Scratch by Pond823 · · Score: 1

      +1 For Scratch, my 9 year old daughter and I did a simple pet game in Scratch, with animation, movement and some basic maths in 2 hours the other night.

    7. Re:Scratch by Jimmy+King · · Score: 1

      Excellent. It's good to hear this stuff from you and the others who responded to my post.

      I'm a Perl dev full time and do some C, Java, and C# for hobby stuff. I've written part of a text game engine in C, a little snake clone in C with ncurses, and a space invaders clone in C# using XNA (and I really want to finish this by adding in my awesome plans some day with bosses and multiple weapons). I actually think about writing a game in Scratch every couple of weeks myself just because it looked like a simple, relaxing version of other stuff I do and quick enough to work with that I might finish it instead of adding yet another 80% finished project to the queue of projects I need to finish some day.

    8. Re:Scratch by Anonymous Coward · · Score: 0

      I played with that for a couple days, created a simple space invaders clone in about 30 minutes of work. >I found it really cool. My son (age 7) played with it for a couple days but didn't get too interested. I think I will re-introduce it soon and offer to work with him on making a little game for him and his brother to play together.

      My younger son (age 5) likes Scratch just for the sprite drawing tools and then being able to move around the guys he draws.

      On a slightly related note I got very nostalgic a few months ago when my parents were cleaning out their basement and I found a piece of graph paper from when I was 8. I was programming on the C64 and I used the graph paper to draw out my sprites. I had the rows and columns numbered with powers of 2, and then added up the values to get the bitmap correct for my game.

      --David

    9. Re:Scratch by Slimbod · · Score: 1

      2nd this, I left Scratch installed on my kids laptop, and without any help or guidance they've put together some great stuff. Very clever visual 'jigsaw block' style that the kids really take to.

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

  27. Use a Real-World Language by danelav · · Score: 1

    My CS program started us in Pascal, and I would vote against doing that. I'm a Java programmer now, so of course I'm biased in that direction, but I believe Java, C#, C (if you're brave), or any of the web scripting languages would be a better choice than Pascal.

    1. Re:Use a Real-World Language by I_want_information · · Score: 1

      Why do 11 year olds need to learn "a real-world language" that (a) will only frustrate the hell out of them and (b) may well be on its way to obsolescence once *they* are ready for the "real world"?

      Pascal at least (which I'm certainly not recommending) was developed as a *teaching* language.

      Today's kids are not going to be enthralled with "Hello World."

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

    Lisp.

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

    2. Re:Close to natural language is best by Gazzonyx · · Score: 1

      You're sick.
      (I've got a LISP 3rd edition book as a monitor stand, ATM; it's the best use I've found for it thus far!)

      --

      If I mod you up, it doesn't necessarily mean I agree with what you've said, sorry.

    3. Re:Close to natural language is best by shanen · · Score: 1

      Actually, Lisp is quite similar to some natural language, depending on the value of "natural language". I'm actually thinking of Japanese, where a lot of thing just default backwards from English...

      Reminds me of some C code I wrote after after I'd been working in Lisp for a while. Main piece involved two loops, nested and recursing, with one going forwards and the other going backwards. Very small piece of code, and it seemed to run quite well--though I never actually investigated the memory footprint. Probably horrendous. However, it seemed like the natural thing to do at the time for that sort of compressed image transmission.

      In conclusion, Lisp gives you an interesting perspective on the solutions of many problems.

      --
      Freedom = (Meaningful - Coerced) Choice != (Speech | Beer^2), and sad sock puppets' bad mods avail them naught.
    4. Re:Close to natural language is best by Anonymous Coward · · Score: 0

      Personally, I think Cobol would be a good choice; it's practical >i>and alluring! You can even get a .NET version too these days.

    5. Re:Close to natural language is best by overlordofmu · · Score: 1

      Word.

    6. Re:Close to natural language is best by abcjared · · Score: 1

      Whats wrong with lisp?

    7. Re:Close to natural language is best by Anonymous Coward · · Score: 0

      (see i (what (did you there)))

  29. When I was that age... by Black+Art · · Score: 1

    When I was 10 I learned Fortran... On cards... On a big mainframe.

    And we were grateful!

    Boy I feel old.

    --
    "Trademarks are the heraldry of the new feudalism."
    1. Re:When I was that age... by Amazing+Quantum+Man · · Score: 1

      Did you use bubble-cards hand coded in Hollerith? Or did you have actual punches?

      --
      Fascism starts when the efficiency of the government becomes more important than the rights of the people.
    2. Re:When I was that age... by Usquebaugh · · Score: 1

      A mainframe, I would have killed to get time on a mainframe.

      I had a 4004 based machine with 1k of memory. Toggle switches and light bulbs were it baby. And I had to build it myself without a PCB.

      You and your fancy mainframes.....

    3. Re:When I was that age... by maxume · · Score: 1

      So stop touching yourself.

      --
      Nerd rage is the funniest rage.
  30. 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?

    2. Re:PostScript by Colz+Grigor · · Score: 1

      /Helvetica findfont 50 scalefont setfont
      newpath
      50 50 moveto
      45 rotate
      (It's all about the graphics, but I see your point) true charpath clip
      -20 -20 rmoveto
      0 setgray 1 setlinewidth
      0 1 359 {
          gsave
          rotate
          0 0 moveto
          150 0 lineto
          stroke
          grestore
      } for

    3. Re:PostScript by doti · · Score: 1

      as a language, postscrit is ok for this purpose.

      but the lack of interactiveness kills most fun.

      --
      factor 966971: 966971
  31. 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
    1. Re:simple: use perl by Archibald+Buttle · · Score: 1

      Are you having a laugh?

      Perl's use of sigils is bizarre and illogical, making it a fantastically ugly language that's incredibly difficult to learn. Perl is what I'd recommend to put a child off programming for life.

      I've been programming Perl professionally for 4 years now, out of a 20 year programming career, and I still occasionally get thrown by the bizarre sigils stuff. It took me a couple of months of full time programming with Perl before I'd get to a level where I'd say I was approaching proficiency.

      I've used plenty of other languages, but Perl has by far the steepest learning curve of them all.

      IMHO the only reason why Perl is popular is CPAN.

    2. Re:simple: use perl by BoneFlower · · Score: 1

      While Perl is a wonderful language, it is not at all easy to learn. Many of the features it has to make things easier on daily users will just utterly confuse a newbie.

      I'm sure an introductory programming course could be designed to use Perl succesfully, but with Python and Ruby out there... why bother with the effort? Both have the same advantages to a beginner, without the disadvantages.

      I will say that Perl is my favorite language, but it just isn't for a complete beginner to programming.

    3. Re:simple: use perl by khakipuce · · Score: 1
      These kids are 11-14 not 114 they will take to an IDE like a Duck to water, even better they can just type stuff and run it, cut out all that compiling, linking, running with a command line tool.

      Even better they get a debugger so the can see what their code does.

      For what it is worth I would go with a language that has either a GUI or a web output (I would even consider Flash/ActionScript because there are some really amazing things - like creating games - that can be achieved relativly simply).

      I know a lot of people have said No to OO and No to Java, but that's what I would teach, it's what they will learn one day, it is free, covers all the bases and program One is only encumbered with one extra line - "class HelloWorld {" the rest is just static methods.

      --
      Art is the mathematics of emotion
    4. Re:simple: use perl by shutdown+-p+now · · Score: 1

      Only on ./ the suggestion to teach children Perl as a first programming language could be modded Insightful.

      I wonder what lurks in the depth of comments modded lower than that, and shudder at the thought. Unix shell? AWK? PostScript? ZX-80 assembler? OISC machine?

    5. Re:simple: use perl by Anonymous Coward · · Score: 0

      Almost every language has freely available documentation and examples on the internet.

      Also, basic syntax of languages is often nearly identical - how many different ways can you write an "if" conditional or a "while" loop?

      On top of that, PERL written without proper knowledge of how to write clean code can make some of the most unmaintainable programs in existence. Are those habits we really want to teach youth? Cause it'll be a hard habit to break them of 5-8 years later when they finally reach a University level class.

    6. Re:simple: use perl by Anonymous Coward · · Score: 0

      "The large amount of freely available documentation and examples on the internet will help then learn from properly written code from other people."

      wait... do you want them to use snippets of perl they can find on the web or properly written code from other people?? Pick a side, man! We're at war.

    7. Re:simple: use perl by Kirth · · Score: 1

      Well, I wouldn't. Because perl lacks some constructs you'll need later. Like "types".

      I'd rather look for a language which offers many features and concepts to be found later (in the life) in other languges:

      - A syntax like most languages (like C in fact -- perl would satisfy this)
      - Concepts like data-types (PHP, Perl, Python don't satisfy this)
      - the ability to program procedural OR object-oriented (C++, Perl)
      etc.

      Which boils down to little more than C++. So I'd probably start with this (or with C, and let the Kids find out that C++ is available trough gcc too).

      --
      "The more prohibitions there are, The poorer the people will be" -- Lao Tse
    8. Re:simple: use perl by Anonymous Coward · · Score: 0

      Perl is the worst possible choice. I really can't think of any other modern language which has such an impenetrable syntax or encourages bad programming practices so strongly by the very nature of its design. Perl is fine for more experienced programmers who already understand how to write clean, maintainable code, but for new programmers I think virtually any other language would be better.

  32. 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
    2. Re:HTML by grege1 · · Score: 1

      My suggestion was based on experience. These are children, bright or not, still children. My daughter took to HTML like a duck to water because she could see instant results that she could share with her friends. Writing words in a text editor to produce a result is programming.

    3. Re:HTML by iris-n · · Score: 1

      Are you fucking kidding?

      HTML is the most boring language I had the displeasure to learn. And I couldn't see a kid being interested in building a webpage. It's not to give them a profession, it's to keep them interested.

      If you wanna teach programming, well, teach programming. Perl would be my shot. Or any other scripting language. And if they have the knack, move on to more consistent stuff, like plain old C.

      --
      entropy happens
    4. Re:HTML by Anonymous Coward · · Score: 0

      No. HTML will not teach you anything about programming, it's a bad start.

      Anyway, if you are a developer, there is a very small chance you will ever touch HTML, they have artists/UI designers to handle that work.

    5. Re:HTML by Anonymous Coward · · Score: 0

      HTML + JavaScript is not programming, it is... "Formatting! Now with macros!"

    6. Re:HTML by Anonymous Coward · · Score: 0

      Um, you are aware that HTML isn't a programming language, right?

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

    8. Re:HTML by kronin · · Score: 1

      How in the hell did this get modded insightful? Writing HTML isn't programming, plain and simple. It's no more programming than going into Word, highlighting a string and hitting ctrl-B.

    9. Re:HTML by Anonymous Coward · · Score: 0

      The topic is programming languages, not markup languages...

    10. Re:HTML by Anonymous Coward · · Score: 0

      HTML != programming

    11. Re:HTML by enricohale · · Score: 1

      i agree with html and javascript. they can use that on virtually any computer they are likely to run into, and the tools are free.

    12. Re:HTML by jfriedly · · Score: 1

      I'm one of those 'gifted' students, and when I was in 4th grade, (I was 9 at the time) a friend and I read HTML For Dummies. It was a lot of fun, quite simple, and has been very rewarding ever since. The coolest part was when I could show off to kids at school by having IE display "Joel is the coolest kid ever!" It made me famous in school, and kids still come to me with computer questions, despite the fact that I haven't taken any of the available computer classes. HTML For Dummies taught me to code in notepad and then save as .htm. That's what I still do primarily today, but I'm moving on to Dreamweaver. I would not suggest using Frontpage or any other WYSIWYG tool, it detracts from learning the actual code. The only bad part about the entire experience that I can remember is the occasional frustration when the machine couldn't correct for my syntax errors, and I'm sure Dreamweaver could help with that a lot. It's been 7 years now, and only in the past few weeks have I rediscovered an appetite for learning code. (It's my own fault that I lost interest, nothing in HTML was ever boring.) Since 4th grade, I've only applied my knowledge of HTML perhaps a few times per year, but I've been quite surprised with my high retention. I've never learned any of the other languages, (although I now plan to learn C and PHP) so I certainly can't speak for them, but HTML was one of the funnest things I have ever done and I highly recommend it to kids.

  33. C, please by geekgirlandrea · · Score: 1, Insightful

    Please keep them away from any form of BASIC. The last thing this world needs is even more programmers who couldn't understand pointers or recursion if their lives depended on it. Start them with C, and then let them try high-level stuff once they understand what's going on under the hood. No, it really isn't too difficult. I did my first non-trivial programming and learned C and x86 assembler around that age.

    1. Re:C, please by mcvos · · Score: 1

      I disagree. Have them start with high level or logical stuff (Ruby, Python, any functional language), and if they remain interested, they'll want to know what happens under the hood later anyway.

      Besides, what happens under the hood isn't C, it's assembly. (Well, almost.)

  34. Gorilla and Nibbles in BASIC by SonicSpike · · Score: 1

    When I was that age I learned BASIC by changing the text in the Snake and Gorilla BAISC game that came with DOS. In my high school they had a programming class that was mostly BASIC but also taught Paschal.

    --
    Libertas in infinitum
    1. Re:Gorilla and Nibbles in BASIC by Amazing+Quantum+Man · · Score: 1

      In my high school they had a programming class that was mostly BASIC but also taught Paschal.

      So they taught religion in the programming class? I could understand teaching Pascal, though.

      --
      Fascism starts when the efficiency of the government becomes more important than the rights of the people.
  35. Fun programming puzzle by Fjodor42 · · Score: 1

    Towers of Hanoi is always a hoot :-)

    --
    "The number you have dialed is imaginary. Please rotate your phone 90 degrees and try again."
  36. 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 nobodylocalhost · · Score: 1, Insightful

      No, just no. You ever debugged js before? I am sure those kids will make mistakes, but finding that one typo in 2000 lines of code using js console output is a nightmare. Let's not even get into the js cross browser compatibility issues. Also, unless you are using chrome exclusively, odds are your program will be very very slow and eats tons of memory.

      --
      Where is the "Ignorant" mod tag?
    2. 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.

    3. Re:JavaScript by Mister_Stoopid · · Score: 1

      C also has a lot to recommend it. For example, c-like syntax. real world, not a toy language etc.

    4. Re:JavaScript by lwsimon · · Score: 1

      This. I have personally learned a lot from javascript, and luckily found jQuery just as I was starting to build my own library.

      --
      Learn about Photography Basics.
    5. Re:JavaScript by Anonymous Coward · · Score: 0

      I second the js.

      While some may knock it because it's the crummy language that brings bullshit alive on the web... js is really an advanced language with some hard-core features like closures and prototypes. The more I use it, the more I realize it's an excellent language.... and frameworks like JQuery just make it all the more amazing.

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

    7. Re:JavaScript by Alarindris · · Score: 1

      At a friends house where they can show off their newfound coolness.

      True story.

      I taught myself BASIC on an Apple // when i was in second grade.
      A few years later when I was about 13 or so, I was playing spin the bottle at a party which happened to have an Apple //.
      I thought "Hey! I can just write a computer program to do this! Check this out guys!"
      I jumped up and started typing away.
      After I had gotten the asterisk GUI all setup and polished, I turned around to say "Ok it's ready!", I realized that most people had left.

      I wasn't invited back.

    8. Re:JavaScript by Anonymous Coward · · Score: 0

      and dont forget javascript is a language where functions are first-class citizens, so if you want to show functors, currying or other comp sci stuff then you can do that also

    9. Re:JavaScript by Anonymous Coward · · Score: 0

      I strongly disagree with the use of JavaScript due to its significant hidden flaws, unusual paradigm (everything as a hash) and difficulty to debug.

      In fact I can't think of a much worse language to start with.

      A web scripting language such as PHP will do the job admirably.

    10. Re:JavaScript by Anonymous Coward · · Score: 1, Insightful

      "it's a very forgiving language."

      I don't agree. Javascript can be an exercise in debugging hair-pulling.

      Besides, do we really want to share curly braces with beginning programmers?

    11. Re:JavaScript by DuarteGouveia · · Score: 1

      I believe Javascript is the best option for teens learning to code.

      Javascript uses plain text and only needs a browser to work.
      It integrates with html which gives an immediate notion of being usefull.
      It has all the necessary types, data sctructures, code structures.
      Javascript has functions and objects.
      It has flexibility.
      It has huge support on the Internet.
      It allows coders to rapidly move to Ajax and learning how to implement interactive sites.

      The main problem with Javscript is that it is difficult to debug.

  37. Any open source project by Anonymous Coward · · Score: 0

    They could dive into an open source project. They are always a mess and a challenge to even figure out what is going on. Sounds like the perfect real-world intro to the world of programming.

    Metascore could use some help from some bright kids. :)

    Or really, absolutely any open source project would do, since there is always something to which anyone can contribute.

    1. Re:Any open source project by Anonymous Coward · · Score: 0

      Uh-huh. Open source needs more kids.

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

    2. Re:wikipedia by Anonymous Coward · · Score: 0

      I'd second Alice. There is a local college here in B.C. that uses it in a course aimed at introducing programming to users with little computer experience.

    3. Re:wikipedia by Anonymous Coward · · Score: 1, Interesting

      Alice, Scratch (http://scratch.mit.edu/), Greenfoot (http://greenfoot.org) are all worth checking out. (I'm one of the Greenfoot developers.)

      Greenfoot and Alice 2.0 both use Java as the programming language.

      All these environments should help keep up interest and motivation, which is very important.

    4. Re:wikipedia by jbolden · · Score: 1

      I'm looking forward to version 3 as well.

    5. Re:wikipedia by Anonymous Coward · · Score: 0

      If you want to increase the depth at which students engage the programming environments and paradigms, you may want to try Storytelling Alice over standard Alice. http://www.alice.org/kelleher/storytelling/

      However, it's not compatible with Alice2 and you'd have to develop a curriculum for it from scratch.

    6. Re:wikipedia by Anonymous Coward · · Score: 0

      I was also going to suggest Alice, it got me interested in programming, geez about 12 years ago now. Definitely recommend it. Nice to get a very visual response t
      - Grant Gordon

    7. Re:wikipedia by Anonymous Coward · · Score: 0

      Sun also refers to Alice. See it at the bottom of this page:
      http://java.sun.com/new2java/learning/young_developers.jsp

    8. Re:wikipedia by Anonymous Coward · · Score: 0

      Alice seems grat as the first impression, but think about it... I start by creating 3D animations with drag&drop and it fun,great and easy.
      But in a year or two I for some reason want to ... lets say build a web page, lets say a blog. Great I can create 3D animations and games, but oh horror, for something as common as a web site I actually have to WRITE some code not just do Drag&Drop.
      That would most likely turn many away from even trying to do something more "real world".

    9. Re:wikipedia by jbolden · · Score: 1

      There are actually pretty good drag and drop website creators. But I don't disagree with your basic point. Alice is by no means a full featured language nor does it pretend to be. It teaches very basic concepts and then becomes totally worthless. But the question is about what is a good language to learn programming not a good language for programming.

  39. 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"
    1. Re:QBasic still one of the best by DiegoBravo · · Score: 1

      The future of those kids is not necessarily web page design, enterprise application development, device drivers, database query's or that sort of things... so please avoid thinking on java vs C# or that kind of things.

      Following the ideas from Why nerds are unpopular, maybe the best thing you can do is to provide a big spectrum of technologies, some (the math oriented) may want to develop a Fortran application for numerical methods related to their algebra courses, others (artistically oriented) may want to use your quick basic (or postscript?) to draw geometrical landscapes, a bit of assembler for the interested in the internals, etc...

      In sum, better avoid regarding them as idiots that just deserve a toy or "turtle" language like Logo.

    2. Re:QBasic still one of the best by ElDuque · · Score: 1



      I second that.
      I learned on regular Basic...I know they are an anachronism but line numbers really helped me - they help bring some order into a bizarre coding universe. GOTO 100 is pretty easy to understand...and once you "get it", getting rid of line numbers in favor of subroutines, etc. is not too tough.

    3. Re:QBasic still one of the best by Anonymous Coward · · Score: 0

      With pygame, Python is just as easy as qbasic for drawing on the screen.

    4. Re:QBasic still one of the best by Corunet · · Score: 1

      Python is a much better language than both Logo and QBasic, but since it can't (easily) do graphics, it appears quite boring.

      unless you use pyglet or pygame that make graphic programming trivial and funny

    5. Re:QBasic still one of the best by shutdown+-p+now · · Score: 1

      Python is a much better language than both Logo and QBasic, but since it can't (easily) do graphics, it appears quite boring.

      While I fully agree with what you wrote, it would seem that making a cross-platform Python library for simple QBASIC-style single-window graphics (another similar, though somewhat more powerful, example is Borland's BGI that shipped with Turbo C/C++ and Turbo Pascal) isn't hard. Any takers?

  40. Pick a language... by Phred+T.+Magnificent · · Score: 1

    There are several languages out there that can work well as introductory languages. C probably isn't your best option, but any of Perl, Ruby, PHP or Python would do fine. Scheme or Lisp might be interesting, too, but I'd probably save those for a second or third language. The concepts they emphasize are important and well worth knowing, but probably not the first things to be learned.

    More important than the choice of language is the analytical thought process of programming -- breaking down the thing you want done into small enough pieces that you can tell the computer, in some language, what steps to take to do the job.

    --
    Where is the wisdom we have lost in knowledge?
    Where is the knowledge we have lost in information?
  41. Experience... or rather lack of. by Anonymous Coward · · Score: 0

    I am a freshman who goes to a technical charter high school. I don't know how talented or gifted of kids your looking at but we were introduced to HTML just two months ago. I'll try to find out what programming language they teach first, but with 11-14 year olds it's going to be more of a task keeping they're attention then teaching them something. From experience with martial arts instructing I would say you either need to split them into groups (less talented, moderately talented, extremely talented)or build from the bottom, explaining that it would be good to review the basics first. The number one thing though is ALWAYS keep them busy.

  42. Lojban by Sybert42 · · Score: 2, Interesting

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

    1. Re:Lojban by camperdave · · Score: 1
      --
      When our name is on the back of your car, we're behind you all the way!
    2. Re:Lojban by neuromanc3r · · Score: 1

      But it has nothing to do with programming. So what's your point?

  43. Division algorithm by mpc22 · · Score: 1

    Coding up the division algorithm for integers is very insightful. Also, showing it's application to the euclidean algorithm connects all kinds of fun math and algorithmics with programming.

  44. BASIC and Logo by Lightwarrior · · Score: 1

    3-2-1 Contact (and encouragement from my father) got me started programming Basic on our family's Apple IIe computer. In elementary school, Logo helped it along.

    Either of those, or their modern equivalent, should be great. Basically anything where you start off seeing direct, tangible results and then move on to the theoretical stuff.

    Wow. That really took me back. Is there still good media like 3-2-1 Contact and Square One for kids?

    --
    Mods: Disagreeing with me != my post Offtopic / Flamebait.
    World without hate or war, invaded. Tragic?
    1. Re:BASIC and Logo by Belial6 · · Score: 1

      Yes. The television for kids today is vastly superior to what we had.

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

    1. Re:Project Euler by Anonymous Coward · · Score: 0

      I'd say most of those problems are inappropriate for 11 year olds, not to mention they really don't teach you how to program.

    2. Re:Project Euler by dredwerker · · Score: 1

      I second this and you can use Octave http://www.gnu.org/software/octave/ which is nicely compatible with Matlab. Which help with matrices as well.

      --
      On a long enough timeline. The survival rate for everyone drops to zero. Chuck Palahniuk, Fight Club, 1996
  46. PLT TeachScheme! and Bootstrap by KanshuShintai · · Score: 1

    The PLT TeachScheme! project has a curriculum for teaching programming to high school students, and apparently it's been modified for middle school students as well in the Bootstrap project.

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

    1. Re:LOGO and LOGO for Legos by jaavaaguru · · Score: 1

      I really don't get why people add an "s" onto the end of Lego. Slashdot is the only place I've seen it done. Am I missing some in-joke?

    2. Re:LOGO and LOGO for Legos by bluesatin · · Score: 1

      I'm guessing you're not from America, right?

    3. Re:LOGO and LOGO for Legos by jaavaaguru · · Score: 1

      I'm not, but the product is called Lego... what's with the "s"?

    4. Re:LOGO and LOGO for Legos by bluesatin · · Score: 1

      For some reason it seems Americans want to pronounce everything differently from people in the rest of the world, Lego is a great example.

      English people (and the rest of the world it seems) says 'Lego' as the plural, while America insists on saying 'Legos' as the plural; God only knows why.

  48. Exploration by fermion · · Score: 1
    I started learning about that age on a teletype. It really didn't stick until I got into a formal class in high school and learned Fortran. The key, to me, is exposure and exploration. For instance, in a pre engineering class, the 11-14 year olds are taught the tools and how they can be used to create. The older students are then given specific tasks with deadlines, deliverables, and consequences.

    Therefore I would suggest an exploration type of experience, especially for the pre teens. I also would not focus on giving the latest tools, as it will be 10 years before most of them are out in the market, and tools will change. One nice application is the Alice software from Carnegie Mellon, along with story telling Alice for the small kids. It is free and teaches many of the concepts of OO and procedural languages. What is bad is there is no real curriculum for it, IMHO, targeted to under 16 set. OTOH, it does teach many good concepts, and does engage kids.

    For a more traditional approach here would be my objectives. Note that the language and tools are unitmportant. What I think is important is to encourage abstract thinking. Number one: algorithms and procedures. These are important in math and science, yet most students cannot write a good algorithm. They leave large gaps. If a student can write an algorithm to count, or sort, or whatever, and code it, your science teachers will worship you.

    Number two: variables. Many kids can never understand variables. What are they, how are they used, why do they change over time(they vary, duh). By focusing on variables, constants, and parameters, the kids will gain an important problem solving tool. You math teachers will worship you.

    Number three: Form and syntax. Make them use a language to code! It teaches that almost is not good enough. Everything has to be perfect. This is why Fortran is so wonderful. It forces the student to focus on the details and the overall process. This is like writing an essay. You have an overall goal and parts that must be equally organized. Now the english people are on board.

    Lastly, my pet peeve, i=j; j=i is not a swap operations. Any kid that can understand this is ready for any math or science high school class. In fact this is the first thing I would do. Write a swap function. Watch it fail. Let them fix it. See the joy when understanding comes through.

    None of this needs to complex or over the kids head, and they can take as long as they like to learn the concepts. Those who race ahead can solve typical problems like stacks, efficient sorting, and the like. One thing I see missing is the lack of teaching of basics, stuff that is now buried deep in the library. When one starts programing in college, sure it is hard to do all this, but when is programing at 12, there is time.

    --
    "She's a scientist and a lesbian. She's not going to let it slide." Orphan Black
  49. C and Hanoi by zapakh · · Score: 1

    My first language was BASIC, but I wish it had been C. If I'd been a member of a captive audience (such as an enrichment program) when I first acquainted myself with C, I might not have to deal with "but this isn't like BASIC". I imagine that the inevitable "but this isn't like C" would have been much easier to cope with. BASIC dulled my senses during my formative years. :(

    For a toy problem, I've always been partial to Towers of Hanoi. Input n, then output a sequence of moves that solves the n-disc Hanoi problem in some format (e.g., "1-3, 1-2, 3-2, 1,3, 2-1" and so on). Recursion is very confusing for newbies. This particular problem was one of the influences that helped me out early on.

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

    1. Re:Visual Basic by Anonymous Coward · · Score: 0

      I'm going to push back on this. My intro to programming class in college used Visual Basic, and while it does provide an environment where you can play with basic programming constructs, one thing that bothered me about it was the amount of code that the IDE had to generate just to get things up and running. All that code had to be kept mentally separate from whatever I wrote, and the meaning of it all is so far beyond the understanding of a new student. Because of that, the student doesn't really get the connection between how an event is generated and how it's detected and handled; at that point it's just "magic."

      Compiled languages in general suffer from boilerplate code getting in the way of program logic (some more than others), so an interpreted language may be the way to go. Though I have yet to use it, I've heard nothing but good things about Python.

    2. Re:Visual Basic by Anonymous Coward · · Score: 0

      Yep! Drag and drop tools are the best. I learned Delphi when I was 8 (now 12), and even though I got nowhere with it, it was incredibly rewarding. C# is also a good choice - the .NET Framework and Mono provide excellent foundations and do a lot of the hard work for you. Also, if you're going to use VB, DON'T USE VB<=6;

  51. Easy Enough by exabrial · · Score: 1

    Ruby. I'm not a fan of it, but here's why it'd make a great starter language: 1. Loose, Forgiving, English-Like Syntax 2. Supported Everywhere 3. You can start with Functional Programming and later introduce OO. Finally, DONT FORGET TO MAKE THEM GRADUATE. Challenge them on their last few projects and make them do it in c++ or Java. I worked with a brilliant 15yr old in college (highschool programming contest), but he refused to try anything but Ruby "cuz it's best."

  52. I fully agree by Skapare · · Score: 1

    I fully agree. It's about knowing what is going on inside computers. If they don't do this, then things like "binary arithmetic" are invisible and nothing more than a "mathematical oddity" to try as a toy project. Definitely stay away from languages like BASIC. I'll leave my bias against C++ and Perl out of this, for now.

    --
    now we need to go OSS in diesel cars
    1. 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.

  53. 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.
  54. 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
  55. Try competition problems by Qzukk · · Score: 1

    In my experience, CS programming competitions tend to have entertaining problems that should keep the kid's attention. The American Computer Science League has a small handful of quizzes and example problems posted on their website here. ACSL's contests are designed so that each difficulty level's problem builds upon the previous problem. Another example is the International Olympiad in Informatics, which has problems from each of their contests here.

    --
    If I have been able to see further than others, it is because I bought a pair of binoculars.
  56. Scheme and "How to design programs" by stevebyan · · Score: 1

    Use the text "How to design programs" and Scheme. It's been used in high schools, is quite approachable, and is easily motivated by connection to recurrence relations, which seem to be a theme in my 14 year old's math curriculum. The book is free on the web, and the programming environment is also free and supported on many popular platforms.

  57. When I was a kid it was much harder... by Shao+Ke · · Score: 1

    Wow, there are so many more options than when I began a little more than a century ago.
    Back then unless you had access to high end hardware, there was basic and machine/assembly language. I was so stoked when I finally got the Assembler cartridge.
    I lived in a small rural town so I had to scour magazines and the book store on trips to The Big City with an occasional nudge from an older brother who was in college.
    You kids nowadays don't realize how easy you have it :).
    Which one? Whatever gets them excited.

    1. Re:When I was a kid it was much harder... by Shao+Ke · · Score: 1

      Uh, yeah, I mean "quarter century" :).

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

    1. Re:Why does everyone ignore C? by maxume · · Score: 1

      I'm pretty sure it is possible to learn that computers aren't magic boxes without learning C.

      The people who do things and then wonder why something happened aren't going to be more successful in C than they are in whatever other language.

      --
      Nerd rage is the funniest rage.
    2. Re:Why does everyone ignore C? by White+Flame · · Score: 1

      You can learn the basics in any language. The syntax is all very similar.

      You don't know very many languages, do you?

    3. Re:Why does everyone ignore C? by MikeBabcock · · Score: 1

      As opposed to:


      import sys

      if __name__ == "__main__":
                print "Hello there."
                for arg in sys.argv[1:]:
                          print "You put %s on the command-line" % arg

      --
      - Michael T. Babcock (Yes, I blog)
    4. Re:Why does everyone ignore C? by the+9a3eedi · · Score: 1

      Because pointers are scary.

    5. Re:Why does everyone ignore C? by Anonymous Coward · · Score: 0

      In your C example you don't have to just explain a routine. You have to explain data types, pointers, arrays, and return values. To do nothing. To do 'hello world' you have to explain importing headers and printf.

      Basic or a more scripting oriented language make way more sense for getting 11-13 year old children interested in programming. This isn't setting up their fundamental skills in programming, it's getting them to want to develop the fundamental skills in programming.

      Mindstorm or something similar is a great idea. Children are tactile and results oriented any strategy for getting them interested in programming should leverage that. If they get the itch and decide to delve into more 'real' languages then mission accomplished. If not, they at least have a high level understanding of what goes into making computers go.

    6. Re:Why does everyone ignore C? by hansamurai · · Score: 1

      Wow, talk about a bad example.

      char * and an int are easier to understand than a String? I would tend to disagree with that. And yes, fundamentals are important, but if you're going to rag on Java, realize it still has all the primitives other languages do. Chars, ints, doubles, longs, booleans, etc. etc.

      And it's not too hard to explain a class, it's an object. Like a real world object. And learning the main method in Java is a great way to introduce a bunch of other concepts. What does public mean? What does static mean? What does void mean? It leads to a bunch of fundamental questions that are the foundation of a lot of languages.

      The first language I learned was QBASIC, and then C++, and then Java, so there's my history if you're interested. I'm now a full-time Java programmer, so biases revealed.

    7. Re:Why does everyone ignore C? by mebrahim · · Score: 1
      I would recommend C++ over C. Not that I want to teach them OOP, templates, etc., but:
      • C subset of C++ seems to be cleaner than C with a stronger type system which lets the compiler be better at catching programmer's faults and producing wiser warnings.
      • Probably a kid is more comfortable with string, cin, cout, ... than char*, scanf, printf, ... (assuming he/she is not going to do advanced I/O for now). At least he doesn't have to ask "So what is that asterisk after char?!" and you start trying to explain pointers to him/her. (Even if later you find him/her happier with C alternatives, you may switch easily without any overhead in contrast to teaching C from beginning. Now he'll have the choice.)
    8. Re:Why does everyone ignore C? by Anonymous Coward · · Score: 0

      In C, pointers are scary at first. In assembly, they make perfect sense. It's just a memory address, and to dereference the pointer is just to return the contents of that address.

    9. Re:Why does everyone ignore C? by m50d · · Score: 1

      A programmer needs to know why if he allocates 2 million empty string classes why his memory gets chewed up.

      No, no he really doesn't. Not while he's getting started. He has enough on his hands learning what the operations do, without having to worry about managing all his own memory as well.

      Yes, Java is a terrible language to start with, because it forces OOP, but C is if anything worse. To start with you want a modern, friendly dynamic language; something like perl, python or ruby. (My preference is for python, but honestly, any of them would make a good choice). Something where hello world is just 'print "hello world"'.

      --
      I am trolling
    10. Re:Why does everyone ignore C? by martin_dk · · Score: 1

      You need a lot of tools to get started in C

      A C64 basic emulator or LOGO just has the most simple programming environment:

      • Type your code in the box where the cursor is ready
      • Type run
      • Watch your results

      If kids are supposed to have fun and learn, then at no time they should consider all the complicated stuff like makefiles, compiling or memory management. Its all about getting fun results as soon as possible with as little effort as possible

      Heres how I and thousands of others had our first very funny and exciting programming experience, and I believe alot of coders in spe still will find this big fun:

      • 10 print "Hello world!";
      • 20 goto 10
    11. Re:Why does everyone ignore C? by Anonymous Coward · · Score: 0

      Haven't yet registered on /. but i'll get to it eventually.

      I wholeheartedly agree with this statment. Here at Clemson University, you spend the first 2 courses of computer science learning all about C, then adding in C++ towards the end.

      Reason? It's procedural. Too many coders nowadays have no idea how to properly use pointers, and have memory leaks pouring like Niagara Falls. People wonder why Microsoft, Adobe, etc have such problems with their programs? If you were to de-compile their code (aside from a lot of it legacy to such an extent that i daresay any of them even know what it does), it's full of quick and dirty programming, that 'hot-shots' wrote because it's all about money.

      I would recommend something called Karel. It's a nice little program that can be used in Pascal or Java, is syntactically not very hard, in that it's all about the thought process involved. (there is no number manipulation, it's all about procedure.. loops, conditionals, etc.). Some of the problems are extremely complex to solve with only a handful of 5 commands you can choose from. The catch is how do you write functions, do recursion, conditionals, whiles, do-whiles, etc properly to execute a given problem.

      I know when i did it many moons ago, i would spend 12-13hrs on one or two problems, because you had no quick and dirty way out, just ONE or TWO ways that would work efficiently.

      Kids that young need to learn the good 'ole days of programming Hell, in addition to learning the new trends. If they want to succeed and not just be another cubicle in an office somewhere programmer, get them to write GOOD code (and for god's sake teach them to be personable!).

    12. Re:Why does everyone ignore C? by Anonymous Coward · · Score: 0

      Colleges switched to Java, because its more visually pleasing. Too many people were dropping out because it was boring writing Console apps to do what a calculator does.

      Nowadays at my college I graduated from (when I went, they started with C++), they teach Java, and first semester students are manipulating images to produce blue screen type effects. The result? More people stick with the program.

    13. Re:Why does everyone ignore C? by majiCk · · Score: 1

      I always wonder why colleges start out teaching Java first. [...] Always start with the fundamentals.

      It's easier to learn a safe language than an unsafe one, since safe languages have deterministic behavior. It's easy to lose sight of the fundamentals of programming when you're busy tracking down bus errors and segmentation violations.

      You learn 2 + 2 = 4 before you learn a^2 + b^2 = c^2.

      Yes! And this is precisely why a value-oriented functional language should be the "first language" of choice: we learn and intuitively understand evaluation at a very early age!

    14. Re:Why does everyone ignore C? by Anonymous Coward · · Score: 0

      I totally agree with you on this one. Even though these kids are gifted, start out with the basics. You do not want to fire up a huge IDE, with starter code cluttered by all sorts of nonsense.

      Using C (or C++, but I doubt you'll get to explain the ++ features anyway) it is conceptually easy to understand how each building block works:

      - Start out with the classic printf("Hello world"); Now they know how to write out stuff.
      - Show them how to do basic computations like a = 10 * 4 + 2.
      - Teach them if/else branching.
      - Finally show them how to obtain input from the user (unfortunately C is not very intuitive here so you may want to give them functions to do this).

      Lastly you can assign them the task of making a calculator with +, -, *, /. And let them figure out how to combine the above pieces.

    15. Re:Why does everyone ignore C? by dubz · · Score: 1

      I disagree. For several reasons.

      The first thing a beginner needs to learn is the concept of an algorithm: that it is possible to order the computer to do something, step-by-step. They need to start with the basics of program flow and control. Pointers and classes are way too advanced concepts.

      The second thing that is important is interactivity. For a beginner, the best reward is to be able to see the results of their coding. Trial and error is very important. Interpreted languages are good at this. Colors, shapes, sounds, and movement are very important to grab and hold a child's attention. That's why I think QBASIC is good for this purpose. Once the child is hooked, they can be given other languages to play with. I would suggest Python (for algorithms) and Visual Basic (for GUI development).

      In my opinion, concepts like memory management and OOP should be introduced only once a genuine interest in programming has been established and demonstrated.

    16. Re:Why does everyone ignore C? by Strake · · Score: 1

      You learn 2 + 2 = 4 before you learn a^2 + b^2 = c^2.

      ...which you learn before you learn a^n + b^n = c^n, n > 2.

  59. Perpetual calendar by Skapare · · Score: 1

    One of my most fun "first month" programming projects was a perpetual calendar. I did that in Fortran back then. These days it could be used to not only learn applying arithmetic in programming, but also an opportunity to learn something like HTML by having the program produce its output as a web page. Or maybe even learn JavaScript (after learning C first ... to learn how computers work) and do it as a live web page.

    --
    now we need to go OSS in diesel cars
  60. These are arguably not programming languages, but. by m1ss1ontomars2k4 · · Score: 1

    ..you can try teaching them TI-BASIC or MATLAB. They're very simple programming languages that still have common aspects of programming (control structures, variables, etc.). Depending on what calculator you use to teach TI-BASIC, it might even be impossible to make typos (e.g. Than instead of Then). As I said, these aren't really programming languages, but that's how I started out. Arguably, I'm still "starting out" though...

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

    COBOL.

  62. Visual Studio Express by cplusplus · · Score: 1

    I'm sure all these kids have computers at home, probably running XP. Given that, Microsoft publishes Visual Studio Express, which is a free download for hobbyists. They could download it and play around with it at home. It supports C#, VB, etc. - so pick a language of the day and try something. It would be an excellent place to start.

    --
    "False hope is why we'll never run out of natural resources!" - Lewis Black
  63. Project idea by GroundBounce · · Score: 1

    When I taught my son programming when he was around 11 or so, the project I picked was to have him write a stack calculator, including a simple GUI (like a simple version of the GNOME or KDE calculators). It taught most of the basic elements of a program, including a simple GUI, but unlike a really simple game who's novelty would wear off quickly, it was something he was able to use, improve, and be proud of for some time after finishing it.

    As to what language to use, that's a hot topic and you'll hear lots of opinions. At the time, which was a long time ago, we used Tcl/Tk because it was simple, had a very easy-to-use fully integrated GUI toolkit (Tk), and was high level in that it avoided having to worry about complex issues like memory management and pointers, which could overwhelm some 11 year olds. OTOH, it taught programming concepts beyond what you could do with something really basic like LOGO. I'm not necessarily suggesting it now, however -- it might not be the right thing today, when there are other potentially better choices like Python, Java, etc.

    1. Re:Project idea by dublin · · Score: 1

      Tcl is still a *great* option for this, as is JavaScript. Both will teach concepts and practices that will still be relevant 30 years from now.

      For sheer lifespan, JavaScript is probably the only thing that can touch shell script, which should NOT be overlooked as a programming language.

      Of all the languages I've ever learned, shell is the only one that I've used frequently for over 20 years and is still as useful (and usable) today as it was in 1985.

      --
      "The future's good and the present is nothing to sneeze at." - Roblimo's last ./ post
  64. Games by jaavaaguru · · Score: 1

    I wrote the snake game (now made famous by Nokia) in SuperBASIC on a Sinclair QL when I was about 10. Get your 11 year olds writing a simple game, they'll love it. Tetris was the next one I did.

  65. Processing! by smilinggoat · · Score: 1

    Processing is based on java and is all about visuals. It removes all the obnoxious set up and background necessary from lower-level languages, allowing students to focus on concepts and not minutiae. And the fact that it's output is drawing stuff on the screen keeps the reward-level high and immediate!

    If there's one thing that will interest kids in programming for a lifetime, it's getting them turned on to fast and cool-looking results.

  66. Concepts not Implementation by Usquebaugh · · Score: 1

    To begin with let's take the computer out of programming Computer Science UnPlugged

    There are three environments I'd recommend for teaching programming.

    SmallTalk/Squeak coupled with Squeak by Example

    Scheme/PLT Scheme coupled with How To Design Programs

    Logo/Berkeley Logo coupled with Computer Science Logo Style

    The big idea is not to teach them how to do something in one language but to teach them the concepts that will allow them to learn how to do it in any language.

    If the kids really are gifted then the class time is too valuable to have them sat there pounding keyboards, that's manual labor. Treat the class as lectures/discussions with experimenting on computers left up to them.

    Try and get them to learn about the lectures subject matter before the class e.g. publish a schedule and make it clear they are expected to have read so and so pages before the class.

    If they are gifted and motivated this will be as close to the Platonic style of teaching as you can get.

    The side effect is that you have prepared them to succeed in college if they can get the idea of using lectures as a review of what they already know.

  67. 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/

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

  69. Mod parent up by Raul654 · · Score: 1

    The tutorial he links to - A Byte of Python - is the best Python tutorial in existence. It's perfect for such a course.

    --


    To make laws that man cannot, and will not obey, serves to bring all law into contempt.
    --E.C. Stanton
  70. Comment removed by account_deleted · · Score: 3, Insightful

    Comment removed based on user account deletion

  71. 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 DragonWriter · · Score: 1

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

      Eh, I'd been programming in BASIC for three years, and Logo and Pascal for about a year when I took Algebra I. I don't see the dependency for really basic things.

    2. Re:Algebra I by Gonoff · · Score: 1

      Because I had done algebra, I was able to sit down at a keyboard and use BASIC to number crunch. Using = to assign seemed logical and I had never touched a computer until then.

      --
      I'll see your Constitution and raise you a Queen.
    3. 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
    4. Re:Algebra I by Eudial · · Score: 1

      Same story. And because of my understanding of programming I found algebra a lot easier than most kids.

      --
      GAAH! MY PRINTER IS ON FIRE!!! PUT IT OUT! PUT IT OUT!
    5. Re:Algebra I by beav007 · · Score: 1

      I started BASIC (C64 and Apple) at 10 or 11 years old (the first time I really had access to a computer AND a book describing BASIC programming). I often wonder when I would have started if I had had access at an earlier age...

    6. 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.
    7. Re:Algebra I by Anonymous Coward · · Score: 0

      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.

      Seconded. I sold my first piece of software in 5th grade to the school that I was attending. It was a spelling program that was used with a book that had pictures of items (dog, chair, house, etc) Enter your page number to start, increment by one to continue. X++: No algebra there... Hmm, or is there? lol.

    8. Re:Algebra I by Space_Pirate_Arrr · · Score: 1

      I totally agree. Algebra was easy because I just thought to myself "Oh I see, it's maths with variables - like a computer program."

      BASIC was my first language too, though I think I hit Pascal just before algebra.

    9. Re:Algebra I by supernova_hq · · Score: 1

      That would imply 1 = 0! Pure nonsense!

      Yeah, everyone knows you can't change the value of an instance variable!.

    10. Re:Algebra I by aaron+alderman · · Score: 1

      Late starter I see.

    11. Re:Algebra I by Lumpy · · Score: 1

      Wow that's elitist.

      I'd start with an intro to programming that makes it fun and SPARKS interest into programming and advanced math.

      http://www.google.com/search?hl=en&client=firefox-a&rls=org.mozilla%3Aen-US%3Aofficial&hs=QvQ&q=robot+programming+game&btnG=Search

      Start with a game that requires basic programming. even ladder logic or somethign simple. it get's them thinking and will weed out the ones that cant stand tedium or hard thinking needed to really get into programming.

      But being a math snob and saying, "you dont have advanced algebra in your brain, no programming for YOU! [SMACK]" is incredibly closed minded, and horrible.

      I started programming when I was 8, and then learned as I learned advanced mathematics that OH! this can be used in the computer to make that easier! COOL! Although I already had an understanding of Sine and Cosine before I hit those classes.

      I strongly suggest teaching programming BEFORE any advanced math.

      --
      Do not look at laser with remaining good eye.
    12. Re:Algebra I by KhipuX · · Score: 1

      1982, ZX Spectrum, Sinclair Basic..... 6 years old. My mathematics has always been bad. I couldn't do long division at this age but it didn't stop me from learning how to program. My algebra too was much better early on in school but it didn't help with more advanced mathematics. I program for a living now and very rarely use complex maths, it's all about data flow and control for me. Just my $0.02 but I would go with Pascal if you can find the materials to teach. It's simple enough language with obvious syntax and can be taught in a short space of time. It's quick to get results from and leads well onto languages like C and Assembly.

    13. Re:Algebra I by feldicus · · Score: 0

      Believe it or not, you don't have to be good at math to learn the fundamentals of programming, in the same way that you don't have to know the complex workings of the internal combustion engine to replace a fan belt or change your oil.

      I'm pretty sure I'm not the only one here who did his first programming in elementary school. In my case, it was because I WASN'T good at math, and knew I could figure out how to make the computer do the hard work for me. In effect, I learned one of the most crucial lessons for programmers: Be Lazy.

      feldicus

    14. Re:Algebra I by DragonWriter · · Score: 1

      Because I had done algebra, I was able to sit down at a keyboard and use BASIC to number crunch. Using = to assign seemed logical and I had never touched a computer until then.

      That "=" means "equals" is taught well before Algebra, and insofar as algebra goes anywhere beyond that, the use of "=" as an assignment operator that can do reassignment to the same variable is contrary to what Algebra teaches, so that's not really something algebra helps with. It seemed logical to me, and I didn't have Algebra until several years after I started using BASIC.

      Clearly, if you have taken more math, you'll know how to do more number crunching yourself, and it will be easier to automate that if you learn a programming language. But I don't see any real reason to see Algebra I as a prerequisite to learning programming.

    15. Re:Algebra I by Anonymous Coward · · Score: 0

      VAX Basic. Nuff said.

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

    1. Re:The Problem With Teaching Programming by dancpsu · · Score: 1

      I know this article is old, but I just wanted to respond to you. I remember learning C in a community college at age 11, and seeing even the adults in the class get confused about the math to generate an ASCII-art diamond. Even loop constructs are not easy when you can't write "loop 5" or something similar to loop 5 times.

      I think the language is partially at fault here though. In my opinion, almost all programming languages are created without the idea that concepts should be introduced one at a time. In C you have to write a function before you can do anything, in Java, you have to write an object. Also, in C even if you want to simply get some text from the user, you have to use a little pointer syntax to get the address of the variable that will store the data. And without built-in strings, you have to deal very early on with arrays. Even python forces functions before loops by demanding the range() function on simple for loops. And don't get me started with Lisp and Scheme forcing prefix notation on students who have grown up learning all math with infix notation.

      Language designers really need to think about what they force people to learn simultaneously and ensure that constructs in the language are not so interdependent that they force programmers to create extraneous structures when they are not needed. I think that is a good practice for an expert language as well.

      --
      "Scientists don't change their minds, they just die." -- Max Planck
  73. don't use a language by timmarhy · · Score: 1

    introduce them to binary and hex, process control concepts and problem solving strategy. introducing them to a language at this stage will only produce more stuck in their ways programmers.

    --
    If you mod me down, I will become more powerful than you can imagine....
  74. Re:Bright vs. Hard Workers by maxume · · Score: 1, Offtopic

    In my experience, schools generally implement cutting edge educational ideas from some time in the last 50 years.

    They are all cutting edge, they just aren't necessarily up to date, and they aren't interested in changing.

    --
    Nerd rage is the funniest rage.
  75. 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!

  76. Real langauag real problem by kentsin · · Score: 1

    Do not use an language you do not use to teach the kids.

    Teach them the way you do programming. It will be fun enough if they can produce programs to solve their own problems.

    Doing web related or net related projects were fun enough I suppose.

  77. 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!
    1. Re:Scratch is a programming language for kids by Bagleemo · · Score: 1

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

      Absolutely - Scratch all the way. It's Turing complete, simple to use, and a great gateway into the world of programming.

    2. Re:Scratch is a programming language for kids by Anonymous Coward · · Score: 0

      Alice is like a 3D version of Scratch. Oddly, it came first.

      http://www.alice.org/

  78. I'm in a similar situation by dmrobbin · · Score: 0

    scratch.mit.edu alice.org both are great tools targeted at kids this age please don't try to start them out on C, danger lies there

  79. Child cruelty is no laughing matter by Nazlfrag · · Score: 0, Troll

    Free IDEs, free source code, videos, documentation.... that only applies to, oh I don't know, every language and platform I've ever encountered. A flavour of C is ok to start with, but it's also a bit much for the beginning 11 year old. Hell, teach them Perl if you want to know if they have a REAL interest and knack.

  80. SmallBasic by Anonymous Coward · · Score: 0
  81. 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.
    1. Re:GET OUT NOW!!!! by aaron+alderman · · Score: 1

      As a 24 year old Physicist earning next to nothing doing a PhD who surfs Slashdot all day and who started off as a programmer in primary school, all I can say to that is...at least I'm not in my mothers's basement. But that's only because there isn't one.

    2. Re:GET OUT NOW!!!! by Anonymous Coward · · Score: 0

      Or you could just go into programming, except get your own place, work out, and learn how to socialize and pick up girls. It's not an either-or situation, and it has nothing to do with "chance."

  82. Flash by Tronster · · Score: 1

    My background is someone who has taught Applesoft Basic, Turbo Pascal, and C++ to middle schoolers at a computer camp; I'll be teaching Flash (and potentially Processing) to artists in college with little to no prior programming experience.

    I recommend using Flash with Actionscript 3 (AS3) based projects for teaching 11-14 year olds. It supports most all OO concepts, and because of its graphical nature there is instant feedback for a beginner. (e.g., mySprite.x += 5 );

    If price of tools is a factor, a free development environment (such as http://www.flashdevelop.org/ ) can always be used.

    An example of just some of the (visually) amazing programs you can pull off in 25 lines or less: http://www.25lines.com/?page_id=139

  83. Pure Scheme by bidule · · Score: 1

    I am a purist. In my mind Scheme is the purest language there is. The problem with C, Java and those languages are all the externalities you need to put in in order to get a working program. And I say this as an C++ old hat.

    #includes, imports, types, macro, compile... All these are sources of confusion.

    I'd also put Prolog as a nice one to use because it is different and may be a better match to how them kids are thinking. And it's hard to beat Logo for interactive drawing.

    --
    ID: the nose did not occur naturally, how would we wear glasses otherwise? (apologies to Voltaire)
  84. JavaScript by zach297 · · Score: 1

    I am 15 now and know many other languages but I started JavaScript at around 10. Looking back at it I think its main advantage was that no software needed to be installed for it to work. Just embed in an HTML file and take home. One of my greatest joys while learning to program was showing my parents all the neat little programs I made.
    Other than that though it shouldn't really matter. If you are good at teaching they will be able to carry what learned onto other languages very well. The first language is always the hardest and I don't thing anything will change that.

  85. Discrete math by einer · · Score: 0, Offtopic

    Discrete math, autonoma theory, logic (truth tables, conditionals, boolean logic) that sort of stuff is more important to a good grounding in computer science than programming (all that on just a chalkboard). If the knowledge base is strong, the languages will reveal themselves as tools to solve those types of problems with. The language is just a construct for realizing the application of the theory. If the math and logic concepts aren't understood, you basically have a tool that you don't know how to use. Which is not bad. You're still better off than where you were, but now you're banging in nails with a socket wrench. Instead of learning what a bolt is, what it's for and how to tighten it, and then given a socket wrench.

    On second thought, anything but Java.

  86. 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
    1. Re:stay far away from BASIC by Anonymous Coward · · Score: 0

      Lemme guess, you've been brainwashed by instructors about the "goto" statement and therefore BASIC's evilness as well, right?

      Learn some assembly and you'll realize that ALL of your compiled code will be executing JMP (goto) instructions whether you like it or not.

      The inability of the majority of programmers to understand the underlying workings of the CPU is a major contributor of all the shitty code that exists today.

    2. Re:stay far away from BASIC by Viol8 · · Score: 1

      I wouldn't normally response to an AC , but well said. People who rant on that you should never use gotos are usually clueless drones who couldn't hack their way out of a paper bag and just blindly follow whatever coding paradigm they were taught at college.

    3. Re:stay far away from BASIC by aaron+alderman · · Score: 1

      You can acquire bad habits in ANY language. Even C has "goto". Perhaps you have fallen for the fact that BASIC sounds...basic so you assume it's no good. (Have a look at the fantastic things FreeBASIC can do - it's got Free in it!)

      I see no problem with starting off with

      a$ = "HELLO WORLD"
      print a$

      and working your way from there. We don't teach children grammar before they can spell. Although for a bright early teenager they can pick up the basics quite fast.

    4. Re:stay far away from BASIC by shutdown+-p+now · · Score: 1

      There's nothing wrong with "modern" (90s and later) structured BASIC dialects so long as you stay away from line numbers, GOTO, and the like. Structured QBASIC isn't that much different from Pascal, and definitely suitable for learning purposes.

      Your mistake was that you probably learned it on your own, and from journals with old BASIC programs that were littered with single-letter variable names, line numbers, and GOTO/GOSUB.

  87. 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
  88. Re:Bright vs. Hard Workers by CopaceticOpus · · Score: 4, Funny

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

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

  90. Freebasic or Qbasic are excellent choices. by GrpA · · Score: 1

    QBASIC is an excellent choice. I think people tend to underestimate basic as a useful language, even if a little antiquated for modern uses.

    It's perfect for absolute beginners because it forces you to get your syntax correct on each line if you use it correctly, which means you don't spend any time debugging syntax errors when you run it.

    A lot of professional programmers forget what it's like for extremely young minds and this feature makes it easy to learn to get something working in less than a day - something that young minds need to keep up encouragement and that older people forget they struggled with over years while learning at school.

    Then you can move up to Freebasic.

    Freebasic (freebasic.org) is an Open Source basic compiler that crosses the bridge between Qbasic and C. It's also fully cross-platform (Windows/Linux/Mac) - the same code compiles on anything.

    It also compiles native QBASIC code, and is fast enough to make basic games or even complex programs.

    You can also make all of your "C" function calls directly from it and learn to use those routines, making a convenient pathway to move to C as you become more experienced - all that will be needed is to learn a slightly different syntax.

    GrpA

    --
    Enjoy science fiction? "Turing Evolved" - AI, Mecha, Androids and rail-gun battles. What more could you want?
  91. 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.

    1. Re:Language by Veggiesama · · Score: 1

      My college actually used Alice in its introductory programming course for the first week or two before jumping into the "real" stuff.

      I can't really judge its effectiveness personally, because I knew a good deal going in, but I grant that it was a fun, hands-on way of diving into certain programming concepts (procedural execution, object-oriented design), while avoiding the distracting concepts (compile problems, convoluted syntax, command prompts).

      Seems like it'd be great for younger people. Plus it's got that creative element that encourages people to explore the parameters and limits of the software to get exactly what they want.

  92. 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.
  93. Anonymous Coward by Anonymous Coward · · Score: 0

    http://scratch.mit.edu/

    Scratch is just what you're looking for!

  94. C is way better than basic by CrazyJim1 · · Score: 1

    With C, you can call methods. In Basic you have SUBS. When you use SUBS enough, you inevitably write a for loop using the same variable for indexing in and outside the SUB, and then you wonder why your code isn't working right. If you want to score extra points, add a nice graphics and sound library to go along with C. Oh, and don't forget about code reusability. Keep everyone's code each year for the next year of students. Allowing new students to compile and run other people's code is sometimes more useful than coding stuff up from scratch.

  95. LPC or other MUD language by Cratylus_DS · · Score: 1

    Kids like games. Game programming for MUDs can be pretty fun with a language like LPC, which is easy to pick up but loaded with the elements of programming they need to be introduced to.

  96. 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
    1. Re:Yes, the educational world has... by nomad-9 · · Score: 1

      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 reality that some people are in fact academically gifted and prefer to recognize talent instead of trying as hard as possible to homogenize it.

      ++ The "Everyone Is Gifted" syndrome, so therefore, no one is.

  97. Use ALICE by Anonymous Coward · · Score: 0

    www.alice.org

    Easy to learn. free. Gets pretty deep into programming as well. It will help them understand how to program more quicky and efficiently. You also program a 3d environment, which is pretty cool, and the kids can actually see what they create, and even make small movies.

    1. 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!
  98. the contenders: by Tumbleweed · · Score: 1

    Python - mature, OOP, fast (for an interpreted language), lots of modules out there they can extend with, lots of documentation, very regular. Multi platform.

    D - the true successor to C for the modern age. C with nice and COMMON SENSE features added, compiles natively. Free compiler available. Multi platform.

    JavaScript - Usefulness - this is all over the Web, obviously, is OOPish, and well-documented. The problem is inconsistencies in implementation will most likely drive them away from computers forever, so perhaps jQuery? Multi platform.

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

    1. Re:Something With Immediate Visual Feedback by day418 · · Score: 1

      I would use the turtle graphics which comes standard with Python. It is visual, simple, and you could use this environment to introduce many programming concepts like iteration and procedure calls. Python is also rich enough that you could stay in this environment for OOP, etc.
      Consider the following interactive session in python:

      >>> from turtle import *
      >>> setup()
      >>> title("turtle test")
      >>> clear()
      >>>
      >>> #DRAW A SQUARE
      >>> down() #pen down
      >>> forward(50) #move forward 50 units
      >>> right(90) #turn right 90 degrees
      >>> forward(50)
      >>> right(90)
      >>> forward(50)
      >>> right(90)
      >>> forward(50)
      >>>
      >>> #INTRODUCE ITERATION TO SIMPLIFY SQUARE CODE
      >>> clear()
      >>> for i in range(4):
              forward(50)
              right(90)
      >>>
      >>> #INTRODUCE PROCEDURES
      >>> def square(length):
              down()
              for i in range(4):
                      forward(length)
                      right(90)
      >>>
      >>> #HAVE STUDENTS PREDICT WHAT THIS WILL DRAW
      >>> for i in range(50):
              up()
              left(90)
              forward(25)
              square(i)
      >>>
      >>> #NOW HAVE THE STUDENTS WRITE CODE TO DRAW
      >>> #A SQUARE 'TUNNEL' (I.E. CONCENTRIC SQUARES
      >>> #GETTING SMALLER AND SMALLER).
      >>>
      >>> #AFTER THAT, MAKE THE TUNNEL ROTATE BY HAVING
      >>> #EACH SUCCESSIVE SQUARE TILTED

      In trying to accomplish the last two assignments, they will have many failed attempts, but the failures will be visually interesting and they'll learn quickly as they try to figure out why it didn't draw what they expected.

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

  101. Fun Program by burshaz · · Score: 1
    Back when I was trying my hand at being a CS major I found this app a fun diversion and still bring it up from time to time to retain what little coding i learned.

    Colobot from Epsitec Games

    http://www.ceebot.com/colobot/index-e.php

    I know its a little pricey but the demos that are available run through large range of code elements.

  102. Learning Pascal at 14 by Anonymous Coward · · Score: 0

    I learned pascal when I was 14, I thought it was pretty cool. It teaches one how to program, after learning how to program, it is easier to move into more powerful languages like C#.

  103. iPod Touch programming by SuperKendall · · Score: 1

    I like the Mindstorms idea a lot, but if you're wanting to get a little more into actual coding, I can think of nothing better to get students excited than iPhone/Touch development.

    You don't have to spend a lot - you could have just a few units to run the apps on for people that did not have one. Most of the development could be done in the simulator, using older (or newer) Intel Mac minis. The Apple Enterprise developer account (Single fee of $100) I thought would allow for any number of students to be covered.

    The benefit of this approach is that the kids would be doing work they could show off to friends and family much easier than Mindstorms, or even web development. You can easily access a lot of cool animation features to keep the kids visually interested, and it's pretty easy to build really nice interfaces very quickly with Interface Builder, or do rather advanced stuff with sprites using a library like Cocoas2D.

    It would be some work to set up a curriculum though, that would lay an easy path through a more complex world of development. But then that's probably the case for any solution you choose.

    Alternately G1/Android programming would work as well, but students would be much less likely to have devices that could run the final creations which would diminish the lasting return.

    --
    "There is more worth loving than we have strength to love." - Brian Jay Stanley
  104. My son's moment of insight by Anonymous Coward · · Score: 0

    Years ago we had a 32k Apple II with the 16k language card extension. A whole 48k! I could play pong with my son using the Basic program loaded from audio cassette. He would beat me most every time. I'm a programmer and he was a gamer.

    One day I patched the app to make one of the paddles track the ball. I could adjust the relative paddle position a bit to hit the ball a bit up or down, but couldn't miss it. When we played the next time, I used the patched controller to win every point. Then I set the controller down and the paddle continued to be unbeatable playing by itself.

    My son, seeing the power of programming, switched from a gamer to a programmer in an instant.

  105. C++ by Anonymous Coward · · Score: 0

    I think that if they are bright kids anyway, they could just program in C++ using a Unix terminal session provided by a server and Pico to code in, G++ to compile etc... Just cover the basics as you go.

  106. Why not Karel? by pspahn · · Score: 1

    I have been teaching myself some programming (again, after 15 years), and started because of Stanford's free online courses. They use Karel at first (but quickly shift to Java), and I found it a fun and easy way to get used to all the basic tasks of writing code. I work at a special ed facility, and I started teaching a student who is fond of and familiar with computers (his dad happens to work at Sun) Karel quite quickly. This student is in the 96th percentile or higher in all academic tests, with the exception of his processing speed, which is in the 25th. He picked up on the fundamentals within a week with Karel. What's also great about it, is that you are given specific tasks to solve. I found that to be a significant barrier in learning programming myself. I didn't have something to code. Figuring out some of the introductory problems in Karel was quite satisfying.

    --
    Someone flopped a steamer in the gene pool.
    1. Re:Why not Karel? by scubamage · · Score: 1
      Agreed. My suggestions would be Karel or Core War. Karel because it is simple, fun, and really boosts creativity in programming I think, especially for beginners. For those who aren't familiar, Karel (Karel J. Robot) is a simulation of a robot controller... sort of. You basically write code for Karel to follow as she travels around a room. Core War is great because you craft virtual machines to duel one another. So not only does it present the fundamentals of programming (planning through deployment and maintainance), but it does so in a competitive and strategic environment.

      Also, make sure to forward the students to the stanford courses for continuing education. They're free and can offer a college education's worth of knowledge to a dedicated student (minus the degree of course). Great post parent.

  107. Start with Logic by Stridar · · Score: 1

    The problem with starting out with asm or C is that it requires you to talk about the machine. You need to lecture on the differences between the heap and stack, passing by value and reference, and with asm you need the segment and instruction explained before you can let them loose.

    To introduce general programming, I'd suggest either Prolog or Scheme. Prolog may be the simplest to begin with, as it teaches variables, logic and flow control. Scheme increases the difficulty with flow control and looping.

    I also second the suggestion for Lego Mindstorms as that gives a physical response to writing a program, but that may be too expensive for you course.

  108. 11-14 year olds... by merc · · Score: 1

    That's a lot of 14 year olds...

    --
    It's true no man is an island, but if you take a bunch of dead guys and tie 'em together, they make a good raft.
  109. Hackety Hack by __aabvlw4075 · · Score: 2, Informative

    Hackety Hack is designed just for this purpose.

    1. Re:Hackety Hack by Anonymous Coward · · Score: 0

      http://shoooes.net/about/raisins/

    2. Re:Hackety Hack by AdamWeeden · · Score: 1

      Wholeheartedly agree. It's great, and I don't even like Ruby.

      --
      I was quoted out of context in my autobiography...
  110. 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).

  111. From someone whos been there. by Qatz · · Score: 1

    I started programming when I was about 8. I started with C64 basic, and only a little while later moved to Amiga AMOS basic, and C.(about 10 or 11). In my opinion C, C++, or PHP would be great starter langs for someone that age.

  112. Assignments that THEY find interesting by Digicrat · · Score: 1

    The best way to learn, is when the goal is to use it to create something that you/they want.

    In my case, I taught myself Perl CGI programming in 6th or 7th grade to make a site for my Starcraft guild, and slowly taught myself HTML later. Albeit I read slashdot now, so I'm probably not typical in the topics I chose...

    The point though, is that you want to make the kids want to learn it. LEGO Mindstorms, or a Roomba educational kit is probably the best for kids today. Start off with a demonstration/description of some exciting final project (or of a few possibilities, and let the class choose their favorite or a variation thereof), then start teaching them the basics that'll eventually build up to it.

  113. Well of Souls! by Anonymous Coward · · Score: 0

    www.syntheticreality.com has a little RPG generated program with a scripting language that is very simple (I programmed my own "space" RPG when I was about 12 on it). "Well of Souls" is the name - simple but fun stuff.

    Kids these days might scoff at the 2D sprites and whatnot though :)

  114. Turing? by steve-o-yeah · · Score: 1

    In grade 10 (admittedly too many years ago now...) we used Turing in our programming class. As I recall it was developed at the University of Toronto and doesn't have much non-Canadian awareness, but I personally loved it as an intro to programming. If I was charged with teaching someone programming that I felt BASIC would be too, well, basic for, Turing would be my choice.

    Then again, I don't even know if it exists anymore.

    --
    I hate the term 'Sig'.
    1. Re:Turing? by bbr_505 · · Score: 1

      it does. and its free for educational use

  115. javascript! Client side social networking. by anton_kg · · Score: 1

    I would suggest Javascript. Surprised? Yes, using this language 11 years old can play with websites and create nifty widgets. I'm sure it'll be fun for him. We have just a simple API on a server side: json, xmlrpc or whatever and it wont' be so much fun to program it.
    Just look at this kid and you understand what I mean: http://www.youtube.com/watch?v=8mwKq7_JlS8

  116. Evaldraw by Anonymous Coward · · Score: 0

    Take a look at Evaldraw: http://advsys.net/ken/download.htm

    It uses C-like syntax but with immediate compilation and feedback and some very nice drawing functions making it an excellent teaching tool.

    Personally my recommendation would be a combination of QBasic, for it's simplicity, and Evaldraw, for it's ease of use. QBasic is better for basic concepts, Evaldraw is better for results.

  117. Basic256 by BuffyNZ · · Score: 1
    Earlier this year I ran a programming workshop for a group of gifted 9-12 year olds.

    I used BASIC-256(formerly KidBASIC), which was developed specifically to address this problem.

    I found it easy to use and teach, and a good introduction for the kids, I would recommend it for an introductory language.

  118. Programming for Beginners by BudAaron · · Score: 1

    Check out Microsoft's Small Basic. It's like a cut down Visual Basic complete with intellisense! http://msdn.microsoft.com/en-us/devlabs/cc950524.aspx It was concieved and designed specifically to get people started in programming.

  119. Depends on the class length. by Up+Cracky · · Score: 1

    They're isn't a perfect answer to this. All computer languages are wretched in their own special way. If this is just an intro I'd go with practical over pedantic.

    If it's a relatively short class, I'd start them with Python. It has enough structure to give them a good idea of real world programming and for those who take to it, it's a language that they can run on their home computer. If you're really ambitious you could cobble together a PyGame sandbox for them to play in.

    If you'll have multiple days with them, let them cut their teeth on Python, then throw them a curve for one day. Let them use Lisp just to show them another way to think.

    Squeak has a nice graphic front end if you know your way around Smalltalk, but not may people use it.

    As for problems, check out simple games. I'll second David Ahl's "Basic Computer Games". Also, puzzles like the "Cannibal/Missionary" problem are more fun that factorials.

  120. The subject area counts more than language by ChrisA90278 · · Score: 1

    What really matters is the kinds of projects. LLet them work in areas they know. For example most kids understand Vending machines. Write a program to simulate one. It is just a text mode CLI program that accepts commands and writes output.

    You can start with some simple sub-parts. Like printing the sign-on measages "Vending, vers 0.3". This is just "hello world". Next have it accept commands and do an IF based on whck command is read.

    Just keep expanding it.

    Next year you build a GUI around the test based simulation engine

    Any modern structured language would work. Java is as good as C++ but Pascal would work or maybe even Python

  121. Re:Bright vs. Hard Workers by TheSpoom · · Score: 1

    Holy shit, that article is talking about me.

    (And I'm not boasting here, I was in a gifted program in elementary and early high school, then shortly burned out midway through high school.)

    I'm not good at studying and it's catching up with me now in university. Hmm... maybe this is an Ask Slashdot...

    --
    It's better to vote for what you want and not get it than to vote for what you don't want and get it.
    - E. Debs
  122. Sorting and Searching by djl4570 · · Score: 1

    I've used Basic and Pascal. In the past when I have taught a non technical peer something about programming I've always started with the old standards of "Hello world". Then I move on to a classic bubble sort. Sorting a list of numbers or words is something we all understand. Then move on to searches and binary searches. If there is time towards the end of the class; rewrite the bubble sort storing the unordered list in a binary tree and parse out the sorted list using a recursive routine. The kids might not get their brains wrapped around the concept but it will give them something to think about. Do not underestimate them; they lack experience not brains.

  123. Please check out alice.org by Anonymous Coward · · Score: 0

    alice.org
    I'm not personally familiar with the project, but it was something that Professor Randy Pausch ( the Last Lecture ) was involved in.
    It's developed by Carnegie Mellon, and it's free.

  124. C++ by Anonymous Coward · · Score: 0

    Then they won't be so damn scared of it when they start posting on slashdot.

  125. Python or LOGO by adlaiff6 · · Score: 1

    Personally, my first introduction (at 8) was LOGO, and it was tons of fun, but I didn't make the connection between it and programming until much after I had started to do what I thought was programming (which I started in C). It also might be even too juvenile for 11-14 year olds, if they are sufficiently mature.

    I'd suggest Python as a first 'real' programming language. Besides the fact that it has blindingly simple syntax that is often a few characters away from the pseudocode you might explain the program in, at a higher level, it allows for simple iterative programming, procedural programming, functional programming, and object-oriented programming, so students can progress from one level of intellectualism to the next without learning new syntax, and with the interactive shell, demos and exploration are made that much easier.

    There's also something called PyLogo, which, though I've never tried it, looks promising:

    http://ianbicking.org/docs/PyLogo_lightning.html

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

    1. Re:Seconded: Javascript, but also AutoIt! by jpate · · Score: 1

      Hah, I just made a post about using javascript because the browser and HTML allow rapid feedback then saw this comment thread. I guess I should RTFC? I'll just go ahead and third the Javscript idea; dynamic HTML can be lots of fun and give kids an incentive to really engage the teaching process.

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

  128. Words fail me by gzipped_tar · · Score: 1

    Teaching gifted kids programming? Would *anyone* please think of the children?

    --
    Colorless green Cthulhu waits dreaming furiously.
    1. Re:Words fail me by Jimmy+King · · Score: 1

      Maybe the kid's gift is being able to consume huge amounts of caffeine?

    2. Re:Words fail me by OrangeTide · · Score: 1

      Teaching gifted kids programming? Would *anyone* please think of the children?

      It's wrong to turn kids into social outcasts like the rest of us programmers. For starters they will eventually only find programmers for friends, and do you think any parent would want one of us hanging around their kid filling their head full of ideas. Next thing you know the kid will spend his summers writing polyglots and virtual machines for a theoretical Turing machine.

      --
      “Common sense is not so common.” — Voltaire
  129. I started then by Anonymous Coward · · Score: 1, Interesting

    I'm now almost 16 and I've been doing C. I self-taught myself everything by either reading tutorials or just playing with code and looking at references. I started at 11 doing HTML and CSS just to experiment. (Of course, my websites sucked horribly.) By somewhere around late 11 / early 12 I was into JavaScript, mainly from copying code from other sites and learning how to fit it into mine. (I never published most of that, of course.) I would learn more and more JavaScript, moving on to DHTML and, eventually, PHP. My interest in Python grew and by 13 or 14 I was writing PyGTK+ apps. I then gained interest in open source and joined an open source project with a mix of C and Python. And, of course, I moved to C from there.

    I may sound radically different from most replies here, but I would recommend teaching JavaScript first (if possible for you; I know it's not really a programming language). Learning PHP was a breeze because I already understood JavaScript. (I wouldn't recommend PHP, though.) Then, do Python. Python can very much be a pseudocode language, (maybe even teach them a little pseudocode to get the initial idea!) is cross-platform, and the indentation rules will form good habits. Some would argue just staying at Python, but I would say to move up to C if possible (though I doubt it). :)
    Object orientation was difficult for me to comprehend at that age, and I'm a relatively abstract thinker, so don't go that route until much later.

  130. Processing? Arduino? Haskell! by Anonymous Coward · · Score: 0

    These are two small languages that are very expressive, the first (Processing) in on-screen graphics, and the second (Arduino) in the real world. There is no stronger motivation than to see your work drive an LED, draw a pretty picture, etc. Both run on Windows, Linux, and OS/X (in Arduino's case, at least the IDE). Both are free, and you can actually buy beautifully illustrated books about Processing, if your kid learns that way.

    Then there's Haskell... :-) The language in which Map / Convert is almost native syntax. Very useful in the land of Google, and ubuiquitous, distributed processing elements. Also free, with its own stars on YouTube.

  131. .bat file scripting by MindPhlux · · Score: 1

    Seriously.

    I am serious.

  132. Phrogram is the answer by dd1968 · · Score: 1

    I've been teaching to the same age group that you are and after evaluating everything from QBasic to Java to Squeakland's EToys I settled on Phrogram about two years ago (it was called Kids Programming Language at that time) and I am well pleased. Using this language (it's much like classic Visual Basic but with tools that are more appropriate to the target age group) my kids started by learning basic concepts and syntax and slowly graduated to more complex tasks involving graphics. Best of all, Phrogram includes constructs for data manipulation so my kids are also learning what I consider "real" programming -- writing software that reads, manipulates, and stores data. There is an add-on that provides networking constructs for sockets programming and such but we haven't used it yet. As they mature it will be natural for kids using Phrogram to transition into .Net, Java, or any other commonly used business or Internet programming language. So, from my experience as a teacher, I suggest that you look at Phrogram.

  133. Recursion would be a great teaching exercise by MillenneumMan · · Score: 1

    One of my earliest homework assignments was to write a recursive routine that would calculate and display the binary equivalent of an integer, i.e. 37 = 100101. It was fascinating to discover that each recursive call calculated either a one or a zero, but once you reached the end and started displaying each result as you backed out of the calls, the result displayed the binary equivalent in the right order.

  134. I know its evil... but VB by NinjaTariq · · Score: 1

    I have helped run a programming class for 11-12 year olds, using visual basic.

    The language will be an unpopular choice here, due to its origin (and I have to admit, I don't like it myself).

    But its simple, and easy for young children to use.

  135. 15 Year Old Beginning Programmer's View by Anonymous Coward · · Score: 0

    As a 15 year old in Programming 1 at my high school, i just wanted to offer some insight at what we did.

    We started off the semester with Alice, a free drag - and - drop introduction to programming. It taught us all the basic concepts (what methods & loops, etc are), and we then moved into Visual Basic 2005 after covering almost everything in Alice. I can say the strategy works great for me, having just successfully completed my final project (a simple to-do list application in Visual Basic, where I did additional research and used information from outside the class because I now love programming so much).

    I can say that this approach worked well for me, and I'm definitely looking at taking some classes for more advanced languages (notably C# and C++). The rest of my class also seemed to like the approach, so it's my recommendation.

    Any comments?

  136. MSWLogo by BungaDunga · · Score: 1

    It's how I was introduced to programming. It's really easy to use it to draw stuff, which kids like. You have a "turtle", a pen you drag across a canvas, that you can move, change the color of, pick up, put down, animate... lots of room for experimentation. Recursion? Snowflakes! Interaction? Etch-a-sketch program. Plus it's free.
    You can just as easily do things without graphics (eg, "Is the input a leap year?"). Then you can jump off into simple 3D graphics, too. Don't you dare introduce them to programming with HTML as some have suggested. It's not even a scripting language.

  137. Teaching them about progaming? by VinylRecords · · Score: 1

    If you're teaching an 11-14-year-old the nuances of progaming you'll need to look at a diverse variety of game genres.

    There are professional gamers of RTS games, like Starcraft and Warcraft III. FPS: Halo, Unreal Tournament, Counter Strike. Fighting: Third Strike, Super Turbo, Virtua Fighter.

    Picking a genre is the essential first component in creating a young pro gaming individual.

  138. Lol, appears I am an Anonymous Coward for now by Anonymous Coward · · Score: 0

    ... but I don't feel like registering right now.

    Here, however, is my opinion: I love C++, but not the most fun for a young teenager, looked at C about thirteen and lost interest within hours because everything was text based, tedious, and complicated (nothing against the language now, but at the time it bored me). I suggest something like Ruby. It is considered a scripting language but that like is getting blurrier and blurrier every day. I favor Ruby (right now) over Python, but if you want to teach with a paradigm that can be applied to the other popular languages later, it may be a better choice (but then, they may just use Ruby for everything). Python seems to be a bit better supported as of now. Other than that, they can do about the same things. If you want to get them interested try basic game concepts, or at least manipulating images. I don't think that that is about the minds of our current teens. For python look into PyGame (great library that will have them doing awesome stuff in no time), for ruby there is RubyGame, which appears to be really cool, but doesn't have the same documentation available, but if you learn it, it won't be hard to teach them. Aside from games, there are gui applications; that would interest them. FXRuby comes to mind, but there are also binding for WxWidgets and QtRuby. There is also a library by _why_the_lucky_stiff called shoe that is simple. He actually has a great program he wrote for teaching kids programming concepts with ruby: http://hacketyhack.net/ .
    And maybe check this out: http://www.pragprog.com/titles/fr_ltp/learn-to-program

    Hope that helps. Gook luck.
    _jake_the_anonymous_coward

  139. 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
  140. kids programming language by Anonymous Coward · · Score: 0

    My sons started with KPL (kids programming language), which is now phrogram. http://phrogram.com/
    I heartily recommend it, as it will provide the creative outlet to learn.

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

  142. My 10 yr old likes Scratch by sidney · · Score: 1

    My 10 year old started with LOGO, a commercial version called MicroWorlds EX. That would be a good one to try if you have the budget to buy a classroom license. He tried Alice, but didn't care for it much because of limitations on what he could do with it.

    He now spends most of his time on Scratch, I think mostly because he gets to upload projects to the Scratch website and share with friends he has made there. Since Scratch is free, teaches all the fundamental principles of programming languages without warping the brain as Basic would, and allows one to immediately create cool graphics stuff and collaborate with other kids, I would recommend it. http://scratch.mit.edu/

    Lately he has also started hacking a Javascript tutorial because he wants to learn how to make web pages that do interesting things. I don't think it would be a good first programming language, but you might keep it in mind as an adjunct to a first course. Motivation is as important as the language, and being able to create cool stuff provides that.

  143. Basically after reading all the replys... by revlayle · · Score: 1

    The language of choice is apparently every single language ever made. So basically, it's a crap shoot, right?

  144. OOT by theReal-Hp_Sauce · · Score: 1

    Object Oriented Turing, yep.

    http://en.wikipedia.org/wiki/Object-Oriented_Turing

    It's what I made my first "Hello world!" program in.

    -hps

  145. Processing by Anonymous Coward · · Score: 0

    Java via Processing. Quick route to drawing cool graphics without having to learn too much of the more complex featues or API's that come with the language. It's way easier to get excited about graphics than text and numbers for a lot of kids (and adults) I think.

    Plus: dead-easy installation and setup, very simple IDE built in, free, cross platform, and it's possible to take it pretty far.

  146. what you know...or Squeak / Smalltalk by Anonymous Coward · · Score: 0

    If its good enough for the highschool students around PARC, its good enough for anyone smart.

    RUBY is Smalltalk, and lots of good community, and standalone apps, web apps, and the interpreter.

    Apple should bring back HyperCARD.

    And how about www.chipwits.com?

    PS. Google monster mini golf and help stick it to Monster Cable Guy

  147. Teach them C++ by Diablo1399 · · Score: 1

    They can handle it.

  148. When I started... by jpate · · Score: 1

    I was around 12 years old, and I found javascript to be an intuitive way to start. The browser was able to take care of all the GUI stuff, which left me free to play around with learning the basic programming stuff.

    1. Re:When I started... by dancpsu · · Score: 1

      There is something to say about the advantages of HTML (or any markup language) grafted onto a programming language. Of course in most GUI programming, you have resource files, but for most languages it's an afterthought, or introduced late in the game. The HTML-javascript combo means that the person who is familiar with HTML can then access the familiar through the language. The problem is, though, that HTML is fairly restrictive, the accessors are not consistent, and the DOM varies between browsers. It's safe to say that there is plenty of room for improvement.

      One thing that would be nice though, is a step-by-step introduction to Javascript in a way that doesn't mean generally copy and pasting someone else's code.

      --
      "Scientists don't change their minds, they just die." -- Max Planck
  149. c++ by Anonymous Coward · · Score: 0

    I'm currently 15 but i started programing at age 13. i started off with c++ and it wasn't hard for me.

  150. Program a THING! by MarkvW · · Score: 1

    Get a programmable robot and let the budding programmers have at it.

    You could do all sorts of cool stuff, like divide up the class into teams (left arm, left leg, right track, left track, sound generator, etc.) and then have them work together to write the program that integrates the functions that the individual teams have written.

    You could have competitions to see who could perform basic tasks most efficiently.

    That would be a great motivator for a kid, I think. The language to use would be the language that compiles to the robot.

  151. How about Processing? by Anonymous Coward · · Score: 0

    Quoth the Processing (http://processing.org) site:

    "Processing is an open source programming language and environment for people who want to program images, animation, and interactions. It is used by students, artists, designers, researchers, and hobbyists for learning, prototyping, and production. It is created to teach fundamentals of computer programming within a visual context and to serve as a software sketchbook and professional production tool. Processing is an alternative to proprietary software tools in the same domain."

    The IDE is simple and free, it's got a great community, it's super easy to start out with but can grow as the programmer grows, and it let's you play with media very, very quickly. IT also has a cousin that lets you rapidly develop for micro-controllers (like the Arduino), called Wiring.

  152. Flash and Actionscript (1 or 2) is a good option. by Anonymous Coward · · Score: 0

    Let me share some personal experience:

    At 12 years old, all I wanted was to create a flash animation. At 13 years old... I learned how and noticed that I could make interactive animations... so I learned to program. The point of the story is that I learned quickly since Actionscript was so simple (AS 1) and because I could see the result on a figural way. This helps a lot to understand how it works.

    Hope this helps.

  153. Late but... by oskard · · Score: 1

    Processing. Having dealt with that age group before, I know how crucial it is to have a fast and easily understood graphics API. Processing will allow them to create great apps in just a few hours, and also teach them some useful and transferable syntax. Java or C++ would not be out of the question after a few weeks in Processing.

    --
    Sigs are for Terrorists.
  154. BASIC, and *the* assignment by CaptainCarrot · · Score: 1

    There are other BASICs out there, and I can't help but think something like that would be a good start. For teaching young children you want something interpreted so they can test single statements and need no intermediate steps to execution and reasonably complete, but without asking for a lot of preamble that just gets in the way of what you really need to convey to teach programming, which is how to think in algorithms.

    I'd played with programming without fully grasping what I was doing for some years before I took a course in it in HS. The one assignment that got me into the right mindset was one to divide two numbers and give the result to an arbitrary number of decimal places. Any number, not just to the maximum of the floating point representations we had available. Doing this made me understand for the first time how to correctly analyze a problem and translate each step in the solution into terms the computer could understand.

    --
    And the brethren went away edified.
  155. Alice is awesome. by Anonymous Coward · · Score: 0

    i can't believe alice was only mentioned once [http://www.alice.org/] I gave Alice to my nephew and he learned how to program while making movies and other cool things. The kids wont even know they're learning to code.

  156. A scripting language they already have at home! by Rockoon · · Score: 1

    With that in mind, either JavaScript or VBScript.

    Both of these languages require no IDE and will run just by clicking on the source file within windows. Every windows machine since Win98 has both.

    Here is a simple VBScript:

    a = 10
    b = 20
    wscript.echo a + b

    --
    "His name was James Damore."
  157. BASIC by Anonymous Coward · · Score: 1, Insightful

    At the risk of getting crucified for making this suggestion I say use BASIC as the introductory programming language. There are free open source versions available and you could even create a bootable mini-distribution of GNU/Linux with just enough to provide an environment to learn BASIC.

    All the primary language constructs are supported and it is easy to implement show how the same problem can be solved using a variety of these constructs.

    After all, you are not teaching computer science theory to these students. And learning a language their fathers probably started out on many years ago might spark a few dinner table conversations.

  158. LISP by Anonymous Coward · · Score: 1, Interesting

    check this article out:

    http://www.trollope.org/scheme.html

  159. PERL! by Anonymous Coward · · Score: 0

    I learned perl when I was in 8th grade and I haven't looked back!

  160. Possibly dating myself, but.... by pngwen · · Score: 1

    When I was 11 I was hacking out 6502 assembly (using a couple of the 6510 extensions) on my C64. At 14 I was hacking out z80 code for my TI-85. Also did a little C and a bit of BASIC.

    So I guess 80's era BASIC, Motorola assembler, mix in a little Zilog, add a dash of K&R and BAM! In 7 or 8 years, a professional programmer will take to the field!

    --
    I am the penguin that codes in the night.
  161. Doesn't have to be a simple language by bertok · · Score: 1

    I learned Pascal and Assembler when I was 10. You'd be amazed at what kids can pick up.

    However, if you want to give them something where they can get "something going quickly", I strongly recommend languages that have an "interactive" mode, because it lets them build on a simple foundation and receive immediate feedback.

    My vote goes for Mathematica. It's a trivial language to start with: "5 + 5" is a program that outputs "10". The output is visually pretty, and it can draw pictures and graphs. However, it's not a toy language, it actually allows for incredibly complex programs in several different paradigms. The advantage it has over even simple languages like Java or BASIC is that it is more abstract, and hides several details that are very difficult to explain to a beginner programmer, no matter how smart. For example, calculating "42^42" works in Mathematica ("150130937545296572356771972164254457814047970568738777235893533016064"), but will produce either an error, or an invalid result in most languages that use 32-bit integers. Even with floating point maths, the result will merely be approximate, which is yet another complex discussion to have with a beginner. The educational licenses are not too bad, I think, but may be an issue with some schools.

    As an added benefit, Wolfram has gone to enormous lengths to build a huge library or tiny educational snippets of Mathematica code, including lots of fun topics like fractals, image manipulation, the game-of-life, etc... For a teacher, this saves an enormous amount of time:

    http://demonstrations.wolfram.com/

    Alternatively, there are dozens of languages designed for education that have interactive interpreters. Haskell comes to mind, but it has a steep learning curve.

  162. Logo by int69h · · Score: 1

    Who doesn't love colorful turtles?

  163. Anonymous Coward by Anonymous Coward · · Score: 0

    Why does teaching programming have to involve a programming language? Isn't first step in being able to program (well) the ability to think logically.

    Why not hit the kids up with some of those common logic problems.

    Try http://www.iriddler.com/riddles/puzzles/farmer.htm for example

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

  165. My choice would be... by bbroerman · · Score: 1

    I'm by no means a Microsoft fan, but I agree that Visual C# would be a good first choice for that age group. My second choice would be Java and then C++ I personally started with Basic and Assembly back in the late 70's, but I wouldn't want to put anyone else through that!

    --
    Logic is the beginning of reason, not the end of it.
  166. 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

  167. Try Alice by Anonymous Coward · · Score: 0

    Try Alice http://www.alice.org/

    Make a game out of it.

  168. As someone who has been in this situation.. by luaplevap · · Score: 1

    Please, PLEASE don't teach anything you couldn't hypothetically respect yourself for programming in. I beseech you this from the perspective of a once bright young student who's wasted more than several classes listening to speeches on introductory HTML. I mean really introductory. Like, you start with and end with . Twelve doesn't mean retarded. Just let your students challenge themselves, preferably not in a totally obsolete, trashy language. I'll have to admit that Visual Basic was one of the most helpful learning experiences... not from a programming point of view, but software development. I'll admit, ,v

    1. Re:As someone who has been in this situation.. by luaplevap · · Score: 1

      (The sentence "Like, you start with and end with" was supposed to look like "Like, you start HTML with and end with /HTML", but the tags got cut off. Or rather, cut in.)

  169. Aligator Eggs by Anonymous Coward · · Score: 0

    Don't spoil the kid with imperative programming yet. Try Alligator Eggs.

  170. Why not Ruby (or Python)? by lithium100 · · Score: 1

    Ruby is a fantastic language and is gaining some huge support in the software and web dev industries. It would be a great start for students because it teaches many fundamental concepts in programing whilst being fairly forgiving. You don't need to worry about strong typing or memory management which are things that often trip up early stage programmers. Let the kids focus on building the code and understanding solid programming paradigms first - then let them move to C/C++ or whatever where the language is not so forgiving.

  171. QBasic by Anonymous Coward · · Score: 0

    As someone who remembers playing with QBasic in high school, I do have a bit of bias.

    I was, until recently, the sysadmin for the high school that I had graduated from years earlier. A math teacher asked me if I could install QBasic in a computer lab she took her class to. She wanted to use it for graphing and solving equations.

    On a side note, when I was in 11th grade, a homework assignment involved listing something like 30 integer Pythagorean triples. A quick QBasic program and printout later, and she was PISSED. The school's math department is a well-known disaster due to an ancient department head who has set math education back some 30 years. Of course, nobody dares to discuss why half the student body is taking their math classes through Florida Virtual School.

    On the flip side, my Chemistry teacher was fascinated when I built [and my lab partner improved on] a pretty complex QBasic program to do all your various Chemistry conversions. I neither expected nor received any extra credit, but I made the source available to anyone who gave me a floppy disk to put it on.

  172. Use Python + Pyglet (and/or Pygame) by Anonymous Coward · · Score: 1, Insightful

    11-14 year old kids want to write video games, or at least, that's what I wanted to do at that age. Python is simple enough that it gives a very good introduction to procedural and object oriented programming. If you couple that with the Pyglet, Python makes it very easy to put together video games.

    You should take a look at http://pyweek.org for hundreds of examples of Python games (written in Pyglet or Pygame) that were put together in 1 week.

  173. BASIC Stamps? by Facegarden · · Score: 1

    I've found that programming BASIC Stamps is one of the simplest things you can do, yet totally reinforces those basic concepts you mentioned. Plus, it lets kids get hands on, maybe making a motor turn or turning on an LED. But yeah, the first kind of programming i did was modifying some BASIC Stamp code from a robot i got at Lynxmotion.com
    -Taylor

    --
    Worldwide Military budgets: $2100 billion. Worldwide Space Exploration budgets: $38 billion. Really, world? Really?
  174. Ease of use by Anonymous Coward · · Score: 0

    I would have to suggest MSWLogo, Haskell, and Python.

    Haskell and Python are just efficient and elegant languages, perfect for beginning programmers with awesome standard libraries and without the obtrusive elements or syntax of things like C or even Java.

    MSWLogo is great because you can use it to teach some maths as well, but it's mainly really hands on and graphical.

    http://www.softronix.com/logo.html

  175. JustBasic by Billly+Gates · · Score: 1

    http://www.justbasic.com/

    and if you are evil you can do try this too
    http://www.microsoft.com/express/vb/

    C# is also free in the express edition and it comes with alot.

    I would try Visual Basic.NET as it does not suck like the original vb. Also the kids can create dialog boxes and buttons and you can throw in a little logic if needed. .NET can be used if the kids are bored and want to do something more powerful.

  176. Use their obsessions --- GameMaker for sure! by mulufuf · · Score: 1

    My 12 year old loves this. One, it's free, two it has a large community of supporters. Three it reflects many useful aspects such as modularity, extensibility, object oriented principles, shared code, and graphic development environments. I'm not saying it's the most robust language, nor full of best practices - but you cannot beat it's WOW factor for young teens.

    In a few short months my son has made tremendous progress. At first he just wanted to generate a gun and explosions. Then he became concerned with the graphics and spent days combing websites for just the right ogre icon to tweak. Then he discovered arrays and decided he wanted to generate all the monsters from an array. Next he decided his code would be much easier to manage if made all the functionality reside in scripts that he attached to the objects. Now he says he's focusing on revising his physics engine! It's a beautiful thing.

    1. Re:Use their obsessions --- GameMaker for sure! by mad_cat_elite · · Score: 1

      Actually, I have used this program to teach younger kids, between the age of 8 - 15.

      It was a summer class broken up into two week segments, I was there for the first two weeks. The website for game maker has tutorials and we taught them that, we had a better understanding of the tutorials so we could give them more insight. After two weeks they were able to make their own games understanding how to use the tools.

      GameMaker is good in the respect that while there are tools to set up gravity or movement, the tutorials help set up if/then statements for collision detection and loops. After the tutorials, there is a programing language in GameMaker that can allow you to do more, I didn't teach that but I do believe it can be taught to kids, at least the ones who excel at GameMaker.

      It is simple and very good to for children in learning, and from there can be directed to other languages.

    2. Re:Use their obsessions --- GameMaker for sure! by 2centplain · · Score: 1

      I agree. For this age group, GameMaker is motivational. More fun to build a simple game then to print out a list of x and x^2. Boring. With GameMaker, you get something interesting with little effort. And, you can readily play with conditionals, local and global variables, poking at objects to make them do things, etc. You can get started with just the graphical programming model and then easily jump into simple scripts. In debug mode, you can watch variables.

    3. Re:Use their obsessions --- GameMaker for sure! by Simon+Donkers · · Score: 1

      I've also given classes in Game Maker. For IMC Weekendschool for 11 year olds I teached then Game Maker and with about 4 hours behind the computer and no previous experience they created some wonderful games.
      Gallery of games from IMC Weekendschool
      I regularly give Game Maker classes and run several Game Maker online communities and as such I meet lots of young users. What always surprises me is the wonderful creations and ideas they come with and how far they manage to go by themselves with trial and error. The real power of Game Maker is the easy to use interface and yet the flexible programming language allowing you to extend your game to very high levels. I know of several game design companies who use Game Maker internally for prototyping just because of it's ease of use and it's very quick result.

  177. Why not C by Anonymous Coward · · Score: 0

    C is clear, simple and practical.

  178. GreenFoot.org by Portal1 · · Score: 1

    I saw last day this great teach tool for kids on google tech talk, it is called greenfoot

    see yourself
    http://www.youtube.com/watch?v=Tcwx-I6Arwk

    It is based on Java, but made very simple for kids age 14+, but a gifted kid could start earlier.

    You can even upload and share the programs you make to their website and there is even a coding contest

    --
    There are no stupid questions, Just a lot of inquisitive idiots. (from a good friend)
  179. My Daughter (9) likes Pippy by jhhl · · Score: 1

    We have an OLPC XO - not the greatest machine, but it does have Pippy, a primitive IDE for python. She already knows basic programming concepts from working with her Lego Mindstorms,

    I'd say , do it like I did (late 60s) ... learn one language a little and then drop it and learn another one, and keep doing that. You end up learning how the languages are a like and how they differ, what some are good for and what some are not good for. (VB is good for nothing, for instance). Furthermore, the language you are using is less relevant than the conventions (and patterns, bleah) for interfacing with the systems you want to use.

    That kind of learning you can never stop needing to do.

    Don't be afraid to go nuts with FORTH, LISP, SNOBOL and the other non "ALGOL" like languages. These three have a kind of fruitful simplicity of concept (while occasionally making some really ugly looking code)

    To get up and running, Javascript is really great. It's kind of ugly in some ways, like how you make objects in it, but it's pretty ubiquitous.

    And for the future of programming, know those languages, but learn erlang.

    --
    -- Real Stupidity is the Artificial Intelligence of the 21st century
  180. Teach Zenilib by bazald · · Score: 1

    Disclaimer: Blatant Self Promotion

    I have been working on a game engine using C++ for a couple years now, and I have successfully used it to teach (mostly) high schoolers at Camp CAEN (http://www.campcaen.com) and just recently college students as well. The youngest person to learn how to use it this past summer was an 11 year old IIRC.

    http://zenipex.com/zenilib

    Of course, I am biased.

    --
    Insert self-referential sig here.
  181. Re:Bright vs. Hard Workers by Belial6 · · Score: 1

    What a sad article. It basically says that our education system is totally screwed up, and the best and brightest will have their talent washed away through poor education, but hey, you can at least keep them at average if you do these few makeshift educational patches.

  182. Why not use a real language? by Anonymous Coward · · Score: 0

    Why is it bad to use a real language? Assembly is a great starting point, as you can do very simple procedures and actually do real things with them, such as light an LED or make a motor go forward or backward. Assembly is great on a simple architecture.

  183. Kturtle by rb2297 · · Score: 1

    Kturtle or one of the other available apps that allows you to program in Turtle Graphics. I learned Turtle Graphics on our 8086 when I was 8, it was a good introduction to programming and it was fun for me as a kid as I got to see quick results, by running the program as your write the different steps...

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

  185. More suggestions by Plekto · · Score: 1

    - PovRay is cheap and works great. Actual math and scripting and variables that provide real world skills. It also gets kids focused upon the end result more and less on the math and so on, as well as the tiny details of look and feel. anyone can program a spreadsheet given enough time, but making something look fun and interesting is a whole other art in itself.

    - No BASIC, VB, LOGO, or other useless languages. They are dead or likely to be so in the decade it takes for the kids to grow up and actually be using computers. Use a more modern full language instead like Java or C+ or similar - something that they can use for web pages and so on instead of decades old stuff. Also, the stuff that they make you learn has to largely be UN-learned in actual classes.

    - I'd suggest grabbing a copy of Angband or NetHack. This is done in standard C and is easy to understand and go through, as it has huge amounts of help/comments, groups online, and is an excellent free primer.

    I guarantee that if they know PovRay and how Angband or NetHack works, they have enough skills right there to actually get a real life programming job. You will need some books and a lot of patience, but the rewards are worth it.

    Note - these programs also have versions that run on Linux as well as Windows, so there's another way to help their knowledge grow. Just learning how to use Linux in and out from a command prompt is equal to a couple of semesters worth of knowledge at a university these days. It's also free and they know how to think outside of the Windows box.

    - I'd also recommend a breadboard and a book of electronic projects. Basic electronics is a very useful way to get them to understand WHY things work like they do in a computer. It's fun and very useful knowledge that's all too often just glossed over.

    I suggest a TV jammer or a TV kill-box as an eventual project :) Radios also are very fun. I once made a crystal radio, then made one with about 100 diodes to get about a full watt worth of power.(yes it was ungainly but nice to hear stations without any batteries). There's also robotics and other more advanced projects as well. Ham radio licenses also are good(doubly so if they have to build the set), and of course, there are the various "blinken lights" projects out there. 100-1000 LEDs and a lot of time and some programming. Kids love this sort of stuff. :)

    1. Re:More suggestions by Anonymous Coward · · Score: 0

      No BASIC, VB, LOGO, or other useless languages.

      No general-purpose programming language is useless.

      They are dead or likely to be so in the decade it takes for the kids to grow up and actually be using computers. Use a more modern full language instead like Java or C+ or similar - something that they can use for web pages and so on instead of decades old stuff.

      I'm not following your logic there. You're saying that a 40-year-old language is more likely than a 10-year-old one to "die out" sometime soon? On the contrary! Programming languages are being invented all the time. Doesn't the fact that people are still using a language after 40 years suggest to you that there must be something worthwhile about it?

      In the long run, though, it's not really important for these kids to learn language X, so much as it is for them to learn how to program. Because a good programmer who's had a decent sampling of the languages out there can easily learn new languages as they come along. Whatever language is popular with PHBs twenty years from now -- and while Java, Logo, PHP, Visual Basic, C++, Haskell and COBOL will all still be around, chances are it won't be any of them -- a good programmer will be able to pick it up and apply the skills he has already learned.

      What *is* important, for the time being, is that these kids learn a language that's fun and keeps their interest.

  186. Use Alice by Anonymous Coward · · Score: 0

    Check out the Alice IDE from Carnegie-Mellon University. It's at www.alice.org and it's free.

    We've been using it in a Foundations course at the community/technical college where I'm on the faculty for several years and it's gone over well with the students.

  187. I took my first C++ coarse as a freshman in FLHS by jetole · · Score: 1

    When I was a freshman (age 13) at Fort Lauderdale High School, second semester so I think it was 1999, I took a C++ class or "Programming 1" (which went up through programming 3 and then AP programming which if you passed counted as college credits to your school university or college of choice). Anyways, I transferred schools back to my original home town the next year and they had no programming courses so I only ever took the one however I can still program in C/C++ to this day and do on a regular basis as well as other languages I know all because of what I begun to learn at age 13 in a class. If it's any help, I actually remember the publisher of the book we used which was Lawrencevill Press and, although it included training includes which you won't find in any real programming environment, we studied everything from creating functions to Fibonacci to classes to you name it and frankly it was the best coarse I took in high school.

  188. Make sure that they're set up to go by frank_adrian314159 · · Score: 1

    I'd recommend setting up a standard VM image with all of the libraries, compilers, and other development tools they need. First of all, kids that age (gifted or not) are not going to want to take the time to install Eclipse, Dev Studio, or even MzScheme. And, no matter how much you might think so, you're not looking at turning them into little "industry-ready" programmers at this age. So the more time you spend doing ancillary tasks, the more time you have to lose them (plus VMs will save you a lot of time trying to figure out why any particular crap box you happen to be on isn't running right).

    Second, give them projects that show immediate results (remember that you're trying to get them excited about programming, not showing them how tedious it can be). That means that you need projects that can be debugged in a single class period until the end, when you might be able to give them longer range assignments.

    Give them simplified environments. Trying to get them to understand all of the intricacies of setting up an OpenGL environment just to draw a rectangle on the screen sucks. Write your own libraries beforehand that sets up windows, make it simple to open files, etc.

    Make sure that the tasks you give them are compelling. A Fibonacci sieve might be a great algorithm and easy to teach, but chances are it will bore them to tears. You might do your first assignment that way. But after that, you better give them something interesting to do.

    The previous note means you'll need to introduce some advanced features early. Arrays and structures should be in the first two lessons. Remember that a computer gains most of its power from (a) operating on complex data and (b) doing things repeatedly. If you introduce arrays, you can get them to program Life. Introducing structures will allow them to do some graphics processing, too. Put them together and you have an interesting graphical program that can be done in the first two sessions (and, if you're clever, you'll be able to show them some abstraction in a countAdjacentCells routine). Then you can show them the same thing on the web. Tell them that the web-based program does the same thing (but for the world), The fact that they can do something that is good enough to be put on the web should be (semi-)impressive.

    Get them hooked early, make sure you don't make it too tedious, and build their confidence. That's all you should need.

    --
    That is all.
  189. I'm really surprised by the responses by Anonymous Coward · · Score: 0

    Assembly? Are you kidding me??? Javascript? They will probably never program again after being exposed to that....

    How about something simple and fun like Python, easy language with a great IDE. Even VB would be a nice starting place. I know it's not a programming language, but HTML offers instant gratification and might be more appropriate for youngsters.

  190. Python by fozzy1015 · · Score: 1

    I think Python would be a great choice. You could start off with entering simple expressions in interactive mode then go from there.

  191. http://www.usfirst.org/ by ender_wiggins · · Score: 1

    teach them how to program robots. real world results.

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

  193. Three thoughts by athlon02 · · Score: 1

    First tip:
    Consider learning styles... I remember learning Pascal under Turbo Pascal 7 in 10th grade... I am a visual hands-on learner and *hated* being forced to sit and listen to the teacher explain it on the board and wanting us to read about it. I ended up ignoring most of it and just learning as I went. So, please consider that, gifted or not, you'll need to cater to different styles of learning.

    Second tip:
    Don't underestimate how far these kids can go. Teach them the basics in whatever language / environment you decide, but be ready for more advanced techniques if they surprise you.

    Third tip:
    Avoid any language that is too far removed from the hardware. They may not be ready for assembler, but using Perl, PHP, Java, or anything else that does a lot of under-the-hood stuff for you won't really help them.

  194. maybe this will sound elitist of me, but... by buddyglass · · Score: 1

    I wouldn't dumb down your choice of language based on their age. If you wouldn't choose a given language for teaching gifted 18 year olds then don't choose it for the 11-14 year olds.

    I was first taught BASIC and then Pascal, but in retrospect I think I probably could have handled something beefier if someone had just taken the time to explain some basic concepts to me, which I assume you're willing to do with these kids.

    Why not C? If it's important to have an IDE you could try the Eclipse CDT or Dev-C++.

    As for programming tasks, I always enjoyed the "sorting" problem. Mainly because, in addition to correctness, performance "matters". Solving that problem forces you to not only write correct code, but to write efficient and "clever" code.

    Describe how the basic bubble sort works and have them implement it. Then turn them loose to see if they can come up with something faster. Make the range of numbers being sorted relatively narrow. Say, 16 bits. Then see if anyone can arrive at the O(N) solution.

  195. 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/

    1. Re:FreeBasic? by shutdown+-p+now · · Score: 1

      But 1 thing - don't teach SUBs - teach functions. Believe me, it's really hard to move from SUBs.

      In BASIC, SUBs are functions that don't return a value (usually known as "procedures" elsewhere), and FUNCTIONs are those that do. A BASIC SUB is no different than a void-returning function in C++ & Java. If you think there's something wrong with SUBs, then apparently you haven't learned it as good as you think (and maybe you shouldn't move on to C++ just yet... you know).

    2. Re:FreeBasic? by isaacwaller · · Score: 1

      The only reason I think you shouldn't learn subs is that when switching to functions I found it hard to remember to put the braclets and remember to put the arguments separated by a comma, etc. I was saying that since functions are so similar you should teach them instead to avoid having to partly relearn something when moving to harder languages. Isaac Waller http://www.isaacwaller.com/

    3. Re:FreeBasic? by shutdown+-p+now · · Score: 1

      The only reason I think you shouldn't learn subs is that when switching to functions I found it hard to remember to put the braclets and remember to put the arguments separated by a comma, etc.

      Well, maybe then it's better to pick a dialect of BASIC that doesn't have a different syntax for calling SUBs and FUNCTIONs? ;)

      By the way, you're still wrong here. The syntax doesn't depend on which of those you're calling; it only depends on whether you need the return value or not. If you want to call a FUNCTION, but do not care about its return value (which happens every now and then), then you also have to omit the brackets.

      I was saying that since functions are so similar you should teach them instead to avoid having to partly relearn something when moving to harder languages.

      You cannot avoid teaching people about functions with no return value, because they are a fundamental construct in imperative programming.

      Also, when moving to "harder" languages from QBASIC, syntactic differences are unlikely to be a major concern. Pointers, for example, are much more baffling.

    4. Re:FreeBasic? by isaacwaller · · Score: 1

      I did not know about the omit brackets thing. Thank you, I learned something today.

  196. Mod parent up. by RulerOf · · Score: 1

    AutoIt is far and away the easiest programming language I've ever used, and also incredibly powerful. The standard functions' syntax are all laid out for you in Scite as you write your code, and it's very forgiving on syntax.

    There are countless UDF's and libraries for it, and when you're ready to step up, you can expand it with other DLL's, DCOM, and WMI to do almost anything you want.

    Give it a try if you haven't.

    --
    Boot Windows, Linux, and ESX over the network for free.
    1. Re:Mod parent up. by Provocateur · · Score: 1

      I would like them to see how the windows get drawn that puts on their own messages, as a start. THen it's almost like, Hey I can get behind the scenes! Then start going complex from there, but if one of them starts packing for Redmond, show him/her the un-glamorous part of it. Late night cold pizzas, stale soda, non-existent social life, All this can be yours, do you really want that?

      Guys, no! I was just kidding about the last part! I wasn't talking about you! Go back to reading the rest of the comments!

      --
      WARNING: Smartphones have side effects--most of them undocumented.
    2. 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.

    3. Re:Mod parent up. by magisterx · · Score: 1

      Alice looks like it would be a great introduction to some of the basic concepts of programming. Personally, I started playing around with GW basic when I was about 11 and moved on to Qbasic before I started more serious studies later at the end of high school and college.

      Today, I would recommend starting with python. It is free, has good tools available, and it lets you start with a very simple approach. Basic/Qbasic, mentioned in the OP, was a great place to start for me, but its a bit dated now.

  197. 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?
  198. Networking by MindStalker · · Score: 1

    Kids nowadays are all into social networking. Why not a web language. Sure you probably can't teach them how to code their own blog, but coding their application in a web language would give them something they can easily show their friends. Of course there is the danger of them posting inappropriate material, but I'm sure that could be dealt with.

  199. Processing... by Anonymous Coward · · Score: 0

    It comes with a simple IDE, and is a small subset of Java. The best part is the immediate Visual Feedback. Lots of looping, constructs, etc. I think this would be a great introduction to programming for children.

    http://www.processing.org/

  200. C++ or Java, or Qbasic by Anonymous Coward · · Score: 0

    How bright are they? I started c++ as my first language at 12, its definitely doable but if its really mixed levels of intelligence/motivation, qbasic would be a good choice

  201. Python by crunch_ca · · Score: 1
    Another vote for Python.

    I'm teaching Python to my kids now (ages 10 & 12). The great thing is that there's an immediate mode, so you can start up the interpreter and play with the language without having to write programs.

    Of course, my kids are also programming under Linux, but that's the sign of a parent who cares.

  202. Rebol by Anonymous Coward · · Score: 0

    Rebol Core and Rebol View

    Pretty simple, lots of datatype, comes internet ready, one simple liner are easy...

  203. some experience, but I'm not sure how relevant by hedrick · · Score: 1

    How gifted? I have experience, but it's with a kid who may be brighter than all of us put together.

    I've been working with someone that age, who humors me by letting me think I'm helping him. I first started work with him at 12. He's now a few months away from being 15. He had played with Visual Basic, but hadn't done any real programming. He did a project for school in Visual Basic (with at least some object-oriented code), and then moved to Java, reading through Head-First Java. He likes doing client-server applications, with a multithreaded server (yes, I'm gotten him to do synchronization properly) and a Swing-based GUI. He's currently using Eclipse. At this point he no longer needs my help for normal programming tasks (if he ever did).

    So basically I don't treat him any differently than a college student in terms of language, tools, or what I expect, but the approach is different. Rather than trying to teach stuff like in a class (yes, I have taught an intro programming course in college), I'm around to provide him with whatever he needs for his current project as he needs it.

    I don't know whether that approach would work with other kids or not. I've got pretty much an ideal situation: he's in charge; I'm just a consultant. That may not be possible in the context of something that looks more like a course.

    One thing I've observed is that it's really critical for him to come up with projects he cares about. Whatever his ability, attention span is still an issue. He likes multiperson games, so his projects have been either tools to help players with tasks like keeping track of their loot in an existing game, or his own game. It may be more important to come up with the right project than to use the right language. Then pick a good tool for it, just as you would for any programmer.

  204. Use the good old classics LOGO and PILOT by Orion+Blastar · · Score: 1

    PILOT and LOGO:

    RPILOT is a FOSS version of Pilot. Here is a list of LOGO resources find one that works for you. Berkely LOGO or Star LOGO or Net LOGO take your pick.

    Grade Schools and Junior Highs used to teach PILOT or LOGO or both on the old 8 bit computers when I was that age. It was fun giving a virtual turtle commands to draw shapes and solve problems.

    --
    Remember, Slashdot does not have a -1 disagree moderation, and no, troll, flamebait, and overrated are not substitutes.
  205. TI-Graphing Calculator Basic by rcullan · · Score: 1

    My introduction to programming was through BASIC in a Ti-83 and then Assembly for the Z80 processor in the Ti-83. Growing into Basic and Assembloy on the Ti-89. Its a VERY simple language with If, Then, Goto and lays the foundation for that. It wourked out quite well.

  206. QBASIC by Jasnator · · Score: 1

    QBasic all the way. My current compsci teacher in high school still uses it, and it was the perfect first language to learn.

  207. %s for Dummies by Anonymous Coward · · Score: 0

    When I was 11 I read Computer Programming for Dummies and it was really fun. Then I forgot all about programming. Now I'm reading C for Dummies and highly recommend it for beginner kids and adults alike.

  208. 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?!

  209. Forgive me for posting a link to my blog by MichaelBuckley · · Score: 1

    I wrote a rather long post on my blog a few months ago on this exact issue. After doing some research, I couldn't really find a language or technology that would meet my needs, but I did come up with a better idea of what I would consider to be an ideal educational program. http://angrymen.org/uncategorized/towards-an-educational-programming-language-for-children/

  210. Not braindead by Derrike · · Score: 1

    Python with PyGTK or C++ with g++. Just for the name of all that is structural and logical, don't expose the kids to the horrid habits of Visual Basic -- Once you learn a way of doing things, it sticks with you.

  211. XNA by cmdotter · · Score: 1

    Microsoft's XNA Gaming platform. It's free (if you use Visual Studio Express) and it's all about games.

    My teen nephew is getting right into it (despite the fact that he still wants to be a policeman!)

  212. A word of warning by Anonymous Coward · · Score: 0

    Whatever you do, if these children are indeed gifted, don't treat them like children - treat them like adults.

    As far as I can tell so far from the comments I've read, most of the posters - and the OP - are adults. I myself am sixteen, only a few years older than these kids you're teaching. As you get older, you have a tendency to lump ages far enough below yours into one huge category - DON'T! I could call myself gifted, and by the time I was 11, I would have been able to move out and live by myself and function just fine (if it weren't for those pesky child labor laws).

    You will only earn these children's disdain and loathing if you patronize them or feed them dumbed-down 'child-targeted' crap. Give them a real language that they can actually use, not some specially made language for children that has no application in the real world. If you don't tell them that it's supposed to be a hard language, they'll pick up on it quickly and be just fine at it. Hell, when I was about ten, I was graphing parabolic functions - on paper, not those newfangled graphing calculators - simply because someone explained to me how to do it, and didn't tell me it was something I wouldn't be learning to do until high school.

    These kids will be more engaged by a real, challenging, applicable language than they will be by a shiny, 'quick-results' language that is useless in the real world.

  213. What about Python in Blender 3D? by Optic7 · · Score: 1

    I don't know enough about either, but isn't Python the main scripting language in Blender and many (most?) other 3D animation packages? Couldn't it possibly be used to satisfy the desire for having graphics then?

    1. Re:What about Python in Blender 3D? by shutdown+-p+now · · Score: 1

      I don't know enough about either, but isn't Python the main scripting language in Blender and many (most?) other 3D animation packages? Couldn't it possibly be used to satisfy the desire for having graphics then?

      No. For teaching kids, you don't need Blender. You don't even need Cairo. You need something really simple, along the lines of:

      color = Red
      draw_line(0, 0, 100, 100)
      draw_circle(50, 50, radius=10)
      car = load_image("car.png")
      draw_image(car, 100, 50)

      That's what GP means when he speaks of QBASIC graphics - it's what it was about. Of course it's all very primitive, but that's why it's good for this purpose - it avoids dealing with extra complications (such as multiple windows, event queue and invalidating/redrawing regions etc), and concentrates on simple stuff such as teaching recursion by the example of drawing a spiral.

  214. Java/C++ by Anonymous Coward · · Score: 0

    I started about (11). I went from HTML (11) to mIRC scripting (11-12) to C++ (13-14) which I picked up in basically a camp environment in an at-your-own-pace project-driven teaching environment. The kids were allowed to use either Basic or C++, each came with a different set of projects.

    The course was basically run as follows: There were pre-defined projects in escalating difficulty levels. You worked your way along each one until you got to the next one. Some collaboration was allowed, 'playing with' the projects was somewhat encouraged. It was a _great_ format for the gifted/talented crowd which tends to be fairly self-motivated. (This is not a way to force-feed your kids programming skills.)

    Admittedly, the camp benefited from a pretty high teacher/assistant to student ratio (maybe 1 assistant for every 6 students) so I'm not sure how well it would work if a single teacher was trying to watch 20 odd kids.

    Java really wasn't a serious option when I was doing this. Now, I'd really recommend it. For as much complaining as people love to do about the language it has a lot of really good functionality (like graphics) while still being very C-like. IMHO it's a good balance between seriousness and ease-of-use for this application, while at the same time giving kids a _real_ tool to play with. (Many kids in the "high ability" crowd will be much less interested in something they know to be a 'toy' then they will be if you can give them a real tool to play with).

    That's just my $.02

  215. 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.
  216. 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..."
  217. Towers of Hanoii by Anonymous Coward · · Score: 0

    I agree with not using basic. As for something to implement... Towers of Hanoii with 5 disks maximum. It can be solved by writing code for each move in a reasonable time(iirc 2^n moves), and as a special bonus by recursion. If none of the kids figure out it can be solved recursively, you can demonstrate it at the end of the course.

  218. PERL bitches! by oliphaunt · · Score: 1

    am I so old now that I'm the only one who thinks that PERL is cool? What better way to teach kids about loops than to make them infinite and print the result of each iteration out on the screen?

    Ok, Lego mindstorms is cool, and maybe colors and stuff are exciting. But speaking as the kid who wrote a computer quiz game in apple BASIC in sixth grade, way back in 1988, with GOTO and GOSUB and incremental scorekeeping and system beep sound effects and the payoff screens coded by hand, with POKE, in 16 colors, as pictures of a confederate or a union soldier planting a flag to indicate the winner...

    but seriously, here's my suggestion. Give them problems to solve. It doesn't matter what language you choose- the process is what matters, and programming is all about solving discrete problems. Start them out with something simple: "how can I print a number to the screen?" and then move up: "How can I make the computer count by one, and then print THAT number to the screen?" Those were the most satisfying programming moments of my larval stage as a nerd- look how fast it gets to 1000! and 10,000! and once it gets to 1,000,000 you can really see the time difference in how long it takes to add another order of magnitude...

    The magic comes later, when the world presents you with a big complicated problem, and you realize you can solve it easily by breaking it down into N smaller simple problems.

    --




    Humpty Dumpty was pushed.
  219. Here's another language that's great! by failedlogic · · Score: 1

    I believe all children deserve a well-rounded education. They need to think for themselves. Not have a book with all 'the answers'. Learn some new - perhaps- colorful expressions.

    Brainfuck http://en.wikipedia.org/wiki/Brainfuck is the perfect language. It will take exceptionally bright students to figure it out. I'm sure there's a few wannabe gifted students in the class. As soon as they drop out, it'll be known they aren't that smart.

    And, since they are gifted students, they probably don't know too many swear words. Even if they leave the class, at least they know a new word. It will be part of their cirriculum.

  220. Re: Remembering Back by Anonymous Coward · · Score: 0

    I recall playing "Widget Workshop" (Win 3.1? 95?) which allowed me to combine gears and levers to create my own "widget". This included logical switches (Not, And, Or, Xor) as well as counters and more. I'm not sure if it's been maintained, or if the company even exists, but I enjoyed it.

  221. Python by Anonymous Coward · · Score: 0

    Use the python programming language and the text "How to think like a computer scientist. Learning with Python" Python is a great language that is simple to learn yet very powerful. In addition to being a good starter language it will also be useful to them to create serious programs with in the future since it is a very popular language. The text is very easy to read as well, and its free to download. I wish I had started out on python. Its my favorite language bar none.

  222. A little bit of everything by AVryhof · · Score: 1

    I started at 11 with QBasic because it came with DOS 5 on my Tandy 1000. Most of my old code was crap, but it was functional, and I learned more as I went along.

    I picked up VB pretty easily, mIRC Scripting, PHP, C, JavaScript, and a few other funny languages as well (bozol, lsl, etc)

    Either way, do the functional programming before OO, and start with something simple... some say BASIC can cause brain damage. They're wrong.

    Try this, start with BASIC (Not visual Basic or some funny variant... simple plain BASIC... and no shortcuts, Dimension and Declare every variable..keep strict data types for later understanding) here is where TYPES, FUNCTIONS and good programming practices should be stressed.

    then move on to a more structured language that is still relatively simple... PHP or JavaScript... stress code structure and syntax.

    from there C will be a relatively easy next step, and beyond that shouldn't be too tough to work with once the basic concepts are understood.

  223. Skip the language... by Anonymous Coward · · Score: 0

    Start with structured programming logic. Teach them about logic, make sure they have core algebra concepts, and so forth. Don't teach them how to code, make sure they are thinking logically about what their code does. Think about intended results, unexpected results, and how to handle them. Also instill habits that have gone by the wayside like undefining your variables and so forth. You took memory, give it back. This can all be done without language.

    Once they have core concepts, syntax is easy. Once you move on to that stage, get them used to something object oriented. C++ is a good start as most languages have similar syntax, and it's a good starting point.

  224. Re:Bright vs. Hard Workers by rssrss · · Score: 1

    I prefer the term "smart ass".

    --
    In the land of the blind, the one-eyed man is king.
  225. Do not underestimate them by Anonymous Coward · · Score: 0

    http://www.youtube.com/watch?v=8mwKq7_JlS8 this guy is twelve, presenting at Google about coding in JavaScript. Seriously.

    As someone already mentioned it, do not bother with languages of the past. JavaScript, Erlang, Haskell is what they should know. I myself was 15 when learned Prolog.

  226. I have some materials if you need them by Anonymous Coward · · Score: 0

    I taught an introductory computer programming course to 7th-10th graders in an intensive summer program for gifted students. The students had 7 hours of contact with me and my TA each weekday.

    I used Python and it was the best choice I ever made. If you want to contact me I can give you some of the materials I and the TA created and explain in more detail my approach. You can email me (for a while) at phibsoumso@farifluset.mailexpire.com.

    You will thank yourself forever for using a language that ENFORCES some correct indentation. Otherwise you will claw out your eyes with some of the code you will read.

    I found it really useful to drill the students on tracing the behavior of code on paper and drawing stack frames for function calls (although they didn't really know what they were).

  227. Best Programming Language to teach kids by SLK64 · · Score: 1

    When I used to teach a technology class for a local catholic grade school. I found a great program that was developed by the folks at Carnagie Mellon. It's called Alice. The kids find it quite engaging, And its free. Now it has changed a little since I first used it about 7 years ago, but check it out. It may be worth looking into. go to: http://www.alice.org/ Hope this helps.

  228. "License plate" increment problem. by ulerich · · Score: 1

    A "license plate" increment problem: Incrementing a sequence like AAA, AAB, ..., AAZ, ABA, etc that goes up to ZZY, ZZZ, AAA, AAB, ... Have the kids figure out how to get Z's to roll over to A's in the next higher place WITHOUT using if statements. Great for showing number representation, character sets and how they map to integers, integer division and/or modulo operators, concepts of overflow, talking about how jumps can be avoided sometimes, etc. Saw it in a high school programming class. No idea where the teacher got it. Frustrating as all hell... :)

  229. Necessity is the mother of invention by Culture20 · · Score: 1

    Assign them the task of writing "I will not throw paper airplanes in class" http://www.jeffpalm.com/fox/fox.jpg

  230. Simple Procedural Language by Hy-teq · · Score: 1

    Turing or Python

    These are good safe languages that reduce frustration. Just easy to use and easy to teach.

  231. C# by Anonymous Coward · · Score: 0

    These are kids who want to make something, not comp sci students (yet!) who need a real understanding of what they're doing.

    When you think back to QBasic you can think how it could let you, as a child, figure out how to make something 50% as good as a commercial DOS application.

    C# is *good enough* and it has by far the best IDE around, which is really what will help these kids go! Visual Studio C# Express Edition (free download) even corrects as you go. It lets you quickly cobble together something you can *finish* and show your mom in an hour (11 year olds don't have long attention spans and have trouble seeing the big picture).

    Plus XNA is hugely exciting! Take a look at some of those game demos that can quickly be made. And they can simply re-target their app to the xbox 360 and have a cool console game to show their friends!!

    Nothing else will let them have the joy of having a finished app that looks like a full on Vista ready app their mother can understand like .NET. Nothing else will let them get a game on a console their friends will be able to look at and then praise them for being able to build something for a 360 like XNA.

    Nothing will make them think programming is cool like being able to show something *useful* for their work.

    My 2nd choice would be php for being able to give that kind of positive feedback and 3rd would be python.

  232. Creating and maintaining interest is important... by Cliff+Jolly · · Score: 1

    So I'd recommend something simple that isn't frustrating, but also allows easy access to things kids like (graphics stuff).

    I learned programming at a very young age, bouncing between BASIC on an Apple IIe and QBasic on my dad's 286. The cool thing about the different forms of BASIC were that it made graphics stuff (my interest) easy to set up and use. One command to set the screen mode, and another to set pixels, draw circles, boxes, or whatever. Page flipping stuff was a little more advanced, but supported in QBasic too, IIRC.

    Of course, BASIC teaches all kinds of terrible programming practices, but if the user ends up getting frustrated or bored and giving up early, your technically superior practices and language choice won't matter.

    I doubt kids have interest in the code itself so much as what you can do with it. That is to say, they'll get bored with in-depth algorithm descriptions and things that are functionally cool, but don't show an interesting end result beyond "Hey look. It sorted the list. Whee!" I know that if I'd started with that instead of just naively coding whatever I wanted to, I probably wouldn't be as far along as I am now, graduating at a university with a com sci degree.

    So, in short: Dazzle them with cool graphics/sound/whatever, not cool algorithms.

    I haven't had more than a glance at it, but perhaps you might consider a modern version of BASIC that's designed for that kind of thing like Blitz Basic. Again, I haven't used this, but it might be just the thing to keep interest, which I believe is the most important part.

  233. Evaluation of expressions is not programming by tepples · · Score: 1

    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.

    The evaluation of expressions in a formal system with variables is computation, not programming. Programming, at least as Edsger Dijkstra defined it twenty years ago, is the creation of such expressions by a human being.

    1. Re:Evaluation of expressions is not programming by caerwyn · · Score: 1

      Granted, my terminology was a little wrong. Let me try again.

      Algebra is required for complex manipulation of symbolic expressions.

      Most programming is not complex manipulation of symbolic expressions. Rather, much programming, especially beginning programming, is simple algorithmic design more akin to solving elementary word problems than to solving algebraic expressions.

      Consider a bubble sort. It's easy enough that it's been reinvented thousands of times the world over, and the the only math required is an understanding of relational operators. That's hardly the realm of algebra when you're simply laying out evaluation rather than doing complex analysis.

      --
      The ringing of the division bell has begun... -PF
  234. Re:Bright vs. Hard Workers by Anonymous Coward · · Score: 0

    haha! awesome terminology

  235. Getting them interested's what counts by SleepingWaterBear · · Score: 1

    For 11-14 year olds the most important thing is getting them interested, not the technical details of the language. You'll want a language that will let them do what they want to do with as little effort as possible, which means you want a high level language with relatively intuitive syntax. Ideally you want a scripting language so that there's as little delay as possible between writing the code and seeing the results. Finally, you want an actively supported language with many modules so that students won't feel that they're playing with a toy language, but with something that can be used to do anything they want to do.

    From this point of view, I would go with Ruby or Python. I personally prefer Python, primarily for it's excellent documentation, though if you're thorough enough in preparing materials for the students, Ruby could be an excellent choice also. Python can also be used as a sort of 'gateway language' to programming C for the more enterprising students since if you program enough in python, you'll eventually run into something that is best done by writing a module.

  236. Small Basic by Anonymous Coward · · Score: 0

    It's easy as hell, comes with a simple to use IDE with intellisense, anybody could pick it up.

    http://msdn.microsoft.com/en-us/devlabs/cc950524.aspx

  237. Lego Mindstorms or Cricket Robotics kits by ghetto2ivy · · Score: 1

    The OP asked how to introduce to programming, not what language to use. Making a basic robot do neat things is a great reason to learn programming. The Lego kits can work with a wide variety of languages from C to Logo.

  238. Revolution by Anonymous Coward · · Score: 0

    Runtime Revolution lets people code in plain English... http://www.runrev.com/

  239. YES FREEBASIC by phido2000 · · Score: 1

    I agree. Im a high school science teacher taking a year 7 Gifted and Talented (now refered to as GAT) class next year. Im planning to use Freebasic. Its purely awesome for this sort of stuff. A real gateway language that lets students use C libraries, OpenGL, DirectX but also allows them to line, pset, circle. Given our year 11 and 12 IT classes have to use Visual Basic, it gets them into the basic syntax with out clunky Visual stuff getting in the way. 11-14, Forget OOP and all that other crud. You want proceedural, you want simple, you want stuff kids can pick up and do something useful very quickly. And squeezing programming into a science lesson, thats what I want. I don't want kids to write up some pseudo code, get it approved, then write a nice neat anal C code. I want quick and dirty like in the real world cause I've got 45 minutes to get them to complete a task from bell to bell. Well that crosses that off my list, but I also have to teach them Databases! SQL as well then?... Somewhere after that I just have to fit in maths and maybe, just maybe a whole entire Science sylabus... Basic is no longer the programming poison is once was.

  240. Free pascal by wfstanle · · Score: 1

    I know that there are a lot of people that will disagree but Pascal is a very good learning language. The good news is that it has been greatly enhanced to do more than the old "Hello World" type programs. Take a look at Free pascal at www.freepascal.org, the compiler costs nothing so you have nothing to lose. Pascal is no longer the weak pascal that you learned in the 80's.

    1. Re:Free pascal by Psychotria · · Score: 1

      Modula-2! Umm, dunno if there is any compilers readily available though.

  241. They're bright by Ambitwistor · · Score: 1

    So make them implement their own language to program in. I'm thinking a Malbolge compiler targeting a quantum Turing virtual machine.

  242. Python by Anonymous Coward · · Score: 0

    Python

  243. Re:Bright vs. Hard Workers by BrettJB · · Score: 1

    Try online courses for a semester, if your college offers them.

    I had a similar experience: gifted/talented/whatever they're calling those programs these days in school. I didn't burn out in high school, but never really had to study to get through classes with flying colors. I burned out shortly into my sophomore year in college. I made it through my degree program, but my GPA was no great shakes. I couldn't understand why I didn't just "get it" they way I did in high school.

    A few years ago, I decided to go for a second degree online. Best decision I ever made. When it's all on you, and you've got no alternative but to sit down with the material and decipher it on your own, you might be surprised at your ability to study.

    FWIW, I graduated summa cum laude from that second program, 3.975 GPA (one stinking A- away from perfection. Sigh...) Certainly being older and in a different situation (married with a kid, as opposed to single on my own) helped, but I wish that online had been an option when I was first going to college...

    --
    Smell that? You smell that? Burning karma, son. Nothing in the world smells like that...
  244. Good point! by Gazzonyx · · Score: 1

    IIRC, LOGO has its roots in LISP, believe it or not!

    --

    If I mod you up, it doesn't necessarily mean I agree with what you've said, sorry.

  245. Here's a neat idea. by John+Pfeiffer · · Score: 1

    Give them some Arduinos to mess around with. It utilizes a C-like programming language which is easy to get a handle on, but scales up in complexity to accomplish all sorts of things. They would also be learning about electronics, and microcontrollers. The Arduino can pretty much do anything from blinking an LED when you press a button, to interpreting gcode sent from a computer to control a 3-axis milling machine.

    Seems like a good age to get them playing around with electronics anyway. And I always say that the wider range of things you can teach kids with a single activity, the better. They're more liable to retain it. Also, it's damn cool.

    I'm 27 years old, and I had a lot of childhood experience with electronics, but no programming experience beyond some BASIC on the C64... I was *ecstatic* when I figured out how to use a 'navigation switch' (Single axis and a pushbutton center) to adjust the color mixture on an RGB LED. Sure, it had no practical use, but I learned a lot programming it. Currently, I'm turning the drive head carriages from two optical drives into a CNC laser engraver. (Though it will only have a 1.5x1.5" working area...)

    Get these kids started on the road to evil genius!

    --

    Friend: "The NIC is misconfigured..." Me: "No prob, I'll just telnet in and fix it." *Silence*
  246. Assembly PIC microchip by Anonymous Coward · · Score: 0

    I know it can be tricky but making a light turn on and off with assembly commands is a huge step toward understanding how a computer and all other languages work. As for real world applications assembly isn't going anywhere somebody has to write the compatibility layers for every other language. If you know assembly you will learn the basics, maybe even have them work as their own compilers so they understand the true power of computers.

  247. Concept Maps by Psychotria · · Score: 1
    It may not be programming. But is concept mapping worth considering? From Wikipedia:

    Concept maps are a way to develop logical thinking and study skills, by revealing connections and helping students see how individual ideas form a larger whole.

    That is probably a valuable skill to have for anything, and can easily be extended to programming.

  248. Java? by Anonymous Coward · · Score: 0

    <rant>Why is it that whenever these "What should I learn" questions come up, the crazies come out of the woodwork with their weird languages?

    Python, smalltalk, Lua, Ruby, LOGO, QBasic? WTF?!

    I just don't know why you'd what to handicap someone by starting them on such a niche language.
    </rant>

    JAVA should be an excellent starter language. It gives them an intro to OO programming, has the same structure as most of the other popular languages, is mature and well documented, works on pretty much any platform, has plenty of great and free IDEs, and is a good thing to know if they decide to become professional programmer.

    You could even have them learn the syntax by playing a game like CeeBot

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

    2. Re:Java? by Anonymous Coward · · Score: 0

      Imports/Namespacing:
      Why would you take a kid outside of the IDE? It's scary out there. ;)
      Most modern IDEs will handle the imports for you "Did you mean java.lang.foo or com.company.foo?" or "Would you like to add 'com.company' to your imports?" all automagic.

      "Complex" programs and operator overloading:
      These are kids we're talking about, right? Seems like you're throwing around some pretty advanced concepts.
      If the kid asks about operator overloading or designs his/her own air traffic control system then a formal course is probably the way to go.

      Performance:
      Why are we concerned about performance in a "just learning" scenario? Mutexes?? Threads?? Again... just kids. And this would also negate the Python/Ruby recommendation.

      Many of your arguments seem to be against Java as an entrenched and highly popular language, not why it's a bad teaching tool.

      For the purposes of full disclosure, my language of choice is C#, but I work on projects requiring Java and C++ (and others).

    3. Re:Java? by try_anything · · Score: 1

      My message might not have been entirely clear. I think Java is great as an entrenched and highly popular language. In most ways it beats the popular languages that it displaced. I usually prefer it over C++ even though it's a lot less expressive.

      However, Java makes lots of compromises that kids will pay for, but not benefit from. Like you said, kids don't care about the fact that every object is (notionally) a heap object with a built-in mutex to support "synchronized," but professionals do care, and the result is that professionals wanted non-Object types, resulting in a dual type system where ints, floats, and booleans are fundamentally different from Integers, Floats, and Booleans. For beginners, that's just confusing. Integers, Floats, and Booleans are related because they're all Objects, but ints, floats, and booleans are not related at all.

      The experienced programmers that Java was aimed at were already familiar with those two ways of organizing types, so it was reasonable to ask them to juggle both in Java. In fact, I bet most professionals who were hesitant about Java were actually reassured by the presence of primitives. It made Java seem less "weird" and less like Smalltalk.

      Asking kids to learn two type systems that were shoehorned into the same language as a performance hack, though, is an entirely different matter. There's no reason to distract beginners with unnecessary complexity when they're still learning the basics.

  249. Pascal by richardpaulhall · · Score: 1

    simple, straight forward

  250. Python makes programming fun by michaelredux · · Score: 1

    Python really makes programming fun. I think it would be the perfect language to teach beginners, although I've been programming for decades, in a dozen different languages.

    Mainly because Python is interpreted, not compiled, there is an opportunity for immediate feedback, and a level of interactivity that is just not possible with most languages. Entering commands directly into the interpreter console allows for a kind of "conversation" between student and computer that is only possible with an interpreted language. Expressions, function calls, little one-time "experiments", or demonstrations of a particular concept are not just possible, but easy and natural in Python.

    Combine Python with the PyGame library, and I think you have a real winning combination for kids of all ages. PyGame gives Python the kind of juicy graphics kids will probably want to play around with once they understand variables and functions.

    Python eliminates most of the stuff that clutters up languages like C, Javascript, and PHP. Python reduces the language syntax to the minimum required to understand by the concepts involved, in the clearest, simplest form possible, with a minimum of arbitrary punctuation marks used in unfamiliar ways.

    It's also worth mentioning that in addition to being a really great, easy to learn, yet powerful language, Python is also free, open-source software. Check it out.

  251. Python by Sledgy · · Score: 1

    I'd advocate for Python, gives you all the flexibility of allowing OO etc, and the same time has the wonderful interactive interpreter.

    As a side not Python is starting to become common as an introductory language in universities (as stated by a professor who runs the introductory course at a local university and attends the same users group I attend).

  252. Go Interpreted! by Anonymous Coward · · Score: 0

    Since it sounds like you want to focus on logic and basic concepts, I'd suggest something like perl or ruby. Something interpreted so you can have the kids follow along line by line and see output, change a line and see how it changes things, etc. Don't bother with anything compiled or anything where you have to learn a bunch of stuff very specific to that language. Also I'd avoid OOP...OOP is only rewarding when you've done it the wrong way before. ;)

  253. Give them a choice by rdnetto · · Score: 1

    Spend a week or so on basics in VB .NET. Then spend another week dong the same stuff in C#. Then let them choose. Some people find VB incredibly stifling, while others find C-based languages overwhelming. If you let them choose their language, they'll enjoy programming more. Because both languages use the same libraries, switching between them will be easy. And as an added bonus, Visual Studio Express is free.

    --
    Most human behaviour can be explained in terms of identity.
    1. Re:Give them a choice by SanityInAnarchy · · Score: 1

      So, the choice is anal rape, with or without lube?

      To say that with somewhat less flamebait: If you really want to make it about choice, try at least offering languages from more than one vendor, preferably more than one paradigm. My choices would be, in no particular order:

        - ASM
        - Ruby
        - Erlang
        - Common LISP (or Scheme)
        - Haskell

      Each of those is sufficiently different as to force you to change the way you think, going from one to the other.

      --
      Don't thank God, thank a doctor!
  254. LEGO Mindstorms & Linux by m6ack · · Score: 1

    http://www.thefreecountry.com/compilers/lego-mindstorms-nxt.shtml

    Use Linux so that they have all tools and doc available that they can explore on their own. Challenge them to think differently and give them an introduction into the languages and concepts that they can use. They should learn how to use "man" and learn how to Google tutorials on the web to discover how to do things on their own. They should also be encouraged to use tools that help them work together like DARCS, git, mercurial, or bzr.

  255. Ruby by SanityInAnarchy · · Score: 1

    I know I'm late to the thread, but I've used Try Ruby with some success on that age group.

    I'm suggesting the tutorial more than the language -- it's easier to pick up a new language than it is to start programming in the first place.

    There are reasons I'd suggest Ruby, of course -- if they find they want to write performance-critical apps, it's Algol-like enough that C won't be too hard to learn. But if they do stick with Ruby, unlike JavaScript, there's a gradual, natural progression to more and more advanced things. JavaScript mutates as you learn more about it.

    --
    Don't thank God, thank a doctor!
  256. Cheap, easy to install, portable, not a toy by Anonymous Coward · · Score: 0

    PHP!

    BASIC - Beginners Allpurpose Symbolic Instruction Code - VB is an abortion that should've but didn't happen
    C/C++ - lousy string handling
    Pascal - nice language, hardly used anymore
    C#/Java - poetry, but overhead OO model is too much to explain

  257. RobotBattle by Anonymous Coward · · Score: 0

    Maybe you want something that will hold their interest more,like RobotBattle. http://www.robotbattle.com/

    Given a tank with certain attributes, program it so it will beat everyone else. You can get a tank moving and shooting in 10 lines.

    Winning? That's something else entirely.

    Of course it gets old after a while, but it might be a cool thing to start out with, or to refer back to later on.

  258. Java Tanks by iq+in+binary · · Score: 1

    I was in a similar program when I was in my early teens. We picked up Java Tanks on our own, we heard about it after our PC Science teacher hooked us on Bolo after blowing through our typing and word processing classes.

    You'd be surprised how fast a 12-14 year old kid could pick up on C, Java, TCL/TK (my first programming language), etc..

    --
    Of all the Universal Constants, here's one I know: Nice guys finish last ;)
  259. why not ruby? by Anonymous Coward · · Score: 0

    why nobody has mentioned ruby? it has an easy syntax, its very high level (c is easy as long as you don't need to do anything useful as increasing dynamically an array, an 11-14 year old would have a very frustrating evening doing things than seem trivial for seasoned programmers), its not bureaucratic as java is, is a modern multiparadigm language.

    I use ruby for quick prototyping or things or things that are neither work or school (sometimes for school too), why do people dare to propose arcane programming languages and platforms (basic on a c64 emulator!?!) when there languages like ruby, python or even java, and if you don't like OO haskell, prolog, lisp or scheme seem to me as more rewarding first languages than C,C++,VisualBasic.

    P.S.: fortran?!, come on!!!, where talking of gifted preteens not lab-rats getting a physics or chemistry degree.

  260. 400 comments, and no has mentioned Shoes... by astrosmash · · Score: 1

    Shoes! It's cross-platform, it uses the same powerful vector graphics engine that Firefox uses (Cairo), and it uses a simplified Ruby interpreter.

    Shoes is to the modern computer what BASIC was to the Apple //e and Commodore 64. That is, it aims to be a way for hobbyists and young computer geeks to do creative stuff with their computer.

    That means a modified Ruby interpreter with really nice graphics, web, network, and text layout APIs that hopefully a hobbyist would be comfortable using. Knowing that, the Shoes About Page should make more sense.

    Compare 80's style BASIC and modern Shoes:

    10 GR
    20 PRINT "PLEASE ENTER YOUR NAME:";
    30 INPUT NAME$
    40 PRINT "HELLO ";NAME$
    50 COLOR=6
    60 HLIN 5,10 AT 10
    70 HLIN 5,10 AT 20
    80 VLIN 10,20 AT 5
    90 VLIN 10,20 AT 10

    vs.

    Shoes.app {
    name = ask("Please enter your name:")
    title "Hello " + name
    stroke blue
    fill red
    rect 100, 100, 100, 100
    }

    Programming for a young computer geek won't be fun unless they can make they computer do really cool things. In the 80's, that meant color graphics and sound, along with plain text output and input. Plain old BASIC (or Python or Ruby) won't cut it today. You need something that supports GUI development, web and network access, pictures and video, and text layout. I think Shoes fits the bill nicely.

    --
    ENDUT! HOCH HECH!
  261. Think like a computer scientist: free from MIT by Anonymous Coward · · Score: 0

    I remembered this free course:

    Introduction to Computer Science and Programming
    This subject is aimed at students with little or no programming experience. It aims to provide students with an understanding of the role computation can play in solving problems. It also aims to help students, regardless of their major, to feel justifiably confident of their ability to write small programs that allow them to accomplish useful goals. The class will use the Pythonâ programming language.

    http://ocw.mit.edu/OcwWeb/Electrical-Engineering-and-Computer-Science/6-00Fall-2007/LectureNotes/index.htm
    [course info - more available at link]

    http://www.greenteapress.com/thinkpython/thinkCSpy/
    [textbook] How to Think Like a Computer Scientist... is an introduction to programming using Python, one of the best languages for beginners. How to Think... is a Free Book available under the GNU Free Documentation License. Readers are free to copy and distribute the text; they are also free to modify it, which allows them to adapt the book to different needs, and to help develop new material.

  262. Alice by Anonymous Coward · · Score: 0

    There's always Alice 3D programming environment.

    The basic concepts of programming wrapped in a 3D animated simulation.

    It's cross-platform and free too.

  263. Pytho by Anonymous Coward · · Score: 0

    You should try Python - it is very intuitive, easy to learn. Although the students wouldn't be exposed to the structure of programming, it will e a good beginning and serve as an fun experience.

    They are probably too young, but for older students, www.ProjectEuler.net is nice, with simple to complex math problems, etc..

  264. 3 free suggestions by zizzo · · Score: 1

    Processing - Processing is nice for making graphics and is meant to be accessable. Graphics are hard to resist for the beginner. Processing has integrated examples, is portable, and comes with a tiny IDE.

    Javascript - Javascript is actually a fine language and they can run their scripts on any modern browser. Interaction will be a breeze. You will need editors though.

    Python - Python's syntax is as clean as you could want and can go from the simple tutorials all the way to large scale systems development. There are Python IDEs available for most major platforms. Of these 3, Python is the only one that won't give you a walled-garden experience.

    As these are gifted students, they might already have ideas what they want to learn. I know I did when I was that age. It might be good to teach some topics in each language.

  265. excellent suggestion by Anonymous Coward · · Score: 0

    Hadn't even considered that, that's a good idea.

  266. Algebra maybe not a pre-req.... by weston · · Score: 1

    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.

    FWIW, my experience was the reverse -- I was exposed to programming well before I hit pre-algebra in 7th grade, via periodic workshops at our elementary school, via Logo classes taught at the community level, and eventually, via the basic interpreter that came with the TI-99/4A computer my parents bought for the family when I was in 5th grade. And for me at least, not having had algebra beforehand wasn't much of a handicap, it simply meant that programming was my introduction to the concept of a variable... and it seemed an easier one than some of the definitions/introductions I later encountered in algebra books...

  267. Expectations by jandersen · · Score: 1

    I think the first thing is to do something to adjust expectations. My own son is one of these computer superkids, and he still hasn't seriously learned programming - not because he can't understand it, but because the things he wants to do are far too advanced, like making a game. When I learned programming at about his age, it was because I wanted to calculate the relative positions of the planets and print a table of it, which is a bit tricky mathematically, but straight forward to program.

    So perhaps the answer to your question is to first ensure that they first find a project that doesn't require a decade of experience to implement; after that it doesn't matter which language you choose, as long as it is conceptually fairly simple. Which of course rules out object orientation; my choice would be C for any number of reasons. The actual language part of C is very close to the smallest possible, so it easily remembered; but the biggest advantage is that it allows you to make all the mistakes, because it does not protect you against sloppyness. As frustrating as mistakes and problems can be, they are unsurpassable as a pedagogical tool. And if you arm yourself with the Jargon Dictionary, you will find that there is a whole ocean of cool and mysterious names for all of them - the only ones that spring to mind at this time (5 am) is Obiwan ("out by one") and the banana problem ("I know how to spell banana, I just don't know when to stop"). To a teenage nerd, that is pure goldplated latinum.

  268. BASIC by Anonymous Coward · · Score: 0

    BASIC is a good introduction to the basic concepts of programming. PBASIC can be used to understand the concept of machine control with an inexpensive parralax BASIC stamp chip or kit. I used PBASIC to program my successful (Alabama Slammer) BattleBot.

    Rick
    RedneckRobots.com

  269. Smalltalk by Anonymous Coward · · Score: 0

    Dr. Alan Kay designed Smalltalk so that even SMALL children could use it. Look at eToys and graphical programming interfaces.

    Get these kids started with concepts such as "tell the ball to move to the left" and so on.

    Or perhaps Scheme. Simple, and start with real things... like to make dinner, you get groceries, cook, serve. Cooking means turning on the stove, turning on the microwave... break down examples into functions.

    For goodness sakes, don't show them C to code Fibonacci, give them something tangible! Something that's NOT abstract!

    For the record, I have friends at college who HATED QBasic, and quite possibly could have understood programming, but QBasic was the tool they used.

  270. Python by Anonymous Coward · · Score: 0

    Try python. One can do simple stuff to start with and also do complex stuff once one grows. The syntax is clear and there is a library to do almost anything.

    -- Hemanth P.S.

  271. Ruby by Anonymous Coward · · Score: 0

    Human readable syntax, support for just about any style of programming, a lot of useful gems, and let's not forget _why's Hackety Hack.

    Otherwise, I say any language which at least allows declerative (preferably functional) programming is a good choice.
    Teach them what they want the computer to do first, and then go more in-depth about how you want the computer to do it. The higher level of abstraction really makes it easier once you get used to it - the single thing making functional programming hard is past experience in imperative. It's always easier to learn something, and then expand on it, then learn a lot of stuff first, and then be forbidden to use half of it when using a more restrictive paradigm.

  272. Why not get them a C64 emu or Atari 8-bit.... by ogdenk · · Score: 1

    and have them learn traditional line numbered BASIC and maybe 6502 ASM. The machines were simple, easy to program and had hardware sprites (at least the Ataris did, not sure about C64), etc.

    You didn't have to play nice with the OS or go through 10 layers of abstraction to get to the hardware. You didn't have to learn a complex API yet you could still do really neat things on the machine.

    It also would emphasize code efficiency due to limited system resources. I was able to wrap my brain around the guts of an 800XL and master ATARI BASIC by age 10.

    Then have them learn a more modern language like TCL, Python or even Common LISP.

    Hell you could probably get them a real Atari 800XL on ebay for $10.

    Just a thought.

    Fortunately none of my kids want to be programmers. They've seen the horror and stress that is software development.

  273. Shoes by jfmiller · · Score: 1

    Designed and written exactly for this type of person! Powerful, Productive, self contained, and useful for real world apps.

    see
    http://shoooes.net/

    --
    Strive to make your client happy, not necessarly give them what they ask for
  274. Java all the way by syousef · · Score: 1

    It's now reasonably mature.

    It will give them skills they'll be able to actually apply in a few years.

    The standard graphics library is good for simple stuff.

    It runs on a whole stack of different platforms (even if you end up with write once test everywhere at least its write once)

    They could progress to an internship

    It'll teach them Object orientation

    It's C like and opens up a whole world of C like languages

    Once you get over a few bits of syntax like { = begin, } = end, good code is easy to read

    --
    These posts express my own personal views, not those of my employer
  275. Smalltalk by jools33 · · Score: 1

    When I was at college we learnt oo programming with smalltalk - it is a language that runs in an interpreter environment - and is pretty easy to generate simple graphics quickly with relatively little effort - it is also one of the cleanest implementations of oo I can think of.

    http://en.wikipedia.org/wiki/Smalltalk

  276. A Programming game? by KlausBreuer · · Score: 1

    Well... there were several games written to teach kids programming while they have fun.
    Obviously, I'd recommend ChipWits (see my sig) - a 1984 Mac game, which I ported to Windoze (for free, so don't worry). Several other games like that were created (for example 'Mind Rover'), and they really are a nice introduction.

    Strangely enough, board games would work, too: there is a great little game called "Robo Rally" (http://www.wizards.com/default.asp?x=ah/prod/roborally) where you actually program a robot in a race across a changing map. Very enjoyable.

    After that, I'd strongly suggest a language which was created to teach students programming: Pascal. You can get Delphi (the continuation of Turbo Pascal, have a look at http://www.codegear.com/products/delphi/win32) pretty cheaply these days (eBay), and I believe you can download a free version somewhere, too.

    Don't worry too much about the exact language to use, though (mind you, I do also STRONGYL advise against Visual Basic) - kids can pick up such things much faster than we think. Just set up a system, show him a good book and some good sample code, and bingo ;-)

    --
    Free PC version of ChipWits at http://www.breueronline.de/klaus/chipwits/
  277. static typed functional language - Ocaml by basiles · · Score: 1

    If the kids like abstraction (in the psychological sense of the words) try a statically typed functional language like Ocaml or Haskell.

  278. Lego Mindstorms by Builder · · Score: 1

    If they're bright kids, they probably already love lego. The mindstorms NXT stuff is the logical next step.

  279. Don't just teach one language... by NimbleSquirrel · · Score: 1
    By 11 I was already doing some reasonably complicated things with BASIC and LOGO. The computers I had access to back then were very simple (BBC Micro Model B - 8bit CPU and 32K of RAM). Yes, I'm that old. Looking back, I don't consider myself gifted.

    As these kids are gifted, some may have already done some programming before. You'll need to cater to everyone. For those that are just beginning, I do suggest BASIC and LOGO. LOGO has an immediate and simple visual correlation between program entered and what is displayed as an output. BASIC teaches fundamental concepts, like variables, conditional statements, loops and subroutines without having to get into more complicated subjects like header files, linking and compiling.

    For those a little more advanced, show them Java or C and be sure to explain their diffrences from BASIC. It may even be a good goal to get everyone to this level, so they can understand there are many different languages.

    For those who are supremely gifted, show them some assembly demos, and teach them some assembler. Kids of that level may end up teaching you, but at least you can show them a challenge.

    The problem with many gifted kids is that of you don't keep them challenged, you'll lose them. Your problem will be keeping them all challenged while catering to each of their levels of knowledge.

  280. Have you checked out Microsoft Small Basic? by Anonymous Coward · · Score: 0

    I was apprehensive at the beginning, but then I downloaded their guide (Download Guide) and I liked what I saw.

    http://msdn.microsoft.com/en-us/devlabs/cc950524.aspx/

    Very easy, graphics based and fast ramp-up to programming concepts, which you can then take anywhere else.

    They even have a Logo Turtle...

  281. Re:Bright vs. Hard Workers by ncgnu08 · · Score: 0

    As someone who actually skipped a grade, I can agree there are no "negatives" whether socially or physically. I played sports, made lots of friends (voted friendliest in senior superlatives), and maintained good grades from 1-12th grade. I also found the access to more advanced material, such as taking the SAT in 6th grade, an advantage compared to my older peers.

    --
    Member of American Sarcasm Society - Motto: "Like we need your help!"
  282. Why's (poignant) Guide to Ruby by partenon · · Score: 1

    Why's (poignant) Guide to Ruby is a good introduction to programming. It is fun to read and the nature of the Ruby language gives the "instant gratification" that everyone (specially kids) needs.

    --
    ilex paraguariensis for all
  283. Lego Mindstorms + NQC by fantasticalmonkey · · Score: 1

    I currently run an afterschool club teaching robotics at a local school. Although this would require getting in some kit, NQC is a good language for them to get to grips with. It is a well defined and documented cut down version of C ("Not Quite C"). The bonus here being that once they have coded something, it can be downloaded onto a simple robot and run.

  284. Re:Bright vs. Hard Workers by TheSpoom · · Score: 1

    I'm actually taking a year off soon; depending on how things work I may look at that. Thanks for the suggestion :^)

    Technically I already have a college diploma (Computer Programming from the community college here), but it would be nice to actually have the degree.

    --
    It's better to vote for what you want and not get it than to vote for what you don't want and get it.
    - E. Debs
  285. QBasic.. by Anonymous Coward · · Score: 0

    I am tempted by QBasic which I remember from my early days

    "It is practically impossible to teach good programming to students that have had a prior exposure to BASIC: as potential programmers they are mentally mutilated beyond hope of regeneration." -Dijkstra

  286. You've got it back to front by Peter+(Professor)+Fo · · Score: 1
    Objective then method.

    You can teach "very basic paradigms" in an hour or so without touching a computer. The details take longer but that's a different thing. The thing you need to get across - in this instance - is the algorithmic nature of programming.

    Enjoy physical and immediate exercises such as: How can we arrange the members of the class in height order? How do we keep the room at a comfortable temperature? Get them to make a HEXAPAWN matchbox computer and find out why it works.

    Kids want results but this group will probably also benefit from being given interesting ideas to take home and diddle with. For example show them how to play Nim, ask them if they can find out how to win, then in the class step through with them writing a player and a board - for which BASIC would be ideal - the simpler variant the better NB with line numbers and GOTOs as it makes it a lot easier to see what's going on at this level.

    Finally : (Objective->Method) Find out what sort of things they want to do and pick a suitable language based on that. It could be robotics or graphics or web pages or games or ...

  287. Python + pygame by wilper · · Score: 1

    Following the Mona Lisa article two days ago I sat down with Python and pygame and did my own version in an afternoon.

    It struck me how easy it is to do simple graphical stuff with the pygame library for Python, and I think it would make a nice beginners language too.

    Give them an editor that helps with Pythons indentation quirks, some code examples and let them loose.

    Hello world is a single line program, and they can do simple graphical stuff in ten. And it sort of looks like English when you read it.

  288. Use a game engine with scripting support. by Anonymous Coward · · Score: 0

    You could use the a game engine that comes with a scripting language. There are a few out there Esperient Creator, Unity etc... I have played with Esperient Creator and it has a C like scripting language (angel script). I think it would get kids interested. Create some spheres, fly them around, give the game to their friends or publish it to a website for the world to see. A number of other schools in New Zealand have recently adopted it. I think if you hook in your teaching with making simple games it will get the kids hooked.

  289. Killer apps are inspired by killer robots by Anonymous Coward · · Score: 0

    Two words: Carnage Heart

    Ok, maybe a few more words: I have read of computer camp coaches using it for teaching classes, so maybe your kids could benefit, too. It's an old Playstation game, and in my opinion one of the most educational games ever made (sorry, Carmen Sandiego). Whenever I'm stumped on a project, I pop in Carnage Heart and loosen my mind a little with it's unique take on a visual programming language (think visual--like your eyes, not Visual--like Visual Basic). The language is simple to learn, yet surprisingly deep, offering opportunity for new thinking to beginners and code-fu veterans alike. There's even a tournament mode, allowing your little prodigies an chance to pit their coding skills against each other at the end of the class. Should be easy to pick up a copy on the cheap, and if you don't have an original Playstation, it even plays fine on the PCSX emulator (which I prefer so I don't have to fuss with memcards).

  290. Re:Bright vs. Hard Workers by Iron+Condor · · Score: 0, Offtopic

    Personally, I can't stand it and try not to use it, in favor of the more straightforward and less loaded "high ability."

    But that's a completely wrong terminology. "High ability" is something that can be acquired. If someone has killer ability in some field it doesn't mean that they're bright or gifted -- it just means they may have poured a lot of work into it. The whole point of "gifted" kids is that they don't need to pour effort into anything -- they're just better at stuff than those other kids (who may well have equally "high ability" in any one field, but only because they worked hard at it).

    Let me pre-empt the retards by stating that there's nothing wrong with hard work, of course. Sometimes the job at hand requires it. But when you are in that situation and the next guy just breezes through the same stuff without even much thinking about it then you'll understand what "gifted" means.

    --
    We're all born with nothing.
    If you die in debt, you're ahead.
  291. LISP by Anonymous Coward · · Score: 0

    LISP should win this hands down.

  292. Pascal by dten · · Score: 1

    Some form of BASIC is, well, pretty basic and easy to pick up with no prior programming experience. I imagine gifted kids these days would only need a couple weeks with that to learn enough to graduate to something else.

    Don't do Visual, though, or introduce any kind of IDE tools. Keep it plain and simple, text editor and compiler and executable. Focus on the concepts not the tools.

    In high school, at 16, I took a programming course that taught in Pascal. Looking back I think it provided an exceptional foundation for learning basic programming constructs like procedures, functions, looping, input/output, and arrays. It was close enough to psuedocode that it was natural to start with comments and translate it to code.

    As for exercises, I've always thought recursive functions were a real head-trip and exemplified the power of computing. Sorting of course is a must, at least a couple different classic variants, and network/graph traversing algorithms are quite educational (traveling salesman).

  293. Martial Arts, Just my opinion by Anonymous Coward · · Score: 0

    I was in one of those programs for the "gifted" kids, and they taught us logo.

    The whole gifted program is for the bright poor folks who can't afford the better private schools, so teach them Open Source. Also make sure they get proper Martial Arts training because they'll need it due to lack of socialization with the normal mass heirarchy by the time they get in middle school and high school.

    Seriosuly, don't forget the martial arts thing because they'll end up living with their parent's basements by the time they're 30 due to lack of confidence software programming brings to most people in the real world. (Especially if you're in the US).

  294. Scheme by arronax50 · · Score: 1

    Some conditions must be met : -simple -high-level -with good reference book I recommend Scheme with the textbook "How To Design Programs" (http://www.htdp.org) and environment DrScheme.

  295. Baisc and assembler by leuk_he · · Score: 1

    Basic worked for me when i was 11 and assembler worked for me when i was 14.

  296. Assembly and Lisp then C then functional by Anonymous Coward · · Score: 0

    No kidding, this is the path I followed when I start to learn programming, around 11.

  297. Coding must be fun by ufoot · · Score: 0

    I used to be one of those, started at age 11 with Basic, was playing with assembly at age 13. IMHO at that age you need things to be fun - it might be true at any age but a young teenager will just ignore something too boring - so choose whatever language you want, but make sure the kids get to actually code something that *does* things. Writing abstract stuff on paper is no good when you're young, CS gives the amazing opportunity to actually build real world things through a simple keyboard, once you've got this, rare are those that can resist the appeal of being a local virtual God who can rule and command its own little world. A good example of working programs that *do* things are small casual games, any old-school cheap cellular phone game fits. Technology does not really matter, wether you hack in it JavaScript, Python+SDL, Java, C++, whatever, will not make any difference.

  298. Re:Bright vs. Hard Workers by mcvos · · Score: 1

    (And I'm not boasting here, I was in a gifted program in elementary and early high school, then shortly burned out midway through high school.)

    I'm not good at studying and it's catching up with me now in university. Hmm... maybe this is an Ask Slashdot...

    Let me answer that one right now: you're not the only one. I never did any homework in high school and graduated with very nice grades, but in university I discovered that meant I'd never learned to actually work. High school should have been a lot harder. Or more challenging, is perhaps a better way of putting it.

  299. Ruby or Python by Anonymous Coward · · Score: 0

    I am teaching to my 13yo cousing. He is using Ruby. It is good for several reasons:
    * Free and multiplatform
    * You can start with imperative programming and then move to more complicated things laters (OOP, Web App, etc.)
    * it can be used professionally

    You could alternatevely use Python.

  300. Interesting problem by Anonymous Coward · · Score: 0

    One of the most interesting and not too complicated algorithm is MinMax and all simple IA for game (Genetic algorithms, Heuristics, Reinforcement learning...) . Make them making an IA for othello and they could compare to each other by making their program play together...

    For the language... Java, OCaml, Scheme, one where you are more interested in the algorithm than in memory management.

    Provide them with a basic framework so that they can implement the IA (the interesting part) without boring with the initial setup and graphical interface...

  301. 11-14 gifted kids? by Anonymous Coward · · Score: 0

    If they are really gifted...

    They ALREADY know how to program. Better than us, probably.

  302. Robin Kaarsgaard by blodmangel · · Score: 1

    First of all, keep it simple. Please, don't flood the youth with all sorts of things they wont understand... I mean, pointer arithmetics can fool even professional software developers every once in a while. My recommendation is to go with something that's made for young people - Ruby and Hackety Hack is a great example of that; Ruby because it's (usually) quite easy to understand what a program does simply by reading it out loud, and Hackety Hack because it's... well, made to solve your exact problem. Plus, Ruby makes a great platform to later demonstrate OO and what have we. But whatever you end up with, please, for the love of god, don't use a statically typed language - it just makes the learning curve unnecesarilly high for no particular reason.

  303. Can't it? I find that unlikely. by Viol8 · · Score: 1

    Besides , OO is simply procedural programming with knobs on and if procedural programming can't handle multi core then multi core is stuffed because machine code is procedural and thats what your fancy functional language will be compiled down to.

    1. Re:Can't it? I find that unlikely. by Marxist+Hacker+42 · · Score: 1

      The problem with OO and multi-core programming is that you never know what other process has a handle to the same object you do; same problem as procedural programming had with global variables when multitasking first came in.

      Functional programming sidesteps this problem because largely there are no variables- only function calls with all data held somewhere on the function call stack, which means there's no chance of another process (with a different call stack) messing with your data.

      --
      SJW: a person who perceives an injustice, and while correcting it, commits a greater injustice.
  304. Scheme by Anonymous Coward · · Score: 1, Interesting

    Ironically I read this just this morning: http://www.trollope.org/scheme.html

  305. Bullshit by Viol8 · · Score: 1

    I started learning to program with BASIC on an 8 bit micro. I now code professionally in C++. BASIC is a perfect language for children as its syntax is simple and it has all the main fundemental concepts of computer programming - ie variables, loops and flow of control statements.

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

    What bad habits? Programming is programming , you can either do it or you can't. A language doesn't force bad habits on anyone.

  306. Ask teachers by Marcus+Green · · Score: 1

    The audience at slashdot is a really bad place to ask this question. This is an audience that is generally positive about solving complex problems, the harder the problem the more they enjoy it. An attitude just right for convincing people that programming is just too hard.

    I saw students vanish like the mist when a department decided to switch from pascal (designed for teaching) to C (not designed for teaching). It is very easy to scare people off programming, and the language is only part of the story. I was put off programming for years by the simple assignment of "write a program to create a fibonacci series". Writing the program is easy if you had the algorithm but to me a fibbonaci series might as well have been a pasta dish.

  307. LOGO, Microworlds, LEGO, NXT, Cricket by Fmuctohekerr · · Score: 1

    No, I'm totally for LOGO. If you use something modern like "microworlds" (see link below) then you get some OOP and audio/visual feedback as well. Think Lisp with 2D sprites and other cool stuff. My nephew was writing Lisp routines for his 2D scroller at 10 years old. Now he designs Quake levels. I'm trying to get him to push right on to C, C++ or (maybe) Java. Maybe I'll try Quake C. I want him into pointers and recursion as soon as possible. :)

    It's all about graphics and games with the 'kids today', unfortunately. I had to content myself with writing a cheesy database (OPEN FOR INPUT) and sad 'games' (CALL CHAR) on my TI/994A.

    One nice thing about microworlds (hate to plug something that costs $150) but it also interfaces with the LEGO NXT robot thing. You can definately engage a kid with writing LOGO for a LEGO turtle.

    There are, of course, plenty of FOSS versions that do the same thing, or work with the cricket.

    http://www.microworlds.com/solutions/mwex.html

    http://www.microworlds.com/solutions/mwexrobotics.html

  308. For Java: RoboCode by the+grace+of+R'hllor · · Score: 1

    Using Java, I had great fun with RoboCode, by IBM. You get to implement the logic of a little tank, which has to navigate, locate targets and destroy them, while preventing getting destroyed themselves. Obviously, the opponents are other RoboCode robots.

    Since you're actually using a Java API and providing compilable code, you get to deal with the actual programming (and algorithm implementation) while not having to to do any of the housekeeping you have to do with any app that wants to use IO unmanaged. Also, it's fun to see your drone autonomously kick butt (or get pasted, as the case may be)

    Slightly more advanced than the single tank is the tank-with-drones. The main tank cannot fire, the drones cannot detect enemies, and you get to coordinate between them.

  309. Hackity Hack by mcvos · · Score: 1

    While I don't disagree with your suggestions of Logo, LISP, Scala, F#, Erlang, and Haskell, Hackity Hack is a kit that uses Ruby to teach kids to program. It looks kinda cool, and a nice place to start.

  310. I'd suggest Rexx by Troberg · · Score: 1

    Rexx is an ideal beginner's language: * Simple but powerful syntax * Weakly typed * Readable code * Free * Platform independent * Interpreted script language, no compilation needed It has the best syntax rule ever: It's a syntax error if the first line of a program is not a comment. Not a warning, an error!

  311. As a highscool teacher myself... by Anonymous Coward · · Score: 0

    I say go with actionscript in flash.

    The benefit being that it is highly motivating to be able to animate their own drawings and pictures.

    Also there's a language called Turing that you could try.

  312. VLisp by typeof · · Score: 1

    I'd recommend AutoCAD with VLIDE and VLisp.

  313. simple and powerful by Anonymous Coward · · Score: 0

    python ftw!

  314. How I Started by Johnny2377 · · Score: 1

    I started to program when I was 11. I start with Amstrad Basic, which as the name suggests was basic, it did come with a fantastic manual (you could use it to beat whales to death) that had great examples of each function, this is good if you're starting out as you can see an end result and opens you up to experiment. I moved onto Pascal that introduced me to a more structured method of coding which then led me on to C (which I found infinitely more powerful and useful) then C++ and now PHP. I do think it's essential to start with something simple where you can see results and can tinker to your hearts content. I'm glad I started where I did as it gave me a grounding to better understand what was happening as the languages changed. My great concern with very high level languages is that you are too removed from what's happening. Hope this is helpful.

  315. Runtime Revolution by richmondM · · Score: 1

    I have used Runtime Revolution with 7-13 year olds who are extremely surprised to be making fully functional calculator programs in 30 minutes. Its visual; none of the endless, tedious cammandlines of my youth. www.runrev.com

  316. Word at the playground by Anonymous Coward · · Score: 0

    Is that all the cool kids use LISP.

  317. incremental approach by A_BSD_Dosser · · Score: 1

    Not saying it to flame bait, but I would probably go with something multi-paradigm and that can support both weak and strong typing. I think there is a progression there; get the child used to the idea of algorithms and variables usign something weak and imperative, then move on to OO and strong typing. You could always go with the whole lot up front, but only if this isn't likely to be overwhelming.

  318. LOGO! by Anonymous Coward · · Score: 0

    Very easy to learn and easy to teach

  319. Seriously by Loki_666 · · Score: 0

    Assembly. Once you can program in that, the rest is a piece of piss.

    I started with Assembly and i can already write "Hello World" in Basic!

    Seriously, once you really know what you are doing at the low level it gives all sorts of extra relevance to what you are really doing at the high level. A lot of programmers who have been factory produced by Universities have no real idea of what they are actually doing when they write printf, cout, >> or whatever....

    Hell, at high level you dont even have to worry much about stacks, pointers, allocating memory, interrupts, its all happily abstracted away.

  320. 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
    1. Re:Multicore by shutdown+-p+now · · Score: 1

      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"?

      You can, but imperative code requires explicit synchronization of threads (via locking etc), and this is a problem with complexity that grows exponentially with linear growth of code size.

      That said, it's a problem with imperative approach, not OO. OO is not inherently imperative - it can be used in FP just as well (and indeed, that's precisely what Objective Caml and F# are about).

      How is it with Monades? Are they blocks of the program that can have side effects?

      Monads aren't about side effects as such, they're about explicit sequencing in a lazy FP system. Sequencing allows for predictable ordering of side effects, among many other things.

      And yes, of course one cannot parallelize a sequencing monad. However, monads make dependency on side effects clear - for example, with Haskell's ST monad, you can have a computation that uses state internally, but externally it's pure (as no state leaks, and the type verifier enforces this). Because of that, the compiler can transparently parallelize the code that uses the result of such a monadic computation, but knows that it's not safe to touch the code inside the monad (well, not all of it - it may still parallelize some computations inside the monad, it just knows that it has to preserve the sequencing points).

    2. Re:Multicore by dhasenan · · Score: 1

      Interestingly, the D programming language is getting pure functions, which are automatically parallelizable.

    3. Re:Multicore by I+cant+believe+its+n · · Score: 1
      This is going to sound like a sermon with excerpts from different parts of the imperative bible. Well, what the heck, it is programming religion we are talking about :-)

      ... but imperative code requires explicit synchronization of threads (via locking etc), and this is a problem with complexity that grows exponentially with linear growth of code size.

      But FP requires explicit notation when the opposite is true, when sequence matters.

      ---

      From Wikipedia:

      'While most compilers for imperative programming languages detect pure functions, and perform common-subexpression elimination for pure function calls, they cannot always do this for pre-compiled libraries, which generally do not expose this information, thus preventing optimisations that involve those external functions. Some compilers, such as gcc, add extra keywords for a programmer to explicitly mark external functions as pure, to enable such optimisations. Fortran 95 allows functions to be designated "pure".'

      ---

      Simon Peyton-Jones and Philip Wadler writes in "Imperative Functional Programming"
      "It is efficient. Our Haskell compiler has C as its target code. Given a Haskell program performing an I/0 loop, the compiler can produce C code which is very similar to that which one would write by hand".

      In all honesty this is from 1992 so they may very well have a new implementation, but it does sounds to me like the Haskell compiler at the time produced source code in the mother of all imperative languages. Does that not show that many of the benefits of FP can be brought to imperative languages by just following conventions?

      I remember what you said about complexity, but there are solutions to that in imperative languages as well, given that one wants to find them.

      Have a nice evening (FP - I did not say how :-)

      --
      She made the willows dance
    4. Re:Multicore by shutdown+-p+now · · Score: 1

      But FP requires explicit notation when the opposite is true, when sequence matters.

      Well, not really, no. Laziness requires explicit sequencing, sure, but not all functional languages are lazy (e.g. SML/OCaml). And you still get a lot of the same benefits from them. What really matters there is functional purity - so long as it's there, it's easy to parallelize. In that sense, the functional approach of "pure by default", with all mutable state marked explicitly, is a Good Thing. It's even better when it's lifted to the type system, as it's done in Haskell - that's your explicit notation.

      Now, obviously, it's best to use sensible defaults - i.e. explicit notation should be required for cases that are relatively rarer than those covered by default. And here's the interesting thing:

      (from "The Next Mainstream Programming Language: A Game Developers Perspective", by Tim Sweeney)

      For-loops in Unreal:
      - 40% are functional comprehensions
      - 50% are functional folds

      So perhaps functional and pure is actually a reasonable default?

      In all honesty this is from 1992 so they may very well have a new implementation, but it does sounds to me like the Haskell compiler at the time produced source code in the mother of all imperative languages.

      There's no escaping from it - in the end, assembler is an imperative language. But here we get to that "what vs how" difference in approach between functional and imperative. That C code that is output is an implementation detail - it can even be different depending on the target platform it is generated for, and compiler options (number of cores, etc). Could I hand-code it for any given case? Yes, of course. Do I want to do that? Absolutely not.

      Does that not show that many of the benefits of FP can be brought to imperative languages by just following conventions?

      Sure. And you could also mention that gcc can optimize tail calls these days :) But conventions are brittle things, and optimizing compilers are only so good (both in imperative and in FP world). Even with an ideal compiler, it's all to easy to change an implementation of some small and seemingly unimportant C function, making it non-pure in the process, and have that purity change chain-propagate throughout your entire program, rendering it all non-parallelizable all of a sudden. Same goes for constness analysis (though C/C++ const is pretty useless as far as these things go, as it doesn't guarantee the client that no-one can change the value - merely that he cannot).

      And as soon as you start adding "pure" and "const" and "immutable" to the language to move from convention to static checking, and using the idioms involving them heavily, you're effectively doing FP :)

      (by the way, gcc is pretty much there - it has proper lexically closing nested functions and tail calls! ;)

      And this is what actually happens to some programming languages today. D 2.0 has "immutable" and "pure" (and closures, and ad-hoc polymorphism), even though it's an imperative language on the whole. Thing is, it isn't really, anymore - the line is blurring, and blurring fast. It used to be that closures were considered an arcane feature in mainstream - and now C# and VB (of all languages!) have it and use it heavily, C++ is following with its own lower-level alternative, and Java gurus are ashamed that their own closures proposals are going to miss Java 7. Back to .NET, PLINQ effectively requires functional purity and lazy evaluation, and MSDN Library has articles in it which are essentially FP tutorials for C# and VB programmers. Just five years ago, who could've thought?

      And well, that gives me hope that we'll see STM

  321. Web first by ins3 · · Score: 1

    The way I learned was HTML > CSS > JavaScript > PHP then desktop applications AutoHotkey > C#.

  322. Python? by Anonymous Coward · · Score: 0

    A few years ago i translated a book called "how to think like a computer scientist: learning with python" from english to german.

    the book aims pretty much at your clientel, and gets through all the themes you mentioned (basic programming structures, fibonacci numbers & recursion etc.) and may be used under some open license (i forgot which one).

    if it's still around i'd give it a go, even if you decide to use a different language - the way things are explained is a good primer.

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

  324. An easier, multiparadigm language by BoneFlower · · Score: 1

    Easy because theres no sense teaching him a more difficult heavy duty language if he's just going to dabble and give it up.

    Multiparadigm because if he does stick with programming, he'll be able to learn a much wider variety of concepts and problem solving strategies from day one. Even if he ends up working in a single paradigm language later on, he'll benefit from the exposure to other techniques.

    I'd probably look at either Ruby or Python. Both support multiple paradigms, both are fairly easy to use, both are capable of modern, real world work, and both are available on multiple platforms.

  325. Start with why is programming inherently difficult by Anonymous Coward · · Score: 0

    My approach is to start, not with computers, languages, but to give kids a feeling what is a program and what is programming like.

    Start for example with 2 volunteers and blindfold the eyes of one. The other should in the first exercise interactively guide the blidfolded kid to the other side of the classroom, which is not that difficult.
    The second exercise is but much harder. The instructing kid, has to prepare the instructions on how to cross the classroom upfront, write them down, to remember them. Then he can deliver his instructions to the blindfolded kid anyway he wants, but has to stick to instructions and give no additional information.
    Third exercise is to brainstorm on how to formulate the instructions "that would work better". Things like events, loops, conditions could come up (i.e. go straight ahead until you hit the wall).
    Fourth exercise is an analysis, what went wrong, why does it not work as we have initially thought it would.
    etc.

  326. m68k Assembler? by Ash-Fox · · Score: 1

    When I was 11 years old, I had pretty much mastered m68k assembler. I was writing demoscene stuff with music, cracks for copy protected software, all on my little Amiga 500.

    --
    Change is certain; progress is not obligatory.
    1. Re:m68k Assembler? by Marcus+Green · · Score: 1

      Nice boast, got any contributions to the discussion of teaching programming?

    2. Re:m68k Assembler? by Ash-Fox · · Score: 1

      Nice boast, got any contributions to the discussion of teaching programming?

      Plenty.

      --
      Change is certain; progress is not obligatory.
  327. Lisp by Anonymous Coward · · Score: 0

    There is a very nice tutorial for a younger audience at http://www.lisperati.com/casting.html which you might find inspirative.

    I think that Basic or similarly handicapped languages do produce fast short-term results, but are an impediment to expanding the thinking horizon. The language we use shapes the way we think.

  328. Start with Scratch by ConfusedVorlon · · Score: 1

    MIT released scratch a while back
    http://scratch.mit.edu/

    It is a brilliant graphical environment that focusses on multimedia projects - but which introduces standard concepts like variables, loops, conditions, etc.

    e.g. to do a loop, you drag a loop graphic from the side. It looks a bit like a clamp and graphically wraps round 'blocks' of code.

    There is no possibility of syntax problems like semi-colons at end of line, mis typed commands, etc - so it is a great way to introduce the concepts without the pain of precise syntactical communication (obviously, the programming ideas have to be precise)

    Another major plus is that kids can easily make fun and significant programs rather than having to go through hours of boring text output programs.

    Start here, show the kids how much fun it is to play when programming and the joy of creating applications. Then when they understand (and have used/debugged) the structural concepts, show them how to do the same in a text based language.

    There is more; The programs will always compile and run (though may not do what the user expects). You can change the program while it runs. The environment is built for sharing programs (upload your app, download someone else's and change it). It is simple enough for 7 yr old kids to play meaningfully and rich enough that a bright 14 year old has plenty of scope to challenge themselves.

    Give it a try, it is aimed exactly at your group, and I think it hits the mark brilliantly.

    1. Re:Start with Scratch by ConfusedVorlon · · Score: 1

      ps: don't go for the classic problems (fibbonaci, prime numbers, etc) they're boring.

      One reason people teach them is that they only require simple text output.

      Scratch lets you use multimedia easily.

      Start with a ball that bounces round the screen.
      Then add a bat or two for pong.
      Perhaps you'll add some different physics with gravity next or a timer of a life counter, or some blocks to bash.

      you'll still be teaching loops, conditions, etc - but you'll really engage imaginations.

  329. Euphoria and ABC by master_p · · Score: 1

    Euphoria and ABC are excellent introductory programming languages. Both are very simple, programs written in them are quite readable, and you can do useful things with them:

  330. Squeak: Learn programming with Robots by 97718 · · Score: 1

    Squeak: Learn programming with Robots (http://www.amazon.com/Squeak-Programming-Robots-Technology-Action/dp/1590594916) is an excellent introduction to programming for novices.

  331. Teach them any language with a future by Anonymous Coward · · Score: 0

    ... like cobol. And I'm not joking.

  332. in all seriousness by aapold · · Score: 1

    I wouldn't recommend bright young kids get into programming, or at the very least not pursue a career in it.

    --
    "Waste not one watt!" - CZ
  333. Programming Language for students by Anonymous Coward · · Score: 0

    Basic has been around forever, so to speak. It is easy to learn, relatively 'unstructured', and its principles are similar to all the other languages.
        As a teacher who has taught religious school children I found out that schools everywhere are really hypocrites when it comes to software, keeping many copies of older DOS and window$ educational software without 'registration'. The writer is one of those that learned decades ago that software registration is most often the first step in the buyer's victimization by that software publisher and his 'friends and asociados' in the organized crime syndicates that our software industries have become. Schools, needing many copies and courted by software vendors, often bought a copy or two of software products and made hundreds of copies. Now our legal system calls this 'piracy', a term equivalent to murder and dismemberment and rape on the high seas. These same schools also use blantant lying propaganda on students in a continuing gestapolike campaign financed by the 'window$' industry to brainwash them into the 'windows frame of mind'. The fact that all that educational software was originally designed for window$ tends to lock school systems, public and private, into window$. QBasic was created by IBM when they were in an ill fated partnership with microsof$ just before microsof$ double crossed them. The generic basic used by clone makers was called GWBasic. Invented when IBM and microsof$ tried to take over the industry with the hardware/software combination of OS/2 and PS/2, clone makers responded by the then ill planned monopoly move by banding together and making their own hardware and software in a world not yet prepared to accept illegal monopolies, far different from today when republicans never met a monopolist they did'nt like no matter how evil. Having said that, the fact is that school systems, early converts to apple, however are now predominantly windows apologists, apostles, and shameless propagandists. So kids are in the main fed window$s as the 'only game in town' and all other software is 'illegal'. Because of this mindset it is difficult to even teach programming, as this is viewed by windies as 'burglar tools' that 'enable hacking of commercial (read monopolist closed software) software'. My school had as its 'principle' a gentleman whose wife whose job in the county educational system was to procure software, window$ software. All suggestions to use linux as being more cost effective were ignored. But the taking of the name of the suggester and forwarding it to a secret blacklist of teachers and students 'suspected of subversive activities' was taken very seriousely. Perfectly logical suggestions to go to linux were wasted on a corrupt hack who was willing to sacrifice his students and the parishioners who paid his salary, and waste the parish's money on endless window$ 'updates (DRM)' because the money and people that he threw away and betrayed were not his. The bribe, however small, WAS his and in his pocket. So for a few hundred dollars he was willing to betray his trust, 'discreetly', and waste hundreds of thousands of dollars and condemn his students to a lifetime of servitude. I'm not wasting words on a rant. This is a real life situation in many schools. When or if you meet such a person, you will know when your suggestion is never considered or just met with a quiet smirk from the administrator followed by nothing or worse, delivered later on by an underling you had never met or considered. The only answer in those situations is political. You go to the parishioners (easy in church schools) or the public to campaign to remove those administrators. And tell your public why. Do not be afraid of retribution, you are going recieve retaliation anyway. You 'earned' that the first time you mentioned the word 'linux' in the presence of a bought and paid for soulless crook. You already know how to locate BASIC and try to teach them to windies. It is amazing that your school system even allows programming in the present legal monopolistic environment.

  334. Logo or Squeak! by Anonymous Coward · · Score: 0

    I think that the question is not what is the best programming language, but the more educational for them to get introduced to concepts.

    I think Logo is very good for developing analytical thinking and getting introduced to basic programming concepts.

    I would also follow Alan Kay's steps in this direction and take advantage of Squeak, that has been specially designed for teaching Object Oriented Programming to kids.

  335. Python by Anonymous Coward · · Score: 0

    It was only in recent years that I was introduced to Python, but at this point it seems like the logical "teaching language".
    All the libraries make it very easy to use. The whitespace paradigm makes sure you'll learn to indent code, while the syntax and data structures are both widely used in other languages and still accessible even to novices. Also, very easy to make simple games in. If there is one way to make a twelve-year-old to program, it's games. Just give them a pack of cute sprites, pygame and red bull :)

    Mihail Minkov

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

  337. Teach what you know but use fresh examples by dshk · · Score: 1

    I found that the most important is to choose a language which you know well. My son was 6 years old when his grandfather teached him C++ using the free Turbo C++. I regularly coded in C++ several years ago, but frequently it took me an hour to answer a simple question. This doesn't work in the long run.

    The second important experience was that these children live in a different world, they are motivated by different things then we were interested decades ago. They see windowed applications and 3D games. Therefore my son is not interested in command line programs and old games. He likes to write a Notepad clone or a music recorder.

    Disclaimer: the best way to help a 14 years old boy may and likely be completely different.

  338. Wrong question. by Anonymous Coward · · Score: 0

    You are asking the wrong question. The programming language is really not important. You have to find a problem the kid wants to solve and you have to find an environment where it is easy to solve that problem.
    I beginned programming by modifying existing games. And that was really the right way to begin. You can have quick overwhelming success with simple things but you can dig deeper to every level and do everything you want as your skill increases.

    Find something the kid is interested in. Don't place it in front of a compiler and say "now program what you want". Give him/her tasks that are fun to solve and make sure he/she doesn't get frustrated because the goal is too far away.
    The best advice I can give is find some game that allows modifications and that the kid enjoys. Show him/her how to modify it and ask what modification he/she wants to see and then help him/her to get there.

    Language and paradigms are really to far away to care about. If you learn how to solve a problem algorithmically you can pick up any language. Paradigms are about modelling a solution. That is a quite high level of abstraction and I don't think a 14 year old should care about that. You have to be able to write small pieces of software before thinking about how to put this pieces together.

    That is like math, you don't start by introducing the kids to algebraic theorems, you just show them how to add first.

  339. Trick them by revoltingdevelopment · · Score: 0

    Let them watch "war Games" and "Hackers" and "Sneakers". Subscribe to 2600 and leave it out on your desk. Then put parental controls on the computer and tell them not to go hacking around on it and to leave your O'Reilly books alone. Just wait--they'll do all the learning on their own.

  340. Actionscript 3? by allgoodnamesaretaken · · Score: 0

    Actionscript is very accessible, powerful and the skills almost directly transferable..

  341. Well by Anonymous Coward · · Score: 0

    I started programming in Delphi when i was 11.

    Delphi is based on old Pascal, which you bring up.
    It's fairly easy and there are OpenSource IDEÂs which supports Object Oriented Pascal.

    For instance Lazarus. Else i'd go with CodeGears Delphi 2007 or 2009.

    The IDE is simple, and find the connection between object functions and the code you write in is really simple.

    However, its kind of a dying "breed". They will without a doubt have use later in their life you teach them C# or C++. I know this for a fact starting out with Delphi and now more or less have been forced to swap to C.

    Not to mention that if you learn C, you will have no problems understanding the rest of the languages out there, except Delphi.

    I'd suggest you teach them C# with or without .net.

  342. Perl and PHP by kenp2002 · · Score: 1

    Oddly Perl might be a good choice if you run linux. I use perl almost exclusively for quick scripting and has enough "clutter" to help them bridge a gap between straight basic and a more comprehensive language like Java, C++, or C#. PHP is a great learning ground also for generating web pages and working with a database like mysql and learning how to pass information around.

    I would like to state when I learned programming I went in this order:

    LOGO -> BASIC -> x86 ASSEMBLY (yep) -> Pascal -> C -> C++ and then my hands gave out ending any ideas of becoming a programmer for a living.

    Later on in life I picked up (in this order):
    BASH -> PERL -> SQL (ok not so much a programming language per se but you get the idea) -> PHP -> Ruby -> Java -> Java Script -> C#.

    I CANNOT STRESS HOW IMPORTANT LEARNING ASEMBLY IS! Yes it's verbose but the process of learning it really helps someone understand how the computer works and gives a solid foundation to understand the higher level languages. More importantly they can drop down to the assembly level when needed to really optimize certain sections of code. If it wasn't for my ASM classes I would never had known the difference between a COM and EXE file ;)

    More importantly no network admin to date apparently has ever bothered to lock out DEBUG for writing quick and dirty ASM programs. Thanks MS for forgetting about that ;)

    --
    -=[ Who Is John Galt? ]=-
  343. Ruby by Anonymous Coward · · Score: 0

    I'd suggest Ruby. Why? I think you should avoid frustrating these kids with too complicated languages at the start. Coding should be fun. So should be the books to learn it. Take a look at Why's poignant guide to ruby and the Hackety Hack Software. You may say, nobody uses Ruby, but the concepts in other languages are similar.

  344. Calculator by Anonymous Coward · · Score: 0

    My first glimpse at programming was on my trusty TI-83 back in middle school.

    We didn't have any formal class. Me and a few friends just started playing around with it and tried to build miniature RPG's and fun little animations insulting each other.

    Nothing I learned from this was "directly useful" but the concepts were helpful when I really started getting into programming later. It's definitely an option to consider.

  345. QBasic - lousy language but great by Anonymous Coward · · Score: 0

    QuickBasic was good learning tool because it was fun and easy to use. It had a good on-line help (QBasic help is pathetic), graphics and sound were great. It only took two instructions to get something on screen. Where's DRAW "D20R20E5F5G5H5" or PLAY "O4C8C8C4D8E8" on anything else? I bet many programmers learned BASIC trying to recreate the color pics on the CoCo's Extended Basic book, following the sprite example on the C64, and modifying Bill Gate's "Donkey.bas" in BASICA/GWBASIC.

    Kids won't have problems with modern languages, but most frameworks are boring. You could check Microsoft XNA, Silverlight, Actionscript (Flash), etc. You can easily run QBasic in DosBox, Virtual PC, and VMWare player. QuickBasic is a compiler, so, code can be written in windows-based editor. FreePascal is a good alternative if there's something similar to Borland's GDI.

  346. C, Common Lisp or Scheme by Anonymous Coward · · Score: 0

    I would heartily recommend Common Lisp, or Scheme, for you to teach your students. Although practically no-one really programs in it these days, that is hardly an excuse (I mean, let's be honest, Pascal is still being used).

    It maintains several paradigms quite nicely (functional, and OOP - to name two), and in that the kids have - presumably - absolutely no prior programming experience, they will not be taken for such a steep learning curve when it comes to the syntax.

    If you take a look at Common Lisp and/or Scheme and decide you would rather not teach either of those to your students, just stick with C for no other reason than should your kids decide to pursue programming (be it for hobby, or profession) they still have knowledge of a widely-used language at their disposal.

    As for puzzles, one I really enjoyed was the "Sieve of Eratosthenes" - it's a super-inefficient prime number finder, but when done right, gets faster the longer it runs.

  347. Python? by Anonymous Coward · · Score: 0

    Why not use python?

    It has very clear syntax, lots of interesting libraries for graphics or sound, which makes it possible to do something exciting with little knowledge or effort.

    It is also multi-paradigm, so you can start with the one-line hello world:

    print "Hello world"

    and move up to drawing 2D-graphics, without having to introduce classes, linking, pointers or even functions.

  348. Check out Robot Battle! by Anonymous Coward · · Score: 0

    I always thought that Robot Battle would be a cool way to learn how to program.

    Its a programming game where you try to program the best robot to compete against other robots. Last one standing wins. The robot controls are simple so emphasis is based on the programmer's ability to create a winning strategy.

    Anyway, I like it!

    www.robotbattle.com

  349. Teach the machine first! by FlyingGuy · · Score: 1

    I have seen far far to many people doing "programming" who have not a clue about what is happening, much less why.

    Programing is providing a sequence of instructions to a physical device. If you have no idea about what that device does and how it does it you will never be able to do anything except parrot what someone has shown you. Start off with logic basics. Teach them why a computer can count. Show them why a bunch of JK flip flops strung together can represent and count numbers. Illustrate on a chalkboard why and how TTL and DRL gates work. I am not talking a course in EE here, but this base knowledge is IMO important.

    After they kind of get that, start off by using a DOS and debug in CUI mode, then move on to something a bit higher, build on a progression of simple blocks and move forward.

    --
    Hey KID! Yeah you, get the fuck off my lawn!
    1. Re:Teach the machine first! by sal · · Score: 1

      The Charles Petzold book _CODE_ would be perfect for teaching the beginnings of comp-sci. I'd combine that with the Chris Pine book _Learn to Program_ which teaches the Ruby language.

    2. Re:Teach the machine first! by FlyingGuy · · Score: 1

      I have never read the books you have mentioned, but I disagree about starting off in something like Ruby. FAR FAR to high level and way to much objectification, and you cant do things like poke around at memory addresses to see something actually happen right before their eyes when they press the enter key. THAT gets kids attention, not this.that.theother.some.this.somethingelse new.

      --
      Hey KID! Yeah you, get the fuck off my lawn!
  350. PROLOG - Think Logic / Declarative vs Imperative by tarpitcod · · Score: 1

    I'd vote for

    Prolog & Assembler. Then the functional languages suggested by many other posts.

    Teach them declarative problem solving first. Followed up with 'how processors work '(Assembler). Describe a hypothetical Prolog interpreter with a focus on the trees (this gives them pointers). Logo will start them thinking functionally - which is a nice transition from logic programming.

    With an Assembly background pointers will be easy to understand if they need to grasp C, and linked-lists of pointers will be clear based upon prior exposure to the 'Prolog trees'. With a declarative background they won't be stuck in imperative lock-step. With the functional stuff they can get into some of the interesting Math. For fun throw in there dataflow so they are thinking in terms of Legion.

    If they are *very* gifted - toss them Backus Turing Award Lecture about FP. After all that, give em Perl for 'integration crazy glue'.

    Stand back a safe distance and observe.

  351. LOGO by Anonymous Coward · · Score: 0

    Hi. The best programming language to start with is LOGO. http://en.wikipedia.org/wiki/Logo_(programming_language)

  352. LMMichaud by lmmichaud · · Score: 1

    My kids (12 and 15 years old) have really enjoyed using "Phrogram". They have a nice IDE, a great web site ("http://phrogram.com/") and a forum with helpful people. My boys would have really preferred an MMORPG style game programming language, but they now realize that they have to learn to walk before they can run.

  353. Are you sure? by Anonymous Coward · · Score: 0

    "...would be best for starting these kids off on?"

    Are you sure you should be teaching gifted kids?

  354. Perl, Lisp, C and Python by trashbird1240 · · Score: 1

    These all teach different things, and I've studied each of them with no formal training. I was shell-scripting in UNIX by 14 (minor stuff, and we didn't call it programming, but it was). I would suggest introducing them to Free Software, Emacs and all that without dumbing it down: nothing could be worse for you than telling a bunch of teenagers who very well may know more than you that you're going to take it easy on them. People take what they can get, so give it to them.

    Unix (of any flavor) is also a much better platform for young people to learn on: I know that from experience. On Windows everything is far too disconnected from how the computer really works (by accident and by design).

    The language that got me going was Perl (this was at 26, I should add), but I quickly moved on to Scheme.

    Emacs is also a great way to learn because when using Emacs, people see how using a computer equals programming. If you teach them to make a distinction, they will have a well of powerlessness to draw from.

  355. Scripting Language and 12 Days of Xmas by frission · · Score: 1

    I remember an assignment that I had that had loops and case statements etc was to print out the 12 days of Christmas. It'd be in season too :) Also, even though I learned on C++ first, I think learning a scripted language or something that can help generate HTML would go a long way. I wouldn't bother with truly compiled code at this point, it'd be an additional concept that you'd have to teach when you don't necessarily need to (the translation from txt to machine, etc). I know when I program, I like to see results immediately, it doesn't get my quicker than to change a word here or there, then pull up your web browser again, or refresh it.

  356. Python is the One by Anonymous Coward · · Score: 0

    One can do it all with python and the resources available are vast.

  357. Several! by LawPrime · · Score: 1
    I have retired from teaching Math and Science in a small private school which discriminated against low IQ students (and teachers!). If your school is like mine, the diversity of the students will be the biggest challenge for you. Some will be really good verbally and some will be really good visually, etc.

    In the larger world, adults are encouraged to "fit in" and they generally do this by figuring out how to use their strengths to smooth over their weaknesses so they present a fairly balanced image to the outside world. Children have not yet figured this out so they try to avoid things they are not good at.

    This effect is really amplified in "gifted" children, so by middle school they often end up with enormous gaps in their knowledge base.

    The only solution is to specialize your teaching for the individual students and engage them as much as possible. (Of course, this just defines good teaching in general.)

    Warnings aside, there is a particular kind of professional satisfaction that comes from seeing a young child light up with an understanding that you yourself did not get until you were much older. I got that a lot.

    My direct answer to your question is that you should use a variety of programming "languages" and that you should focus on the process. My logic here is that the students are liable to have a lot of different learning styles and some will respond to specific languages and thought processes better than others. You need to give them several opportunities to "get it." QuickBasic will appeal to very verbal students, Perl will appeal to more mathematical students, LOGO will appeal to very visual students, etc. I suggest you try teaching at least 2 languages, possibly in parallel.

    I know this is probably sacrilege in this forum of zealots, but I believe that the dialect one programs in is irrelevant. The question du jour is: Should functional programming replace OO? But next week, someone may wake up and realize that Fortran compilers have been optimized for parallelization on big iron for decades. If that "news" gets traction on slashdot, we may all flock there. I say: "who cares?" Programming is mostly a thought process verified by thorough testing. The very hardest part of programming in any language is deciding what the program should do and creating a language-independent flow chart.

    I would certainly NOT suggest that you use C or java as a first language. Your students are going to need more positive feedback than a hard-to-read language and a persnickety compiler will allow.

    My own opinion is that "sloppy" programming is OK in the early years. For most, their programs will be like a poor piece of student art that they learned a lot from. When they get a programming job or take a college class, then they can learn to format properly or die.

    Some ideas for you

    With a group of really young students (9-12 years old), I created a large human calculator in the hall. Each person only has to consider the past and present state of their neighbor(s). They do not individually see the big picture until the calculations are done.

    When I taught a combined Physics/Calculus class (mixed ages), I required a High-School-Standard TI calculator, assigned subroutines to various students and then assembled the routines into a single program for testing. I could tailor the complexity to the ability of the particular student and they were all doing something different which was pivotal to the success of the overall classroom effort. If someone got stuck, we could discuss the individual problem as a class. That was very effective.

    Addressing your PS question, whenever I pick up a new language, the first program I write is a Monte-Carlo simulation of Pi: Create a Vector with 2 Random numbers 0-1. (a box) Increment an overall counter. Is the length of this vector less than 1? (an inscribed circle) If so, Increment a test counter. Compute Pi from the ratio of the 2 counters. Loop until desired r

  358. vb and C by benicillin · · Score: 1

    looks like you have a heck of a lot of responses. just thought i would add my own. i think the best to teach kids would be some simple C or work with visual basic. i always enjoyed object oriented programming when i was younger. it was easier to grasp.

    --
    "i stand on the edge of destruction" -shai hulud
  359. Check out Small Basic by Anonymous Coward · · Score: 0

    http://msdn.microsoft.com/en-us/devlabs/cc950524.aspx

  360. interesting puzzle by Anonymous Coward · · Score: 0

    It's been said here before, but I distinctly recall my c++ computer class to be one of the best middle school courses i ever had. The teacher was outstanding and provided all sort of fun programming puzzles for us not just to program, but to think about how to go about solving a problem. Of all the language choices, I'd highly recommend choosing one with a fair amount of reference material available. Kids will always be able to apply their c, c++, or java skills - should they want to pursue a career in computer programming.

    One of the more interesting puzzles was "create a program that performs the natural log function, using only base mathematical operations (addition, subtraction, multiplication, division)". It's actually quite easy to do, one of my fondest memories is working with my math teacher trying to figure out a neat algorithm to perform the function.

  361. Tower of Hanoi by Anonymous Coward · · Score: 0

    http://en.wikipedia.org/wiki/Tower_of_Hanoi

    This was presented to us as an exercise in an intro class. Great example of rules, stacks, and recursion.

  362. Small Basic by Anonymous Coward · · Score: 0

    Microsoft has a language out there now called "Small Basic". It is based off of VB.net and has a cute little GUI. If your teaching to kids you want them to be as comfortable as possible, and this would aid in your program.

  363. Re:Java by durdur · · Score: 1

    I actually have experience teaching a 13-14 year old some programming (my daughter). We downloaded Netbeans to her Mac and I helped her create some simple Java programs - first just console programs then an Applet. Ok, Java is not the latest cool thing anymore, but NetBeans does syntax checking as you type so it's easy to get going with. She liked it. And if we want to move on to creating a web app (JSP for example) that's certainly possible. No, she doesn't understand the whole language or even all the concepts, but she learned something.

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

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

  366. Towers of Hanoi by NNezzer · · Score: 1

    I really enjoyed solving the "Towers of Hanoi" problem, with recursive functions (7 disks on one of three pegs; move them to another peg without stacking a large disk on top of a small one). I learned this in a high school Pascal class, but I really disliked Pascal (still do) because you had to define/declare every little detail. I think children would get and stay interested if you started with something like Alice. Or, if you want to avoid installing software (or if you're running older/slower machines), you could teach the basics with Java script or VB script, both of which run natively under Windows. On the other hand, if you're going to teach programming, you should be an experienced programmer yourself, in which case you probably wouldn't be asking what language to use.

  367. proce55ing is the best alternative... by Savantissimo · · Score: 1

    Agreed. Also processing (aka proce55ing for Google searches) produces beautiful animations and advanced interfaces effortlessly while keeping the code spare and elegant. The Java cruft has been exorcised. No other language even comes close - this is the one kids will want to work with.

    --
    "Is life so dear, or peace so sweet, as to be purchased at the price of chains and slavery?" - Patrick Henry
  368. Yeah we know. by jotaeleemeese · · Score: 1

    Your isolated experience is absolute proof.

    You may have been bright, but it seems the brightness is fading. Fast.

    --
    IANAL but write like a drunk one.
    1. Re:Yeah we know. by BountyX · · Score: 1

      Intelligence (as quantified), does drop pretty fast with time. You are correct, my brightness is fading fast.

      --
      Trying to install linux on my microwave, but keep getting a kernel panic...
  369. Alice/Scratch by overtimegoal · · Score: 1

    My son is in your demographic (mathematically gifted and 12 years old)... He has Lego Mindstorms. That's a good introduction to simple logic constructs with a physical response. He likes Scratch (MIT) and Alice (Carnegie-Mellon) which have the same drag and drop concept of programming. I've also introduced him to C++ via Visual Studio Express Edition and the DarkGDK, but that tends to get slow because his typing skills aren't all that good yet. It is all good. The important thing is to have a series of attainable goals on the way to a complete working *something*.

  370. Why not Karel? by Anonymous Coward · · Score: 0

    Why not try using Karel the Robot? It is a unbelievably watered down library in Java taught at Stanford University in their introductory programming courses. At first, Karel consists only of 4 commands. Move, turnleft, putbeeper, pickbeeper. The commands are then executed by a simulated robot that follows your commands on a generated window. An example of this is:

    public void run() {
        move();
        pickBeeper();
        move();
    }

    Want more information...check it out at: http://www.stanford.edu/class/cs106a/materials/karel-the-robot-learns-java.pdf

  371. dont choose this profession by Anonymous Coward · · Score: 0

    if they are bright enough, then they will not choose this profession.

  372. Re:Bright vs. Hard Workers by porcupine8 · · Score: 1

    In psychological/educational terms, there is a difference between ability and achievement. Ability refers to things like IQ that measure "what you bring to the table," so to speak, and can only be developed to a limited extent. Achievement refers to things like grades and end-of-year test scores - someone with lower ability can work hard and achieve the same as someone with higher ability.

    --
    Warning: Apple/Nintendo fangirl. Likes her electronics cute & cuddly. May be rabid.
  373. Re:Bright vs. Hard Workers by porcupine8 · · Score: 0, Flamebait

    Thank you for your anecdote. Sadly, it does not cancel out decades of research. Here, I will give my own anecdote to cancel yours: My husband skipped the third grade, and not only did he suffer no ill effects from it at any point, his fourth grade teacher wanted to skip him to fifth because she didn't realize he'd already been skipped.

    You see, they have devised these things called "statistics" so that we don't have to play dueling anecdotes all day. And the statistics from many, many studies show that the vast majority of grade-skipped children have no negative social or emotional effects from it. Most of those who do had problems before the skipping and the problems just weren't fixed by the skipping.

    --
    Warning: Apple/Nintendo fangirl. Likes her electronics cute & cuddly. May be rabid.
  374. QBasic? Seriously, dude. Get them on Python now. by jocknerd · · Score: 1
  375. Teaching kids in python by cbx33 · · Score: 1

    I have actually taught 14 year olds when I worked as an IT manager at a school. We have about 5-6 who were interested in Linux. Once day one of them came to me and asked to be taught how to program. I took the decision to teach python, simply because it was so simple, and encouraged clean code writing, unlike most other languages ;) The upshot, by about the 3rd lesson, being entirely theoretical, I had them understanding classes by using an analogy of an office block, with offices being class instances, functions the people in the offices, variables being paper with data on them, and blueprints for the offices being class declarations. The next week, one of the guys came up to me and showed me a 200 line program. He's started writing a text-based adventure game. He had a few syntax errors. After sorting that the program had grown to 400 lines by lunchtime. I was both impressed and touched that I had been able to teach this young mind the basics. We did one practical lesson. All the rest was theoretical, which goes to prove you don't ALWAYS need practical lessons.

  376. JavaScript by Anonymous Coward · · Score: 0

    I'd recommend JavaScript. It's got all of the logic constructs you want to teach beginners (conditions, variables, loops, etc.), and it requires only a text editor and a browser to teach it. If you want to coddle them, there are many IDEs that support JavaScript as well.

  377. Small Problems by emeraldemon · · Score: 1

    People have already mentioned project euler, which is good, but most of those problems will be beyond the capacity of 12-year-olds, I think. Start really simple: write the absolute value function, the min and max functions, factorial, simple I/O interactions like "how old are you?". Build confidence in their ability to solve simple problems before you give them something more complex. A good one might be the "higher/lower" game. Write a program that picks a random number and then asks for a guess. It tells whether the guess is higher or lower than the true value. If you make them program an AI that can play the game, they may discover binary search all by themselves. I think problem solving is more important than being able to see pretty results.

  378. What about something intuitive and simple. by jotaeleemeese · · Score: 1

    When I read all the above and see a rehash of everybody saying the language they know is best, I just shake my head in disbelief.

    Is there not a single Slashdotter that has embraced teaching as a profession that can actually enlighten us regarding this matter?

    To the people mentioning Java, C and its ilk, Perl, Python and PHP, honestly, get a grip. I know seasoned programmers that are driven to despair when faced with the different idiosyncrasies of these languages, all created with very specific purposes, last of which is educational value.

    So guess what, I typed "programming language for children" in this thingy called Google, and a linky thingy pointed me to a list of languages in a website called Wikipedia, several of these languages are *specifically designed as educational tools*

    If you put your mouse pointer thingy on top of the highlighted text below you will be shown the information I am mentioning.

    http://en.wikipedia.org/wiki/Educational_programming_language

    Everybody that has gone through proper computing education knows about Logo, knows how it works, to whom it is aimed, and how easy to pick up is. But no, fucking Python is didactic, functional languages are making a comeback and the diahrreical nature of Perl is ideal to get fresh minds to embrace computing. Give me a fubaring brake.

    What I would have expected in this thread is that people with experience with those languages (and others designed with educational aims in mind) would have shared their experiences.

    What we have got so far is mostly useless, I don't call moderators to task in general, but in this occasion most comments on this thread should be buried in the -1 hell, their only rightful place, not to send them there is frankly a dereliction of duty.

    --
    IANAL but write like a drunk one.
  379. Why not try LOGO? by Don+Philip · · Score: 1

    I notice that no one seems to have mentioned LOGO, the programming language for children designed at MIT. It introduces basic concepts, etc. As well, there are other similar programs (i.e., SQUEAK) that might be more suitable for your age group.

    One advantage of the LOGO language is that it can be combined with the Lego/LOGO robotics system. YOu could get your students to learn programming while actually building something that interests them.

  380. Re:Bright vs. Hard Workers by feldicus · · Score: 0

    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.

    Why do we need a special term? Isn't the word "smart" good enough? I suppose one could use "unusually smart" for kids higher up the chain, if only to differentiate them from the reasonably bright kids who prefer to neglect intellectual development in favor of learning to burp the Pledge of Allegiance.

    feldicus

  381. Logo, maybe Smalltalk, possibly C by Anonymous Coward · · Score: 0

    I'm sure many agree on Logo. Particularly Brian Harvey. I think Logo is more likely to interest more types of kids, but there's actually nothing wrong with Lisp, if approached without a lot of jargon. Starting Lisp is amazingly easy, especially for those who've not learned procedural languages. Smalltalk... maybe not so many would recommend, and maybe there are better similar languages with better free support, but the idea here is to introduce oo concepts from the beginning so they don't seem foreign and weird later. Without looking, I'm guessing not many have recommended C. But here's the thing: plain old K&R C only looks strange to youngsters at first. Teaching it properly also teaches about architecture and efficiency and such, and the end result is the students have something they can build on instead of trying to forget later. Wait until much later to get into pointers and maybe don't bother with dynamic allocation at all. Do NOT use any sort of BASIC for beginners. Bad programmer. No Twinkies. Those guys at Dartmouth were trying to offer something besides FORTRAN, but we have better tools now. Heck, Algol isn't a bad learning language. Unfortunately, I haven't seen much platform support for it. Oh yeah, and Pascal... ugh. Standard Pascal is weak, and extensions never seem to have the conceptual integrity that can make programming somewhat intuitive once the foundations are laid.

  382. Purebasic by Anonymous Coward · · Score: 0

    I'd throw my hat in the ring for Purebasic.

    http://www.purebasic.com/

    It compiles, can handle three operating systems, does DirectX 9, can be used to make applications, 2d games, 3d games, or simple "hello world" style programs. There are two books available for it, both well written, made by members of the community.

    You're not going to write the next Office suite with it, but IMO it is a good introduction to programming.

  383. Video Game Programming by Stratolab · · Score: 1

    I've been teaching middle school kids programming for four years. I don't think the language is that important. What's important is to find good problems that they can work on. And by good I mean: (1) Students find them interesting, (2) early problems are easy so everyone can get a small victory under their belt, (3) the problems scale up so everyone has something that challenges them. The way I teach is I start everyone out on Scratch ( scratch.mit.edu ). Scratch uses drag-and-drop programming which lets you skip all the worries about syntax and jump immediately to logic, problem solving, etc. I.e. the interesting stuff. Most of the students will continue to find Scratch interesting and challenging for a long time (6-months to a year). Your top kids will get bored and then I'd move onto something like Processing ( http://processing.org/ ) or Python with some graphics library such as my MakeBot ( http://stratolab.com/misc/makebot/ ). If people are interested, I can post my Scratch worksheets.

  384. LEGO (not LOGO)? by milkmage · · Score: 1

    how about LEGO Robototics (Mindstorm) Is this class voluntary or mandatory? If it's mandatory, you might want to lower the bar a little due to varied levels of interest.. what kid doesn't like LEGO? Mindstorm let's kids build a robot out of standard components and write a program that gives the robot instructions. the results are immediately tangible (make robot do stuff) and problems are easy to identify (robot didn't do it right) the LEGO site has teaching aids but here's more general info: http://en.wikipedia.org/wiki/Lego_Mindstorms bonus: teacher would have a blast creating they syllabus

  385. Squeak or Scheme by DennyBoll · · Score: 1

    There are only a couple of good first languages: Squeak (Smalltalk within its own learning universe), or Scheme (a solid basis for computational concepts).

  386. Something useful by spinkham · · Score: 1

    The language doesn't matter nearly as much as the goal.
    Designe a program where they make somthing they will think is cool.

    It could be with Ruby (recommend http://hackety.org/)

    It could be javascript, doing interesting browser things (greasemonkey allows doing "cool stuff" easily https://addons.mozilla.org/en-US/firefox/addon/748)

    It could be python (Recommend pygame, or as a scripting language in another game.. see http://wiki.python.org/moin/PythonGames for ideas)

    It could be Lua ( Used as a scripting language for a game)

    It could be Alice. (http://www.alice.org/)

    It could be Lego Mindstorm programming with NQC, Lua, RobotC, etc.

    Consider centering the program around the First Lego League compition(http://www.usfirst.org/what/fll/default.aspx?id=390)

    Your students will even learn assembly or C if they are convinced it will lead to doing REALLY COOL STUFF. At least I did around that age. Asking about the right language is missing the point.

    Come up with really cool projects, and the language learning will happen. Trying to force kids to learn a language for the languages sake just ain't going to go well...

    --
    Blessed are the pessimists, for they have made backups.
  387. Re:Bright vs. Hard Workers by mdarksbane · · Score: 1

    My experience is that it will come down to random luck on who else is in their classes.

    I skipped in a few subjects ( wouldn't let me skip a whole grade ) and while I got along ok with the people in the grade "above" me, there was no one I would have been as close friends with as in my class.

    I would say that it would work better earlier, and before the child had formed too many attachments to their own peer group. Otherwise it should be no more damaging (within reason - it'd be tough having a girlfriend in high school when you're ten years old) than moving schools.

  388. Phrogram by CNTOAGN · · Score: 1

    http://phrogram.com/kpl.aspx I've started teaching my son (8 years old) with Phrogram - it allows for all the needed pieces of programming, gives quick results, and has a nice little IDE (all free of course).

  389. ALICE ALICE ALICE by Anonymous Coward · · Score: 0

    I can't say it enough. If you want to get kids involved in programming, take a look at Alice. I teach middle school students Alice and they love it. Best of all it's free!

    www.alice.org

  390. Re:Bright vs. Hard Workers by Anonymous Coward · · Score: 0

    I have an IQ > 140 and skipped two grades in middle school (4th > 5th, 7th > 8th). While I did experience a far greater share of ridicule from some older (ie, big hormones, small minds) students at the time, I've never lacked for social grace, any more than my peers.

    Nowadays, I do interesting research work for a living, have a hot wife (professional model) who holds a PhD, and appreciate the trolls on Slashdot. Maybe that last one qualifies me as a social misfit, but the first two certainly do not :).

  391. Whatever is the DANGEROUS is the MOST FUN !!! by Anonymous Coward · · Score: 0

    Teach them the simple iconic scripting langauge built into every Macintosh and they will love you into adulthood !!!!!!
     

  392. Paper and Pencil by Anonymous Coward · · Score: 0

    Don't let them touch a keyboad. Use a pencil and paper. If you can't do it on paper you can't do it in a programming language. I'm not kidding. I'd recommend a whole lot less typing and a whole lot more writing for all technical training, which is what this is, even though you think "welding" when I use that term.

  393. PHP! No way by PinkyDead · · Score: 1

    I love PHP, it's a cool language - but there is no way I would recommend it for learning programming. There's too much freedom in it and the problem with that is that it doesn't bite back when you do bad things.

    It's fine if you want to learn PHP or even web based programming...

    But if these are "bright kids" then they should be trained well from the ground up, the need to learn how to program, a skill that is language independent - and as a Java programmer, I have to say that there is only one language that can teach them this properly: C.

    --
    Genesis 1:32 And God typed :wq!
  394. For the love of Hopper by geekoid · · Score: 1

    Please, please, please pick a language and teach them Multi-tasking and parrell programming.

    Sometimes I swear, if I come across another programmer that can't at least muddle there way through that, I'm going to break their fingers.

    Thiose will be THE most important programming skills to be a good programmer.

    Use a compiled language. The must be familiar with one, and it opens more doors for them.

    There 11-14 year old boys? let it slip that you have some porn lock away behind a password. Give them a C compiler and some articles about brute force techniques. They'll write something.

    Or get them int FLL. You can probably get someone to sponsor for the Lego kit, and it gives them direct goals and all the tools.
    I am a coach for the Lego Robotics at me kids grade school, so I may be biased about FLL.

    --
    The Kruger Dunning explains most post on /. http://en.wikipedia.org/wiki/Dunning%E2%80%93Kruger_effect
  395. What's wrong with "The C Programming Language"? by happyjack27 · · Score: 1

    What's wrong with C? And what's wrong with the standard introductory book? ("The C Programming Language" by Dennis Ritchie and Brian Kernighan) http://en.wikipedia.org/wiki/The_C_Programming_Language_(book) It "has often been cited as a model for technical writing, due to the book's clear presentation and concise treatment". I'd hate to see them start off with "A function definition is like a teddy bear..." crap. Start them off on the right foot, and they'll be much better coders for it.

  396. Re:Bright vs. Hard Workers by Anonymous Coward · · Score: 0

    Anecdotally, research be damned. A fourth grader in an accelerated class was skipped ahead into my sixth grade accelerated class.

    The results were predictably disastrous. He may have been smart but he was still two years younger than the other kids, and acted like it. At that age, two years is an eternity.

  397. definitely python! by Anonymous Coward · · Score: 0

    For teaching young students, python is the ideal language. http://python.org

    1. It was designed to be easy to learn.

    2. It's fun! Python's standard library even includes turtle graphics.

    3. It's syntax allows you to write programs that eary to read and understand. Often they look like pseudocode used in textbooks.

    4. Your students learn more, python offers a full complement of powerful language features: procedural, functional, classes/object-oriented features.

    5. In addition to being a good language for learning about programming, python is also a practical language. It has a vast set of libraries for numerical computing, database interactions, graphics, graph manipulation, web applications, email, etc.

    Google app engine uses python---so if they write the next great web 2.0 application (for 14-year olds?), they can deploy with ease and scale to a million hits per second.

    # an example
    from turtle import *
    goto(0,0)
    down()
    color("blue")
    for deg in range(24):
            right(105)
            forward(100)
            for step in range(3):
                    right(90)
                    forward(100)

  398. Warcraft by Anonymous Coward · · Score: 0

    My kid is teaching himself by accident by hacking Warcraft and Oblivion maps.

  399. Re:Bright vs. Hard Workers by porcupine8 · · Score: 1

    Yeah, slashdot is all about damning research and relying on anecdotes. Any idea how many kids you've had over the years who were grade-skipped in the past but were so well-adjusted that you didn't even know it?

    --
    Warning: Apple/Nintendo fangirl. Likes her electronics cute & cuddly. May be rabid.
  400. GNU Robots by Jim+Hall · · Score: 1

    I recommend GNU Robots. It's a game/diversion where you construct a program for a little robot, then watch him explore a world. The world is filled with baddies that can hurt you, objects that you can bump into, and food that you can eat. The goal of the game is to collect as many prizes as possible before are killed by a baddie or you run out of energy.

    The GNU Robots playing field is filled with food (increases energy), prizes (to increase your score), walls (which you can bump into), and baddies (which can inflict damage.)

    The robot program is written in Scheme. Fairly simple for kids to pick up. Heck, I don't even know Scheme, and I wrote several successful robot programs. (I also wrote GNU Robots.)

    1. Re:GNU Robots by MilesAttacca · · Score: 1

      I'd support Scheme. It's what they taught for our Intro to Programming class in high school, coupled with the How to Design Programs book. The mass of parentheses are intimidating and annoying at first, but I wound up appreciating how clear they could make "what belongs to what?" And there are all sorts of teachpacks for kids to generate drawings (and thus games).

      --
      98% of America's teens drink alcohol, smoke, and have sex. Put this in your sig if you like bagels.
  401. Re:Bright vs. Hard Workers by DiamondMX · · Score: 1

    Suffering an ignorance deficit?

  402. Re:Bright vs. Hard Workers by porcupine8 · · Score: 1

    "Smart" is less precise than "high ability," which can be easily modified to talk about "high intellectual ability," "high creative ability," "high spatial ability," "high verbal ability," etc when needed. I'm not just talking about teacher referring to kids in their classes here, I'm talking about a field of research and development that needs operationalized terms.

    --
    Warning: Apple/Nintendo fangirl. Likes her electronics cute & cuddly. May be rabid.
  403. Yes, the educational world has...except in reality by DragonWriter · · Score: 1

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

    Except that, in the real world, it hasn't. As Googling the phrase "gifted and talented education" and perusing the results would demonstrate.

    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.

    You know, your attempt to portray "the rest of us" as superior to the people actually in the field in question would be more successful if it wasn't entirely based on a completely false statement about the field being discussed.

  404. Turing by bbr_505 · · Score: 1

    How about Turing? Holt Softwareâ(TM)s Turing 4.1.1 IDE and compiler are available for download, âoefree of charge for personal, commercial, and educational useâ, from their website. When I played with Turing I was enlightened by the way my screen filled with colored lines and circles and whatnot, it felt very rewarding. Oh, and the syntax is hella easy.

  405. PYTHON by Anonymous Coward · · Score: 0

    One Word -> PYTHON

  406. hackey hack! by chairpatrol · · Score: 1

    http://hacketyhack.net/

    This is the best learning to program thing i have ever run across. Not only does it run through tutorials but your also editing and interacting, saving, loading, running, etc. all inside the same program.

  407. Anonymous Coward by Anonymous Coward · · Score: 0

    Your students may have the key to beginner's programming right in their own kit-box.

    For example, the TI-83 graphing calculator taught me a lot about simple program flow control. I was building math solvers and simple arcade games as far back as 8th grade.

  408. How was this overlooked? by stewbacca · · Score: 1

    World of Warcraft, anyone? My kids have learned more hacking and tweaking their WoW UI than any other computing endeavor. I even saw a book at Borders on how to program for WoW development.

  409. Re:Bright vs. Hard Workers by mengel · · Score: 1

    Been there, done that.

    But the question is, would it have been any different if you hadn't skipped the grade? In retrospect, I don't think so. Kids would still pick on you for "blowing the curve", etc. Most of them probably never knew you were younger than they were, and picked on you anyway.

    Now being younger than everyone else in Jr. High school was just plain hideous; but Jr. High school is also hideous anyway.

    And for me, at least, starting early got me off to college a year earlier, where the good folks at Undue Purversity put me in a classroom with 20 other kids who also tested out of 2 semesters of calculus, and I actually had to work and study to keep up.

    --
    - "History shows again and again how nature points out the folly of men" -- Blue Oyster Cult, 'Godzilla'
  410. Machine Code by jtara · · Score: 1

    My first programming language was IBM 1620 machine code (not even assembly) in high school and I am forever grateful for it. Along with my electronics classes in high school, it left me understanding at least the basics of how things work under the hood, which I think many programmers never really grasp.

    The 1620 instruction set is actually close to idea for this. It's decimal. Learning the "IDE" was easy - we punched instructions on punch cards, one instruction per card.

    We quickly moved-on to Fortran II, but I think it's critical that we started with assembly.

    Again, in college, they taught us Knuth's Mix assembly first, before moving on to PL/1.

    Is this approach dead? I hope not.

    I'd think kids would be fascinated with the concept of typing in what looks like random strings of numbers that can DO SOMETHING. Like a secret code. Kids are always fascinated with secret codes.

  411. Excel VBA by Turidoth · · Score: 1

    What about Excel VBA? All the data is transparent, there's some basic graphic output, it's easy to setup, and it's practically everywhere. Granted syntax and variable declarations are a bit loose, but kids can learn memory management in due time.

  412. How 'bout the book "The C Programming Language" by happyjack27 · · Score: 1

    C is the ideal introductory programming language. It's very simple and the syntax is very consistent. Basic and pascal are clunky and have inconsistent syntax. K & R's "The C Programming Language" is a classic highly regarded for it's clarity and conciseness. It would make an excellent introductory book. And it would start the students off on the right foot.

  413. Re:Bright vs. Hard Workers by Sax+Maniac · · Score: 1

    I skipped a grade as well. I was a music nerd through all high school, but I'm not sure staying put would have helped. It's hard to tell. I do remember really hating being a year younger then everyone else, especially when the kids started driving. I probably would have been extra bored, but I was a good kid anyway, so I doubt I would have gotten into serious trouble.

    I can tell you this: if I were to do it again, I would have rather skipped 12th grade and gone to college early. College was immediately fun and interesting, in a way high school never was. 12th grade was a boring waste anyway, even a year ahead.

    --
    I can explanate how to administrate your network. You must configurate and segmentate it, so it can computate.
  414. Teach them to think like a programmer... by Calyth · · Score: 1

    Or a problem solver, or a computing scientists.

    There are plenty of problems that can demonstrate to a young mind how to think like the machine, without the need of a "learner's language".

    A good chunk of people who I've seen struggle at programming simply can't think like a programmer, and they would fail at any language that you give them.

    Programming is a mind set, the language is just implementation detail.

  415. Re:Bright vs. Hard Workers by ChrisMaple · · Score: 1

    "Ability" is not something that can be acquired, it is something that is inherent. Hands give a person the ability to grab things in a way that no person without hands has the ability to do.

    "Gifted" is a very poor word because it carries with it a lot of baggage. It implies a giver, a god or parent. It implies an obligation to the giver, a lifetime servitude that can never be repaid.

    "Ability" is the word used for someone with a promising future. "Gifted" is the word for a curiosity, a person with a burden, a person that can't make it without his "gift".

    --
    Contribute to civilization: ari.aynrand.org/donate
  416. Teach them game making by Anonymous Coward · · Score: 0

    I've been teaching kids that age since 2002 in our summer camps and soon an online website. We see many gifted kids in our program and I have one myself. We use the Mindstorms, but for really teaching about programming we use GameMaker.

    They can make games, which is something they want to do. They can learn about event programming, objects, loops, if statements and variables. And they don't need to type.

    Then, when they are ready to go further, you can teach them the C-like language included with GameMaker (GMC, I believe) to expand their knowledge and teach them command line programming. And they can do all of this in the free version or they can pay $20 for the Pro version.

    Languages aren't important in programming for this age, concepts are. If they understand the concepts, they can then learn the specifics of any language like C or Java. We have inspired many future programmers this way.

    Tom Marx
    Bits, Bytes & Bots

  417. Compiler Language With No Pronounceable Acronym by Mr+Z · · Score: 1

    INTERCAL, naturally.

    CORRECT SOURCE AND RESUBNIT

    Seriously, though, I don't think the language matters so much as long as there are basic tools available to get started. Heck, even Excel could be a starting point to get a handle on building up equations and conditionals.

    The main thing is to have some "getting started" type of documentation, maybe a couple of examples, and offer some encouragement to "see what you can make it do." At least, that's how I started. My folks didn't know a thing about computers. I had a manual that had examples and reference material, and I figured it out from there. The single greatest encouragement was "Don't worry, you can't break it just by typing at the keyboard." (Not quite so true today with viruses and malware and all, but still true of basic programming.)

    Once you break the mindset of "the computer is an appliance", and start thinking in terms of "the computer is something I can shape and mold to do whatever I like", the rest flows from there. That's probably the most important part.

  418. Re:Bright vs. Hard Workers by mdarksbane · · Score: 1

    I actually ended up having a really good senior year - probably the only particularly good one of my entire school. All of the best teachers teach upper class students in high school if at all possible. So it really does vary by individual situation. My senior year was hardest than my freshman year of college.

  419. Anonymous Coward by Anonymous Coward · · Score: 0

    Microsoft Small Basic:

    http://msdn.microsoft.com/en-us/devlabs/cc950524.aspx

  420. teach a language you enjoy using by mustafap · · Score: 1


    and then, hopefully, your enthusiasm will rub off on them.

    --
    Open Source Drum Kit, LPLC deve board - mjhdesigns.com
  421. No, not perl by gillbates · · Score: 1

    Perl isn't for the beginner:

    • Perl's syntax is often cryptic and confusing.
    • The sheer number of ways to do things in Perl will make grading assignments considerably challenging.
    • It doesn't complain when your assignment statement creates a new variable (because of a typo) rather than assigning a value to an existing variable. This would trip up young programmers considerably.
    • $variable and variable are both legal, yet one gets you the value of the variable, and the other, its address. This, too, would confuse inexperienced programmers.
    • It is often very helpful for a learning programmer to use a debugger. The debuggers for other languages, such as C/C++, Java, etc... are considerably easier to use than Perl's debugger.

    I like Perl, but I can't help but wonder if it won't make everyone but the budding geeks hate computer science. It's syntax full of subtle nuances; is difficult to debug; and allows such awful permutations of symbols that the average person is going to think of a computer as something ridiculously complicated and unapproachable.

    --
    The society for a thought-free internet welcomes you.
  422. Use a variety - by the+stapler · · Score: 1

    I'd really recommend using a variety (based on the amount of time you have to teach of course) of languages. I find the language I use at work changes with each project. I go through Java, C++, C#, Javascript and HTML, VBScript and InstallShield, etc.

    I'd recommend presenting a problem, like picking words out of a string, then show a solution using a language, like Python to parse. Follow that up with a more open problem that builds on the solution. Then move on to a new problem and a new language. I think this approach would help with problem solving and thinking more than just a language. If you have time, present a final problem and let them choose a language.

    I think another key to your success will be getting good environments set up for the students, so they don't have to waste days not doing the work. And make sure to show them debugging techniques.

    Try to work in as much visual feedback as you can (go to C# and do Windows forms, find an easy graphics library for Python, pick one of the educational languages that does visual programming).

    For problems, try some of the common stuff like parsing strings, some math functions like Fibonacci or plotting a curve, some user interface like having a form submission and parsing, and be sure to include some animation or basic game programming. You might look in a "cookbook" book for a chosen language for ideas of common problems. And try to give them something that they can take home at the end of the class to run and play with and expand on.

    good luck.

  423. Well.... by Anonymous Coward · · Score: 0

    I am 14 now, but I started programming at age 10, where I did QBasic. I would avoid QBasic a it teaches bad programming practice such as GOTO functions. I would teach python, or to the more able student c++ (or c# on a windows platform).

  424. Something with quick turnaround by Anonymous Coward · · Score: 0

    PHP + HTML. This way they learn about markup languages, and interpreted C style languages. The code to test cycle is very short, which allows them to play around and see what they are doing in a browser (which translates into real world value).

    I rarely use PHP anymore, but it definitely got my attention when I was 14. That was about 10 years ago and I am still interested in software.

  425. Refactoring by tepples · · Score: 1

    Algebra is required for complex manipulation of symbolic expressions.

    Most programming is not complex manipulation of symbolic expressions.

    What is refactoring if not the direct counterpart of algebra?

    1. Re:Refactoring by caerwyn · · Score: 1

      That's actually an interesting way of looking at it; I don't think I'd ever thought of refactoring as algebra on programs, but you're right, there are a lot of similarities- making structural changes that do not change the result/meaning.

      That said, we're getting a little far afield of what the original point was- namely, that algebra is not a requirement for programming; while refactoring is often very helpful, I'm not sure I'd call it a core programming requirement or a necessary beginning programming skill. Far be it from me to argue that algebra and refactoring are not *useful*, but I think that's a bit of a different discussion.

      --
      The ringing of the division bell has begun... -PF
  426. basic Vs C Vs PHP by Anonymous Coward · · Score: 0

    Qbasic would be an ok first choice just for showing how programming work, loops etc.. but it's applications today are limited. C is an excellent choice but many could be distracted by the tedium of includes and memory managment. PHP is syntactically similar to PHP and is very straight forward without all the "magic" of C/Java. I think PHP would be a good choice.

  427. Bad memories... by Anonymous Coward · · Score: 0

    I was taught Visual Basic when I was around 12, and I liked it since it mixed code with GUI design... Nevertheless I never touched it again when I learned HTML, C, and other languages

  428. TI-89 by T+Murphy · · Score: 1

    Maybe it isn't something you can focus on for a whole course, but I messed around with TI89 programming at first. The biggest plus with it is that you can show your friends the results, and can even give them the programs. When you write a C or Java program, it typically exists solely as a learning exercise, and to make a product that is fun to share generally takes far too much experience to get such results in one course. TI basic doesn't require that you memorize syntax, as you pull all of the commands from menus.

    My first programs were just animated text produced by long lists of print calls- with no real programming, I had something worth a laugh with my friends. I'm no CS major, so I've only taken two semesters of programming, but I've yet to even achieve that level of social appreciation with the programs I've spent countless hours on. Given a limited set of commands on the TI, instead of being flooded with Java's entire library of methods to muddle through, you can easily see all of your tools, and you are forced to creatively apply them. With no instruction, reading, or anything, I developed a rudimentary form of methods, classes and commenting to make a text-based RPG. Considering these students will have instruction, there is a lot of potential in the TI.

    Recognizing that TI Basic is not something a young programmer should focus on, it may be worth just spending a week early in the course learning how to make TI programs, and then encourage them to apply what they learn in the rest of the class to make fun little TI programs so they can show their friends what they've learned to do. Heck, the most enthusiastic programmer I've known was a friend in high school that started a TI programming club and even used assembly to make very simple version of starcraft for the TI. Even if you don't go with TI programming, you need to give the students some form of creative outlet so they can appreciate programming as something that doesn't have to be viewed as work.

  429. Bytes Brothers by Zape · · Score: 1

    For children in that age range the Byte Brother books (A series along the lines of the Old Encyclopedia Brown books from the mid-80s) might actually be a good tool for such a class. The series follows a pair of brothers using Basic to solve various challenges in each book (from whether a train operator is lying to how many marbles are in a jar). In truth, you can solve the problems with just a calculator and some algebra, but the books show solving the problems in Basic. The first book in the series is "The Bytes Brothers Input an Investigation" and is apparently available on Amazon.

  430. Python or C by Dragonmana117 · · Score: 1

    I started with python when i was 12. It's pretty straight forward and being built on c you can do a lot with it. You can teach your kids the basics of programing and then take them to more advanced stuff like gaming programing (pygame built on sdl), web programing(dejango), or full apps complete with gui's (wxpy). That is what I would start new students with. With that said C is a great language to learn. If you can learn C you can progress to almost any language and excel at it easily. C is probably one of the strictest languages i have used and forces you to learn good programing techniques, however it is harder to learn than python. Good Luck!

  431. Make them compete... by TemporalBeing · · Score: 1

    One of the best things about my high school programming classes was the competition between everyone, or at least those of us at the top of the class. So, I would certainly give them assignments and leave a lot of latitude on how to do it and challenge them to see who could best the others - in terms of features/functionality/coolness (to them)/etc - while still completing the assignment. It would be an automatic failure if they didn't complete the assignment, regardless of anything else; but perhaps get extra credit for what they compete on.

    Hmm...may be even make your job a little easier by having the class evaluate everyone's programs - have them present the program, and everyone rates it, you judge the assignment against the assignment criteria, and everyone's input goes to who 'wins' and/or extra credit. (So they all become the judge of the 'coolness'/etc. factors.)

    And you'll also help to give them better social skills for when they get out into the real world.

    Also see another one of my posts on this topic.

    --
    Truth is like the sun. You can shut it out for a time, but it ain't goin' away. - Elvis Presley (source: imdb.com)
  432. Ask Richard Buckland by hotdiggitydawg · · Score: 1

    Ask Richard Buckland. If you're able to get through to him I think he'd have some great ideas for you, because this very subject is one of his greatest passions.

    No thread on teaching programming to kids would be complete without a shout out to him. He has a freakish ability to make the most dry, technical, theoretical computer science topics highly entertaining, engaging and educational. I've been fortunate enough to see him in action a few times, the guy is a brilliantly talented teacher. There's a reason he's been given award after award for the quality of his teaching - he cares, and he's unbelievably good at it.

  433. My past experience by Anonymous Coward · · Score: 0

    I was taught programming in Middle School (against my will, my mother made me take the class)

    My teacher taught us in Visual Basic and taught us the basic building blocks to design and implement our own simple games.

    A few years later he changed the class to using some game where you can program your own worlds to teach.

    As an introduction to programming, it gave me a good foundation on difficult concepts for someone that age (functions aren't an easy concept when you don't know what programming is) and I enjoyed the class because we were making games.

    I enjoyed it so much that I took all the computer classes my schools offered, then went to Virginia Tech and recently graduated as 1 of 5 women in Computer Science.

    I always consider that class to be what gave me a goal in life. If it had been boring or too over my head I wouldn't have continued studying the subject, but because I had a taste for what *could* be done with programming languages, I wanted to keep working with it.

    I hope that one day I can go back to school and learn how to teach so I can give back the same way that teacher gave to me!

  434. Re:Bright vs. Hard Workers by Anonymous Coward · · Score: 0

    I skipped a grade and don't have any friends, you insensitive clod!

  435. Interpreted by DrWho520 · · Score: 1

    This is so far down the list, it will probably be missed. I will say it anyway. I would suggest an interpreted language, such as MatLab. I have not used Octave, but it is free and mostly compatible with MatLab. You can easily set break points and watch the code as it executes. There is nothing that can be done in Basic that cannot be done in MatLab. Plus there is an extensive library of MatLab code available on Mathworks file exchange.

    --
    The cancel button is your friend. Do not hesitate to use it.
  436. I recommend my Scared Straight program by strangeattraction · · Score: 1
    I would suggest my scared straight program. 11-14 year olds are chaperoned for a 24 hour stay at a startup, made to drink sodas all day and sit in a chair for 2/3 of an entire day. They attend several meetings with a well chosen group of social inept engineers and participate in inane discussion about object oriented programming, design patterns and which language is best. At the end of the program we have a discussion group with recovering software engineers .

    If they they still want to be a software engineer it maybe time for an intervention or mood altering drugs.

  437. Kids like games by MistaBell · · Score: 1

    I think it's easier to learn a language by having things you want to talk about than by forced reading. You should pick a project, then a language that lends itself to the task. Something entertaining. Perhaps a video game? Something easy. Whack a mole?

    You could take pictures of all the kids (Setup a web cam, form a line, and you've got ~25 jpegs of little faces at about the same size / resolution.) Make a 2 layer stage to create the illusion of coming out of a mole hole between the foreground and background layers. Assemble the script so that every few seconds a timer signals a function to pick a random hole, position a random kids face below it, and slide the image up and down. Add a script to position a hammer over the cursor. Add a mouse down script to change the image of a hammer to one striking. Add a mouse up script to increase the players scores and cue a sound effect if they hit someone.

    I would suggest AS3 in Flex Builder.

    Set aside a week...
    http://www.adobe.com/devnet/flex/videotraining/

  438. Not just in pencil by chiangovitch · · Score: 1

    I kid not ... we had to write our programs in Hollerith code by marking cards in pencil. They were 40-column cards so there was a little more room, and a key to the code was printed on the cards in each column to make it, well, possible if not reasonable. The idea was to get programs written offline and run by passing them through the optical card reader, lessening the demand on the handfull of terminals we had. (Maybe the teacher, who really was a good teacher, wanted to run the program himself sometimes to check the results?) In practice, we'd write and debug on the terminals, then transcribe a printout onto the cards to hand in. :-P

  439. Missed the point by KalvinB · · Score: 1

    You were supposed to be learning concepts. Not syntax. I started with BASIC as well when I was 5 or so. I got a copy of a C compiler when I was about 12 and quickly gave up and went back to BASIC. By the time I was 18 I was ready for C++ and jumped right in. I've now worked with about a dozen languages. I translate between languages often. At every job I end up using at least 3 or four.

    There's nothing I learned from BASIC that wasn't useful. You also have to be self motivated to make your code better.

    If you're learning syntax when learning how to program then you're doing it wrong. If you ignore syntax and focus on learning concepts then it doesn't matter what language you use. Eventually the uglyness of BASIC will become apparent and you'll be happy to learn and embrace better ways of doing things.

    In the mean time, kids are more interested in making games than pretty, easy to read code and BASIC is the easiest language to use to accomplish that goal.

  440. VB by DarthVain · · Score: 1

    *ducks*

    I know the folks here will hate it, but probably VB would be a good starter language. Its easy, fun, and an easy GUI and you can build pretty windows, and quickly make basic (heh no pun intended) windows programs.

    I have done a large number of languages (probably not so many for this crowd) growing up and through university. Though I think I had that generational gap where all the stuff I learned was obsolete before I graduated. Not the theory of course. I grew up trying to get BASIC to run on a TRS80 (which sucked), or using tapes that never worked, in university, it was Pascal, which halfway through they switched standards to C (thx a bunch!, and later C++, did Assembly language which also sucked, but intriguing from a machine level perspective, also did the dead language (kinda) Cobol, which was surprisingly easy and interesting, and also did stints of various versions of VB, and a host of scripting languages. I never got into any of the Pearl or Python, or even Java which is too bad, but I have little use for now, so I can't be bothered to self learn it just for kicks. I did have a friend that basically taught himself Pearl over a weekend for a job.

    Ideally, I think you would go from teaching a low generation language to a high one as they would get an appreciation of the complexity involved and how languages build on one another. However trying to teach a young one Base2 math, assembly, etc... might be a bit much.

    VB is super easy (though not particularly powerful or efficient), fun, visual, and I know from personal experiance very useful later on just writing little scrips to automate little jobs in excel and access etc... also a bunch of big expensive software suites like those produced by ESRI (ArcMap, etc)... have dropped their proprietary scripting languages like Avenue (which I also learned... sigh)... and now use VB to do all their automation tasks (for good or ill). An edu copy is also cheap (or it was anyway).

    Anyway that's my two cents. As a disclaimer, I obviously don't program much anymore as most of my languages seem to be antiquated now... however I still think VB would be the way to go initially.

    1. Re:VB by DarthVain · · Score: 1

      OK this just reminded me of a project I did in College. It was using VB (6 maybe?) with a GIS add-on called "MapObjects" made by ESRI. I am sure it is good for little projects that look cool, but it certainly wasn't a powerhouse.

      I remember I had to fudge the program a bit by adding a splash screen on an extra long timer, as it took our program sooo long to load. I swear it wasn't my programming! :) Anyway the data we had was just too large, both in database and in graphic files. No matter how we tried to load it (in pieces, by task, whatever) it took forever for it to chug through it.

      It is useful to me now if I want to do something to a table in access. Between that and in combination with SQL you can pretty much do anything. I even did one that took a couple of tables, and wrote a HUGH SQL data migration sequence into a text file, which fed into an Oracle console. Worked like a charm, and because it was so uncomplex took no time to process. Plus the lazy man in me likes the idea of code writing code for me...

  441. Language I started with in 3rd Grade by CircusTent · · Score: 1

    When I was a third grader one of my teachers started to teach everyone in the grade various aspects of programing from Loops, Function Calls, Vectors, and other programming concepts with Logo. I am not sure if the language is still around, but I would say that it makes a great starting point, because it allows you to do some very simple things like draw a circle to extremely complex like write a program that will translate user input into Greek, was a lot of fun to do in 4th grade. I started creating my own basic games with Logo in 4th grade as well as used something called Lego TC Logo which allowed my class to write simple code that would move a car created with legos. What is funny is that I learned a lot of the procedural programming concepts that I use in my career now back when I was about 8 years old. I do know there are a few other young student friendly languages around, I just cannot think of what the names of the languages are.

    --
    Pew Pew
  442. Python by roubert · · Score: 1

    I would suggest Python. I have several years' experience of teaching computer programming to kids, and while it certainly is possible to use just any language for teaching, Python has three features that I see as essential for a good language for learners: The basic syntax is very straightforward and only a minimum of boilerplate code is required; There is an interactive execution environment so that expressions can be evaluated immediately; The language can be and is indeed used for serious "real world" programs.

  443. Maybe Processing by Anonymous Coward · · Score: 0

    Processing might be a good choice. It's a simplified Java dialect with a multimedia processing environment. It's really straight-forward, while allowing the more advanced kids to do amazing things, and they might enjoy the experience creating easy games or nice animations.

    http://processing.org/

    and by the way, some nice game demos from a Processing modding workshop:
    http://www.trsp.net/teaching/gamemod/

  444. Check out FreeBasic by Syn9 · · Score: 1

    its an open source compiler that will compile qbasic code and has support for advanced features like pointers and some OOP. also has a significant amount of c libraries ported to it. http://www.freebasic.net/ i program my games and graphics demos in freebasic. http://syn9.thingie.net/

  445. Re:Bright vs. Hard Workers by Anonymous Coward · · Score: 0

    Unfortunately, we are saddled with the term "gifted"

    Who gives a fuck, except average people who are pissed because they aren't 'gifted' too?

  446. intro to programming by jayp00001 · · Score: 1

    You are really looking for 2 things:
    1. How can I teach kids to start thinking about how to develop algorithms
    2. What is a good programming language for beginners

    The best solution I've found is Karel and pascal

    Karels home page (with a C version of Karel shown) is here http://www.cs.mtsu.edu/~untch/karel/

    The Pascal version is in the book. I think pascal is a better language for teaching good programming practices rather than C It's not that you can't in C but Pascal makes it easier to teach without having questions come up about idiosyncrasies about a program they may have found or other books they might have read about C.

  447. Pascal by Anonymous Coward · · Score: 0

    I went to a high school that specialized in math, science and comp sci. We started on Pascal (and those of us who were more advanced, moved to C instead).

  448. Python by unit8765 · · Score: 1

    Python. I started programing with microsoft visual basic, and I got a lot of microsoft specific junk and I wasn't ever sure what I was doing. Then I did C++ when I was 11, and I actually learned what I was doing, but it was really hard. Python has easy syntax that is somewhat similar to C and stuff, and it has a ton of fun libraries like pygame that are very interusting and fun to work with.

  449. Teach Processing using Daniel Shiffman's Book by tacitdynamite · · Score: 1

    I work for a gifted/enrichment department at elementary and middle schools, so I've taught programming to ten to thirteen year olds a few times. I've tried Logo, Scratch, Alice, MIPS, Java (via BlueJ), and now Processing. The best experiences I've had were using processing. Processing is great for this age group because 1.) you get visual feedback right away 2.) the processing language has stages; it begins declarative and becomes object oriented. I had one student who eventually ended up using the processing library in pure java. 3.) if you like, you can do relatively low-level stuff, such as bit-twiddling on images 4.) while it isn't as easy as Scratch to publish results and collaborate online, it's very close, because of the site "openprocessing.org" 5.) contrary to what you'd expect, a language that requires typing is easier for younger kids to manipulate than a language that requires you to mouse around a lot (Alice and Scratch). This year I used Daniel Shiffman's book "Learning Processing," and the kids really responded to it. I'd highly recommend it for teaching to this age group.

  450. yabasic by Anonymous Coward · · Score: 0

    then python

  451. Game Modding by Malkin · · Score: 1

    I'm definitely in favor of introducing kids to programming via game-modding. Most of them play games, anyway, and showing them how to make their OWN games is even cooler. Making games was what first motivated me to learn to program, way back when I was a kid.

    Lua is used by some games. Other games use python, or their own custom languages. I recommend checking around, and seeing what (youth-appropriate) games have good, active scripting scenes. An older game might be a good choice, both because you can get copies for cheap, and also because there might be a more extensive modding scene.

  452. Pascal... by Anonymous Coward · · Score: 0

    I don't know if you're still looking for advice, but when I started programming at age 12 I learned pascal. It taught me the appropriate structural concepts. As I have gone through college later in life that foundation has been an enormous help. Many of the people I work on school projects with don't understand structural programming, which makes it impossible to understand object oriented programming. Pascal also can introduce the basics of debugging and watches, both of which have stood me in good stead.

    Hope that helps.

  453. Not free, not open, not portable by jopet · · Score: 1

    How is this http://phrogram.com/content//featurecomparison.aspx "free"?
    As it comes from MS, it is not open and not portable either.

    Bad choice.

  454. Java by Anonymous Coward · · Score: 0

    I would suggest, Java for multiple reason.

    1. It is free...so the kiddies can load it on their home computers.

    2. It is well documented.

    3. It is Object Oriented.

  455. From a non-programmers viewpoint by Anonymous Coward · · Score: 0

    I'm a sparky by trade, so my intro to programming were always procedural, but before we started with any kind of IDE, we started on a whiteboard. It might be buying a can of soda from a machine. Start with the basic steps. Then introduce some conditional statements. Maybe some looping (for multiple cans) and finish with some error handling (machine is out of Fanta).

    I like the way there are 50 different answers to a question like this. Just goes to show how different we all are.

    But if it were me, for an adult it would be Python. For a child Alice or Scratch.

  456. HTML, JavaScript, Some Server Side Language by RAMMS+EIN · · Score: 1

    I came to this thread thinking to get some interesting ideas, but I think I'll offer some advice of my own, instead.

    First of all, other than a lot of posters seem to think, I believe 11 to 14 year olds are probably developed enough to handle the same kind of languages that professionals use.

    Secondly, I think it would be a bad idea to start them on an environment that you yourself don't know well. You want to be able to help them along and show them cool things that you've made, rather than go "Here's this thing for you to play with. I swear it's cool. Honest. But I myself won't touch it."

    Thirdly, programming is not something you learn overnight, so it's important to keep learners motivated. I think one way to do that is to get them started on something that is easy to produce results with, and easy to get to something that looks like it could have been developed by a seasoned professional with.

    So, without knowing what you yourself have expertise in (see the second point), what I would advise in general is: start with HTML. It's code. It's used by professionals. It's easy to learn. You can copy things you like from webpages. You can rapidly create something that looks solid, and you can rapidly get to the level that enables you to do so. Don't bother with IDEs or other tools: just a text editor to write the code in, and a browser (preferably a decent one) to view the results in. Add a few images and sprinkle in some CSS, and you can have a decent web page soon enough.

    Of course, a web page by itself doesn't do anything. It's a nice way to communicate information or advertise oneself to the world (you can definitely impress your friends with it!), but we wanted programming, right? Well, the logical choice for that in the context of web pages is JavaScript. So teach them to make some nice interactive things: buttons that change the text color, a page that asks for a name to be entered and prints out a greeting with that name, maybe a tic-tac-toe game or something else that feels like an accomplishment, but isn't too much work. The most important thing here is: rewards must come quickly.

    I've spent years and years just making web pages with JavaScript on them. Of course, all of that is browser side, so none of that actually had a lasting impact on the world. People thought it was impressive, I thought it was immensely cool, but, eventually, I did start to wonder how to do all the _other_ things that web sites do. That's where server-side programming comes in. When you submit an HTML form (or request a web page, for that matter), a request is made to the server. At a very fundamental level, the request is a bunch of parameters (key-value pairs and maybe some file data), and the server can do whatever the heck it wants with it. Nice servers send HTTP responses to clients, often including a page to be displayed by the browser. These pages can come from simple files, but they can also be generated by programs (CGI scripts). And that's where the fun starts. Because these programs can actually do anything you want. And you can write them in any language you want. And there are tons of libraries and frameworks that you can use to do so.

    What I recommend, here, is keeping things simple. Start by picking a language, one that is simple to learn and doesn't come with a lot of unnecessary baggage. Use a language that is actually used out there. PHP, Perl, Python, and Ruby are probably good candidates. C and Java not so much - there are too many concepts involved in even a simple hello world program. Then start slowly. Don't introduce any frameworks. Just a program that outputs a simple HTML page (don't forget to output the headers, first, especially Content-Type). Then an HTML page that displays parameters that were submitted through a form. Then perhaps a simple game; a number or word guessing game or some such.

    From there, the world is at your kids' feet. You can drag whatever you want into it: libraries that do interesting things, database access, perhaps an AJAX framework, the p

    --
    Please correct me if I got my facts wrong.
  457. As a workshop teacher of high school students by Anonymous Coward · · Score: 0

    From my experience with kids especially in that age range, firstly whatever you do needs to be visual. If you can't get them to think it's cool, then you're sunk.

    Also, while they're bright, don't pick a language like Java or something similiar. There's several keywords that have to go into every program and I feel that just hides what programming is all about. It clouds what each thing does. After all, hello world has public, static, void, main, class, String, System and an array. Pick something simple, also pick something you can code a GUI in without being a wizard. Preferably allowing for animation for non text based games and such. Pick something that keeps debugging simple. Python\ruby are pretty simple, but the lack of something that points out exactly where your syntax\semantic error is can be frustrating. On the flip side, they both offer an interactive interpreter which is really cool for trying things out as you think of them and seeing what the program is doing.

  458. DrScheme by Anonymous Coward · · Score: 0

    I'd suggest DrScheme (www.drscheme.org). I'm not affiliated with them in any way. It's designed for teaching, offers rich graphics functionality and thus "instant" gratification expected by today's kids.

  459. PIC microcontroller by jakepmatthews · · Score: 0

    use a PIC microcontroller. the nicest 8 bit microcontroller costs $4 and a programmer costs ~$40 (the software is free), have them wire up a circuit by example on a breadboard and then have buttons and switches correspond to leds(20mA sink/source, so don't need a output transistor). you could get to a point where you can run a dc motor in place of a led. teach them simple assembly and how to use it instead of a proprietary langauge they can't use at home with out a lot of money. Teach them something fun they don't have to be in front of a computer to play with. Assembly teaches good logic concepts that make every other language cake.

  460. WTF by Anonymous Coward · · Score: 0

    If you have to ask why are you teaching this class? Perhaps someone a little more up-to-date than Micro$oft basic would be better!!!!

  461. Scratch by heironymous · · Score: 1

    http://scratch.mit.edu/

  462. I like C++ by ProfessorJoy · · Score: 1

    My 14-year-old son is taking C++ in high school now, and doing very well. I like C++ for the following reasons: 1) You can teach it as OO or structured 2) C++ compilers are free and easy to download 3) It is a real language, used in the industry for years. 4) There are a lot of good references and texts available. I DON'T like Ada and Pascal. I had to learn Pascal in college in the 1980's, and it is a dead end. I hated that language. It is not used in industry. Nothing like it is used in industry.

    --
    Do what you can do until you can figure out how to do what you can't do.
  463. It's All About The Logic by Toad-san · · Score: 1

    Absolutely, algorithms, logic, the thought process behind the programming is what you should be teaching. The language grammar is essential, of course, but minor.

    Hell, give them perl and turn them loose :-)

    Of course then you'll have to deal with perl's classic problem (?) of having a gazillion ways to do the same thing. BASIC and Pascal wouldn't be so bad about that.

    None of your examples included regex, tch :-) Give us a _real_ taste of obfuscation (and a hint of the madness therein).

  464. For starters by Strake · · Score: 1

    I started out at a young age with BASIC, which taught me nothing about actual programming. Functions? Return values? Closures? Memory management? Nope. A few years later, in my pre-teens, I moved onto C. This is what actually got me into programming. A solid language, a useful language, and a language that teaches one to appreciate what the machine is actually doing, though not quite as much so as ASM. Now that C had taught me the fundamentals, I went on to learn Java, Perl, and Scheme, among others. Though these may also be good introductory languages, every programmer will have to deal with a pointer at some point or another.

  465. if they're bright by shnull · · Score: 0

    then start at least with C right away, programming logic is the same in all languages : conditions, iterations, jumps, values ... from basic to asm, C put's them close enough to machine level to learn something about the hardware while they're at it, time is money my friend, use it wisely

    --
    beware he who denies you access to information for in his mind, he already deems himself to be your master (SMAC-ish)
  466. A fun problem by Keynan · · Score: 1

    I enjoyed problem solving in general. One of my favorites is still Towers of Hanoi. Mostly because it seems really hard to find the algorithm until you understand recursion. Then you get something really eloquent.
    I also recommend teaching in Scala for reasons that should be obvious.