Monday, July 25, 2005

What Kind of Science is Computer Science?

In 1981, Juris Hartmanis wrote some observations on the early days of computational complexity. The article also contains some interesting discussions on issues like how CS fits in with the other sciences.
I see computer science as a brand new species among other sciences, and I believe that it differs fundamentally from the older sciences. As a matter of fact, I am convinced that in large parts of computer science the classic research paradigms from physical sciences or mathematics do not apply and that we have to develop and understand the new paradigms for computer science research. The fundamental difference between, say, physics and computer science is that in physics, we study to a very large extent a world that exists, and our main objective is to observe and explain the existing (and predict new observable) phenomena. The relations between experiments and theory are quite well understood and richly illustrated by successful examples. Computer science, on the other hand, is primarily interested in what can exist and how to describe and analyze the possible in information processing. It is a science that has to conceptualize and create the intellectual tools and theories to help us imagine, analyze, and build the feasibly possible.

Computer science is indeed a different intellectual discipline than we have ever encountered before. It shows some haunting similarities with physical sciences and mathematics (whose basic research paradigms and goals are quite different), but it differs from both of these disciplines in some very fundamental ways. As a matter of fact, quite often the paradigms, borrowed from physical sciences and mathematics, have been incorrectly applied to computer science research with predictably frustrating results. Similarly, the attempt to view computer science as an engineering discipline does not properly capture its essence. There is a substantial engineering component in computer science (or its applications), particularly in building computing machines and managing large software projects, but its core activities do not fit the traditional engineering paradigms.

In view of these observations, I believe that one of the very important tasks for the computer science community is to understand better the nature of computer science and develop the new research norms, paradigms, and methodology without which it will not mature into an independent and influential science. In particular, the relations between theoretical and experimental computer science must be clarified and new interactions must be forged. This is not just a matter of producing "more practical theories" and applications of theory, which we certainly need. It is the hard and challenging task of determining for a new science how theory, experiments, and practice should interact. Furthermore, this is not just an esoteric exercise in the philosophy of science; whether we admit it or not, our underlying beliefs, our conception of our field of study, and our perception of what is possible all fundamentally influence what kind of science we are going to build.


  1. I wonder, is it even *possible* to learn "new research norms, paradigms, and methodology"? Or can these things only be picked up by working on actual problems?

    Anyway, Paul Graham's essay "Hackers and Painters" ( is also well worth reading on this subject:

    "I've never liked the term 'computer science.' The main reason I don't like it is that there's no such thing. Computer science is a grab bag of tenuously related areas thrown together by an accident of history, like Yugoslavia. At one end you have people who are really mathematicians, but call what they're doing computer science so they can get DARPA grants. In the middle you have people working on something like the natural history of computers--studying the behavior of algorithms for routing data through networks, for example. And then at the other extreme you have the hackers, who are trying to write interesting software, and for whom computers are just a medium of expression, as concrete is for architects or paint for painters."

  2. Most computer science seems to me more like engineering than science (the exception being theoretical CS, which is more like math). So rather than compare with physics, let's compare with e.g. structural engineering: both fields try to exploit the properties and deal with the constraints of an environment to build systems that empirically perform well.

    That the environment is the physical world in one case and computers in another seems to be an important distinction, but not enough to throw CS outside engineering. Computer scientists are still builders.

    A better name for CS might have been "software engineering", but it's too late for that now...

  3. Hello there,
    I agree with pbg.
    By the way, the British call this discipline... "computing"... quite sensible...
    Best regards,
    Chris. F. Masse


  4. A better name for CS might have been "software engineering", but it's too late for that now...

    But that would not be fair on computer architecture researchers. They have a significant role to play in the advancement of the field, too.

  5. I'd say computer architecture is more part of "computer engineering", or maybe is at the intersection of that and "software engineering".

  6. --- A better name for CS might have been "software engineering", but it's too late for that now...

    Computer Science is what Physics would have been had Physics very first discovery been the electric motor.

    CS is no less (or more) of a science than Physics. The fact that it currently has ready-to-go immensely valuable applications which have shaped its early history should be but a footnote in its long term standing as a science.

    While we are on this subject, we computer scientists in general (and TCSers in particular) should not make the key mistake of kicking out our direct and immediate applications into another branch as Physics kicked theirs into Engineering. They have suffered from it, both scientifically and in practical terms.

    In fact, applications have historically been a source of inspiration and deep problems for all sciences---including Math and Physics. We should embrace them and keep them within our mantle. This "pure-only" aspect of science is a XX century development that we can best do without.

    Alex Lopez-Ortiz

  7. I like the SICP term for our field: Procedural Epistemology.

    I've had many CS professors tell me "oh yes, CS is a science," but the reason "why" for each professor is different!

  8. --- I've had many CS professors tell me "oh yes, CS is a science," but the reason "why" for each professor is different!

    If you asked around why we should protect the environment you are likely to get many different answers, and all of them correct, because you see there are many good and valid reasons why protecting the environment is a good thing.

  9. I think that it is unfair to compare CS to Physics. Physics is an empirical science and its goal is to approximate as closely as possible the "real" world out there. This, of course, hinges ultimately on the (implicit) beliefs that there is indeed a "real" world and that it at least obeys the laws of causality.

    In CS there is no "real" world to approximate. Instead, the world is defined by exactly the current reach of the field. In my opinion it is nonsensical to believe that a sorting algorithm just exists and we happened to stumble upon it. The sorting algorithm was created by us, and it started existing in some form the moment somebody started to think about it. Contrast this to a natural phenomenon, eg. gravity, which existed long before Newton even started thinking about it. To put it bluntly, physics describes, cs creates.

    Now the fair comparison would be with Mathematics. In that case, CS is nothing more than a cross between pure and applied mathematics. And as such, its paradigms should be drawn from there, not from empirical sciences.

    Or at least this is what I think -)...

  10. I had a professor of mine make a good point one day: "Computer Science is the study of problem solving..."

    Then i had the idea of looking up "Computer" in the dictionary and i got the following definition (ignoring the one we all know): "One who computes."

    I thought it was interesting that my professor never included a tanginble computer or programming in his definition. He always mentioned that you can use computer science for anything (from fixing a house hold problem to computer related issues). The reason it automatically gets labled with computer programming or software eng. is because these are the best tools for helping us aquire the ability to problem solve.