Ask HN: Is computer science really a science?
How did it come to be that the field of computing became synonymous with science to form the term computer science? As I understand it science is about figuring out and interpreting the natural world as it is and has evolved over time (biology/physics/chemistry). Laws and theories have been formed to understand and clarify how objects are created and interact with each other.
Computer science OTOH is more akin to math and engineering than science. While some parts of computer science deal with the natural world like the work on artificial intelligence (which is more about psychology/philosophy than science) most of it deals with programming and electronics than the study of nature.
That is not to say that computing does not have value. It certainly does. I just think it is questionable if it deserves the science moniker.
21 comments
[ 207 ms ] story [ 329 ms ] threadWhat gets taught as computer science has evolved rapidly in the last couple of decades and it is my impression that quite a bit of it comes under software engineering now.
This is why I get annoyed when you see jobs in the software sector or software management that require a Comp Sci degree. It's actually a subtly ageist requirement - twenty years ago, computer science was not what you did if you were interested in computers - you did physics so they would let you play with their VAX cluster.
Building things with those fundamentals is not science, it's engineering.
Sciences are generally classified by "hardness" or (perceived) quantitative rigor. In that respect, from "hardest" to "softest," the sciences are usually ranked roughly like this: Math (yes, math is as much a science as anything else), Physics, Chemistry, Biology, Psychology, and the Social Sciences.
Computer Science is, as most things are nowadays, interdisciplinary. As such, it really depends about what aspect of Computer Science you're referring to. Some areas of computer science are more rigorous, and have a lot in common with math and physics. Others, such as "software engineering" etc. fall on the softer end of the spectrum.
With that said, I don't think that all programmers are necessarily "computer scientists." They're practitioners of an art. Just like not all doctors are medical scientists - some are, but most are just practitioners.
But it is not exactly a black or white issue. It is more of a science than, say, Political Science, in terms of rigor and logic.
I suppose this is also why "Computer Engineering" as a discipline is somewhat growing in popularity.
Examples, Christian Science, Library Science, Computer Science.
That said, it is worth bearing in mind that computer science is no more about computers than astronomy is about telescopes.
I like this quote. I think I'm going to use it next time someone says "Oh, so you're a Computer Science major? So you, like, fix computers and stuff?"
The problem is that in most universities the computer science label is used for things that aren't computer science. Most computer science departments are mostly concerned not with studying or extending the science part of computer science, but with applying computer science to solve real world problems. This really should be called computer engineering or software engineering, just as applying certain aspects of physics to create electrical devices is called electrical engineering.
Most people would disagree with that, though interestingly, that was not the case in the 19th century.
http://en.wikipedia.org/wiki/Mathematics#Mathematics_as_scie...
It's all semantics, and not worth arguing much. But nevertheless, it's good to keep in mind that mathematics is about deduction. It starts from axioms and tries to find all of their consequences. Science is about inference, trying to figure out the axioms given the observable consequences. Maths is bottoms-up, science is top-down.
[That's not the entire truth. Platonism in maths is a nice counterpoint to the above. http://en.wikipedia.org/wiki/Philosophy_of_mathematics#Plato...]
My vote goes to CS being a branch of maths.
Perhaps CS is a math, but investigating CS sometimes necessarily employs science.
As you say: not worth arguing much.
http://en.wikipedia.org/wiki/Computer_science
the study of the theoretical foundations of information and computation, and of practical techniques for their implementation and application in computer systems
and
The relationship between computer science and software engineering is a contentious issue, which is further muddied by disputes over what the term "software engineering" means, and how computer science is defined. David Parnas, taking a cue from the relationship between other engineering and science disciplines, has claimed that the principal focus of computer science is studying the properties of computation in general, while the principal focus of software engineering is the design of specific computations to achieve practical goals, making the two separate but complementary disciplines
SICP lecture 1 -- http://www.youtube.com/watch?v=zQLUPjefuWA
But maybe it is a science: there are certainly a number of things in CS that yield facts about things like algorithms (Big O, etc).
I read other comments here that compare computer science to math, and it is not an unfair comparison. However, even amongst mathematicians, you will see something of an avoidance to associate math with science. Math is a framework of a sort, a way to think. When we are talking about how to think, we are talking about philosophy. Science has its own roots in philosophy, so it is not surprising that we see some grey areas here.
So let me rephrase it a little... When you learn Computer Science, you learn how to think.
People compare CS with engineering disciplines, but we find that there are a lot of methodology salesmen but few magic bullets. The problem with comparing computer programming (the practical side of CS) to engineering is that programming is very difficult to measure. We graduated from the idea of measuring lines of code. We have not figured out how to accurately measure a technique like TDD. We have an idea that code quality can rise when people pay attention to it, when people think about the problem; we can encourage this with code reviews, but we can do the same by encouraging developers to have a good night's sleep. We have conjured approximations for our measurements, but none of this has quite the feel of engineering. We are not building bridges, complete with a starting plan based on knowns and an execution.
Algorithms are not building blocks. They are possible solutions to specific problems. There is more than one solution, and the algorithms our professors taught us come with trade-offs. Recently on HN, there was an excellent article and discussion on the trade-off made by grep to improve string searches.
So you cannot just pick from your handy dandy book of algorithms, fit them together in a programming jigsaw, and expect results. The world of software is soft; requirements change, and systems change. It is extremely flexible in a way that other, more physical entities, such as bridges, are not.
In addition to thinking of CS as a philosophy, I favor thinking of CS as an art. I am communicating something to the computer, certainly, but in order to ensure that my code can be picked up by others or myself a year down the line, I must also dive into aesthetics. The code must be readable. It must make sense, must describe the problem, be expressed in such a way that humans can derive meaning from it. Thus is CS as much about beautiful design as it is about getting results.
I got an undergrad degree in "Computer Science & Engineering". If you have to nitpick, what I studied was not strictly about "Computer", "Science", or "Engineering". It has bits of computer as in how to build a computer, bits of science as in the mathematics and theories of computation behind it, and bits of engineering as in how to build a large-scale program.
Personally I like "Computer Science" just fine. It would be silly for others to mandate CS to be called "Informatics", "Computer Studies", "Mathematics: Computer", "Computational Art", etc.
Perhaps we should be talking about "computer engineering" which is how we build computers and "software engineering" which is how we build programs to run on those computers. Both of these require considerable learning, experience and planning. Which probably explains why people want to avoid the "engineer" tag, because it sounds like less fun than HACKING.