Wednesday, March 07, 2007

Computer Scientist:Programming::Mathematician:Arithmetic

One of the things that continues to exasperate me on a regular basis is the conflation of computer science with programming. Consider two recent gems (emphasis mine):
  1. From a press release for Microsoft TechFest 2007:
    Boku, a virtual robot in a simulated world, debuted as a research project to teach kids basic programming skills in a fun and entertaining way. “There is an ongoing and deepening crisis in computer science,” Rashid said. “Our goal is to stem the tide by showing young kids the magic of software programming.”
  2. From an article on changing perceptions of computer science at college and K-12 level:
    East Allen County Schools is working to make sure students are exposed to computer careers, whether they think they might be interested or not. All students are required to take a computer course before graduating, and those who know they are interested can take in-depth courses, including training on Cisco computer networks...
Sigh. Ok people, say after me, slowly: Computer Science IS NOT programming. How many musicians do you think you're going to attract by preaching the exquisite beauty of scales and arpeggios to little kids?

As Lance mentions, the closure of stores like CompUSA is a harbinger of the end of computer science as "television science". The more familiar people get with computers, the more they treat them as appliances rather than as complex devices worthy of worship.

What does this mean ? You aren't going to attract people to a field by saying, "Lookee here! here's a neat television ! Let me show you how to build one. It's FUN!!!!". First of all, people ain't stupid. Secondly, there's a lot more to computer science than programming.

Thankfully, we do see here and there the signs of a manifesto for computer science that doesn't involve actually programming a computer: From Jeanette Wing's CACM article:
Computer science is the study of computation: what can be computed and how to compute it.
Amen to that. And notice how different it sounds to the version you might get from the random person on the street:
Computer science is the study of computers.
If I had to preach the gospel of computer-science-as-computation, I'd probably riff off three things:
'Nuff said.

