Seeking Advice for High School Computer Curriculum
Cannon asks: "I have been hired to teach a high school computer class next year. It won't be a programming class, as another teacher in the district will teach programming. Otherwise, the design of the curriculum has been left up to me. I am looking for suggestions regarding what should (and shouldn't) be taught in a high school computer class. "
I guess what I'm advocating is make the course "Introduction to Unix and IP networking". Teach the basics of navigating Unix, encourage those with programming experience to write little Unix programs and shell scripts. Teach basic IPv4 concepts--networks, subnets and netmasks, addressing, routing, how DNS works. Do as much hands-on stuff as budget and lab facilities allow.
Also--I think sirket is a little off base--good vi clones are standard in every Linux distribution I've ever seen (nobody's forcing you to use emacs), the route ccommand is subtly different on almost every Unix flavor out there, and the GNU tools are something that practically every sane sysadmin makes sure to have around, especially in a multiplatform environment. If I'm setting up a Solaris box, I make sure and install enough GNU tools (less, gzip, screen, etc, and yes, Emacs) to keep me from cursing constantly as I try to administer the machine.
-Doug
There is a program called ITM (information technology management) that quite a few schools have implemented. Basically you get a class of elite geeks and let them do whatever they want for the year.
For example, in my grade 12 class, last year, we set up a network of linux boxes with all sorts of services like dns and NIS. Another group of kids were working on robotic projects. A few others worked on web pages. Some people even had the opportunity to work towards their CCNA.
I'm sure if you do some searches for ITM, you will find all sorts of information about it.
There is one downside; the freedom allows lazy kids to abuse their time. There was a measurable amount of students who didn't do work all year long.
-- DrZaius - Minister of Sciences and Protector of the Faith
To make it a real educational experience, focus on ideas, not implementation. Teach the students what designers behind technology were thinking, and what led them to come to that solution for the problem. Don't teach them how to surf the web, teach them that the ideas behind the Internet are layering abstractions (Ethernet->IP->TCP->HTTP) and distribution (router only needs local map of network, not what whole internet looks like).
;)
Have the students come up with simple pseuodocode algorithms for finding the maximum element in an array, or how to multiply two numbers using only addition and subtraction.
Put the students into groups and have them make a proposal for a new software product or a new web site. Then can make a mock-up of the site or program using storyboards or HTML. Have them talk with potential customers to design their interface
Show them many different implementations of an idea, and ask them to critique it, such as a word processor - Word, WordPerfect, StarOffice, ed
I believe that many important ideas in computer science can introduced at a level easily grasped by beginners. Just figure out what are the central ideas behind something, and how you can relate them in simple language.
One last thing - encourage the students to play with computers and learn on their own. If you can impart them with this quality, it will last them much longer than knowledge of how to do a query in Access.
Scuttlemonkey is a troll
Hmm... I understand your point about introducing a programming mindset, which I think is an important general skill (like learning liberal arts). But I think that we geeks can often forget how computer-illiterate most people actually are. Even in college (Princeton) most people have a fairly limited ability to get any real work done with, say, a good spreadsheet. These students will some day be typical, white-collar workers: management consultants, ad/marketing folks, etc. They have a real and serious need to develop these skills, but they will likely never have any need for C in their entire lives.
I think the more important thing, though, is very much like what you were saying: it takes a long time to get good at programming. People who only take one computer course in their lives will not learn a useful amount of programming, so I think we would do better to focus on skills that they can productively learn in one course.
--JRZ
As someone pointed out it's hard to suggest subjects without knowing the level of the course. Here's some I would use:
1. History of computers
2. Basic/Advanced Word Processing
3. Basic/Advanced Spreadsheets
4. Basic/Advanced Presentations
5. Basic/Advanced Database work
6. Integration between 2-4.
7. Basic HTML
8. Some sort of project maybe
I would stay away from things like Unix, Networking etc except at a very very high level. That's assuming you're not teaching a bunch of grade 12 pre-University Computer Science students.
Point 2 could include desktop publishing and 3 could include some accounting or science applications.
The average nongeek student isn't going to care about any form of Unix, my sister uses my Linux box and can't understand why she needs to login to the thing. Remember KISS.
Keep It Simple Stupid. A good thing to teach would be the ablitiy to reason and just to read the damn screen. So few people do that anymore.
Teach the kids the basics of UNIX systems. Try not to use Linux if at all possible because there are a variety of programs under Linux which do not work the way the rest of the Unices work. (Examples include the route command, the use of emacs over vi, and a variety of other GNU utilities that an OS such as solaris or hpux do not use.
You should either teach them on solaris x86 or one of the BSD variants. This will give them the most power when they get out into the IT world and are faced with an E4500 with mutiple NIC's and they need to turn off routing.
-sirket
Having graduated from high school two years ago, I have some ideas about what I would have liked to see in a computer class. I'm going to make some assumptions. Firstly, this class sounds like an elective so be clear as to just what kind of student your trying to attract here. If this is going to geared towards someone who knows nothing about computers except web browsing and hotmail make sure students know this before signing up. okay then, I'm assuming this class is for someone who knows basic computer hardware terms, and feels comfortable with basic computing tasks like installing an OS or what have you.
:)
:)
1. computer hardware. talk about how various components of a computer work and interact. Not just a 'this box contains a cpu' but more of showing just how processor clock speed isn't the whole story to a computers speed and how a processor accesses memory(bottlenecks). Give students two weeks to put together class presentations on a computer topic like 'Athlon vs. PIII' or 'what actually is a mp3 encoder doing to wav files?'<---not hardware I know
You could probably do a whole semester on hardware alone but it's not really what your would probably want to do. Maybe 1/2-1/3 of the semester.
2. OS's I wouldn't bother with windows too much(students KNOW windows) but how about an introduction to Unix systems? I wouldn't spend a huge amount of time on this but I think it would be good to show basic commands and what everything looks like, maybe some BASH stuff
Definitely, some X window stuff(which I'm sure would flare interest). (one little thing I show people who are new to linux is to type xmatrix --root in X. Having a screen saver like that as your background always gets a 'cool!' from people)
3. Networking - spend a little time learning about networks (what a DNS server does ect.) and (resource permitting) have groups of students responsible for a computer and have them setup a couple servers and practice using what they've learned.
Okay, finally I have always had a couple tips to keep classes like this interesting <rant>
1. demand a lot from students, truthfully the more you expect the more you'll get
2. keep it interactive and rewarding. no matter how good you are at lecturing, lecturing about some linux command or how to install a network card == sleepy time.
3. allow students flexibilty to do their own projects(within reason) ]
4. super important! with most projects tell students you'll give extra credit for doing something above and beyond the project.
As an example of #4 a friend an I had to write a program in PASCAL when I was in high school. As a final project we had to create a non-trival type program. Instead of just doing something easy we devoted 5 hours a day over 2 1/2 weeks into making some really cool(full featured tron game in svga). Why you ask? Because we were going to get 10 extra points for making something in graphics mode! All it takes sometimes is a nudge. Well, enough ranting.</rant>
I hope you find this somewhat informative, I think I'm going to go play that tron game for a bit
Brett Gengler
(EE student)
I would suggest some minor tweaks to the course outline in the parent post.
Most notably, I would deemphasize the more application-oriented aspects of the outline (spreadsheets, presentations, and to a more limited extent, databases and HTML.)
I would argue that kids are smart, and can figure out how to use commodity software on their own. A working knowledge of Office is a basic skill nowadays, but it is a skill easily imparted.
Without going into too much detail, put it this way: What is the value of "knowing Office?" Appreciable, but not great. Knowing HTML? Greater, but the skill is becoming a commodity. Knowing C? C++? Java? Perl? Significantly greater. Besides teaching kids that will let them get some real work done on their computers, you will be giving them an early introduction to the programming mindset -- which, given the poor introductions I have seen at most colleges, is of considerable utility.
I'm assuming this is intro-level, in which case, as much as I love Unix and Linux, I think they would be a pretty poor choice. People who will probably grow up to be white-collar workers need to learn real word processing, presentation, spreadsheet, and database skills much more than they need to know how to switch modes in vi. Basic computer concepts would also be important: how does the internet work? What is HTML? What is a microprocessor?
I would encourage cross-disciplinary projects along the lines of the "choose your own topic" possibilities that others suggested. Have people prepare a web presentation with detailed charts and graphics about the growth of the internet or the changes in the use of computers in the workplace. If they are restricted to choose good, on-topic projects, everybody would learn from them.
So, if I had 12 segments (weeks or whatever), I'd do:
It's a big help if you can emphasize hands-on learning, and that's part of what's so great about computer classes. Topics (like intro to networking or social issues) that don't lend themselves well to hands on work provide a great opportunity for students to hone their charts/presentations/HTML skills by using them to format simple research projects. This is more of a plan for a full-year high school class or a one-semester college class, I guess, now that I think back on how easy it is to waste time in high school classes.
--JRZ