Teaching Primary School Students Programming? 198
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?"
Scheme? *ducks* (Score:4, Interesting)
The Little Schemer [neu.edu]
Just a thought...
Re: (Score:2)
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
Re: (Score:2)
But almost all lisps have read-eval-print, it's practically one of its defining features.
Re:Scheme? *ducks* (Score:5, Insightful)
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.
Colored parentheses (Score:2)
Ever tried a Lisp editor that uses colored parentheses? Parentheses at level 1 are red, level 2 yellow, level 3 green, and level 4 blue. Then level 5 repeats the cycle. But I'd imagine in general that Lisp style languages might go over better in places where the national language puts the verb first [wikipedia.org].
Re: (Score:2)
Why am I even bothering to respond to this AC? I don't know but it definitely is an idiotic post that needs a response -
These kids shouldn't be expected to learn C and instantly write their own DOS or vi editor. The entire purpose of this course is to get them hooked into the world of programming and possibly also understand how a computer works. Even better, it should help them understand the engine
Re:Scheme? *ducks* (Score:4, Informative)
But how about Logo Programming language?
http://en.wikipedia.org/wiki/Logo_programming_lan
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.
Re: (Score:3, Informative)
I strongly suggest checking out:
The Teach Scheme Project [teach-scheme.org]
How to Design Programs [htdp.org]
The first is a project designed around teaching programming through scheme, and the second is the text book for the project (full text online, free).
Re: (Score:2)
It's not just high school; HTDP was the book used in Georgia Tech's introductory CS classes a few years ago (although they've recently switched to Python for CS majors and Matlab for Engineering majors).
Re: (Score:3, Interesting)
If you teach anything other than Lisp or Smalltalk first is like trying to teach someone to write prose using Enid Blyton as your reference. Event
Re: (Score:2)
You could try GNU Robots [gnu.org], if you're willing to accept Scheme. It's still a work in progress, but the concept is you write a program (in Scheme) for a little robot, then set him loose to explore a maze. The maze is populated with prizes, food, and baddies (you can shoot them, or choose to avoid them.)
The nice thing about this is that kids can learn programming with an immediate payoff - they get to watch their robot in action on the screen. GNU Robots is the same concept as ChipWits [chipwits.com], which has been "com
Re: (Score:2)
In addition to Scheme, o
Re: (Score:2)
I'll agree, but not for the reason I suspect you think Perl is contraindicated. I'd avoid it as a first language because it assumes three things that aren't true for a K-12 crowd.
1. Perl assumes you understand regexes. Nothing else in perl makes much sense without that base.
2. Perl assumes you speak UNIX. Too many perl idioms simply make no sense otherwise but are natural and beautiful if one IS
Virtual +1 Informative (Score:2)
Seriously....mod this parent up.
You're teaching grade school kids how to program. Not how to make websites, or how to beat Flash into submission, or how to deal with cookies. You need to teach them about programming, and how these words make a computer do what you intend. They have decades ahead of them to argue the intricacies of VI vs. Emacs, or Perl vs Python vs PHP, or C+ vs C vs Pascal. When they get into later Computer classes, they'll be exposed to Basic, or Java, or .NET, or C. But the best th
HyperCard forever! (Score:1)
I booted the machine again the other week and it amazes me how much of it I picked up without any instructi
Re: (Score:1)
Re: (Score:3, Insightful)
Re: (Score:2)
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 (checke
Re: (Score:2)
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: (Score:2)
Of course there's always http://www.runrev.com/ [runrev.com]
Re: (Score:2)
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
Re: (Score:2)
Re: (Score:2)
I wonder what the people that recommend python or whatever used as a language when they were 10-11. Fortran? I am programming for already quite a while now in C, perl and other languages, but python introduces several concepts that are pretty abstract.
Get a hypercard clone, or get a new versi
Re: (Score:2)
It's sad that Flash is often dismissed as an animation tool and nothing else. There are open source compilers for it, but the best part of it is the I
Karel (Score:4, Informative)
Re: (Score:2)
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: (Score:2)
We disguised a landmine as a beeper and blew him up.
Re: (Score:2)
That's so far past what most of these kids should be learning...
When you're first learning how to drive a car, you don't say, "We should go to NYC, because driving in heavy traffic is a good way to learn avoidance and awareness techniques", when you don't even know how to make smooth turns and brake without throwing your passengers through the windshield, and still get the windshield wipers and turn signals confused.
These kids aren't learning how to program games
BASIC? (Score:2)
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: (Score:2)
Re: (Score:2)
-uso.
I find BASIC confusing (Score:2)
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: (Score:2)
Yeah. I agree. C#:
Re: (Score:2, Insightful)
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 t
Re: (Score:2)
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 ca
Re: (Score:2)
All of the boys in my year were taught BASIC by copying out programs (generally simple games) from the "yellow pages" in Acorn User (or whatever it was called back then) and then improving them.
This generally started off with changing "LET LIVES=3" to "LET LIVES=999"- simple and effective. One then got into loops, GOTOs et cetera.
Make it simple - kids don't want/need to know about pointers or "computer science". They want to make the machine ask their name and then print "h
Kid's Programming Languages (Score:5, Funny)
Unless they're vaccinated, don't give them MUMPS [207.192.157.194]; 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: (Score:3, Insightful)
HTML (Score:2, Insightful)
Re: (Score:2)
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? (Score:5, Informative)
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.
CeeBot (Score:2, Informative)
Pascal (Score:2)
Re: (Score:2)
Lego Mindstorms (Score:1)
Of course it's a good idea (Score:1)
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, Qui
Comments (Score:2)
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.
You can do something much che
HTML a typesetting language??? (Score:2)
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
Python. (Score:2)
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.
Re: (Score:2)
As I mentioned in another comment - if you jump right to OO programming, you're essentially teaching the kid how to hurdle in the Olympics without first teaching him "This is a hurdle. This is how you approach a hurdle. This is how you land after a hurdle. This is how you jump a hurdle. This is how you run between hurdles."
OO is useful, and important, but it's hardly baby steps. YOu're talking about taking a bunch of kids, whose likely maximum experience
Re: (Score:2)
To use your metaphor -- after teaching kids to run for
Squeak (Score:3, Informative)
Re: (Score:3, Informative)
Squeak is actually a Smalltalk [smalltalk.org] derivative.
[/pedant]
Re: (Score:3, Informative)
If the teacher finds the Smalltalk paradigm incomprehensible I'd suggest (s)he try Ruby. [ruby-lang.org] The author, quite truthfully, claims it's a 'surprise-free
kids programming language (Score:2, Informative)
Re: (Score:2)
Python and Blender (Score:3, Informative)
Also there is predone games of a wide variety of types that they can play with, take apart, and rebuild into their own.
LetterRip
Re: (Score:2)
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 tau
Wrong question (Score:2)
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 irrelevan
Re: (Score:2, Informative)
justBasic (Score:2)
The link is here [justbasic.com]
My Curriculum (Score:2, Informative)
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 eas
BASIC, Logo, ToonTalk (Score:4, Informative)
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].
language not important (Score:2)
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
No, the language is important (Score:2)
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 co
Have you ever even worked with children? (Score:2)
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 m
That isn't an answer (Score:3, Insightful)
First off, you didn't really answer the question (I'm assuming here that this AC post was written by fermion, since it contains the same types of odd grammatical errors as the grand parent post). Have you ever actually worked with kids?
I have, and my experience is much more in accord with the standard view of childhood as a period of intense learning and rapid acquisition of new abstractions than it is with your picture of children locked in a world of simple and concrete structures. If you want to teac
Teach them Haskell. (Score:3, Funny)
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?
As an Educator I Recommend Piaget (Score:3, Interesting)
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 (Score:5, Insightful)
Logo - visible results with simple programs (Score:2)
I'm using Logo (Score:2)
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 o
Starlogo (Score:3, Insightful)
Visual and scriptable (Score:2)
Actually, here's a suggestion: Try games first. Not to program with, but as an example. "How do you think this would work?" "What makes this glitch work? How could we fix it?" And all along the way, you can discover and correct their misconceptions about what a computer can and cannot do.
Don't even try "real" languages... (Score:2)
Some folks have said LOGO is the way to go. This is indeed a cute language, great for elementary school kids, and easy to understand. If all you want to teach is "programming is fun and easy", then that will do the trick just fine. If you really want to spice things up, I imagine that there are interpreters available that will turn LOGO commands into controls for MindStorms robots. Keep in mind that LOGO isn't going to a
Start out by teaching them abstraction physics. (Score:2)
But all of them are subjective to Abstraction Physics.
Though "Abstraction Physics" might sound way to advanced its basics is not. In fact its really more a matter of training self awareness as the human language they are using is also subjective to Abstraction Physics.
http://wiki.ffii.org/IstTamaiEn [ffii.org]
http://threeseas.net/abstraction_physics.html [threeseas.net]
Once they understand how they are already using abstraction physics then they will be better a
Anything but BASIC. (Score:2)
Re: (Score:2)
Some just aren't meant to be programmers. That doesn't mean nobody else should be allowed.
BASIC was -invented- to teach programming. It wasn't meant to be a real language. It was meant to be an easy to learn and use tool.
Re: (Score:2)
Graphical programming with Labview (Score:2)
So this is a fairly sophisticated package, but play around with some of the basic functions. Everything looks like a circuit diagram... just put your basic operators ( + - * / etc.) and pump in different inputs (start with constant numbers, then replace them with dials and stuff), and watch what happens to the output display (start with numbers, move up to gauges and graphs).
Eventually with enough money for extra hardware you'll have them building Lego robots.
They made us use thi
Odd man out... (Score:2)
I cut my teeth on GWBasic (Score:2)
I cut my teeth on GWBasic. It's been awhile since I used a learning language, but I would stick with something that doesn't require a lot of boilerplate. Specifically, in languages like GWBasic, (and its successor, QBasic,) the programmer didn't have to worry about references, compiling, "include" and "using" statements, ect, ect.
A friend of mine wrote, (and taught with) ZLogo [louderthanabomb.com]. What's important is that the kids don't have to do a lot of prep work that we take for granted. Every piece that they put into
Plug for Python (Score:2)
My candidate languages were C++, which matches my own programming experience best; Java, which is used on the CompSci AP exam; and Python, which was recommended by an acquaintance.
Python won out, for the following reasons:
d/l edubuntu (Live CD) (Score:2)
Go Impractical (Score:2)
Alice (Score:2)
From my experience (Score:2)
Why don't you start with simple Turing Machines (Score:2)
It's been a lot of fun. Our oldest is now taking his first steps into Second Life sc
Re: (Score:1)
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: (Score:3, Informative)
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 Pytho
You can have Python with turtle power! (Score:3, Interesting)
Both are excellent suggestions, and the good news is that you can have the best of both worlds!
Simply download Python [python.org] and xturtle.py [asn-wien.ac.at] (the module is a single .py file, no need for complicated installation and no dependencies beyond the standard Python library).
The xturtle site [asn-wien.ac.at] has extensive documentation, interesting examples and, of course, screenshots [asn-wien.ac.at] (becaus
Re:too young for abstract thought (Score:4, Interesting)
Re: (Score:2)
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
Re: (Score:3, Insightful)
You, sir, were simply an exception. I was in your league too. Alas, I did the mistake of becoming a teacher 1.5 years ago (I quit, now I am unemployed). Yes, I did teach some programming. You see, I thought too that kids could do this and I was confronted with 16+ year olds that had no concept of a variable. Something I took granted at that age. So, perhaps I was a lousy teacher (I will not argue over that, I know I was a bad teacher), but they did not know what a variable was even tought they had alge
Re: (Score:2)
Re: (Score:2)
Re: (Score:2)
*not* too young for abstract thought (Score:2, Informative)
Secondly, abstract is not required to understand at least some programming languages. If somebody suggested teaching them the Lambda Calculus, I'd be a bit worried, but something like C/BASIC/etc. is sufficiently procedural to make things easy. Don't confuse procedural languages with algebra just because
Programming is not just for programmers (Score:2)
Teach programming for the same reasons. Computers are everywhere; if people knew how to program they might have a better appreciation of how software
Re: (Score:2)