Teaching Primary School Students Programming?
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?"
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
Just a thought...
The freshmen level OOP class that I took taught us by using BlueJ and Karel. I loved it, thought it was fun and easy to use, and really helped teach solid OO concepts. I recommend it highly.
Unless they're vaccinated, don't give them MUMPS; if you do find a nice Doctor (Like Dr. Pascal), 'cuz Pascal was fun for me in College.
If they like noises, Squeak is good, but the cogently verbiaged might prefer SmallTalk in a group. For those speech impaired, knowing there's other people who Lisp would be good.
The mean ones will abuse Snobol in Winter
The A.D.D. kids will probably like the feeling of Euphoria they get from their first
Of course, you could teach them a very nice language with a horrible name, Brainfuck.
Or, you could just look Here for a comparison of popular programming languages.
Unitarian Church: Freethinkers Congregate!
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.
Insanity is nothing more than a difference in perspective.
Have you considered python? 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 (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 program. It appears there are some clones out there also, although I have no idea how good they are. (The first alternative listed says it is popular with educators.)
Good luck.
http://www.ceebot.com/ceebot/index-e.php 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.
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 still have more fans than freaks. WTF is wrong with you people?
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.
Squeak, 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....
'He who has to break a thing to find out what it is, has left the path of wisdom.' -- Gandalf to Saruman
I would recommend that you take a look at http://www.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.
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.
LetterRip
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.
Comment forecast: Bits of genius surrounded by a sea of mediocrity.
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 - A drag and drop programming language (No longer free but you can downloa it from my homepage).
Grade 7: Game Maker - A more complex drag and drop programming language created by the same person who created Drape.
Grade 8: Kids Programming Language - 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++ for editing JavaScript and NVU for web design.
I have also used Small Basic and my own JavaScript Interactive Fiction engine.
You can find downloads of most of these programs and some lesson plans at my homepage.
Feel free to contact me if you have any further questions.
An invasion of armies can be resisted, but not an idea whose time has come. - Victor Hugo
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 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.
Or there's always BrainFuck.
http://alternatives.rzero.com/
Squeak is actually a Smalltalk derivative.
[/pedant]
All the world's an analog stage, and digital circuits play only bit parts.
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?
As humans brains develop, they go through many developmental phases along the way. Piaget came up with a developmental stage theory. 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.
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.
Sit, Ubuntu, sit. Good dog.
- 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! njordYou, 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 algebra the last few years. Go figure.
Oh, I also tried to teach HTML to a bunch of 13 year olds. That was a bad idea... A really bad one.
No, the AC is right. Most kids have problems with abstract notions. That you'll find slashdotters that knew what a variable was at age 10 is no surprise. I'd bet that over 50% of us knew what a variable was at that age. I too did the mistake of projecting my own competencies on the chidren of today. Of course, the article says it's a computer club. The situation might be different with kids attending a computer club and thus already showing interest.
I that case, why not give Alice a try.
Ahhh...the great dumpster continuum. Many a free computer will be found there. -- sowth (748135)
If the teacher finds the Smalltalk paradigm incomprehensible I'd suggest (s)he try Ruby. The author, quite truthfully, claims it's a 'surprise-free' language. Together with Smalltalk it's one of the few truly Object Oriented programming languages. It's been reported that both Squeak and Ruby are going to be installed on the OLPC machine. ( The OLPC folks change their minds so frequently that I'm now not certain of that though )
Both are excellent suggestions, and the good news is that you can have the best of both worlds!
Simply download Python and xturtle.py (the module is a single .py file, no need for complicated installation and no dependencies beyond the standard Python library).
The xturtle site has extensive documentation, interesting examples and, of course, screenshots (because everyone love screenshots!).
There's a hidden treasure in Python 3.x: __prepare__()
http://www.livewires.org.uk/python
Building a healthy future; Connecting communities
As others have said, this is ridiculous. Many people start programming when they're quite young. I was proficient in BASIC (not that it's something to brag about :-) ) when I was 7, and Java before I was 12.
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 both involve variables, because the concepts are actually very different in different languages. (I'm unsure whether Lisp/Scheme would be "too abstract" for people. I don't think functional programming would be the problem; if anything, it'd be the syntax (not the parenthesis.))
Thirdly, you divide people into "12-13" year-olds and "13-14" year olds. Leaving aside that people 13 years old fall into both classes, one year of age difference is very little basis on which to delay teaching people programming.
Finally, and most importantly, you mention that those ages are where abstract thought develops "on average". Other people in this thread who have supported you have again cited average cases. NotesSensei is not going to be teaching a school-wide programming class. NotesSensei is going to be teaching programming to people who have joined a computer club. There's a big difference there.
As for precisely what to each them, I wouldn't recommend VBScript or, therefore, KPL. I also would not recommend Java; while I think Java is a nice programming language and has many decent uses, I don't think it'd be a language that kids would like to learn as there first language. There's way too much figurative red tape to wade through to get anything done. The same probably applies to greenfoot. I would probably recommend Python.
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 teach languages, math, music, computer science, or any other "structure rich" subject, childhood is the time to do it. The only things I would suggest holding off on are things like history, music appreciation, and literary criticism which require the acquisition of a large body of concrete but unstructured information before the underlying abstract structures can be perceived.
Addressing a few of your specific points:
This is the sort of thing that makes me think you don't have much experience with real children. You have described the stereotype of childhood play, which is but a faint shadow of the reality. For example:
This was a horrible lesson, for exactly the reasons you list. It taught the kids nothing of lasting value (most of what they memorized will no longer apply by the time they have a chance to apply it) and it focused on rote memorization, which is hard work, instead of developing an understanding which is much easier.
It depends on the source of the complexity. J.S. Bach and Scott Joplin are both complex and accessible without a great deal of prior knowledge, and kids tend to love them (go listen to the tunes of baby toys). On the other hand, if by "complex" you mean music that draws on a body of conventions and idioms that the kids won't know, you are right that they won't enjoy it as much as they would music which uses conventions they are familiar with. This is because it depends on concrete information which they lack, and not due to any deficit in appreciating abstractions.
--MarkusQ