Announcing: Slashdot Deals - Explore geek apps, games, gadgets and more. (what is this?)

Thank you!

We are sorry to see you leave - Beta is different and we value the time you took to try it out. Before you decide to go, please take a look at some value-adds for Beta and learn more about it. Thank you for reading Slashdot, and for making the site better!

Teaching Primary School Students Programming?

Cliff posted more than 8 years ago | from the toddlers-as-coders dept.


NotesSensei asks: "Recently I was teasing the teacher who runs the computer club in my sons' primary school: 'You teach the kids only how to use software but not how to make software.' Today I got an email: 'OK, you're in: teach them programming.' Now I wonder what language should I pick? My first lesson will be the board game c-jump, but after that? The contestants are: Kids programming language KPL (ab VB.net derivate; Java using BlueJ; Greenfoot (and the BlueJ); and HTML. Does it sound like I'm on the right track or should I try something completely different? We are looking at primary 3-5 (that's 10-13 in this part of the world). Where can I find inspiration for the curriculum?"

Sorry! There are no comments related to the filter you selected.

Scheme? *ducks* (4, Interesting)

AslanTheMentat (896280) | more than 8 years ago | (#15986701)

Some may argue (and probably will) but I have always found Scheme to be an interesting language to lets kids play with because of the "instant gratification" of an interpreted language's "read-eval-print" paradigm. Plus, with "The Little Schemer", which presents things in a very logical, pedogogical way, which is well suited to clever children.

The Little Schemer [neu.edu]
Just a thought...

Re:Scheme? *ducks* (1)

Sigma 7 (266129) | more than 7 years ago | (#15986917)

Some may argue (and probably will) but I have always found Scheme to be an interesting language to lets kids play with because of the "instant gratification" of an interpreted language's "read-eval-print" paradigm.

That's a feature of the interpreter being used, not a feature of the language.

In any case, teaching a programming language requires learning it beforehand in order to understand the concepts of the language. There was an IFComp entry called "Lists and Lists" that provides the basics on how to do anything serious about the language.

The game itself might actually be difficult (without using the hint system). While I could do everything but the final problem (the pocket function), I still have a bit of trouble debugging those programs. This means that it may actually be difficult to assist the students to find out what's going wrong (although the in-game editor isn't the best, you probably want an external editor.)

Re:Scheme? *ducks* (1)

rolfwind (528248) | more than 7 years ago | (#15988195)

That's a feature of the interpreter being used, not a feature of the language.

But almost all lisps have read-eval-print, it's practically one of its defining features.

Re:Scheme? *ducks* (4, Insightful)

Nicolay77 (258497) | more than 7 years ago | (#15986946)

No no no, don't *duck*. You should be proud of your suggestion.

Scheme is a beautiful language and for children and math and physics people, is easier to understand than traditional C syntax-based languages.

In fact, the main benefit of using a language from the lisp family is that it makes you a better programmer for the rest of your life, no matter what language you use in your job.

In a related note, I postulate LOGO, because that's what I learned when I was a child and it really helped me to grok programming. Beautiful programming.

Re:Scheme? *ducks* (3, Informative)

rolfwind (528248) | more than 7 years ago | (#15987190)

Yes, the read-eval-loop of lisps are great - in fact many advanced programmers say it boosts their productivity once they get into it (wish I could find the ML of the Crash Bandicoot team again...)

But how about Logo Programming language?

http://en.wikipedia.org/wiki/Logo_programming_lang uage [wikipedia.org]

Another lisp dialect that is very easy for the kids. I find the 3 choices of the submitter (not the parent) a little too restrictive - and the limited experience I have with VB taught me it's absolutely horrible as a programming language. Variable settings I specified to be done wasn't because of some arcane rule or something else. Beginning programming languages should be as straightforward as possible.

the turtle (0)

Anonymous Coward | more than 8 years ago | (#15986707)

Have the kids make the turtle move around the screen.

Re:the turtle (1)

ATMD (986401) | more than 8 years ago | (#15986744)

That's fun, but limited.

Kids'll become bored after they've exhasted the options of the various regular polyhedrons you can make with a "repeat" instruction, and only the mega-geeky will have the patience needed to plug in the instructions for something that actually looks interesting.

Then again, if you can buy up a lot (a LOT) of paper and plaster the school hall with it... I think one of those real-life "turtles" (with a pen in the middle) would be a lot more fun!

Re:the turtle (1)

larry bagina (561269) | more than 8 years ago | (#15986878)

if you look past the turtle and graphics, logo is similar to lisp or scheme, and just as powerful. The UCB logo [berkeley.edu] books demonstrate a pascal compiler written in logo, IIRC.

Re:the turtle (2, Informative)

MBCook (132727) | more than 8 years ago | (#15986895)

Logo is another excellent suggestion. It has many basic control structures (like FOR loops) and is also very visual (which is good). With a few simple commands it's easy to make geometric shapes, snowflakes, or just color the screen with a neat pattern. For a plus, you could have them do assignments like draw a square, draw the letter "R", draw your name, draw a house, whatever.

For ease of results, Logo is probably the best suggestion I've seen yet.

Of course it's not a general purpose language (like Python, which I suggested in another comment). But it will get the kids making little programs fast that they get to control and they can make do what they want easily.

Re:the turtle (0)

Anonymous Coward | more than 7 years ago | (#15988430)

Note that Python has a turtle module, so you can do turtle graphics using python. This might be a good way to go for young kids.

Logo(the turtle) (1)

WilliamSChips (793741) | more than 7 years ago | (#15987421)

I agree. Logo is a great language for young programmers.

HyperCard forever! (1)

ATMD (986401) | more than 8 years ago | (#15986718)

I inherited my aunt's old Mac SE when I was six (she was moving to the US and couldn't take it with her), and several years later, (maybe I was about 10 or so?), while rooting through a load of the 800kb floppies that came with it, I came across HyperCard. It had no manuals, but it came with several example programs ("stacks") - and these were enough for me to pick up the language pretty much in full.

I booted the machine again the other week and it amazes me how much of it I picked up without any instruction at all.

Anyway, unless you can get hold of a load of classic Macs from eBay and load HC onto them, I suggest a modern language that's similar - Lingo. It comes with Macromedia's Director (or at least it did two years ago - haven't used it since I switched to Linux). Like HyperCard, it has a near-English syntax that's a cinch to pick up. I think you can also get an education version, presumably at a lower price.

Alternatively, have a look at Lego's Mindstorms kits. Fully programmable, using a visual (flow-chart bassed) lanuage.

I've tried both, and loved them.

Re:HyperCard forever! (1)

emudoug42 (977380) | more than 8 years ago | (#15986772)

oh god no, stay away from director. way too many "undocumented features" and not enough "not-terribly buggy interface". hypercard, it is not. try for flash, perhaps, if you want this approach. much better progam, IMO.

Re:HyperCard forever! (2, Insightful)

daeg (828071) | more than 8 years ago | (#15986837)

Stay away from any Macromedia or Adobe product. They make fine programs but I would think such complicated and, frankly, unpredictable user interfaces would just confuse the poor students.

Re:HyperCard forever! (1)

MBCook (132727) | more than 8 years ago | (#15986798)

I'd second this. I cut my teeth on Hypercard. You could make graphical programs trivially, and it was a fantastic program. It had some problems by the time I used it (System 7) such as it was only B&W and adding color made the stack uneditable.

What would I teach them today? That's a tough one. I wouldn't do VB (that's a nightmare, plus the IDE is complex). I'd say Python.

My suggestion would be to get them started so it feels like they are doing something. Write the shell to a program or a game (checkers? Whatever). Have it handle all the logic of making the moves and updating the state and such, as well as printing out the board and asking/checking for moves. Then write a stub function to do the logic. They can come up with their ideas on how to play, and fill in that function (using your provided functions). Then they have a working program that they can change. You could also write a little less and teach them how to print out the board and get input and validate it (those can be walk-though lessons).

Checkers may be a bit complex, but that's the kind of idea I'm talking about. Something where it's conceptually simple and they can notice that they made a difference in a piece of software. It could be the logic on what to do in a poker hand, blackjack, which card to play in Uno, whatever.

Unless the kids are interested on their own, basic programming lessons (this is a loop, today we'll print the numbers 1 to 5) probably won't go over to well. You'll have to touch on that but giving them something they can get their feet wet in first would be my idea. Once that happens, if this continues you could walk them through writing EVERYTHING on their next (albeit simpler) program.

Bonus points if it is something where you can make their algorithms play against each-other. Go look at POTM [dinsights.com] and some of their contests. If you supplied everything but the decision logic then many of those would work well for the students, but specifically the game-like ones.

As for Python, I recommend it for a few reasons. It's free, it has an interactive command line, and I think it's "simple". By that I mean that there aren't a lot of superfluous words (Java can be kind of wordy). Python runs on any platform. It's syntax is clean, and the indenting makes it easy to follow (as well as teaching good habits).

I'd worry about the VB IDE being intimidating (as well as I'm not a VB fan). Java is nice but I think it's a little complex for a starting language for kids. BASIC is too antiquated, Python is almost as simple but much more powerful.

But I second the parent's post. HyperCard was perfect. It's a real shame it's gone. I wonder if I would have been interested in computers as much without it. I later tried BASIC (which of course got me nowhere). It took me years and years and years and years before I got to know enough that I could start writing things like I used to in Hypercard (due to the complexities of GUI programming).

Re:HyperCard forever! (1)

ATMD (986401) | more than 7 years ago | (#15986901)

I'm interested in how you'd handle graphics in a Python program. Forgive my ignorance, (I've never tried it), but is it not the same type of language as PHP, except a bit more generalised? If it has simple-to-use GUI bindings then that's prefect, but as a starting language I'd suggest something more visual - HyperCard was great partly because to draw something, you simply used the lanuage to take control of the tools you'd use anyway. It couldn't have been more intuitive. It seems to me that for a lanuage like Python, (great as it may be), graphics are more of an add-on than something that's fully integrated - and graphics are dead important.

A game is a fantastic idea though - just as long as they're up to coding it. Competition is good too, but you need to bear in mind that some kids'll want to go off and do their own thing rather than write something to the specifications laid down by the teacher.
MindStorms is good for that - I went to a workshop a few years back, and a lot of it was "who can build the fastest/strongest/cleverest robot to do such-and-such?"

Re:HyperCard forever! (1)

Billly Gates (198444) | more than 7 years ago | (#15987043)

Hypercard! May it rest in peace sigh.

I wish Jobs would port it to OSX but Apple once again had the best early concepts of what was to come but never could market it outside their camp.

Re:HyperCard forever! (1)

MBCook (132727) | more than 7 years ago | (#15987048)

Python is a true scripting language. While PHP was designed for the web ("PHP Hypertext Processor" as it is now), Python does "everything". For a GUI it has all the usual bindings available (QT, GTK, Win32, etc). Getting students to program a GUI is going to be very tough unless you use VB, as sad as that fact is. GUI programming is just very tough. Hypercard is about as easy as I've ever seen it. It's scripting language (Hypertalk) was also very English like. It's really too bad Hypercard is basically out of the question (feasibility wise). I've used one of the Hypercard wannabes (called Toolbook) and it was just TERRIBLE. I frankly don't hold any hope you'll find a good one. Plus they will be obscure and probably cost money (as opposed to things like Logo and Python that you can get for free so students can play at home).

I understand why you say graphics are dead important. For the game suggestion you could write all the graphics parts (like I suggested writing all the other non-logic parts). That said, for most games (like the checkers example, or card games) a text interface would be easy and work very well (though its not sexy).

For graphics, what I said above in reply to someone else is probably one of the best suggestions... Logo. It's easy to program, but pure graphics. That said, it's obviously a different animal (as is Mindstorms, which would also a good idea). But with logo you could do everything from letting this experiment to letting them try for something you suggest (draw your name, draw a house, whatever).

There was a something I remember from a few years ago that was designed to make it easy to learn programming that I can remember, but I don't remember the name. It was all in Java and let you make little robots to fight each other (simulated on the computer). It had all the stuff you needed (to find out about your environment, move, fire, etc) and all you had to do was write the logic (that's kind of where my idea came from). Then you could watch your robot fight others. That kind of thing would work well, but I doubt it would appeal to the girls.

Re:HyperCard forever! (0)

Anonymous Coward | more than 7 years ago | (#15987528)

Sounds like Apple Script.

Karel (3, Informative)

tansey (238786) | more than 8 years ago | (#15986721)

The freshmen level OOP class that I took taught us by using BlueJ and Karel [pace.edu] . I loved it, thought it was fun and easy to use, and really helped teach solid OO concepts. I recommend it highly.

Re:Karel (1)

Lehk228 (705449) | more than 8 years ago | (#15986771)

i'm going to second the bit on using karel

karel is an excellent way to teach programming without having to go deep into the math parts of programming that would be over the average elementary student's head

Re:Karel (1)

Amazing Quantum Man (458715) | more than 7 years ago | (#15986919)

They started us on Karel back at UCSC in '82.

We disguised a landmine as a beeper and blew him up.

Re:Karel (1)

spongebue (925835) | more than 7 years ago | (#15988263)

Ditto. I took a community college class, and they had us learn Karel, C, and Karel++ (Karel as an object-oriented language). Karel is similar to Pascal, and Karel++ is similar to JavaScript. For younger kids like this, it will do an excellent job of teaching how to use conditionals and loops, as well as commands and functions. The one thing it lacks is the ability to work with numbers (though Karel++ can do specific numbers of iterations) Plus, the idea of using robots will probably be interesting to the kinds of kids that would be interested in this. Also, I would definitely not recommend C or Java or anything like that, I think that it would be very difficult for them to grasp the ideas of different types of variables (int, long, float, char, etc.)

Amazon.com book link [amazon.com] I'll admit that you don't get much book for the money, but they should be pretty cheap used.

BASIC? (1)

iamhassi (659463) | more than 8 years ago | (#15986722)

My first programming language was BASIC. There's just something simple about PRINT, GOTO, END that made sense as a child.

Visual Basic might not be a bad idea either, least it's a language they can build on and easily use in Windows if they decide to pursue programming in the future.

Re:BASIC? (1)

AuMatar (183847) | more than 8 years ago | (#15986815)

I'll second some form of basic. I do think I'd avoid visual basic though- it requires an extra step in thinking (the event model). Some modern form of QBASIC would be perfect.

Re:BASIC? (1)

dosius (230542) | more than 7 years ago | (#15986999)

QBASIC...Yeah. It's a cross between C/Pascal and BASIC in some respects. You can program it like traditional BASIC too. Nice IDE besides. I wish there were an open-source version that ran on the same config (8086 with 512K RAM, DOS 2.1) as QBasic, but my own attempts to code even something as simple as MBasic failed miserably. :/


Re:BASIC? (1)

Deathanatos (811514) | more than 8 years ago | (#15986852)

I'm a C programmer, but I started in BASIC. I second BASIC, although I'm one of the "Real Programmers don't use BASIC" type people.

First, BASIC is easy. The only downside is that it lacks some of the more advanced programming concepts - mostly anything that involves a pointer. My worry is that the kids are a tad young: I didn't really start until fifth grade, and it took a long time for me to get to where I am now. (Of course, I didn't have any classes available in middle/high school, which didn't help.) However, once these kids get to a real math class (Algebra, Calculus, etc.), they'll probably be required to get a TI-83+ or similar, and these are programmable with "TI-BASIC". Some highschool kids can pick it up on their own, but while they can understand the language, they lack the theory of how programming works.

I also worry about the math - I didn't know PEMDAS (parenthesis, exponents, multiply, etc.) until sixth grade. (Of course, I was in a regular public school up until then too.) Exponents were easy to pick up, but programming is math like no tomorrow. Different bases, binary operations (AND OR XOR), an order of operations that makes the one taught by high school look like child's play.

Of course, some people stress that programming and "which language" need to be set apart - the concepts should be taught such that another language can be easily learned.

KPL looks interesting, but I know nothing about it. c-jump also looks, er, quite "interesting". HTML is a no - HTML is not a programming language. Teach a language that won't hinder learning (C/C++ is probably not 3-5 friendly), and that'll let you teach programming. Also, teach them about the computer too - don't let them live under the assumption that Windows is the only thing that a PC runs. Show them *nix, Mac, etc. And don't stop at the PC - calculators can be programmed, robots can be programmed, etc.

At any rate, there's a lot to teach! It took me several years to learn what I know - and I'm still counting. However, I regret having no opportunity to have had a mentor - I have no idea what I lack, nor what holes may exist in my knowledge. Classes are good for that. A programming class is certainly a welcomed improvement over the usual "this is how to use MS Word" class (what about Lotus? OpenOffice?). Good luck with such an undertaking!

Re:BASIC? (0)

Frequency Domain (601421) | more than 7 years ago | (#15986936)

Please, not BASIC! After more than 20 years of teaching programming at the university level, I strongly agree with Dijkstra's comment [virginia.edu] :
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.

Re:BASIC? (1)

chadliness (965871) | more than 7 years ago | (#15987645)

Any concrete reasons? I learned on BASIC as did many others and I have no problems programming in a variety of languages now.

Re:BASIC? (2, Insightful)

Dadoo (899435) | more than 7 years ago | (#15987830)

I can't believe people are modding you up for that comment. At least suggest an alternative, rather than just complaining.

Personally, I have to agree with the people who are suggesting BASIC. To start with, it's easy. One advantage that no one else has mentioned, yet, is that it requires less thought about the intricacies of programming. One of the hardest things beginning programmers have to deal with is the whole "the computer does what you tell it to do, not what you want it to do". Why is it necessary to throw in stuff like character vs integer vs floating point vs data structures on top of that? The good thing about BASIC is that, because there are only two data types, numeric and string, there's less to worry about - as it should be. That's why the "B" stands for "beginner".

Over the years, I've argued with a lot of people who think Pascal should be everyone's first language. I will never understand that, even if I live to be 1000.

Re:BASIC? (1)

SirSlud (67381) | more than 7 years ago | (#15987865)

I think you're generalizing, as is the poster. Any language that enhances some level of procedual comfort and focuses on math is good.

My biggest complaint about most programmers that I've worked for is that they're so about the language and not enough about the actual math/calc and the inherent strengths and weaknesses of a given approach to design.

If anything, my suggestion would be any language, but make sure you're teaching them programming and math, not "this is BASIC" or "this is LOGO". Anything you can do to de-stress any real commitment to a syntax, language type, and API is going to impart far more important values. Teach them what a hammer is, but make sure they know that not everything in programming is a nail.

Re:BASIC? (1)

ATMD (986401) | more than 7 years ago | (#15987016)

I had a go at BASIC when I was small, on a friend's old greenscale Amstrad machine. Seems fun to play around in, but I think it'd be more responsible to teach them something closer to a more modern, widespread language...

Also, effortless graphics handling is so very important. Can BASIC do that? I'm talking sprites here, not just drawing to the screen.

I find BASIC confusing (1)

Asmor (775910) | more than 7 years ago | (#15987428)

Maybe I'm just weird, but I find BASIC very, very confusing. I look at BASIC code and it's like I can't even grok it. I can't see the program's layout or flow or anything...

I think it's the relative lack of parens/brackets/etc. I don't like the whole "similar to English" thing when it comes to programming.

Re:BASIC? (1)

hedwards (940851) | more than 7 years ago | (#15987523)

I agree, I started out on BASIC. I really hated it because of the obsessive line numbering, but one of my friends at the time was quite a bit better.

I think if I had any formal guidance it would have been a much easier task. The key at that age is primarily getting them to think about it.

Python (0)

Anonymous Coward | more than 8 years ago | (#15986735)

My almost reflexive reaction is to suggest Python. This is because it is a proper, well-designed programming language that is also compact. It is free and widely used [python.org] , but more importantly it is easy to make it do stuff. The Python interpreter usually runs programs from files, but you can start it in a terminal mode in which you can enter programs and simple expressions. Demonstrate programming to your class live, by entering fragments of code, explaining how they work and showing what they do. There is no extra stuff to explain, no compiler, no headers, no IDE, no mysterious commands. So you can concentrate on the code.

Kid's Programming Languages (5, Funny)

justanyone (308934) | more than 8 years ago | (#15986746)

Unless they're vaccinated, don't give them MUMPS [] ; if you do find a nice Doctor (Like Dr. Pascal [gutenberg.org] ), 'cuz Pascal [trieste.it] was fun for me in College.

If they like noises, Squeak [gatech.edu] is good, but the cogently verbiaged might prefer SmallTalk [lesser-software.com] in a group. For those speech impaired, knowing there's other people who Lisp [alu.org] would be good.

The mean ones will abuse Snobol [fit.edu] in Winter

The A.D.D. kids will probably like the feeling of Euphoria [rapideuphoria.com] they get from their first

Of course, you could teach them a very nice language with a horrible name, Brainfuck [muppetlabs.com] .

Or, you could just look Here [jvoegele.com] for a comparison of popular programming languages.

Re:Kid's Programming Languages (0)

Anonymous Coward | more than 7 years ago | (#15987077)

You missed puns with Python, Ruby, ASP, Java, C & C++ and Perl

Who names these programming languanges?

Re:Kid's Programming Languages (2, Insightful)

dcapel (913969) | more than 7 years ago | (#15987877)

I think its clear [pbm.com] assembly [slashdot.org] is the best [slashdot.org] place [slashdot.org] to start learning [wikipedia.org] to program [smith.edu] .

HTML (2, Insightful)

Chasa (998060) | more than 8 years ago | (#15986751)

I know my little cousins in that age group would love to make their own "pretty" web-pages. They could each make their own page linked from a page about the class.

Hell NO! (1, Insightful)

Anonymous Coward | more than 7 years ago | (#15987107)

They will be interested and it might help them to stay focussed, but it's NOT A PROGRAMMING LANGUAGE! (Sorry if it sounds pedantic, I'm just sick and tired of the "I can program in HTML" types). It's just markup. Various tags and some styling stuff. It doesn't teach anything programming related (javascript aside). And about CSS? Good luck trying to get them to understand the box model (we're talking about 10-13yo kids here). To get the results most people want, they'd have to learn a lot more than what you'll be able to teach in so little time, so it might be quite deceiving to them too (markup - including forms, css & box model, at least one server side tech, javascript basics, etc - if not flash too)

Instead of teaching them basic loops, variables, constants, conditionnal statements, basic string/math ops, subroutines and such, you want to teach them tags for making their text bold and such? (and then try to explain doctypes/DTDs and such)

Learning to program helps to understand how computers work. I think it's very useful. Whereas HTML... Most of 'em will likely end up using a wysiwyg editor anyways if they ever have to write some markup later on (dreamweaver et al) - unless they become web devs... Anyone can pickup simple markup in no time at all regardless.

Re:HTML (1)

4D6963 (933028) | more than 7 years ago | (#15988446)

I agree with the other poster, HTML isn't a good idea, it's not a programming language, but most of all, it's not fun. I remember back when I was 13, programming a simple text game (the one where you have to guess a value by dichotomy) in BASIC on my V-Tech Genius 2000, now that was fun, because that was real game programming, I mean you could actually play with it.

You can't play with HTML, it's pretty static, and then it has actually nothing to do with programming, so it's off-topic.

What about a snake? (4, Informative)

cjhuitt (466651) | more than 8 years ago | (#15986759)

Have you considered python [python.org] ? It has an interactive shell, which will let the basic concepts of programming come through. Also, you could take the first parts of How to Think Like a Computer Scientist [greenteapress.com] (freely available and modifiable) and adapt them to the age level. The first few lessons should be fine, although they might need expanded somewhat.

Alternately, perhaps something more graphic-oriented would be desirable. If it were still around and supported, I would suggest Apple's Hypercard [wikipedia.org] program. It appears there are some clones [wikipedia.org] out there also, although I have no idea how good they are. (The first alternative listed says it is popular with educators.)

Good luck.

Mod up... (0)

Anonymous Coward | more than 8 years ago | (#15986792)

Interactive shells are really helpful for teaching, because you get instant results. There is no complexity to confuse the matter, as there is no IDE or compiler. You can demonstrate a 1-1 relationship between every piece of code and its effects.

CeeBot (2, Informative)

muridae (966931) | more than 8 years ago | (#15986770)

http://www.ceebot.com/ceebot/index-e.php [ceebot.com] I downloaded the demo a while back, and found it amusing and actually pretty usable. If I remember correctly, even the demo supported simple classes and structs and I think the classes even allowed overloading operators. The basic concept is to allow students to write simple programs that make a little robot do stuff. Take a look at it, it may be too pricey for the school but their links section has some other resources that might also be useful, like CodeRally http://www.alphaworks.ibm.com/tech/coderally [ibm.com] .

Pascal (1)

ToasterofDOOM (878240) | more than 8 years ago | (#15986781)

At my school we have Visual Studio and all manner of modern, high tech tools at our disposal, but we still use turbo Pascal to teach programming, and I love it. It truly is a marvelous language, and while easy, can do anything a more complicated laguage can and shows all the steps of real edit-compile-etc programming. Perhaps a modern version of pascal would be a good choice, I would pick Pascal along with a good instructional book. The best part is that pascal is structured so as long as they follow the rules it is difficult for them to write crappy code. w00t Pascal!

Re:Pascal (1)

wolverine1999 (126497) | more than 7 years ago | (#15988390)


I think Pascal is the best way to introduce the concepts.

Lego Mindstorms (1)

cyberbian (897119) | more than 8 years ago | (#15986783)

While it's not specifically a 'programming' environment, it's programming mechanisms illustrate the general programming concepts and it's also coupled with a great engineering robots 'toy' as well. The easy click together programming blocks allow children to approach computing from the general concepts. Each clickable block also provides 'fine tune' controls. This approach is directly analogous to oo programming. There are also methods to use java programs with the RCX bricks so that as your students advance, they will be able to increase their knowledge using the same fun toy tools.

Re:Lego Mindstorms (1)

hAckz0r (989977) | more than 7 years ago | (#15987587)

What, and unsuported language? Its a great idea as far as teaching inovation, bu there is no future unless someone else comes up with an open source version of mindstormes, since its been discontinued by lego. What a shame though...

Of course it's a good idea (1)

brak (18623) | more than 8 years ago | (#15986788)

The year, 1981.

The place, suburbs of Minneapolis, MN.

I had a TI99/4A given to me by my parents for Christmas. I was 9 and in 3rd grade. I got a subscription to HCM (Home Computer Magazine) and initially had to get my mom to type in the code at the back since she could type so much faster.
I would modify the programs, save them to tape, etc.

In school, we had an Apple2 lab with Logo. People played Oregon Trail, had Math drills and such, but Logo was the shit.

By the time my friends and I hit Junior high, Quick BASIC was no big deal. In high school, we did Pascal, C and such.

Given that all of what I'm talking about above can be done on one of those $100 laptops, I don't see why people wouldn't do it.

Applesoft BASIC (1)

Saxophonist (937341) | more than 8 years ago | (#15986789)

OK, you might not have the machines to pull this one off (though you can get them for next to nothing if you know where to look, or perhaps try an emulator). One nice thing about this idiom is the ease with which the low-res graphics can be manipulated; the kids can draw some crude pictures.

I'm serious, by the way. It's really easy to learn a few fundamental commands in Applesoft. I remember doing this in a class in probably fifth grade, and everyone seemed to like it. (I already knew how to program in the language, so I didn't necessarily learn much.) No compiler; just type RUN and you're good to go.

too young for abstract thought (0)

Anonymous Coward | more than 8 years ago | (#15986796)

I think you will probably stuggle to teach children of that age programming. Abstract and executive thought does not develop (on average) until age 12-13 (if at all). Of course there will be exceptions to this, but will not be the norm.

Your efforts are probably better directed at 13-14 year olds. You will probably get more satisfying results. After this high level thinking has developed and they have a grasp of algebra as a basis of programming.

Re:too young for abstract thought (3, Interesting)

AuMatar (183847) | more than 8 years ago | (#15986829)

Bullshit. People give kids too little credit. First off, most of them know basic algebra already- they've been solving math questions with x in the and solving for x for years. Secondly, basic programming doesn't require abstract thought- it requires you to understand boolean logic and arithmetic. Most kids can handle that by the time they're done with first grade, if not sooner.

Re:too young for abstract thought (1, Funny)

Anonymous Coward | more than 8 years ago | (#15986860)

From: http://dictionary.reference.com/search?q=abstract+ thought&x=0&y=0 [reference.com]

abstract thought

n : thinking that is coherent and logical [syn: reasoning, logical thinking]

Re:too young for abstract thought (1, Insightful)

Anonymous Coward | more than 7 years ago | (#15987229)

The parent is exactly correct. Children at that age do not typically have a real grasp of abstract thought. Most concepts, be it in algebra, language, or science are taught very concretely, even egocentrically. The building of a terrarium, the writing about the actual event like summer vacation, the using of specific numbers of specific physical objects. Many students will not understand that a variable as an abstract concept until middle high school or college, even if they can go through the motions of using x. As soon as bob is used instead, all hell breaks loose.

With modern languages the amount of abstraction has significantly decrease, which is why we have ever larger numbers of people who can perform the task. We also have methods of scaffolding the abstract concepts so that younger children can understand them. This does not mean that the younger children understand the concept, merely that they a basis for understanding that helps facilitate future learning. In a sense, this is what happened to revolutionize the teaching of music and lead to ever younger musicians of top quality.

So yes the ability of the young is often underrated. OTOH, teaching is a very sensitive to developmental stages, and not use developmentally appropriate methods is asking for disaster.

Re:too young for abstract thought (1)

Red Alastor (742410) | more than 7 years ago | (#15987800)

Bullshit. People give kids too little credit. First off, most of them know basic algebra already- they've been solving math questions with x in the and solving for x for years. Secondly, basic programming doesn't require abstract thought- it requires you to understand boolean logic and arithmetic. Most kids can handle that by the time they're done with first grade, if not sooner.

I didn't learn any algebra until what would be grade 7 in the US (12 years old, I guess ?) but when I was 11, I taught myself BASIC even if people said it was "too complicated". And it wasn't Visual Basic but plain ol' Basic with line numbers. I read from a book made for kids though. So I support kids not being given credit.

I also think adults have more learning problems. When I discovered QBasic as a teen, one of my first thoughts was "cool, no line numbers and gotos !".

Lua (1)

obarel (670863) | more than 8 years ago | (#15986804)

Sweet, simple and beautiful.

Comments (1)

Sigma 7 (266129) | more than 8 years ago | (#15986818)

Now I wonder what language should I pick?

Are you teaching a regular stream of students or the "gifted" stream? Also, which grade level are you teaching? The answers differ depending on what you want to do.

While you did mention the answer in the posting, it's still a bit vague. 10-13 years is a large age group - 10 year olds may minimally grasp the concept, while 13 year olds may need something a bit more complex.

My first lesson will be the board game c-jump, but after that?

You can do something much cheaper - draw a flowchart. The computer thinks just like that - it mechanically goes to one instruction and executes it, and goes along based on what comes next.

While C-Jump may make the learning portion fun, you might want to consider LOGO instead - the users can provide commands, and get an instant result on screen (where the turtle draws a line.)

The contestants are: Kids programming language KPL (ab VB.net derivate; Java using BlueJ; Greenfoot (and the BlueJ); and HTML. Does it sound like I'm on the right track or should I try something completely different?

FYI, HTML is a typesetting language - not a programming language. No matter how hard you try, you cannot parse an HTML document using HTML. (If you come up with a webpage that does that, then you are embedding a program that is Javascript or some other document embeded programming language.) In addition, if you don't teach HTML properly, you'll have pages that use tons of   as opposed to tables to align text (or the now-preferred alignment method.)

I won't comment on the three languages, but make sure you review the languages beforehand to see how well you can learn them. There is no better way to determine which programming language is the most suitable.

HTML a typesetting language??? (1)

DrJimbo (594231) | more than 7 years ago | (#15987629)

Sigma 7 said:
FYI, HTML is a typesetting language - not a programming language.
I fully agree with you that HTML is not a programming language but it sure as heck is not a typesetting language either. It is, as its name implies, a markup language. TeX is a typesetting language and a very good one at that.

Be that as it may, I think that teaching HTML could be a good way to introduce primary school youngsters to programming. I agree that it lacks all of the charm and complexity of a real programming language, but that makes it simpler for the kids to grok and it also gives them an almost immediate graphic feedback which makes it easier to find bugs.

The biggest problem I see with teaching them HTML is that modern browsers will go a good job at displaying really messed up HTML. But this could be turned into an advantage by turning it into a game and having the kids see how far they can mess up the HTML and still get the pages to display correctly.

I speak all this languages :-) (1)

NotesSensei (997996) | more than 7 years ago | (#15988435)

I learned all of this languages. However learning programming languages comes with lower increments over time. E.g. I knew Java and VB, to get VB.NET took a few hours (excluding of course understanding the .NET framework). Of course if you jump paradigm (e.g. Basic to Lisp) you have to unlearn which is more difficult than learning. Your'e right HTML is a content rendering (I wouldn't say typesetting) / markup language. Since it's easy and can be extended with JavaScript and CSS it makes a good intro. However it lacks (until you hit JS) programming per se. The need of learning 3 languages (html, css, js) is an advantage if you want to focus on diversity.

Squeak (1, Informative)

Anonymous Coward | more than 8 years ago | (#15986822)

You might want to look into Squeak. It has the full power of an object oriented programming language, but has a morphic graphical programming language on top of it, so kids learning it can jump right in without learning the syntax, but will be exposed to it as they work with the language.

Python. (1)

pedantic bore (740196) | more than 8 years ago | (#15986840)

There are several pedagogically-suitable languages... but if you want the one that best reflects the methodologies in current use in the "real world", Python is probably the best bet. Java with the proper wrapper is also good.

Languages like Scheme, Forth, SML are interesting and cool but the ways of thinking they teach are, for better or for worse, not part of the mainstream. Better to teach good OO methodology and design.

Rail-Line. (0)

Anonymous Coward | more than 8 years ago | (#15986845)

"Teaching Primary School Students Programming?"

Here's a related question for slashdot. Why do the majority of "Ask Slashdot"s that mention "School" also mention "Programming"? Don't they teach anything else in school?

Squeak (2, Informative)

sydbarrett74 (74307) | more than 8 years ago | (#15986865)

Squeak [squeak.org] , which I believe is a Scheme derivative, is geared towards children or at least people with minimal coding facility. I would also incorporate this with HTML. Being able to grok HTML is very handy even if all you're gonna do is put a blog up on MySpace....

Re:Squeak (2, Informative)

TVmisGuided (151197) | more than 7 years ago | (#15987222)

Squeak is actually a Smalltalk [smalltalk.org] derivative.


kids programming language (2, Informative)

laktech (998064) | more than 8 years ago | (#15986870)

I would recommend that you take a look at http://www.alice.org/ [alice.org] The site pretty much speaks for it self. The development takes place inside a 3D graphic enviorment. I think kids will find this very interesting and they can instantly see their results. There is also a text book that may be purchused, however, I'm not sure about the price.

Python and Blender (2, Informative)

LetterRip (30937) | more than 8 years ago | (#15986888)

Teach them the basics of python then turn them loose in Blender 3D. They can do game scripting, it is a real language, and they can use the logic buttons for things that they don't need or want to program.

Also there is predone games of a wide variety of types that they can play with, take apart, and rebuild into their own.


Re:Python and Blender (1)

Profane MuthaFucka (574406) | more than 7 years ago | (#15986997)

That's probably the most complicated thing they could possibly do, just because of the blender interface. They should stick to something really simple. That KPL suggestion was pretty good. The old standby Logo isn't bad either.

Re:Python and Blender (1)

LetterRip (30937) | more than 7 years ago | (#15987066)

"That's probably the most complicated thing they could possibly do, just because of the blender interface. They should stick to something really simple. That KPL suggestion was pretty good. The old standby Logo isn't bad either."

The age range is 10-13, not 5-7. We have a number of individuals in the 10-13 range who have self taught themselves Blender and the game engine. If you use the Blender cheat sheet, you can learn the important parts of the interface in a few minutes. Or if in a class it can be taught relatively quickly.


Definately go with Java (1)

treak007 (985345) | more than 7 years ago | (#15986916)

I find that Java seems to be one of the easier programming langauges to learn. Not only is it very simple, but also very well documented (ala the amazingly well documented api). Also, I would definately recommened Bluej for an IDE since it is very simple to use and understand. Anything more will just confuse the kids. For the explanation part, you could describe each object kinda like a box and tell the kids that there are bits of code inside the box, and show them how they are just like any other variable.

Wrong question (1)

swillden (191260) | more than 7 years ago | (#15986948)

IMO, you're asking the wrong question. Almost any programming language will work, what you need to find is an appropriate curriculum and supporting materials. What's needed is a series of fun programming projects that start out very simple, but progress appropriately and catch and keep the kids' interest. The curriculum needs to be constructed around a specific language, so it can introduce specific language elements as needed to support the programming projects, but the language used is nearly irrelevant. Obviously, interpreted languages have advantages, "forgiving" languages may help, and it's really important to have a toolset that provides good, simple error messages so kids can understand what's wrong when they screw up the syntax, but all of that is far less important than a good, well-designed series of projects.

If you find such a curriculum, or if someone else knows of something like this, I'd really like to hear about it. A couple of my kids are mildly interested in programming, and I'd like to get them started, but I have neither the time nor, honestly, the imagination to put together a good curriculum.

Lego Mindstorms (0)

Anonymous Coward | more than 7 years ago | (#15987000)

I've had success with Lego. It was some years ago before Lego Mindstorms. Lego had a large computer controlled kit. There was a really good manual with lots of projects. There was enough stuff to make a robot arm with a grasper that could pick things off a conveyer and put them ... (hmm, can't remember that part).

There was enough challenge to keep the kids interested but not so much that they couldn't succeed.

Lego is expensive but the good news is that their patent has run out. There is now some price competition. You can also build your own sensors and motors by epoxying stuff (switches, dc motors, steppers) onto Lego blocks. The kids can start with something from the manual and extend it with home made parts. Because they are building on something that works, they never have to stray too far from their comfort zone.

The Lego project worked for all students, not just the ones who were already interested in programming. For students already interested in programming, it seems like a pretty safe bet.

justBasic (1)

Billly Gates (198444) | more than 7 years ago | (#15987008)

Mainly because its free. Schools have a strict budget and I doubt they have a few licenses for VS for VB. Java is free but I would not recommend it. I tried java without knowledge of c/c++ and had to drop the course in my freshmen year of school. After taking C++ I recieved an A for my java programming course in object oriented programming. Even a hello world program is complicated if knowledge of public and private and strange syntaxes without meaning (if your new to programming) are used.

The link is here [justbasic.com] and the help menu has homework assignments and tutorials for begineers. You can do windows based gui's and even graphics with sprites and primptives. Since its free you also can legally make cd's for your students to bring home which is cool too.

What is the goal? (1)

PinkPanther (42194) | more than 7 years ago | (#15987031)

What is your goal?

If it is to teach "introduction to instructing a computer" then one idea I used (grades 7-8) is macro programming in spreadsheets. It wasn't "programming" per se, but it did get across the concept of a "variable", some simple calculations, conditional logic and for the more advanced kids looping and subroutines/functions. I was teaching to a very mixed class, but the "gifted" kids and the "general" kids all ended up having a successful experience. I had them program simple games such as having the spreadsheet "guess a number between 1 and 10 (for the advanced, between the values of A1 and B1)", or have the spreadsheet keep track of scores in a two person number guessing game, or hangman, etc...

If "introduction to programming" (i.e. you really want to teach them to "code"), then you really ought to think about what it is you are going to have them program, then choose a suitable language. If you want them to simply print their name to the screen 10 times, then just about any language will do. But if you want them to do something interesting (and to any kid born with a PC already in the house, printing their names to the screen will bore them to tears), that "interesting" thing may dictate which language (support libraries, IDE, ...) you want to go with.

My Curriculum (2, Informative)

wynand1004 (671213) | more than 7 years ago | (#15987042)

I teach computers at an international school in Tokyo Japan. My students vary in age from grade 6 to grade 9. As you can imagine, they also vary in English language ability. Here is my curriculum:

Grade 6: Drape [christianthompson.com] - A drag and drop programming language (No longer free but you can downloa it from my homepage).

Grade 7: Game Maker [gamemaker.nl] - A more complex drag and drop programming language created by the same person who created Drape.

Grade 8: Kids Programming Language [kidsprogra...nguage.com] - A BASIC-like programming language with easy to use graphics (sprite) capabilities and built in functions such as collision detection. Note that an updated version with 3D graphics capablities will soon be released (around Sept. 2006).

Grade 9: JavaScript - I use a program called Max's HTML Beauty++ [htmlbeauty.com] for editing JavaScript and NVU [nvu.com] for web design.

I have also used Small Basic [sourceforge.net] and my own JavaScript Interactive Fiction [christianthompson.com] engine.

You can find downloads of most of these programs and some lesson plans at my homepage. [christianthompson.com]

Feel free to contact me [mailto] if you have any further questions.

BASIC, Logo, ToonTalk (3, Informative)

tverbeek (457094) | more than 7 years ago | (#15987089)

Like most geeks of a certain age, I cut my coding teeth on BASIC, which in its traditional implementations (TRS-80, Apple ][, C64) was nicely interactive, but probably too boringly textual for Kids These Days.® Don't know how the "modern" versions of it compare.

Logo [mit.edu] became available to me after I was "too advanced" for it, but certainly deserves a look as the "other" classical language for introductory programming.

I've heard some good things about Toon Talk [toontalk.com] .

Or there's always BrainFuck [muppetlabs.com] .


breakitdown (816727) | more than 7 years ago | (#15987097)

If you actually want them to be interested in what you are teaching I'd either focus on or at least start with html and css. This is relevent to 95% of the students. They already use, or soon will use Myspace, LiveJournal, XANGA, etc., so they will appreciate it from the get go.


niteice (793961) | more than 7 years ago | (#15987297)

You can teach kids HTML, but you can't teach them good design.

Check out Phrogram (1)

HairyBuffalo (869908) | more than 7 years ago | (#15987132)

http://www.phrogram.com./ [www.phrogram.com] It's actually the second version of Kid's Programming Language, will release next month, and is available as a release candidate download now. It's supposed to be as easy to use as KPL, but it adds some new stuff: compiling to EXEs, class-based programming, 3D programming with DirectX models, file I/O, and interactive debugging.

language not important (1)

fermion (181285) | more than 7 years ago | (#15987140)

I hate not answering the question ask, and frequently am annoyed when someone answers a perfectly reasonable question with a litany of why the question is wrong, but in this case I believe you are off track.

Programming, as we all know, is establishing a standard process, while allowing for certain deviations, in a directly or indirectly machine readable code. There are several layers of abstraction involve, the most obvious is the abstracting of they physical process, but one must also abstract concepts like repeatability. The student must also respect cause and effect and not, for example, attend Titanic 20 times hoping that both major characters die and in the process create a world in which the movie no longer exists, or perhaps exists with a reasonable director and competent actors. But I digress

But I digress. While this age group has the ability to recognize concrete structures, the ability to abstract those structures probably does not exist. To put this more plainly, a student might be able to understand that both sides of an equation must balance, but may not be able to do single variable algebra. Therefore the concepts of programming must be build concretely.

The game is good, but the kids have to learn process and algorithm. This is not necessarily done on the computer. Have them right how to do certain things, then see what could change and still result in a successful operation. How to we sharpen a pencil. How do we brush our teeth? Given them a map and have them find how to get from their city to another of their choosing. Their teacher probably has exact procedures. Have them write them out and discuss the rational. Any metacognitive activity for this age group will be good.

Another concern is the understanding of variable. For even high school kids the concept of a variable is problematic. Even for college kids the need for idiom t=x, x=y, y=t, is far from obvious. These problems can be surmounted, but they must be addressed.

In terms of the language, anything that minimizes the mental power needed to interface the machine will be good. At age 11 I learned to program on teletype using basic, though it was 3 more years until I understood what was actually going on. It might be fun if the language produced some nifty graphics, and the child could directly visualize the changes in code with the changes in graphic output. For instance, if a loop would produce more squares, and some parameter would change size and spacing. New language elements could be introduced to create more complex graphics. I would avoid complex APIs, and try to stick to stick with things that are native in the language. These requirements tend to point to an interpretive language. Also syntax should be short and forgiving to allow for the limitation of the children.

One last point is I do not think that worrying about a specific standard language is important. It is the concept building that is the likely objective. I mean memorizing and categorizing hundred of Dinosaurs may seem useless, but the concepts learned stay with the child long after every name is forgotten. So if the kids learns about process, and the basic elements of assignment, looppimg, and conditionals, that would be a great job done.

After this long aside, let me suggest a product. Though I am not the biggest fan of the company, The geometer's sketchpad is an interesting piece of software, and seems to have some script capability. I can't seem to find an online manual, which is one reason I do not like the company, but I believe the software does have at least some of the programming elements, and therefore can be used to teach some concepts. The school may already have it.

No, the language is important (1)

try_anything (880404) | more than 7 years ago | (#15987246)

Don't make them learn anything they can't grasp the need for. That eliminates Java, C++, and a host of other languages that impose burdens that pay off in performance, large-scale maintainability, portability, and other things that aren't of any use to the kids.

In the best case, everything they type will have meaning and value to them. Instant feedback is also a plus. That means your best bet is a dynamically typed languages with a REPL. Many other posters have suggested languages/environments with convenient access to graphics; from my own experience, I would say graphics are nice but far from essential. That's your call, though, since you know the kids better than any of us do.

Here's a suggestion [amazon.com] that may be a bit... out there. Teaching Haskell to kids might be risky, but it's guaranteed to be easier than teaching it to adults, especially experienced programmers.

Have you ever even worked with children? (1)

MarkusQ (450076) | more than 7 years ago | (#15987886)

Have you ever even worked with children? Tried to teach them anything? Have you ever watched (and listened to them) playing?

Kids hop between the abstract and the concrete, the real and the imaginary, with a dexterity that leaves most grown ups in the dust. They learn new languages, new rule sets, new abstract systems, at a rate that we can only envy. And when they learn them they retain the flexibility to think outside them when it suits them.

Your post is condescending and factually inaccurate in so many places I could waste an hour pointing them all out. Instead, I'll pick just one representative example:

Also syntax should be short and forgiving to allow for the limitation of the children.

Here's a bet for you. Pick some eight year old with an IQ twenty points below yours. Both of you move to Hungary and attempt to learn Hungarian. At the end of a year, who do you think will be better?


Ruby is a good choice (1)

graznar (537071) | more than 7 years ago | (#15987146)

Ruby [ruby-lang.org] is readable and pretty easy to grasp. There's even a free text, Learn to Program [pine.fm] by Chris Pine, which takes the reader through the baby steps of learning to program.

Teach them Haskell. (3, Funny)

tietokone-olmi (26595) | more than 7 years ago | (#15987293)

That'll weed out those who have no commitment. It'll also make the handful of math-oriented people in the class more aware of the connections between mathematics and computer science. It's not like people these days are encouraged to get rid of the bad habits they picked up with J. Random Wanker Language or anything. Also, interactive programming with hugs. Who doesn't like hugs?

Hell, maybe it'll teach kids better habits (like focusing on the algorithm and on getting a working program first) than some heavy mittens language like Python or Javur. The error messages could probably be a little much for 10-year olds though. Maybe Helium, a Haskell variant geared for education and without some of the more esoteric features, would suit that better?

First-Grade Logo (1)

Lobo42 (723131) | more than 7 years ago | (#15987294)

When I was in first and second grade, we were taught Logo-Writer at my public school. It's a lightweight programming language where the commands control a "turtle" onscreen who follows the sequence of commands for drawing, moving...lots of various tasks. Unfortunately, that has since been removed from the curriculum and Logo instruction was not taught much beyond fourth grade. (The program switched to using Word and the Internet and such...which is a shame, really.)

The Little Schemer was mentioned above - that might also make a good choice.

Programming Basics Website for Teaching JavaScript (1)

my2iu (998070) | more than 7 years ago | (#15987323)

I've actually created a website at http://www.programmingbasics.org/ [programmingbasics.org] for teaching simple programming to young kids using JavaScript. It targets a level below that of KPL but above that of c-jump. It's designed to be completely self-contained, so the website provides an IDE, an extensive set of illustrated lessons, and various programming activites. Many of the other educational programming systems that have been mentioned here are quite nice and powerful, but they often come with only very brief tutorials. If kids "get" the tutorial, then you're fine, but if not, then a more detailed set of lessons like those provided by my Programming Basics site might be useful.

teaching their hopes to be dashed (1)

DuctTape (101304) | more than 7 years ago | (#15987333)

Teaching somebody programming in primary school is like teaching someone to be a millionaire, but when they get out to the real world, it's not like that at all (plus they don't get the million dollars). There is a lot of competition from others overseas for jobs here unless you can walk on water. I think that unless you're totally passionate about programming, and can stand that software engineering [wikipedia.org] crap (yes, I know it's necessary) that takes all the fun out of programming, you'd better look elsewhere for a job, unless you're going to spend your life working on open source projects.

It sucks trying to do it for a living, when everybody is doing more with less, budget cuts, long hours due to PHB shortcomings, etc. Yes, I'm in the middle of a four-month long crunch mode due to management shortsightednsess; does it show?


Programming is not just for programmers (1)

LihTox (754597) | more than 7 years ago | (#15987475)

We don't teach elementary school kids history because we want them to grow up to be historians; we teach it to them to give them a more rounded education, an appreciation of history, a new way of looking at the world, and exposure to a subject which, even if it doesn't become their profession, might at least become a source of fun and an output for creativity.

Teach programming for the same reasons. Computers are everywhere; if people knew how to program they might have a better appreciation of how software works, and they might even enjoy programming for fun, as a hobby. (I know I do.) If they use open-source software, they may be tempted to make changes to improve it: voila! a whole new generation of contributors to the open-source movement. If they get into the habit of it, they will learn to value the ability to see and change the source, which may lead them to spurn closed-source alternatives. (No, I don't mean everyone, but a growing number over time.)

I started learning BASIC at age 8 on my Vic-20, and while I'm not a professional programmer or computer scientist, I AM a theoretical physicist, and the ability to program has been vital to my career. No doubt, the same is true for many other fields as well.

Interactive fiction (0)

Anonymous Coward | more than 7 years ago | (#15987361)

Although probably unintentional, those old Infocom games gave non-programmers a great educational CS experience. As you hunt treasure and outsmart the thief, or gather clues and question witnesses, you also learn to think abstractly, create and step through algorithms and carry around a lot of information in your head -- all while working at a genuine command line.

Most of these Infocom games (link below) you can get from somewhere online if you look, and play them with an interpreter such as frotz or jzip.
http://www.infocom-if.org/games/games.html [infocom-if.org]

Only the Zorks are technically legal though, because they were released by Activision. You can also try them out online right here:
http://www.ifiction.org/games/play.phpz?cat=2&game =3&mode=html [ifiction.org]
http://www.ifiction.org/games/play.phpz?cat=2&game =4&mode=html [ifiction.org]
http://www.ifiction.org/games/play.phpz?cat=2&game =5&mode=html [ifiction.org]

I credit years of tinkering with Deadline and the Zorks with giving me a better early foundation beginning around age 11 than I would have had just noodling with the C-64 "Ready" prompt. (Or worse, noodling around in a modern GUI.)

C-jump seems painfully uninspiring to me. I think the problem with games like that and the programming languages "designed for kids" is that they're insincere: Your students will know immediately that they're not doing something real.

As an Educator I Recommend Piaget (2, Interesting)

Proudrooster (580120) | more than 7 years ago | (#15987413)

As humans brains develop, they go through many developmental phases along the way. Piaget came up with a developmental stage theory [massey.ac.nz] . The most important thing to remember is that primary kids are in the "Concrete Operational Stage" and can do well with concrete ideas like numbers, colors, linear procedures, and facts. However, kids at this age (especially boys, who typically develop slower than girls) can not handle abstract concepts. An abstract concept would be something like the equation 'X + Y = 4' or 'if x+5 > y+10 then'. As long as your programming languages don't get too abstract the kids should be able to process it fine. I find that HTML doesn't really process in kids minds until 7th or 8th grade.

Also, you have to apply the 80/20 rule. We are all different and our brains develop differently. But Piaget's theory applies to 80% of kids. I like to use the Lego Mindstorms Robots. The robotics invention system supports big blocks e.g "Turn Left" or small blocks e.g. "Turn on Motor A, Turn off Motor B, Wait 5 Secs, Turn on Motor B". The Legos give kids the change to try to work with abstract problems, but they can drop back to the concrete stage very easily by using the cause and effect process.

I believe that someone mentioned Logo. That is a great 'cause and effect' type of programming language in which kids can create a small abstract program and then see concrete results. Allowing the young brains to move back and forth easily between concrete and abstract is the key to teaching programming at this age.

Hope that helped.

Re:As an Educator I Recommend Piaget (4, Insightful)

Trizor (797662) | more than 7 years ago | (#15987653)

As one of the 20 (My fifth grade teacher actually read Piaget and showed it to me and labeled me as such) I look at my classmates and see that now (12th grade) they still struggle with symbolic concepts because they were codeled with the concrete for much too long. The example is physics, where the solutions are often entirely symbolic, many students have trouble with manipulating and thinking abstractly in symbols. However in earlier classes they are encouraged to plug in concrete values as soon as they learn them, and I was actually repremanded for using symbols (My Father is a Professor of Physics and when helping me with math homework at a young age insisted on my use of symbols instead of concrete numbers.) in Chemistry I when we were working with heating and cooling and temperature. While the concrete numberse were initially easily grasped by the class, problems quickly arose when they forgot the meaning of each number because it changed problem to problem and began to forget the theory behind what they were doing. The result was that every single class member could work any type of problem they had seen previously on memory of the motions to go through, but had no clue as to what they were doing and could not solve any new type of problem based on the theory they knew. In short: While they may still be developing the ability to understand abstractions, the sooner they begin learning the better they will be for life. You'll be doing them a favor by introducing them to the concept of a variable and a general solution.

Logo - visible results with simple programs (1)

egburr (141740) | more than 7 years ago | (#15987507)

I like logo. You can get graphical results with a simple program. It is easy to see how minor logic changes make huge differences in the results. And for the first few dozen exercises, the assignments can be to draw specific pictures. Starting with simple shapes (square, rectangle), moving to harder ones (triangle), then even harder (circle, oval, arc). Then, more complex designs (a triangle on a square, a circle inside a square, etc.). A christmas tree is good for an introduction of subroutines. Then you can start drawing graphs based on static data, then based on calculated data. But the best thing is the results are immediate, obvious, and simple to understand. Plus, watching the turtle racing around the screen is good for quite a bit of entertainment before you start geting bored of it.

With all that said, I first started off by entering in hex data from an Apple magazine (Byte?), later progressing to writing my own programs in AppleSoft Basic before I ever heard of Logo. I've dabbled with Pascal, Fortran, C, and Java. Of course, now most of my "programming" is shell and perl scripts with an occasional DOS batch script.

For learning how to program (the logic and though, not the syntax), I like Logo best for the reasons above. I also like Pascal for the strict structuring (good to learn even though a pain in the rear).

I'm using Logo (1)

dbc (135354) | more than 7 years ago | (#15987534)

Logo. Good, old fashioned Logo was designed to teach programming to elementary age kids. We home school, so I work with Logo with my 7yo daughter. She loves it. And logo is built on a lisp engine, so there is significant power underneath. We use Terrapin Logo, FWIW, and like it. There are other choices. Terrapin has an interface to the Lego RIS robotics system, and also the FischerTechnic stuff, if you get that far. Also Terrapin has some useful lesson and teacher guide books to give you some hints on how to go about teaching with Logo. All emaphisize learning by experimentation.

Side note: my daughter is a "kinesthetic learner", specifically, large motor kinesthetic. To plan out her turtle code, she will march around the room "being the turtle" and then go try it on the computer. I think that is a great way to learn about modelling execution in your head instead of the code-like-mad-and-crash development model. Brings a new meaning to the phrase "code walk through".

Starlogo (3, Insightful)

njord (548740) | more than 7 years ago | (#15987892)

A few years ago, I as an NSF GK-12 teaching fellow at the University of Maine. Basically, University students were assigned to K-12 (non-US people, read: before college) classrooms and asked to help with science curriculum. One of the classes I was assigned to was the computer course for eigth-graders. Probably nobody remembers it, but a few years ago, the State of Maine gave all 7th and 8th graders iBooks to use in their classrooms, so the computer teacher and I conspired to teach some basic programming to the kids. In most public schools in Maine, programming is taught, even in high school, so this was almost certainly the first time any of the students saw programming, and probably the last they would be able to learn in school until college. I eventually decided to use Starlogo [mit.edu] , given that it was designed to teach programming, it was available, and I have fond memories of learning basic programming on Logo on the Apple IIe. It worked as well as I could have hoped, and there were a few kids that were interested in doing more (I pointed them on to Python). Here are some things I learned that I'd like to pass on to you:
  • Kids don't always remember details. This can be difficult, because most computer langauges are not forgiving in their syntax. Kids are good at picking up on details, but don't expect them to memorize things like StupidConfusingClassname isn't the same as stupid_confusing_classname.
  • Kids like feedback. Thus, the read-eval-print-loop style is important toward keeping their interest.
  • Related to that, the intrinsic graphical nature of logo is very engaging.
  • This really just a general teaching comment (which I was totally new to when this project was given to me) - especially with totally new topics, kids will have all kinds of levels of ability and interest in the topic. It's important to have something that all of them can do, but also to have something to challenge the kids having an easier time of it. I would ususally introduce a simple topic and have everyone try it out, and then I would have a "master" level problem for the wiz kids to try.
  • Robustness and responsiveness is good; kids aren't very patient, as a rule, and if the programming environment crashes, or performs slowly (and Starlogo, being a Java app, did run poorly on those iBooks), the kids will lose interest in it while they wait for the app.
I should also mention that StarLogo wasn't really being maintained when I was doing this (or it was being minimally maintained), but now it looks like someone has revamped the project with StarLogo, the next generation. Finally, whatever you end up choosing, don't teach them HTML and then tell them that it's programming. Few things irk me more than people talking about "programming in html". If you want to teach them HTML, fine, but don't let them think they're programming. By they way, youung children might have trouble with html for the first reason I gave above. The syntax is very clumsy and exacting, and worst of all, you don't get error messages from the browser when you screw it up! Anyway, have fun! njord

Waste Of Education and of Childrens' Time (1)

littlewink (996298) | more than 7 years ago | (#15988023)

In 8-12 years, when they graduate from college, will any current programming language be in popular use (other than COBOL)? Don't you think the computing landscape will be completely different then? You may as well teach them how to use the abacus or sliderule.

I suggest you use MathCad or MatLab or Maple since then at least they'll learn something useful (mathematics).

PHP (1)

Ankur Dave (929048) | more than 7 years ago | (#15988182)

How about PHP? It's an interpreted language, so no mess of compiling, and it runs (usually) on a Web server, so kids can make programs and upload them to the school server, letting them easily show other kids. The typing is pretty loose, so you don't have to worry about messy variable details. You can start the kids out with simple programs that take GET vars and process them, and introduce them to objects later. And the syntax is like C/C++, getting them nice and used to those more powerful languages if they want to learn them.
The only problem is they have to know something about HTML first, but HTML is pretty simple; I learned it in 3rd grade.

Something fun (1)

serdagger (879079) | more than 7 years ago | (#15988251)

I've got to go along with those who emphasize making it fun. I started with QBasic when I was about the age of your prospective students (maybe a little younger), and the ability to write a quiz show game in my first week got me hooked, and writing Lemonade Stand within a few months reeled me in.

The language itself doesn't matter, although I would focus on more procedural stuff, since it's simpler than something like Scheme to write usable programs off the bat. I do love Scheme, but it's better to foist on college freshmen (or experienced high school students) than preteens with short attention spans. Teach them the absolute basics (print, read, if, do-while), and have them write games (simple, like a quiz show).

The programs will be really bad, and most of your students will hate it. But a few will love the ability to create what they want and will pursue it further. And, really, that's the best you can hope for in your situation.

maybe not logo, but... (1)

athena_wiles (967508) | more than 7 years ago | (#15988268)

I see a lot of people here suggesting Logo. I loved logo, but I think that was more useful in maybe 4th grade (age 8 or 9). For reference, here's the sequence that I went through... it seemed to work pretty well :-)
  • 4th grade: LOGO. we actually had an entire "how computers work" module that my dad led a group of students through - lots of fun. learned a lot about the basics of computer systems in general (i.e. processor, memory, storage, I/O) as well as basic programming. this was really well targeted to our age group at the time.
  • 8th grade: BASIC and HyperCard. Again, great stuff for that age. Hypercard let us create interactive/graphic stuff, while BASIC got us more into the actual programming side of things, as I remember. Hypercard was great for getting us involved though, because the ability-to-do-easy-graphics-and-interact-with-them thing was a big plus.
  • 10th grade: C++ in AP CompSci. My school now teaches Java in this course, but C++ was just fine when we were doing it. Best part was when the teacher decided to go outside the AP curriculum and introduce a simplified graphics library so that we could program our own versions of things like minesweeper and tetris using the concepts we'd covered in class. probably learned more that way, too... :-)

Other possibilities that might appeal to the 10-13 age-group are:
  • flash - in a similar sense to hypercard, this is great because it lets you create graphics that you can interact with. Some simple actionscript might be a way (albeit not an optimal way, but...) to teach some programming, while still being something kids can get excited about. dunno if the learning curve woudl be too much though.
  • Javascript or PHP - two different ways to both introduce programming languages and things they can interact with on the computer. only problem with these two are that you'd probably have to teach some HTML first, which, while fun, may not be the "programming" that you're aiming for
I'm sure that there are a lot of other languages that would work really well, but based on my experience *learning* to program as a kid (in the not-too-distant past), I think that some sort of graphical/interactive element is really important for that age group. When you're ten years old, just seeing text output of a program isn't really all that exciting or attention-grabbing.

Good languages for learning (1)

kungfujesus (969971) | more than 7 years ago | (#15988406)

i would reccomend one of the following languages BASIC C PASCAL those are all great starting languages VB is a horrible language for learning, it will cause bad programming practices

Some Education-Specific Language Choices (1)

Dr. Faustroll (745092) | more than 7 years ago | (#15988421)

Several other people here have mentioned Logo - an excellent choice, in my view. I recommend taking a look at the three volumes of Brian Harvey's Computer Science Logo Style [berkeley.edu] .

The Logo tree has spawned several other languages - two worth looking at are NetLogo [northwestern.edu] and StarLogo TNG [mit.edu] - both of these languages are particularly well-suited to modeling projects, the first with a traditional text-oriented perspective, the second with a graphical programming interface.

Another programming language specially designed for education is Alice [alice.org] - the language is designed so students can graduate rather quickly to more complex object-oriented languages. Python, Ruby, and Java would all be good follow-up languages to Alice.

Finally, let me gently suggest that you not follow through with at least one portion of your original plan: the game c-jump [c-jump.com] is a very poor choice for introducing students to programming. Not only is the game completely inappropriate for any child over the age of 3-4 (it is just a very boring version of snakes and ladders), it is also extremely poor from a pedagogical viewpoint, with no creative activity on the part of the students, reinforcing notions of code as arbitrary sets of commands. The first couple of tutorials in Alice will be far more enjoyable for your students, and actually get them involved in some real thinking about programming.

Load More Comments
Slashdot Login

Need an Account?

Forgot your password?