p.s Chazelle is quickly becoming the poet-laureate for 21st century computer science: check out the table of contents for his course titled, "What do your DNA and your iPod have in common ?"


  1. [trying again]

    You have to admit that Computer
    Science is a rather ridiculously
    named discipline. It apparently
    has nothing to do with computers
    if you are to be believed. And
    it has as much to do with Science
    as, say, Abstract Algebra. Who
    came up with that name, anyway?

    I wouldn't look down on programming
    so much. Most of the funding and
    advances were fueled by World War
    II, IBM, DARPA, 8-bit home computers,
    homebrew computer clubs, the hacker
    culture at MIT and Stanford,
    Silicon Valley, Microsoft/Apple etc etc. etc. All of this history of
    seat-of-the-pants programming
    with real hardware is what makes
    Computer Science more than just
    some obscure part of Discrete Math.

  2. In other languages, say French, Computer Science is "informatique" and the name has nothing to do with computers (which is "ordinateur" in French).

    But this does not solve the issue. Renaming Computer Science will not help.

    I entirely agree that Computer Science departments should not teach programming beyond the basic skills necessary to express algorithms efficiently. The art of building software should be left to either a new type of department, or to other types of schools altogether.

    But the catch, Suresh, is that Computer Science departments are sending a mixed message with the huge emphasis on Software Engineering many departments have. Check out Carnegie-Mellon for example. There are several courses in every CS B.Sc. that have to do with software engineering, information technology, information systems, and so on. Remove these courses and not much is left. Remove these courses and you are left with very few students.

    Effectively, you'd have to close many CS departments.

    Are you ready for this?

    I think not. So as long as you do not ask your colleagues to remove their software engineering courses, I think you do not have much of a leg to stand on. You can't very well say one thing to journalists and students, and then have the department say another thing when it is convenient.

    Around here, people are saying that the new multicore processors are going to attract many students to Computer Science because we will need to train many programmers to recraft all the software.

    See the mixed message? We "train programmers." That's the message Computer Scientists send whenever it is convenient to do so.

    But you can't get to pick and choose. Are you or are you not training software programmers, developers or engineers? You can't have it both ways. The answer must be yes or no.

  3. The "image problem" that Computer Science (CS) has with computer programming (CP) is that people believe CP = CS, rather than CP \subset CS. But, this is basically the same problem that mathematics faces; for them, people think that calculation is what math is all about, and for most people that's the only kind of math they ever experience! It wasn't until the end of college that I realized that mathematics was more than just a toolbox for getting solutions to tricky physics problems.

    I think that there's no way to divorce CP from CS, just as there's no way to divorce the calculational math courses (calculus, linear algebra, differential equations, etc.) from Mathematics. I think that because these tools-oriented courses is pretty boring (in CS, Math and also Statistics) to most intellectually curious people, there's a strong disconnect between the people who only want these courses for job training and the people who want to use these courses to do real science. It's not at all clear to me how to service both communities. Physics does a pretty good job at not teaching tools, but rather focusing on solving problems and the broader impact of the concepts, and I wonder if CS (and its bad-image-fellows) could take a page from that way of designing curricula. Of course, it would also help if students were exposed to programming (like calculation) in grade school, and didn't have to play catch-up when they got to college.

  4. In response to Daniel, this is a false dichotomy. My point is that we need to shift the emphasis away from its skew towards programming and software engineering. I see no reason why this means we have to do away with such programs altogether

  5. "the basic skills necessary to express algorithms efficiently" -- is entirely non-trivial.

  6. The art of building software should be left to either a new type of department, or to other types of schools altogether.

    This is a recurring theme in the TCS blogosphere and it is ever so wrong. Evicting applications from computer science would be a mistake of historical proportions. Think about it, we would be evicting a major source of inspiration, relevance and funding in exchange for what? Scientific purity?

    Let's embrace our applications, find a way to systematize program development and bug checking in a scientific way (as the recent winner of the ACM doctoral dissertation award did) and continue serving the dual role of producing graduates who go into the real world and program while also producing a (much smaller) set of graduates that carry on with research.

  7. I think the following is relevant but not necessarily in any coherent way. Use the data as appropriate:

    - what do undergrads (and grads) in CS spend most of their time doing? whether in software engineering-heavy programs or not, there's a large practical component (e.g. developing the system to give a proof of concept of the theories one is developing).

    - who are the programmers in the real world? I don't think I've ever met one who actually had a CS degree. They've all been physics phds, chemistry or bio ugrads, east european poets (and DeVry net admin grads) etc... sorry, in all fairness, at one place I worked every programmer was a cs grad (at a top five accounting firm).

    Whatever the import of those necessarily very small sample size facts, there's still the CS science part and then there's the software engineering part, like there's a physics department and also a mechanical engineering department (and civil engineering, and aeronautical, and etc.). Whether theses things are taught in different departments is a matter of academic politics.

  8. who are the programmers in the real world? I don't think I've ever met one who actually had a CS degree.

    Right, so where exactly you think are all of our undergrads going?

    like there's a physics department and also a mechanical engineering department (and civil engineering, and aeronautical, and etc.).

    And physics is the poorer for it. Let's not repeat the mistake they made.

  9. Right, so where exactly you think are all of our undergrads going?

    Danged if I know. I just have the personal experience I related above and no large scale statistics. I would really like to know where the CS grads really do end up. Any ideas?

  10. You are of course right that CS is more than just programming, but to focus on the Rashid quote, I don't think this means it is a bad idea to expose kids to programming as a way of getting them interested in CS. I suspect that it's easier, in general, to get a child up and running with Mindstorms, LOGO, or Squeak than it is to explain a Turing Machine to the same child. Part of it is that programming comes with immediate feedback from the computer's behavior, allowing for rapid experimentation and learning.

    In contrast, learning to distinguish a valid proof from a false one requires specific training. Now, teaching this _can_ be done with young children - heavens, Erdos was famous for doing just that - but it requires more work, as far as I can tell, than just giving a child the ability to do stuff with a suitable programming environment.

    Just because someone starts with a programming environment, however, does not at all mean he or she needs to stop there. One of the beautiful things about theoretical computer science is that some of our most fundamental questions arise naturally from the practice of making stuff work. How long will it take to accomplish a task? What's the shortest amount of time required? Is it possible to determine if a piece of code behaves as expected? What does it mean for software to have a "bug" ? Can we write a program to solve such-and-such math problem, and if so, how will we know when we are done? Instead of putting programming in one box and theory in another, we could be thinking about ways to make these questions explicit in the experiences that the kids Rashid talks about will have when they first learn about computation.

  11. I would really like to know where the CS grads really do end up. Any ideas?

    In the past? Mostly at universities. Lately? working for industry, such as Google, Yahoo research, SUN, startups, etc.

  12. Computer Science is the study of computation.  A rigorous Comp Sci curriclum includes the necessary courses to make the study of computation comprehensive.  Therefore, the curriculum will have all the foundational courses for a legitimate science, such as as much, or more math than a competetive EE program.  In addition, it will contain finite automata theory, probability theory, queuing theory and stochastic proceses, data structures and algorithms, including the stuy of algoritm complexity, compiler design, theory of digital machines, networks, graph theory, electronics for digital machines, and many more courses that make up a rigorous study of computation.  Programming can be learned independantly of Computer Science, hence vocational schools and private institutions can teach programming in the same way they can teach an electonics technician to fix a computer.  I studied Comp Sci up to the MS level, but I am in the network engineering business.  The courses and training in Comp Sci, or a good Comp Sci program, are very analytical in nature, hence very similar to an engineering program.  No, it is not programming indeed.


Disqus for The Geomblog