Thursday, July 07, 2005

Computer Science in High School

When I went to high school (1978-81) we had a computer room with three teletype machines that connected at 10 characters/second and we saved programs on paper tape. We also had a math teacher, Mr. Jaeger, who taught us not only how to program those computers but also used them to teach concepts like probability. We would run simulated card shuffling algorithms to test our calculations of the probabilities of poker hands.

A recent AP article says that computer science courses in high schools are getting less interest from students as well as from the states setting curriculum. This decline in interest at high school leads to the decline in CS majors we see throughout the American universities. A similar phenomenon is going on in many other countries as well.

The usual reason given is the perception of a weak job market in computers. But I think there is another issue. In my high school days, outside of a few games you couldn't do much with a computer unless you programmed. Today computers have become almost as commonplace as televisions and teens use them for a variety of tasks, including researching on the web, communication via email, instant messaging and blogging, and writing papers, all without an inkling of how to program. Computers have become a commodity and they don't see an additional value in knowing how and why they work any more than they need to know physics to drive their cars.

One of the great challenges of computer science was to make computers important and useful in everyday life. We are now becoming victims of our success.


  1. When I went to high school (88-93), they taught us to program basic Pascal algortihms. This was a compulsory course.
    My brother, who graduated this year from the same high school, learned how to use Word, create basic animations in Flash, and setup accounting books in Excel. No language training though.
    Could it be the case that classes focused on computers are now more interested in using applications than in designing them?
    It seems natural that this happens since it represents the ratio of software related professions with respect to general computer users.
    However, I believe the outlet should exist for those kids who want to learn how to write code. Keep CS classes as electives; those interested will show up. Those are the ones we want to get a degree later on anyways.

  2. Just look at farmers. We used to be a nation of farmers, but today very few of us are in agriculture. The reason was because we got to be really good at agriculture, and so fewer of us are needed. This is probably a "good" thing overall.

    If everything becomes open-source programmers will be more productive, and hence there will be less of us needed.

  3. I think a more creative and applied view of computing would attract more people:

  4. i also went to high school in 78-81 and i think there were maybe a dozen kids doing something with computers, in the vocational ed area. now school districts want to squander the funds they've taxed from me on high speed networks, computers in the classroom and a laptop for every student, to replace text books. this present absurdity is a strategic miscalculation for a generation and a nation.
    the skills needed to operate within and expand computer technology do not require computers. mastering basic mathematics, logical and critical thinking skills, and effective communication are more than enough ground for a student to cover in their 12 years of free education. not very sexy nor exciting, but this is what is required.
    i would go even further to assert that computers can become an impediment to learning, and a ruse for school leaders and the community to delude themselves that they are making progress in education when, in fact, they are just avoiding the real work.

  5. If everything becomes open-source programmers will be more productive, and hence there will be less of us needed.

    So Microsoft is doing us a favour,
    by ensuring that programmers remain in demand! :)

  6. Microsoft is probably doing us a favor, but perhaps at the cost of everyone else. It all depends on how much steam open-source has left in it. If most programming is custom web-services, there still might be a need for lots of programmers... though the interesting jobs might be harder to get.

  7. I think the problem is Algebra, Trig, and Calculus. The US high school math program spends too much time on turning students into calculators, and not enough time on turning them into programmers.

  8. There is clearly something to what Lance says -- when computers were first introduced to the schools, they were new and exciting; putting them together or programming them to do anything was a big accomplishment, and the challenge drew many people into the field.

    These days, computers are so commonplace that students are not as excited by the "internals" -- be they hardware or software.

    The question is what can and should we do. I think something should be done. I find it sad that for so many (high school) students their exposure to "computer science" at an impressionable age is programming. They get no appreciation for computer science as a field -- (interesting) algorithms, applications, and complexity. I also agree that part of the problem is the standard high school math curriculum -- while it would be hard to deny that algebra, trig., and calculus are important (for the "standard sciences" as well as for CS) the lack of discrete math and probability -- which, c'mon, is much more fun anyway -- is sad and disturbing.

    So for those who agree that we should do something about this disturbing situation, what COULD we do? I'd love to hear dome ideas. (I'll even keep quiet on those I might have hoping to encourage others to speak their minds...)

  9. While unable to give a solution, let me suggest a way to frame the problem.

    Given a hypothetical tool X, lively minds will be inclined to do one of two things: i) use X as a component in larger systems to meet existing goals;
    ii) regard X as a goal, and figure out how it can be fabricated from simpler components.

    Both impulses are necessary parts of human progress; but when X is existing rather than fantasized (say, the ubiquitous digital computer), the temptation is
    to set aside ii) entirely.

    Why should we object in the case at hand? Why should we try to preserve, if not universalize, an ethic of understanding computers?

    I can give three reasons. First, because relying on a na�ve black-box understanding of this domain tends to mean imputing consciousness and human-like intelligence to the machine. Even when one learns some high-level programming skills, the dominant model is of �telling� the computer what to do rather than structuring a physical system. As a result, our understanding of a computational assemblage we build to solve a problem presupposes an agency that is potentially at least as complex as the assemblage itself; we are not learning how to make more from less, and we suffer for it.

    Second, because computers form a valuable if imperfect model of our own thought processes. The imperative to �know thyself� has broad practical and spiritual appeal; �know thy computer� will carry more when it is seen as a partial corollary.

    Third�and this amplifies the previous points, in the direction of complexity theory�because the tendency to black-box intelligence leads to a repression of the concept of search. When search is denigrated as mere trial and error (part of �pre-algebra� at my school) and opposed to exact calculation, rather than celebrated and explored as a fundamental algorithm, we risk losing sight of the real sources of complexity in our lives, and with them our basic condition of openness and possibility.

    The above is a possible platform for bringing more ideas of theoretical CS into high school education. I worry that its high-mindedness might prove a liability, and of course I think the main challenge would be to implement it appealingly while justifying, by existing standards, the tradeoffs that would have to be made. Comments?

  10. This exactly the issue considered by the Arora-Chazelle op-ed on


  11. So Microsoft is doing us a favour,
    by ensuring that programmers remain in demand! :)

    is M$ doing us a favor? I guess no. if there were no M$, there would be much more small companies around, and all kinds of IT workers would be better off.

  12. From what I read here it is agreed that schools now don't teach computers-as-science like in the old days, but I am also not sure that schools teach enough of computers-as-tools either.

    To be specific, the increased connectivity means that everyone is now exposed to unprecedented amounts of information, but with unprecedented amounts of "informational entropy" as well. People must learn to cross-check information, assign trust values to sources, and edit by importance all by themselves, a job that was once handled by a handful of supposedly impartial journalist staff.

    In the new age, to effectively use the computer tool people will have to know information management. Shouldn't this skill also be taught in schools?

  13. I can tell you what happened in Hong Kong. Every couple years the computer teachers in Hong Kong will get together to discuss and improve the curriculum. In almost every single meeting, the curriculum is watered down by "consensus". Why? The majority of the teachers have average students and according to the teachers, their students consider learning how to type a document in Word to be more satisfying than learning how to program quicksort in Pascal. (I suppose this is a more diplomatic way of saying "my students won't get it".) Perhaps this is the tyranny of the majority?

    In terms of what we should do, I think we should divide the subject into two classes. The first being some sort of computer literacy where students learn how to operate a computer and work with the internet, and the second being the real computer science curriculum. Make the first one mandatory and the second one optional.

  14. Actually the problem is complex. On one hand the presure for scoring well on standardized tests has put presure on electives. Another is a shortage of HS CS teachers who really know what they are doing. Some would argue that the AP CS curriculum is not the right curriculum as well.
    Tools like Alice and languages like Python, Ruby and yes even Visual Basic have the potential to have a lot more students have early success (i.e. have fun while their learn) than Java with its more complex syntax. There is nothing simple about this issue.