A High School Programming Curriculum For All Students?
jonboydev writes "I know there have been many postings on what kids should begin programming with, but I have a little different perspective: I am a software developer looking to help my brother, who is a high school teacher, develop a programming curriculum. The catch is that it is a class for all students to take, not just those interested in programming, and therefore will focus heavily on teaching problem solving. This class would follow after a class using Lego MindStorms, and we are planning on using Python. I'm sure many of you would agree that everyone can benefit from learning to program and any help would be greatly appreciated!"
You're going to have a mandatory programming class? Christ it's hard enough teaching the kids to save Office 2007 files as 2003 and you expect them to comprehend programming? It'd be like trying to force everyone to do physics, a complete waste of time.
Disclaimer: I haven't actually tried this, so this isn't an endorsement, but...
Have you considered taking a look at Alice? It's the free system worked on by the late Randy Pausch to teach programming without jumping straight into coding. From the site:
I'm a bit biased, but JavaScript might be something worth teaching in addition to Python. It's in everyone's browser already, so no need to download anything. Can more or less work well on server-side or client-side (I'm not a SSJS guru, so I don't know if there's any major gotchas). It has a moderately simple syntax, and whitespace isn't as important as in Python.
creation science book
Graphics is what got me interested in programming. I remember my high school Pascal classes. Unfortunately they were pretty boring. We did do some simple EGA graphics at one point but that was really the only interesting thing we did in class, though I did end up learning the fundamentals.
Thing was, to do anything cool you had to do all this VGA initialization stuff that was forever out of our reach at that level. Not to mention the computers were pretty obsolete even at that point.
I know there's a lot of (mostly unreasonable) hate around here for Flash, but I'd say get them into Actionscript3. It's really easy to do graphics in without having to setup windows and rendering contexts or getting to know huge APIs. It will introduce them to object oriented programming, but won't involve pointers or memory management or any of the more esoteric aspects of something like C++. Another thing is they can easily share whatever they produce with most anyone else who has a browser. If they are at all into social networking online (all that myspace bullshit) they can make some pretty interesting stuff for their friends' pages. Using Actionscript could also lead they to branching out into other web technologies, something probably more important in today's world than ever. It also has a similar syntax to Java or C++ if they want to go in that direction. And as far as help and tutorials, there's really one of the richest communities around Flash, being a technology that was practically born in the middle of the blogging phenomenon.
The best thing about Actionscript is how quickly you can put something visual together and how little setup it requires. Graphics is definitely the way to go, and nothing in programming has a more immediate "wow" factor than throwing something pretty up on the screen.
=Smidge=
Is it just my observation, or is eldavojohn an idiot?
I read this as, "It is a programming class available and accessible to everyone, not just geeky programming students; it is 'programming for normal people.'" Not, "All students must take this class."
Could be wrong, though. Maybe the submitter can clarify...
If you're teaching them programming, and they might not all use it, maybe you should think about using MS Excel. It seems everyone uses Excel in some form, but the people who can really get into the nitty-gritty of it can do some really useful stuff. Excel is on just about every computer these days, or some similar spreadsheet, and while it's not a traditional programming language, it does require the use of logic to figure out how to set up a series of cells with different commands to give you the answer you want.
Python on the other hand, is much more traditional, and might be a bit more straightforward to teach, but I still think more students would find useful skills they can use everyday in Excel rather than in Python. If they were all going towards engineering or comp-sci, Python would be good, but for the future business people in your class, knowing how to use Excel, and use it very efficiently is a huge plus in the "real world".
I would create a list of labs, and spend significant time on each one. On Monday introduce the problem of the lab, and maybe one new programming concept that can be used to help solve it. Then from Tuesday to Thursday give students time in class to work on it, and help students that are confused, finished students should help the ones who are really far behind. Collect the programs at the beginning of class on friday, and go over the example of a correct program, answering questions along the way.
I think you'd find the best success with a program like this spending as much hands on time as possible.
(All my hatred of Labview aside.) Don't the latest Mindstorms come with some hobbled version of NI Labview or did that fall through? It is both circuit-esq and programming-esq. It is also easier to understand to laymen because it is a gui, not text. I have colleagues that use Labview and VB for the sole reason their customer demands they be able to understand all the code they are paying for without formal training in CS.
The catch is that it is a class for all students to take, not just those interested in programming
What the fuck is wrong with the educational system again? Teach those who are interested. Or those who have any chance of not being a retard at it.
Teacher 1: "Hey, I heard that computer-thingie makes people smart."
Teacher 2: "Okay, let's force it on every little prick we have here! That'll teach 'em to touch one ever again!"
Christ. What's next? Quantum physics in ancient Sumer dumbed down so everyone can pass?
Personally I would recommend teaching BASIC or Pascal to high school students. Both of them were more or less designed for teaching or beginners.
Students that are not interested in computers can at least make little songs using beeps in BASIC in a few minutes with a little teaching but hopefully can continue learning more about programming or computers.
Programming more importantly is problem analysis, figuring out how to use the tools and information you have to build towards a solution.
In most of my programming projects, there are myriad different ways to approach the problem, and the time taken to compare them I find to be the most important part of any programming project.
Recent example: I just got done coding a utilization graph for a server. In bash. Obviously bash is not the ideal language but was required so a lot of thought had to go into how to approach the problem.
After some consideration, I determined the way the utilization information was gathered and stored was the most important thing, because bash isn't particularly speedy and having to mow through 100,000 long log file isn't going to be pretty. So the main focus of the problem turned from one of "how do I display a graph in bash?" to "how do I record the information in a way that bash can quickly process it?" This requires understanding the limits of the tools you are provided with, more than understanding the actual problem. Only after you have this can you move toward a good solution to the problem. No matter how clever of an idea you have, or how "perfect" of a solution you come up with, picking the correct path to that solution is often just as important as the results.
Most of the time when I am going to code something, I spend a good hunk of time just sitting and thinking about it, considering how things are going to progress if I try different approaches. Only after I'm satisfied I have a good "plan of attack", do I actually start working on a solution. My solutions aren't always optimal, but they're usually pretty close, and save me a LOT of valuable time which would otherwise be wasted in having to either make fundamental changes to the foundation late in the game, (every programmer's nightmare) or dealing with extremely topheavy already-written code that isn't producing results in the way that I need them and has to either be data-converted or be clumsily coped with as-is. (every maintainer's nightmare)
I suppose you could sum it up by saying, "teach them problem analysis before you teach them problem solving.
I work for the Department of Redundancy Department.
I helped create a Java curriculum for a group of programming-naive high school students. I don't regularly use Java, but it behaves similarly to other languages (good for me and for them). There are plenty of tutorials out there that they can explore in their extracurricular time. Also, there are many sites and fora dedicated to java, allowing my students to get plugged into the broader community of programmers.
Teaching general problem-solving is great, but this is probably not the way to go about it.
1) Different people learn differently, and anything resembling a traditional programming class will set up a large part of the student body to fail or at the very least get a C and leave frustrated.
2) Skills like problem-solving should be integrated across the curriculum and spread over the entire 13 years of K-12 education.
If you are going to do it, I would recommend keeping it simple enough that almost everyone who tries passes, and have advanced students take a different class such as a full-fledged programming class or a time-compressed version of this class.
I recommend rethinking this. Ask yourself "how can we make sure that by the time they graduate high school, all of our students learn problem-solving in a way that they will enjoy, that will leave them feeling something other than frustrated or exhausted, and (optionally) how can we give each of them a taste of programming." The answer you come up with should guide your curriculum.
Don't forget to make allowances for the mentally retarded and others with cognitive limitations, and don't forget to find alternative ways to teach the same skills for those who can learn what you are trying to teach, but whose brains work differently than most students.
Knowledge is how to play a game, intelligence is how to win, wisdom is knowing what game to play.
First off, let me say that I come from an Engineering background, so my programming repertoire
is not as advanced as a comp sci is. That being said:
In my honest opinion the best way to teach problem solving is with something simple. Basic is a very good way to do this as it is very intuitive, but doesn't have all the shortcuts of other languages.
Some of the greatest problem solving ideas are designing well known games such as Monopoly. Obviously more advanced, but you can relate functions/subroutines, implement graphics (if you have the time), counters, and many other things.
The absolute most important concept is that you must teach, obviously, problem solving and NOT syntax. I would greatly discourage languages like C++ that, while powerful, take entirely too much time to teach the syntax when you can teach problem solving just as easily through Basic.
Take a look at Scratch http://scratch.mit.edu/
It uses graphical blocks to create a stack of instructions. I have been amazed how easy it has been for middle school student to pick up on programming logic using this program.
You must be the only one :)
Python predicts my every whim... Perhaps the problem is you're trying to be too clever. In that case, assembly is just right for you
My UID is prime... is yours?
My dad is a High School Physics/AP Math teacher who taught programming this year. I encouraged him NOT to use C++ (his original plan) and to use Python instead, and to use Python Programming: An Introduction to Computer Science as the text. He has been absolutely delighted both with Python and with the choice of text. Now, it has to be said that this doesn't really address your case, since all of his students are pretty much AP materials (and it's a private school, etc.) However, I would encourage you to take a really close look at that text.
"He who would learn astronomy, and other recondite arts, let him go elsewhere. " -- John Calvin, commenting on Genesis 1
A good final project would be an Oregon TrailBot. A scripted user-agent that can buy oxen and die of starvation in pursuit of expansionism.
THL phish sticks
If it weren't important to me to lead an enriching life, I could agree with your sentiment here. Unfortunately it is important to me; I loved my British Lit. classes. If they didn't make me a better programmer, they certainly made my life better and more interesting.
the ones that have gotten programming in
hs and college are less prepared as professional
programmers than those with no formal training.
No. Don't do it. Programming should still be an elective, not a required course for all students to take.
A computer course that touches on programming and can be a gateway to a programming course should be the route you take. That way the students get the skills they'll need (not everyone has a computer at home, even in this age) for college/job/whathaveyou but they're not forced to take a class they may not want to.
When I was in school, the only "programming" course that was available was Pascal. And it almost ruined computers for me as I honestly have 0 interest in programming.
All that said, I do realize there are a lot of courses out there that kids are required to take that they have no interest in. However, a lot of those courses have legitimate "real-world" reasons, and programming isn't necessarily a "real world" reason for taking a course.
Sent from your iPad.
Use the textbook "How to design programs" by Matthias Felleisen, Robert Bruce Findler, Matthew Flatt and Shriram Krishnamurthi., It's available free on the web or hardcopy from MIT press. Unfortunately the HtDP web-site seems to be down today. Check out the wikipedia entry. It's been used in high schools. They have a summer seminar for teachers, too.
There are a million opinions on this subject. But actually programming by all students be it basic, java, javascript, html, c, flash, etc...is going to be a rough class for 90 percent of the students. And this might not be because they are not capable. It might just be socially more important to NOT excel at computer programming.
When I was a youth my father taught basic on Apple II's to all students in their 7th and 8th grade school. This was a 4 week class for everyone in the school. And it was generally disliked by most.
And programming in basic on an Apple II was much simpler than today and the heavy frameworks we deal with.
This brings me to Scratch from MIT. I downloaded this when it was released a few years back. It was fine. I build similar products in my real life so I am always interested to see what others are doing. This is free. It is visual. Teaches constructs of event programming. Deals with basic logic. All things that are good to help kids understand. The community seems to have grown a lot since then.
Explore and give it a try. http://scratch.mit.edu/
http://processing.org/
Clean, quick, cross-platform, can do pretty wild things right out of the box.
Make it fun, get them hooked.
Jag pratar lite svenska.
It's a damned shame that you were modded troll. The troll moderation is NOT for modding down something you disagree with people.
That said, your actual post is a little harsh dude.
This BS of making kids take shit so that they'll be "well rounded" is horse shit.
ALL of the greats in the World; Past Present and Future, were NOT well rounded! They specialized in ONE thing and did it extremely well. Trying to be "well rounded" is a path to mediocrity - which explains much of our state today.
I wish I could find the article, but it stated that it was in the 1970s that some Ivy League admission director pulled out of her ass that incoming students should be "well rounded". Of course, when an Ivy League school does something, all the others follow like stupid sheep.
Not everyone is interested in programming, or any sort of engineering. Get over it. Forcing every kid to take programming (and "forcing" is the right word) is like forcing every kid to learn how to build an engine for their car (and NOT something useful, like changing the oil).
With all the cutbacks in arts and general sciences that take a broad approach to education, why are you wasting their precious school time and especially-precious-now school money on such a specific skill?
It's like someone who is passionate about embroidery insisting that every kid should learn embroidery for their own good ("Think about the problem solving skills they'll learn by figuring out what stitches they need to get to the pattern they want!") Whatever general skills they learn in this class, they can learn better by studying a more general subject.
Sometimes it's best to just let stupid people be stupid.
I'm sure the board of ed will love the cost of a Lego Mindstorms set for every student in the school.
Also, if you need Legos to teach programming then you're doing something wrong.
While I don't personally care for smallTalk, it has a simple enough syntax and was designed as a teaching language.
More important than language, you'll want to keep the kids engaged. Basically they'll need some results quickly, and printing strings to the tty isn't likely to count for much. That is one of the strengths of GUI programming, poping up windows, playing with colors, and stuff like are likely to keep the kids paying attention long enough to learn something.
- doug
I took a half year Intro to Computer Science class as a senior in high school. The class was actually paired with a half year of Principles of Engineering. The thing I loved about these classes it that they were very broad based. We did just about everything in a very basic form. I am a second year CS Major and I am still seeing stuff I learned in the class. We were able to get so much because we used Python but we started with C-- then moved to C then we learned python. Originally the course had used java but you need to know more to be able to have a good project at the end of the course. If I were to make a CS class for High School students I would do a similar thing as what I took. Concentrate on keeping things simple and make most of the point(like 50%) are for projects and labs. About 20% for small tests(only have 1 or 2), 10% for homework and the 20% for a final project. Our project was programming a poker game using a provided graphic library. We also got more than a week in class to work on it in groups of two. I would do something like this because it will give you enough time to do everything at a basic level but at the same time it will allow the students to get something at the end of the course that they can see and looks cool. We only had 1 test in the class and 1 quiz but each week we had a lab which we worked on mostly in class. My teacher would give a hand out the first class each week and would lecture off of it. After the lecture class we would then work on a small project that used what we learned. I don't know if this class would be good for the general person to take or if there would be a lot of support for it from the students but in my school(around 800 students) there was 1 CS class which had a about 5 people who actually wanted to take it and about 20 who were just filling a science requirement. The 20 students who took it and weren't interested in CS as much as I was did struggle and had a hard time but because of the Lab/Project based structure it allowed them to ask for help. I must say this, had the class been a full year of CS there wouldn't have been enough students to fill the class so I would make sure there would be some interest in the class before fully building the curriculum.
Have a look at the book How to Design Programs, which was written with a pedagogical focus and is a great way to teach the fundamentals of programming and problem solving. It uses an excellent free programming environment which should make it easy for students to get started.
...public school programs YOU!
If you disagree with me on social issues, then it's pretty clear that you are a narrow-minded bigot.
As a high school teacher, I appreciate the opportunity you're trying to offer: not many schools have computer programming classes, so that's pretty neat.
If your school is going to require this class, be very careful to think about different learning styles and learning disabilities. Programming goes well for very linear, sequential thinkers. It may not go well for abstract free-spirits. How about kids with dyslexia, dyscalculia, and/or dysgraphia? Will you have different levels of programming for different students' abilities? How about the kids who have already done some programming? How about your non-native-English speakers?
Additionally, think about what you want kids to get out of this class. Will they use it in other classes (sure, ideally they will, but look at the other teachers at your school and be realistic)? Do the kids need a typing/word processing/spreadsheet class more than programming?
"Two things are infinite: the universe and human stupidity, and I'm not sure about the former." -- Albert Einstein
How about a reading, writing, science, mathematics, history, geography curriculum for all high schools.
" I'm sure many of you would agree that everyone can benefit from learning to program and any help would be greatly appreciated!"
No actually, that's not true. Your letting your bias make decsions for you.
If you have a class for kids interested in programming, there are three goals.
1) Concepts. You just need a language that teaches the concepts that will be used in programming. The Lego IDE works well, as does Java. Once you ahve concepts, every language becomes syntax.
2) A language. You want something where they are writing the objects that is widely distributed and can be used on anything. I recommend Jave. Cheap to set up, Usable on a lot of platforms and devices.
3) Architecture. How to put a system together and create a system that has flexibility. This needs to be taught in a language where th students can code the connection easily and cheaply. I recommend Java.
Stay away from script languages because they don't really do much long term wise. IF you can write in a language like Java, C++, you can write in Python. That is not true the other way around.
The Kruger Dunning explains most post on
learn INTERCAL.
If you disagree with me on social issues, then it's pretty clear that you are a narrow-minded bigot.
I profoundly agree with teaching programming in high school as a mandatory subject.
More and more I (a developer) have to interact with other other professionals at management level that don't have a clue about what software can do.
I consider them somehow illiterate. I don't expect an executive to program, but at least to have an understanding of OOP theory. In a modern world literacy has to be re-defined, and surely besides reading one should know at least the basics of programming.
My opinions may be a little unorthodox, but here goes.
The catch is that it is a class for all students to take, not just those interested in programming, and therefore will focus heavily on teaching problem solving.
I think this is the most important part of what you are asking. I'd guess that when you ask most people this question, they'll think of the best way to teach computer science, or the best way to teach computer architecture, which will undoubtedly lead to thoughts of "No! Not that language!" and the like.
To teach problem solving using computers, you need to go from a top-down level, which rules out C or assembly. You also need to teach an interpreted language, not a compiled one -- if you want a quick-and-dirty solution to a problem you face, how many times do you pull out Java (or C++ -- I'm not anti-either)? I agree with your choice of Python for this reason. You need something closer to shell scripting, but not to the point of bash; it's not high-level enough and your students will be bogged down with syntax instead of learning programming constructs and problem-solving techniques.
It sounds like you are not trying to teach computer programming, at least not in the way either computer scientists or computer engineers think of it. Computer scientists need algorithmic analysis; computer engineers need architecture and low-level interaction. I understand that this is a cliched oversimplification, and to be really good at either, you need to understand both sides. But if you're not training these kids to be either one of those professionals, your goal is "Problem Solving Using Computers", which happens to require a knowledge of "Computer Programming". They need to know loops, decisions, and variable manipulation; the deeper you delve into computer science and architecture, the better for them, but don't lose sight of what you want them to be able to do on their own after the end of the term. If they walk out of your class thinking "I'll never use this", either they aren't the students who should be in the class, or you aren't teaching towards that goal.
This is slightly OT, but your brother might find it helpful to check out what these guys are doing: http://people.ucls.uchicago.edu/~bfranke/csreq/index.html There is a movement toward making CS a graduation requirement for high school, something tells me a few of your here would agree with this.
ALL of the greats in the World; Past Present and Future, were NOT well rounded! They specialized in ONE thing and did it extremely well. Trying to be "well rounded" is a path to mediocrity - which explains much of our state today.
Heh, apparently the ONE thing you decided to do well wasn't history. Ever heard of a Renaissance man?
"Anyone who [rips a CD] is probably engaging in copyright infringement." - David O. Carson
Take a look at Squeak -- it's targeted at younger children (elementary and junior-high) but versatile enough that high schoolers can probably get something out of it as well.
'He who has to break a thing to find out what it is, has left the path of wisdom.' -- Gandalf to Saruman
Am I the only one who finds Python cumbersome?
Cumbersome? Nope, but definitively brittle. Especially when refactoring and copying code from one indention level to the next its just way to easy to mess things up and ending up with program that is broken in very non-obvious ways, automatic variable declaration and such make the problem even worse.
Should have used Logo/Scheme/Lisp. You'll spend more time teaching syntax rather than programming/logic.
Take a look at
CompuSci without Computers
How To Design Programs
Well that's your problem - it should follow before it.
At the bottom of the
While they use Scheme instead of Python, which you seem to have settled on, the TeachScheme! effort and the book How to Design Programs are aimed pretty much at the kind of thing you are trying to do: HtDP is designed for universal programming education (aimed at either high school students or lower division liberal arts students in college), and TeachScheme! is directly aimed at teaching in High School.
(Linked Wikipedia pages because it seems like both websites -- and the main PLT website -- are down at the moment; the website links are on the wiki pages and I'd recommend going to those when they are up.)
I think everyone is putting too much emphasis on what language to use. No matter which one you pick the students will never think you were trying to make things easier for them. Instead I would suggest looking for local High School Programming Competitions http://www.engin.umd.umich.edu/contest/ Pick a language to match a local competition, Telling everyone that the top 3 students from each class, or however you want to do it gets to compete for $500 dollars will do a lot more for learning then picking an easy language.
Php, is fun,simple,advanced,and cool all at the same time, it is simple enough for the newbs,advanced enough to control pcs going unto your web page, quick enough not to overload the servers, and also web based, so as to allow more interaction by the students (all of the students today want a cool facebook page or myspace page).
The best also about this is its free, and comes free with linux also free for those students who cant afford windows. Those who have windows, can install webserver1.0, and run php directly from a home version of xp...dont need pro. So all your needs are taken care of.
You could always try .net or asp or vb, but again , license etc... might cost more then the student can spend.
I work in a university environment and have been programming for...a while...so when my son's Boy Scout troop approached me about teaching programming to some interested boys, I did a ton of research and came up with Alice.
If the goal is to teach programming concepts and logic, then it doesn't get much better than Alice. The course materials are already written, the language is easy to use, it's supported by Carnegie Mellon, and it's completely free.
The greatest thing about Alice is that it's an entirely visual environment, and it gives immediate visual feedback to the students which is PERFECT for younger learners. Instead of scaring students off by throwing them straight into code-hell by forcing them to learn the syntax of Language X just to print "Hello World" to the screen, Alice allows students to learn the concepts of programming in an entirely mouse-driven environment...and they get to watch video animations generated by their software within minutes of starting. That sort of simplicity and feedback keeps younger learners interested and hooks kids who might otherwise see it all as "greek".
The only complaint I had from the group was that I had only three computers to teach eight boys...they were literally shoving each other out of the way to get a chance to program. That's probably the best endorsement anyone could give it.
Some people might complain that Language X or Language Y is better, but the reality is that you're teaching kids, and that any language they are taught today will be abandoned or heavily revised long before any of them are ready to jump into the field. As a teacher, you're better off teaching them in an environment where they can focus on concepts, and NOT syntax.
Go to Alice.Org>About>What is Alice and watch the video at the bottom. It shows the language in action, shows the feedback, and demonstrates the concepts it promotes.
There is nothing so pathetic as seeing a beautiful young theory roughed up by a tough gang of facts.
None of them could be great in the modern World. All of your examples are form primitive man - anyone with a half decent brain and the means could have been a "Renaissance man" during the times you mentioned - cannot happen today - the World is TOO complicated. I stand by my original statment.
When I learned how to program in the mid '80s, I was greatly aided by a course I had been forced to take (and hated) in High School. That course was Typing. My own take is that I would like my children to learn programming as a 'fallback' like how men in my generation could always bang nails if the going got tough. I was more excited by this plan in the 90s when programming was actually lucrative but it will still serve. Even in this crap economy there's still lots of programming jobs. So I'm all for your course plan and Python seems okay as a language (boring but so was typing). Firebug has a nice built-in Javascript console so you might want to consider that.
Storm
Its actually useful from the start, and is the best documented programming language. When I was a freshman College and relatively undecided on my major, I browsed through a few computer science books. I failed to get excited about the usual examples given in such books. Converting Celsius to farenheit seemed pretty useless, atleast not worth the effort of coding. I didn't see a situation where i would have to do many such conversions at once. I did not want to create calculators. There was a pefectly good working calculator on my computer already. And as I understand it they were invented over a 100 years ago. I did not see the point of creating random objects such as animals making noises that are usually taught in an effort to introduce object oriented programming. I haven't even been to the zoo in a decade. I did not want to know how many people are logged on to my computer right now. As far as I knew only one person could be logged on to my computer. Everone else had there own computer anyway. I think beginning programming courses should teach you to automate everyday tasks. computers can do anything. There are three reasons to learn computer programming. The most important reason in my opinion is to make your on life easier. A second reason is for intellectual development. So much of education is about memorizing and then forgetting and letting someone else do it better. Computer Programming allows you to think and do. Hopefully think more and do less. But this usually comes after having done more and not wanting to do that much. Computers can do whatever you can do with computers and whatever you can think of doing with computers. The interesting part is that they can do these things while you are not there, or when you are too lazy to do them yourself. As far as things you have seen people do with comupters, you can learn to do them yourself. And you can usually teach a computer to them also. The great thing is, is that computers don't yet have rights, and its not considered unethical to "use" them. Programmers are first users. Users would be better users if they were programmers.
I didn't get any math education during 6th grade, because I tested into Pre-Algebra, but it was too much trouble for my school to get their hands on any Pre-Algebra books, or to bother teaching me, and the small handful of other kids who qualified. (I'm not sure why they bothered testing us, in the first place, under the circumstances.) We were told that we would have to take general math again, in spite of the fact that it was a complete waste of time. We were so bored, we would have been willing to self-teach, if we could've just gotten our hands on some damn books, but no. And my neighborhood wasn't rich; the families couldn't afford to buy textbooks out-of-pocket.
This is probably why I roll my eyes, every time I hear someone going on about how "evil" tracking and labeling kids is. If you lump all the kids together indiscriminantly, whether you're teahcing to the highest common denominator, the lowest common denominator, or the average, you're always screwing somebody over.
They could also learn some typing and/or proof-reading skills; I'm sure that'll come in handy when they post on slashdot ;-)
I can report on my own experiences.
As part of my High School experience, one math lesson (or was it the good part of a day?) was carved out for programming our TI-83 calculators. Having already programmed it (hey, it's programmable; no, I didn't make it run Linux), this was fun and relaxing, and my program for solving second degree polynomials had more than just myself as a user.
But I seemed to pick up a general attitude of "We don't like it".
I can also report on being in their shoes; in my probability-and-statistics course, I had to proficiently use SAS, or at least proficiently invoke something called "Proc GLM". It's probably a mighty fine Proc, but we weren't taught anything about SAS which made it somewhat difficult to do anything except copy what we were shown.
So, if you decide to teach some programming, you have to go whole-hawg. Teach them from the ground up. Don't leap-frog over some detail assuming it won't matter: when you get compiler errors phrased in terms of things you haven't been told about, you're lost (through no fault of your own).
the ones that have gotten programming in
hs and college are less prepared as professional
programmers than those with no formal training.
They're also more likely to spend (i.e. with overwhelming probability waste) time looking for a polynomial-time algorithm for doing register allocation.
And... what the f? Having implemented a compiler as part of my university classes, I'm less prepared to work on Google's V8 compiler than a person with no experience at all?
Either you're flat out wrong, or I'm not sure we agree on what you're saying.
As a tutor in a CS university, I have just finished helping my teachers manage an introductory programming course in functional languages. They figured (I wholeheartedly agree) that functional programming is a great way to get started, because it is high level and it forces you to think about coding instead of "coding now, thinking (maybe) later". They were thinking about using Scala, but then I suggested F# so that we could use some .Net library for making games (like XNA) to create more engaging assignments.
I also believe the amazingly strong link between functional programming and logic makes FP a subject that might be of a more general use to high school students than traditional imperative programming with its weaker ties with maths and logic in general.
My book: Friendly F#, fun with game development and XNA; my game: Galaxy Wars by VSTeam; my gamedev language: Casanova.
unless it's been mentioned and i ahven't noticed:
alice.org
scratch.mit.edu
you said for all students, so i assume this includes the ones who are not 'naturals'. give these a look over, they are mostly to convey the basic ideas of programming (at least object oriented and procedural). mit's scratch seems the most promissing to me though, but i'm not a teacher.
Based on no personal knowledge whatsoever - I just saw a reference somewhere - take a look at Kodu. It appears to be a programming language for building games that is designed to be accessible to kids. That way you could teach the basics of algorithms without getting to bogged down in syntax. As a bonus you might be able to get some financial support from Microsoft since they'll be interested in building a market for their product.