It's arguable that learning Windows, a browser, Word, Excel and maybe PowerPoint is adequate. More than 90 percent of the computers the children will encounter when they leave school will have just that. And, really, is their education any worse than mine? Did learning Basic and Pascal on an Apple IIe, learning to type on an IBM DisplayWriter and doing my homework on a bank of overused Macintosh SEs actually make me more or less prepared for the future? About the only skill I have from those days (and an extremely useful one) is typing. And I didn't need computers for that.
So what should kids be learning today? If I were given the task of designing a computer curriculum for "normal" secondary school-age children (not computer science majors), what would I teach?
- A bit of history. I think it's important to learn where computers came from, what has been tried before, what did and didn't work, etc. It doesn't have to be deadly dull, just some basics. How many children today know that a "computer" used to be a job title for a human being? That computers were first used to calculate trajectories for cannon fire and codebreaking? Or know any of the personalities that invented computing, boolean logic and the Internet? That the first programmer was a woman? How about the mouse and windows? Or the first person to come up with the idea for hypertext? Those are ideas that were ridiculed at first, but went on to change the world. Learning about it demystifies the process.
- The hardware. I'd have them build a computer or two, to demystify the PC. I'd also take apart a few specialist computers -- a Mac, a high-end server and a handheld PDA -- to show the things they have in common and where they diverge for particular applications.
- The operating system. I think it's important, early on, to instill the idea that Windows isn't everything -- that there's a world out there, put together by people not much older than you. For fun. You can learn this by putting Linux or FreeBSD on the computers that we build. I'd show them around the Mac's OS X, how DOS and Windows work and something behind the philosophy of each: "Small is beautiful" for the Unixes, "It Just Works" for the Macintosh, and whatever the philosophy du jour of Windows is at the moment.
- Some programming. I still think it's important to learn programming, and it doesn't matter much what you use. Today, I'd choose Python instead of Pascal and Basic, because it's super easy to learn, doesn't limit what you can do (OOP, for example) and runs absolutely everywhere, from mobile phones on up. For graphical user interfaces, I'd use wxPython for the same reason. I've found that learning to program has benefits that go beyond computers -- helping in math and general problem solving, for example. Again, learning that you can write software also demystifies the process. I want them to think, "hey, I can do that."
- Networking. You wouldn't have to go into all of the layers, but a basic understanding of how the Internet works would be a very useful. I'd have them put a Web site together, telnet to the Web port and see exactly what happens underneath the level of the browser and write some basic Web pages. I'd show them how e-mail works and introduce them to the concept of a firewall. Again, the idea is to demystify, make them feel like it's no big deal and show them that a world-changing system is built on some pretty simple concepts.
- System design. The grand finale would be to split them up into small groups to solve a problem -- run a small office in a particular industry, an on-line shop, factory, whatever. The idea is to get them introduced to some of the basic concepts -- the management of data over the long-haul, ease of administration, keeping the price to a minimum, etc.