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?
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. :)
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.
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?
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"
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.
*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
4x the lines, and the only line that's easily understood on day 1 is the line you'd have in a procedural language.
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.
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.
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.
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.