How to design a CS curriculum for middle/high school?
I want to help my hometown high school develop a CS course, because I want to give something back and as a fun side project. The main challenge I see is delivering the message that CS can be fun, useful, and allow one to build incredible things. I took my first true CS class at Harvard's Summer School when I was in high school, and it was this really fun, mixed up collection of programming, history, cryptography, design, GUIs, algorithms, etc. It was weak in the department of giving me tools to do something myself, but that was probably it because it was the first in a series of courses. However, it equipped me with the interest to actually pursue the subject, and I also believe strongly, especially for CS, in learning how to learn and loving curiosity. I think showing the breadth of CS will both appeal to cynical teenagers and also engender a feeling of unity with the other subjects and teachers. Does anyone have any leads or ideas on some really good curriculum ideas?
13 comments
[ 2.7 ms ] story [ 34.8 ms ] threadPython would be another great alternative to introducing programming games for kids particularly if you use PyGame. We used Turing in high school, but I think it would be a better service to the kids that they learn a language used in the real world and that has some capabilities. If you can teach Turing to students, you can certainly teach Python.
+1 on this -- my first attempts at programming were with ZZT and it got me hooked.
http://en.wikipedia.org/wiki/ZZT
http://www.alice.org/
I know programmers in my town who have used that for learners in the same age range you are considering.
My son had a distance learning course (which, alas, seems no longer to be offered) based on the book Approaching Precalculus Mathematics Discretely
http://www.amazon.com/Approaching-Precalculus-Mathematics-Di...
that was a good example of using functional programming (in Logo) to investigate mathematics. The book appears to not be in print anymore, but still available from some booksellers, and is a good glimpse at what some high schoolers can learn if they have enough mathematical background.
The local programmers I know who teach classes for that age group are now mostly doing Python courses, as there seem to be quite a few good introductory texts on Python, or else teaching Ruby.
Although, tbh, the code coverage is kinda weak, so I would supplement it with a C or C++ discussion (K&R is tough to understand, but I think for younger kids it's better to start with the fundamentals)
I think it's a good idea, and if I ever came into a situation where that would be possible, I'd gladly teach high school CS.
As for actual course material, I'm not quite sure. Python does include a turtle module, and that's pretty classic for teaching programming at least.
Good luck!
Ruby For Kids is interesting too, but I think it's a little too advanced for an intro course: http://ruby4kids.com
I agree that history is important too. Some of the more applied CS can be interesting (graphics) but I wouldn't delve too deeply into the more difficult stuff (crypto, algorithms) if this is just an introductory course for kids.
Every year, I speak to local middle school kids (7th or 8th grade) at their "career day". They are all totally fascinated with what I do, because kids nowadays (yes I know I sound old) live their whole lives online and surrounded by technology.
The school where I visit is really average, some rich kids some poor kids, all kinds of backgrounds. The format of this career day is that each class period somebody will come and talk to the class that is somewhat related to the subject - so I usually end up speaking to a math or computer class. In a class of 25, there are probably one or two kids who already know some limited programming (or have made a website). Almost everybody that age is online (all Facebook, a handful of Twitter and MySpace) and plays console video games. Probably about half have cell phones.
When they ask me questions, it's usually about how to steal their friends' Facebook passwords, conceal their browsing history, or build their own video game. I do spend some time talking about privacy, reminding them that their behavior online can stay around forever and that they should be careful who they are talking to online.
Good luck with your class, I'm sure it will be a rewarding experience for both you and the kids..
+1 for bhousel's suggestion for LPTHW.
Another thing to look at is the Lego NXT robot, which uses very Scratch-like software (drag and drop action and control flow elements) to control a real robot that they can put together with Lego pieces.
I wouldn't downplay the importance of having a python prompt or a c compiler available, though. It may not seem as exciting as drag and drop programs, but to some kids it is more exciting (it was to me when i started programming, certainly).