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".
Why force this crap down peoples throats? This is what must have happened a few hundred years ago when people thought I would benefit from learning British Literature.
I'm a programmer, and I'd never use this crap outside of...programming?
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.
Step 1: Decide whether or not you intend to teach computer programming or programming advocacy.
Script hacking and web programming are great fun. They'll tend to draw in folks who have the interest and talent to develop computer software. But they will teach you very little about actual computer science... you'll have the modern equivalent of fogeys who proclaim their programming expertise in Excel and Dbase.
Step 2: If you picked advocacy, you're on the right track with Python and Mindstorms. You'll make it possible for your students to assess whether they have the knack for computer programming in a manner which is highly engaging.
Step 3: If you picked programming, select either pascal or java. They are the best-of-breed languages for illustrating correct functional and object oriented programming technique respectively. They're not particularly flashy and much of the course will involve teaching students what -not- to do, but students who are genuinely interested in computer programming will find that you haven't wasted their time with mere toys.
Moderating "-1, Disagree" is simple censorship. Have the guts to post your opinion.
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.
Logo
Am I the only one who finds Python cumbersome? When I program in Python I feel as if the language is trying to stay in my way, it is somehow as if I have to fight against its whims.
I would recommend Starlogo TNG to teach programming. It really helps people visualize the building blocks that constitute a program. And, given its 3D graphical nature, it attracts high school students (who play Halo or Doom after school [yeah, I am antiquated, I was going to say "play a nintendo" but that would be antiquated even for me]).
Ubuntu is an African word meaning 'I can't configure Debian'
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.
I would look for something really quick and easy to get a basic game type system up and running. Looking at the current software out there, I would actually suggest VB. The code is pretty straight forward, and the GUI design interface is basic cut and paste images. Have the class come up with an idea, divide people into groups and everyone works on a part of the project. This should teach them about problem solving, and real life team management. Some kids might be better at drawing the interface, other might be better at back end coding work, but that's real life. In the end you'll have a game or something that they can share and feel some kind of ownership of as well.
How do you figure?
In the sense that everyone can benefit from learning calculus if they decide to pursue an advanced degree in science?
Programming is less applicable than your higher level maths. Compared even to trig, something I believe all HS students are required to take, it is far less useful; and many people will never even use that. I can't program any aspect of my car, house, or lawn. Programming aptitude is only useful in your professional career is VBA scripting in Office can increase your productivity, or you are a programmer or in IT. For the latter cases you're most likely going to want a CS degree anyway, which will include programming courses.
Everyone can benefit from being fluent in Greek, in very specific applications, it doesn't mean everyone needs it; or should be made to learn 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
I am not a teacher but I am a software expert with age 10/12 children.
It is going to be hard to sell the kids a one-size-fits-all approach. Some of them will already be software experts, some will be wired for maths, others for artistic design, others for sound. Some will learn by instruction, others by doing.
I would therefore tentatively suggest projects of 4 to 5 kids each using Blender. Blender is, of course, the GPL 3D modeler. It is capable of great visuals, raytracing, fluid simulation, animation and sound.
However it is also capable, via its Python binding to perform calculation, imprint rules on the model, connect to the internet and databases and so on.
I think there is something for everyone. The artistically minded kids get to create some cool models and textures. The kids who like to "look under the hood" can get their hands dirty with some programming - potentially very cool/complex programming if they want. The scope of the work can grow to accommodate whatever they want whether in the visuals, maths, networking or what-have-you.
Because they will be working in small teams, they will need to rely on each others skills and understand basic project management methodologies about scoping, prioritisation and so on. There would be plenty of help online to those that need it - promoting research skills.
At the end the work could be showcased and a prize offered. It might help if a method could be worked out so each kids gets something out of it that could be shown to a university admissions officer later.
Example ideas: Dinosaurs (modeling, animation, movement, AI). Something there for everyone!
I hope thats helpful. Good luck.
*unfortunatly alot of this information would depend on your geographical location and what age group*
To answer the question off the bat, I would personally recommend (depending on platform) basic for PCs, or future basic (mac)....or HTML.
Especially if this is getting forced down every kid's throat. These are realativly simple languages where they can get a feel for what real programming is like. They are also something that kids would be able to play with on their own PCs if they have them. Anything more advanced and your getting into a more advanced math, logic, and general PC knowledge. Realistically, programming isn't worth jack to most students. Just guessing here, but your more than likely looking at maybe 1-2 students per 20-30 that might even go near that field in their futures.
The most optimal way to organize high school programming in my opinion is 2 classes. For example, start out the junior year with something like Basic. Then if they like it, and "want" to take it, offer them a more advanced language their senior year, something like visual, C++, java, or python. That would be my recommendation.
the ones that have gotten programming in
hs and college are less prepared as professional
programmers than those with no formal training.
I am a complete advocate of python being the "programming teacher" language as it is by nature cleansed of lots of demotiviers of learning, in other words has quite a simple syntax.
on the other hand, this will mostly result lots of students most of whose just lack the analytical talent to be gradually prejudiced against programming at all.
this reasoning could be based on the reaction to some obligatory programming courses for non-cs graduate students. they mostly end up just hating the concept.
instead, you could form a hobby group or such, to support those who actually like it or just inclined to give a try about it.
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.
So are we going to teach Auto mechanics, plumbing, cosmetology, and all the other trades available at a vocational school too? Forget english, math, and reading, who needs those skills anyway. Absolutely absurd idea.
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.
When i was in high school i was required to take a C++ course and i learned alot. I am an engineering grad student and the only thing i have ever programmed in for school or a job is C or C++. I cant attest to the advantage or disadvantage over other languages, but id say C++ is the language students are most likely to see again and its pretty simple once you have the basic steps down.
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.
What you are looking for is RURPLE!
is like turtle, but using Python
http://rur-ple.sourceforge.net/en/rur.htm
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.
I'm actually in a high school programming course right now.
We're only touching base on Java.
Python would definetly be more entertaining though.
I learned Visual Basic at a class in highschool, it was a horrid experience, and I had trouble getting the grasp of it, which was just as well, since it gives you a (in my opinion) distorted view of programming. Before that I learned (just a little) C, which was OK, but it's troublesome when it comes to setting up programming enviroments and compiling.
In the university I had a course on Java, which was obligatory for all that took scientific courses. I think 10% (or more) of the people that took the subject failed. I also had some problems understanding certain aspects of it, even though I had some experience programming by that point. Moral is; don't introduce someone to programming through a 100% oo-language.
I've never really liked Pythons syntax as it differs to much from other programming languages, and prefer Perl and PHP as scripting-languages. Though it is said that Python is supposed to be a simpler language, I think that Python's importance of whitespaces might distort newcomers' view of how programming/"interpretation of code" works.
Lately, wondering about what would be the best newbie language, I've been a bit fascinated by the second generation BASIC-languages. I've never tried it, but it seems to have a really simple syntax and the functionality neccessary for making an introduction to how programming works. Although I don't think it would fill out a whole semester, only the first weeks/months.
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.
My first was c but I guess most kids won't like fiddling about with pointers and memory logic like I did. Python or Java is probably a good idea. Easy to use and useful languages too. I think the most important things are to teach correct coding techniques and an understanding of what is happening behind the scenes as these can be applied to other programming languages that the kids may learn in the future
Smalltalk, although dated, is probably still one of the easiest languages to comprehend in terms that a non-programmer would understand. It's simple syntax and 'everything is an object' mentality make it a perfect starting point to launch into other OOP languages as well as a user-friendly language for problem solving. Try this... write a method in SmallTalk that queries it's virtual machine and finds the average method length of the methods provided in the API. Last I checked, that number was a little over 6 1/2 lines per method... that's what I call power and usability in a nutshell.
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
You should check out:
http://wiki.roboteducation.org/
They have robots (non-lego), art, music, and games.
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
"Once you ahve concepts, every language becomes syntax."
Not really. The reason we have multiple languages is so we can do things differently. Try writing a quick bubble sort in Postscript. Postscript is stack based. All the ways you usually do things (like defining variables for instance) don't work in Postscript. Admittedly, Postscript is an extreme example but it does demonstrate the general principle. (Yes, Postscript is a programming language.)
The trouble with thinking that the only difference between languages is syntax is that you end up trying to force your existing concepts onto a language that isn't suited for them. You lose the advantages of the language or worse, you make the language work very inefficiently.
"Stay away from script languages because they don't really do much long term wise."
Actually, Python is very extensible. There are lots of very large programs written in Python.
The main advantage of Python for teaching programming is that, like Basic, it is easy to learn to program simple programs. Like Basic, Python's syntax is simple. Unlike Basic, Python will take you just about anywhere you need to go, short of device drivers of course ;-)
The trouble with C, Java and C++ is they have a bunch of cruft that tends to confuse beginners. They aren't good teaching languages at all.
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.
Are you kidding me? Teach them how to do something besides playing videogames first. Start with the basics - 99% of children don't understand how computers work (outside of the push the "Start" button to shut down scope)... teaching them how to program in school, is like forcing everyone to learn how to take apart a internal combustion engine before giving them a drivers license.
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'd start off with something basic that gives immediate results that are appealing, such as Logo. You can get a lot of the basic structure of programming in logo. http://en.wikipedia.org/wiki/Logo_(programming_language).
After that i'd go to something a bit more programming worthy, like C++ or Python.
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 stand by my always first choice to teach programming: QBasic. It might not be the most useful, most up to date, etc, but it is the most straight forward and forgiving language / IDE that I have ever layed hands on. It just works, and actually tries to help you format your code correctly, rather than go straight to a mysterious error message that a newb will never decipher.
You don't want a language with pointers. You don't want a language with a lot of syntax shortcuts (I can't keep slices straight when I dabble in Python). You don't want something with objects. You want barebones variables (integers, floats, strings, and booleans) and functions/methods, preferably with simple textual I/O and graphical I/O.
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.
Thank you for repeating this very, very old question.
If you need to ask this question on /. then you have no business in education
Please remove yourself from the gene pool at the next possible opportunity
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 propose that the best language to learn on is the one with that has the least amount of you-must-do-this-before-the-code-will-run. The "m" language in MATLAB is really nice and so is the environment. MATLAB is very expensive but educational licenses are available. Last time I checked college-student licenses were like $75. Octave is an open-source alternative that mimics MATLAB in many ways.
1. It is script-based so there is no compile process. This makes writing code move very fast.
2. There is no "#include" or "use" or "import" to bring in libraries. The environment simply makes the libraries available. This cuts through the crud.
3. You can execute commands from a command line and call built-in functions from the command line. Its a good try-it-then-code-it setup.
4. It has nice graphical data display so it is visually stimulating to students. Cool.
5. Error messages are fairly clear and clicking on the error text takes you to the line of code with the error. Easy to understand.
5. It has functional and object-oriented programming.
6. No pointers. Nice and clear, no indirection.
7. Automatic memory allocation.
Example:
%
%comments look like this. this is an
%example of a completely executable file
%all the student needs to do is press F5
%in the MATLAB editor to run the file.
%
numbers = [1 2 4];
sum = 0;
for k=1:length(numbers)
sum = sum + numbers(k);
end
sum %line without semi-colon displays the value
% the following is output on the
% command line
%
% >>
% sum =
% 7
%
plot(numbers); % shows line-plot of index vs. value
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.
I tought myself QBasic when I was 7. If high school kids can't do that, they deserve to fail.
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.
I don't believe programming is the right tool to teach this.
Problem solving is a key component of any real world math problem. Having students learn this skill through programming just adds extra complexity to the process (this is what this syntax does, this is how you organize programs, etc), not to mention that programming involves lots of abstraction. Not to say programming education is worthless, but let us not force it on those that don't have an interest in it.
It's arguable that if students aren't learning problems solving in our math classes, then those math classes have little worth.
Instead, our schools should have their geometry students build things and measure their world with geometry (sometimes outside of the classroom). We should show more of the applications of algebra across the sciences and ratios and real life scenarios involving costs and supply.
I couldn't find any related projects for using Python as a language on Mindstorms. It would be much appreciated if you could point me in the right direction.
I don't know. I have an issue with the premise of the original post, but Javasrcipt...I don't know. While I definately get and couldn't agree more about the "no need to learn bits and bytes" concepts, the higher level the language, the more assumptions are being made.
Teach, "Here put this line of code."
Student, "K...what's it do?"
Teach, "It includes an external file."
Student, "It does what to who?!!?!"
Now, I am kinda anal and I question everything I do. I despise most WYSIWYG tools for the precise reason that there is all this "majix and vudoo" going on all over the place. There was NOTHING I HATED more in class than to have some professor tell me, "Just do it because I said so to make it work."
That being said, I honestly don't get the premise of the course. Why would someone who is not interested in computers take a programming course? (other than because some bozo admin decided it was a good idea). If the intent is to teach programming, well then, immediately we have to go back and readdress the bits and bytes question. Those topics are not crucial to getting "Zips and wows" to flash on the screen, but they are pretty crucial to fostering **good** programmers. No, I don't think a kid needs to be able to do Xor calculations in their head, but they need to at least understand the "majix and vudoo". (those who disagree are likely the same scriptkiddies polluting our world with mem leaks, useless and wasteful overhead and other horrendous practices that they don't even realize are an issue)
If the intent is to teach structured problem solving through logic, then I say get rid of the coding all together. You do not need code to teach these things, and from my experience it just gets in the way.
And to the sorting lists guy...the point behind teaching the bubble sort is not to impart the most essential and crucial aspect of design and coding, it is to give a simple problem to someone learning a syntax, as well as to show "People can just move things around, with a machine you have to use some tricks. For example...". Noone has ever claimed Hello World is crucial to structured programming, and I am unaware of anyone who has done likewise with list sorting. When my sons first asked about programming, the FIRST thing I did was write down a list of random numbers and say, "Ok, explain to me how to put those in order."