Want to read Slashdot from your mobile device? Point it at m.slashdot.org and keep reading!

 



Forgot your password?
typodupeerror
×
Education

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

firthisaword writes "I will be teaching an enrichment programming course to 11-14 year old gifted children in the Spring. It is meant as an introduction to very basic programming paradigms (conditions, variables, loops, etc.), but the kids will invariably have a mix of experience in dealing with computers and programming. The question: Which programming language would be best for starting these kids off on? I am tempted by QBasic which I remember from my early days — it is straightforward and fast, if antiquated and barely supported under XP. Others have suggested Pascal which was conceived as an instructional pseudocode language. Does anyone have experience in that age range? Anything you would recommend? And as a P.S: Out of the innumerable little puzzles/programs/tasks that novice programmers get introduced to such as Fibonacci numbers, primes or binary calculators, which was the most fun and which one taught you the most?" A few years ago, a reader asked a similar but more general question, and several questions have focused on how to introduce kids to programming. Would you do anything different in teaching kids identified as academically advanced?
This discussion has been archived. No new comments can be posted.

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

Comments Filter:
  • Lua? (Score:5, Interesting)

    by slime73 ( 1083393 ) on Wednesday December 10, 2008 @07:43PM (#26067751)
    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. :)
  • Look at POV-Ray. (Score:5, Interesting)

    by Gavin Scott ( 15916 ) * on Wednesday December 10, 2008 @07:46PM (#26067789)

    Consider something like POV-Ray [povray.org], 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.

  • Re:Assembly (Score:3, Interesting)

    by DrLang21 ( 900992 ) on Wednesday December 10, 2008 @07:50PM (#26067845)
    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).
  • My best shot (Score:4, Interesting)

    by 77Punker ( 673758 ) <spencr04 @ h i g h p o i n t.edu> on Wednesday December 10, 2008 @07:51PM (#26067853)

    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?

  • by Zouden ( 232738 ) on Wednesday December 10, 2008 @08:01PM (#26067995)

    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.

  • Lojban (Score:2, Interesting)

    by Sybert42 ( 1309493 ) * on Wednesday December 10, 2008 @08:03PM (#26068019) Journal

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

  • Project Euler (Score:3, Interesting)

    by MozeeToby ( 1163751 ) on Wednesday December 10, 2008 @08:07PM (#26068057)

    For different challenges you could put them to, I would recommend http://projecteuler.net/ [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.

  • Visual Basic (Score:4, Interesting)

    by tonyray ( 215820 ) on Wednesday December 10, 2008 @08:11PM (#26068105)

    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.

  • Re:Lego Mindstorm (Score:3, Interesting)

    by Mista2 ( 1093071 ) on Wednesday December 10, 2008 @08:12PM (#26068123)

    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)

  • by FreshKarma ( 1333201 ) <magebp@gmail. c o m> on Wednesday December 10, 2008 @08:13PM (#26068131)

    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.

  • by dsginter ( 104154 ) on Wednesday December 10, 2008 @08:13PM (#26068133)

    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 [sciam.com] and related words.

    A good read, if nothing else.

  • by ion.simon.c ( 1183967 ) on Wednesday December 10, 2008 @08:27PM (#26068305)

    *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

  • Re:Assembly (Score:2, Interesting)

    by Anonymous Coward on Wednesday December 10, 2008 @08:28PM (#26068315)

    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.

  • Re:PHP? (Score:4, Interesting)

    by moderatorrater ( 1095745 ) on Wednesday December 10, 2008 @08:31PM (#26068345)
    4x the lines, and the only line that's easily understood on day 1 is the line you'd have in a procedural language.
  • by porcupine8 ( 816071 ) on Wednesday December 10, 2008 @09:12PM (#26068755) Journal
    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 [accelerati...titute.org].
  • Re:PHP? (Score:5, Interesting)

    by Anonymous Coward on Wednesday December 10, 2008 @09:12PM (#26068763)

    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.

  • Re:TI-85 (Score:1, Interesting)

    by Anonymous Coward on Wednesday December 10, 2008 @09:28PM (#26068947)

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

  • Re:Assembly (Score:3, Interesting)

    by Phydeaux314 ( 866996 ) on Wednesday December 10, 2008 @09:33PM (#26068999)
    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.
  • Re:PHP? (Score:2, Interesting)

    by mR.bRiGhTsId3 ( 1196765 ) on Wednesday December 10, 2008 @09:35PM (#26069011)
    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.
  • I started then (Score:1, Interesting)

    by Anonymous Coward on Wednesday December 10, 2008 @09:47PM (#26069159)

    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.

  • Re:PHP? (Score:4, Interesting)

    by dgatwood ( 11270 ) on Wednesday December 10, 2008 @09:51PM (#26069203) Homepage Journal

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

  • Re:Lego Mindstorm (Score:4, Interesting)

    by mothlos ( 832302 ) on Wednesday December 10, 2008 @09:59PM (#26069293)

    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.

  • LISP (Score:1, Interesting)

    by Anonymous Coward on Wednesday December 10, 2008 @10:16PM (#26069445)

    check this article out:

    http://www.trollope.org/scheme.html

  • by Arkaine101 ( 591667 ) on Wednesday December 10, 2008 @10:20PM (#26069481)

    RAPTOR Flowchart Interpreter

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

    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.

  • by stupidbob307 ( 1428887 ) on Wednesday December 10, 2008 @10:49PM (#26069715)

    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.

  • Re:PostScript (Score:3, Interesting)

    by Kent Recal ( 714863 ) on Wednesday December 10, 2008 @10:49PM (#26069717)

    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?

  • by I_want_information ( 1413105 ) on Wednesday December 10, 2008 @11:02PM (#26069835)
    Revolution [runrev.com] 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!
  • Re:PHP? (Score:3, Interesting)

    by Firehed ( 942385 ) on Wednesday December 10, 2008 @11:05PM (#26069853) Homepage

    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.

  • FreeBasic? (Score:2, Interesting)

    by isaacwaller ( 1428897 ) on Wednesday December 10, 2008 @11:08PM (#26069879)
    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/ [isaacwaller.com]
  • Re:wikipedia (Score:1, Interesting)

    by Anonymous Coward on Wednesday December 10, 2008 @11:29PM (#26070089)

    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.

  • Kid's Choice (Score:2, Interesting)

    by unix guy ( 163468 ) on Wednesday December 10, 2008 @11:43PM (#26070265) Homepage

    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.

  • Re:PHP? (Score:2, Interesting)

    by papna ( 1242200 ) on Thursday December 11, 2008 @12:31AM (#26070675)

    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.

  • Re:PHP? (Score:3, Interesting)

    by Red Alastor ( 742410 ) on Thursday December 11, 2008 @04:29AM (#26072083)

    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?

  • Re:PHP? (Score:2, Interesting)

    by kaens ( 639772 ) on Thursday December 11, 2008 @04:36AM (#26072133)

    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.

  • Scheme (Score:1, Interesting)

    by Anonymous Coward on Thursday December 11, 2008 @06:16AM (#26072663)

    Ironically I read this just this morning: http://www.trollope.org/scheme.html

  • VB YES (Score:3, Interesting)

    by anorlunda ( 311253 ) on Thursday December 11, 2008 @10:55AM (#26074799) Homepage

    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.

Always draw your curves, then plot your reading.

Working...