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!"
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 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...
But i have heard of a lot of people that after programming for the first time loved it so much, they changed their future career plan.
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?
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.
I concur - the same happened to me. Of course, programming had the sizable advantage that a Latin degree isn't worth nearly what it was 1,000 years ago.
I'm disabling ads until because I choose not to reward redesigns that are less usable than "view source".
I took a programming class in highschool. They used ThinkPascal on some old Macs. I was always upset how limited the program was - very limited graphical options. I could line trace, that was about it.
That being said, the interface was very intuitive. Commands automatically were bolded and there were a lot of mandatory line breaks and tabbing which made it easy to figure out how deep into your loops you were.
I don't code for a living. I write long equations in excel once in a while, but that's about it.
The language isn't as important as the interface. Something with a pretty interface and intuitive commands is what's needed.
Arguing with an engineer is like wrestling a pig in the mud. After a while, you realize the engineer enjoys it.
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
It didn't work like that for me. In high school I was very happy to take a programming class using C, technically C++ but we never got to objects, but when I got there it quickly started to suck.
Our teacher was a bastard, all of our assignments were text processing, using functions that we had to write our selves. I could do it but it sucked and wasn't fun so I basically swore off programming for the next two years of high-school.
In college we had to take a programming class which I wasn't overly happy about. The language we used was Perl, and there was a good amount of text processing in that class also but it didn't suck for two reasons.
1. We used a language that was appropriate for the type of assignments.
2. The class was well ordered, we had an end goal, we were given a project at the beginning of class and every assignment was designed to help us complete the project.
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.
If the job is to teach programming to people who don't care about it, I'd probably start with plain HTML and CSS. Thats of course not exactly real programming, since not Turing complete and all, but it teaches you the basics of how a computer works, that data and presentation are seperate and all those very basic things.
Understanding those basics about how a computer works is much more helpful in the long run then something very abstract like sorting a list, since it applies to almost all daily computer use.
Moving on to Javascript later on would of course always be an option. However one thing i really like about Python is its interactive interpreter, which allows you to get started in no time and gives you clear cut error messages, with Javascripts always a little obscure what exactly went wrong.
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.
+1
I totally agree. I do both JS and python programming.
python for server side, JS for client side, and python errors are much more human-readable/understandable IMHO.
And the interactive interpreter is a godsend for fiddling with a messed up class function (ie temporarily redefine it)
...public school programs YOU!
If you disagree with me on social issues, then it's pretty clear that you are a narrow-minded bigot.
I'm actually teaching a high school class on the basics of programming using Javascript for that same reason. I chose that language because their network is so tied down with restrictions, we never would've gotten the network admin to allow us to install a compiler, let alone an IDE.
There is absolutely no need to teach about bits and bytes: they are only incidental in actual programming. Programming is reasoning about actions, evaluation and transformation. HTML and CSS simply do not help with that.
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
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.)
You are probably the intended audience for the "general programming class". This is the crowd that wants to solve a really big problem, and doesn't want to get bogged in the details. Someone is going to write the compiler for you, write the functions which do something you need, etc. You just want to integrate packages, think big and are happy to hack and slash bugs as they crop up. I suspect that most people who use computers to accomplish a task, want to know simple ways of automating mundane tasks, etc. Programming as taught in school doesn't do this for you, because it's not programming, it's "computer science", the class title "Intro to programming" is what misleads. This is in my mind what the poster really wants to do.
I agree that #2 is how all applied math/science classes should be taught period. But #1 is the same as "shortcut for hard problems". For "general programming", this is acceptable. For professionals and for those interested in computer science, it's absolutely not. And this is the source of your frustration.
For those of us into the science of it, this represents the core of our art. Strings are just a simple instantiation of the abstract concept we deal with. Strings are easy to print, observe and debug...but they're just a metaphor. After 20 years of reading them, we can spot problems and patterns very quickly, so they're convenient.
As for using languages that simplify your problems for you, this poses issues to professionals for many reasons. First, because depending on your line of work, using an interpreted language and in fact using anything other than straight C/C++ may be problematic at best, forbidden or impossible at worst. Second, because in the real world, you still end up having to do a lot of string processing even if you're doing something relatively invisible like device driver development. Third, when it is possible and desireable to use specialized languages, you often need or want to understand them more fundamentally than by surfing the web for documentation. At some point you can learn perl, python, ruby, javascript, etc. in mere days because you know the fundamental elements of the language, you can scan a manual for syntax and the few differentiating factors and quickly apply them. In a sense, you have been taught how to think about them. Fourth, and most important, because the skills, algorithms and implementations you use in doing that string shmooing are essental to pretty much everything else, which is why your curriculum was taught that way.
So maybe you didn't like your programming class because it wasn't what you were looking for. You took the course because you thought you needed something but computer science wasn't it. You needed a tool, not understanding. High school does seem like the most appropriate place to teach people how to use tools. That's what I think the curriculum for a "general programming class" should be.
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.
Since when? I graduated HS in '04 and they were definitely teaching to the lowest common denominator at the time. Good ole NCLB. I wish they were teaching to the highest common denominator. It's better that the kids who are actually going to go on to higher education get a good foundation in high school than to set the bar low so that those who are just going back to the farm/McDonalds don't fail at anything.
I was a classic underachiever, none of the curriculum from elementary school onward was challenging enough and I never took school seriously because it was so dull. I got by with a C average by acing all the tests as I tended to skip school constantly and not bother with homework.
I really regret it now. Obviously, it's not just the school system's fault. I should have taken it more seriously, but I was a bored teenager. If the curriculum and been more engaging and challenging, I might have looked up from my books for more than correcting my teachers.