Additional profile information on Alfred Thompson at Google+
Right now I think we pretty obviously do. In the long run I think we'd be better off without them though. David Warlick asks a similar question in his blog and a companion poll. The way he asks it is “Are computer applications something that should be taught in a class, or something that should be learned by the students, independent of a class curriculum?“ (A summary of the comment discussion of his post may be found here and is worth reading.)
Kids today do figure out a lot of "computer stuff" on their own. They certainly could figure out a lot of the things we generally teach in computer applications courses. The problem is that they don't. I gave placement exams for a computer applications course for years and very few, perhaps 10%, of those who thought they "knew it all" actually knew enough to test out of the course.
I'll never forget overhearing one know it all tell a classmate "I wish I had known this stuff last year!" There is a lot that students generally do not learn on their own. In word processing few figure out automatically page numbering, headers and footers or footnoting. Doing it manually makes for quite a mess so you'd think they'd have incentive enough to learn it but for some reason few do. Perhaps it doesn't occur to them that it is possible.
In spreadsheets few students learn any but the most basic and simple of formulas. Graphing? Again generally only the most basic features. Almost no one learns databases. The one application kids do tend to learn a lot about is presentation software like PowerPoint. Even that is not all good though as they learn the features but not how to use them wisely. I've seen some feature rich presentations that fell apart on content and readability.
But to me having a special course in learning these applications is a waste of time. I believe that it is much better to teach these tools in some sort of context. Teach word processing features as they are needed in English so you can focus on concepts with the mechanics being secondary. For example use a word processor to teach outlining. Use the word processor to teach footnotes, end notes and bibliographies. Let the software handle the mechanics saving enough time for more repetition in different contexts.
Teach graphing in math courses and let the students use a spreadsheet to draw the graphs. Is it really useful for students to spend a half hour with a ruler and crayon to draw a bar graph and them spend another half hour taking the same numbers and putting them in a pie chart? Why not use the whole hour to show different kinds of data in different types of graphs? That way you can focus on the important concepts of picking the right sort of chart for the data. And you can spend time talking about why different graphs work and others do not and how the data matters.
Christy Tucker argues that a mix of integrated and separate is the way to teach computer applications and she has some good points. Her main point is that students should be given a solid base in a dedicated course but then what they learn must be integrated into the general curriculum. I don't disagree. I do think that the base should be taught as early as possible. Think reading.
In first grade reading is a specific subject. By second grade reading is a part of just about every subject. Long before high school reading is long gone as an independent course but students still learn new words and use reading in every course they take. That's the model we need to follow for computer applications.
Among the beginning materials at the Beginner Developer Learning Center are the Bits & Bytes series of lessons. These lessons which can be read online or listened to as audio files (you can download both text and audio if you want) introduce some of the most basic and important concepts in computer science - no programming required.
I think these lessons would be good in a computer concepts/literacy course or as starters in a computer programming class. In fact they are probably good for someone who just wants a clue as to what this computer programming stuff is all about. Highly recommended.
[Note: Edited to correct links.]
Implementation-dependent features are features or the the hardware or operating system or other part of the platform that is not available on other platforms. For example a specific piece of floating-point hardware or a language feature that is not part of the standard language specification or an operating system API that is not available on other operating systems.
The goal behind this proverb is to create programs that are portable as possible. There are a number of things that have made this both more and less of a problem then it used to be. It is less of a problem because of Virtual Machines that sit between the program and the hardware and base operating system. Java is one such and .NET is another. These virtual machines are able to take full advantage of underlying hardware and software without the applications programmer having to know about it.
At the same time taking full advantage of hardware or operating systems sometimes does require implementation-dependent features. The should be avoided as much as possible but no more than possible. Sometimes one absolutely positivity has to have the most performance possible. At that point one sometimes has to give in an use implementation-dependent features.
In those cases those features should be isolated and compartmentalized as much as possible. By keeping those details separate and independent one can more easily migrate to other platforms with minimized risk.
This is the fourteenth in a series of posts based on the book Programming Proverbs by Henry Ledgard. The index for the series is an earlier post and discussion of the list as a whole is taking place in the comments there. Comments on this "proverb" are of course very welcome here.