What exactly is computer science?

Is it a science or is it a branch of mathematics (or maybe even engineering)?

It could arguably be all of those. The study of algorithms and computability, one of the most important aspects of CS is definitely mathematics, yet several fields in AI, traditionally seen as a subfield of CS, rely heavily on experimenting.

Furthermore, isn’t computer science a misnomer? Computers are just tools. Astronomy has never been referred to as telescope science, so why computer science?

Computer science is the formal study of imperative knowledge.

I don’t quite understand what you mean by “imperative knowledge”. The closest term I can think of is “imperative languages”, but I don’t think that’s what you mean.
Dominic Mulligan,

Yes, I’ve always felt that “computer science” is a bit of a misnomer, since the study of physical processes is not central to to the field. I think it lies somewhere between mathematics and engineering. As you mentioned, algorithms and computability can definitely be considered mathematics. Systems is mostly engineering. AI might lie somewhere between. Engineers perform experiments too; they build prototypes, and they test them.

A colleague of mine, with a BS in Physics and an MS in Computer Science (and a PhD in Electrical Engineering) called us Computer Whatevers. I think that’s pretty accurate.

When I was in school a lot of Computer Science programs spun off of EE, but a lot of the faculty were joint appointments with the math department. The classes I took were often cross registered in the math and EE departments. One of my advisors had a PhD in Math.

Classes I took, and which were useful, were heavily mathematical (like analysis of algorithms,) heavily EE, like transistor theory, practical programing, and real computer science like the design of compilers and operating systems. Back then
there was less subject matter, no database theory, for instance, so there was perhaps more time for math.

The only way I think it can be called science is to suppose there is a kind of virtual natural world which we are exploring when we design computers, or that the environment when we are programming is kind of a natural given. Just as science understands nature, computer science tries to understand this environment. It seems kind of a stretch to me. But CS is not purely mathematics or engineering either, so I don’t know what else to call it - except whatever.

I didn’t understand what he meant by this either, but after some Googling it became clearer. Apparently there’s a distinction between declarative knowledge, like that held by mathematicians, and imperative knowledge, like that held by computer scientists. Mathematicians are interested in the why’s whilst computer scientists are interested in the how’s.

I’m not sure that I agree. After all, large parts of what is commonly referred to as computer science is really mathematics, like algorithmics and intractibility theory, so how do you distinguish the two? If I prove that an algorithm has an average case running time of nlog n, am I not meddling with declarative knowledge?

Besides, simply labelling computer science as the study of imperative knowledge does nothing to answer the question presented in the OP - is computer science really a science or something else?

I’d say that “computer science” as a standalone term is the formal study of computability (e.g., Turing machines, formal languages, and analysis of algorithms). This alone does not cover a lot of what people think is computer science. Less pedantically, the term is commonly used to denote “computer science and engineering”, which does a better job of being inclusive.

It seems to me that there is a relation of fields akin to that of physics and chemistry – CS is logic at its base, but generally uses a different set of abstractions and concepts as its primary subject matter.

It’s engineering, not science. Science is generally open-ended, and uses the scientific method (feel free to genuflect at the mention of that). Computer science shares with all engineering disciplines the goal of finding the best possible means to an end. I assume that it was called computer “science” because computer engineering was already taken by people designing the hardware.

Well, where I got my degree in computer engineering, they also had a computer science department which most certainly did not fall under the umbrella of the College of Engineering. CS was a department under the College of Arts and Sciences.

I suppose that doesn’t include the study of algorithms, mathematics and data structures?

So does being a lawyer, but we don’t call them engineers.

I wish all I had to learn was how to design the hardware. We did software, we did hardware, and we did networks. Computer Engineering definitely includes a lot of hardware, but where I went to school, it wasn’t the only thing CoEs had to learn to design. There, Computer Science focused on understanding the relationships of mathematics and data. Naturally there was some overlap, but overall the CS people and the CoE people lived in different worlds. CS was a lot more theory and abstract, and CoE was a lot more concrete problem solving.

But naming stars isn’t really part of astronomy today, so “astronomy” is literally a misnomer now, too. “Astrology” would literally be “study of stars”, but that was taken…

When I was in school, there were no computer engineering departments that I was aware of. At MIT CS was one of the options in the EE department, at Illinois (where they designed computers) it was computer science. Computer Engineering is a relatively late invention.

Lots of CS stuff I took, like computational linguistics, can hardly be called engineering. AI as it was originally is fundamentally science. Numerical analysis is fundamentally math. Computer design is engineering.

I’ve always been a very strong proponent of leaving the term “computer science” to software/computer engineers to rip to shreds (like it’s currently being done at a lot of US universities). The name confuses everyone, and is quickly diluting classical CS curriculum with business and engineering crap.

To me, computer science is a fine mix of systems theory, cybernetics and epistemology. I also believe that computer science is a competing field to advanced mathematics, even though they share some fundamental basics. It’s just historically mathematics came first and computation theory and such emerged from it. I feel computer science could’ve been first, and modern mathematics discovered within.

What I’m tired of is actual PhD’s in computer science writing curricula and teaching college courses dwelling on the business and technology a lot more than on the actual scence. Sure you could serialize your Java classes to a database blindfolded, but when you come to me asking what “Turing complete” means your CS degree from Berkeley becomes a little more worthless, in my opinion.

So the question is, what should we rename it to? I dislike it being a part of mathematics because it’s limiting and can stand on its own right. Using the word “computer”, “software” or “engineering” in the name is not only wrong but offensive. “Cybernetic Systems Theory” just doesn’t have a nice ring to it.

How about “Formal Philosophy”? :slight_smile:

Regards,

Groman

Well, part of solving this riddle depends on whether you regard Math as a Science. As Mathematics deals with the exploration of testable questions, I say it falls under that umbrella.

A Computer is a (limited) physical representation of a Universal Turing Machine, a mathematical construct that predates all modern computers. So in determining what real-world computers are capable of, we are dealing with the limits of Universal Turing Machines, which renders Computer Science as a branch of Mathematics, and therefore, a Science. Software is simply an algorithmically arranged set of instructions to the UTM

Now we can also talk about what devices and materials can be used to cause our real-world UTMs to adhere to specific physical performance standards, and that’s where you get into the engineering aspect of it.

The two are not mutually exclusive however. By definition, the input of a UTM is a description of some Turing Machince (read: manipulator of strings of information), along with proper input for that machine. The UTM then behaves as though it were that TM.

A perfect example is the calculator accessory in Windows. When you start it, a full description of the internal behavior of a basic pocket calculator is fed to your computer (along with instructions as to how to display a rudimentary visual facsimile thereof), and when you give it input typical of that which you would give to a pocket calculator, the response you get from the computer is identical to the response you would get from an actual, physical pocekt calculator.

The upshot is that there is no Turing machine you can build that can not be simulated as software on a computer, and there is no program you can write that can not be built as digital hardware. Thus the Science (figuring out what can happen) and the Engineering (figuring out the most practical, efficient way to do it within a defined set of parameters) are intertwined to a great extent.

Although less intertwined than say classical physics/chemistry and mechanical engineering for example, yet nobody is proposing to make them the same discipline. Software is about as much “applied computer science” as car making is “applied physics”, while certainly true, it’s not a terribly useful description and it doesn’t really make sense to, say, devote a lot of time in a physics curriculum to specifics of internal combustion engines. Sure, heat pumps and such are integral, but as theoretical constructs, specific alloys that make the best hemi is not part of physics as a science.

It does?

Amen!

Of course, the computer science PhD’s aren’t always the ones to blame for this. That sort of class is, depressingly often, what most of the students want. I took an upper-level databases class online from Stanford, which used Oracle. Something happened with Oracle’s business (I don’t remember what), and some of the people in class were panicked that the class would be useless, because they would have learned Oracle instead of whatever would be the hot new database software :rolleyes: Way to miss the point.

Maybe computer science classes are getting better now that it’s no longer the hot field to get into and make a lot of money. I can hope, can’t I?

Yes. You should not be given a computer science degree until you’ve learned how to use Google. :wink:

Sure. How about:

“There is no integer n, such that n>2, such that a^n + b^n = c^n, where a, b and c are positive integers” You can either find evidence that it’s true, find evidence that it’s false, or acknowledge that you can not do either with the tools available.

Informatics?

Not only them, but accreditation bodies like the BCS. We have to do a course called “Professional Issues” to explore the philosophical, ethical, legal and social side of computing and get a taste of computing in the “real world” (i.e. the business world). We had a two hour lecture today given by some guy from IBM wittering on about how hard it is to manage distributed teams and write software etc. :rolleyes:

Experimental mathematics.

Not quite. ultrafilter, you can check me on this, but as far as I can tell, these are your options:

  1. Prove that it is true logically (somehow)
  2. Prove that it is false (by some rigorous proof)
  3. Find a counterexample that shows that the conjecture is false
  4. Prove that it cannot be decided
  5. Give up in disgust

You cannot find evidence that it is true. A million examples do not prove a conjecture true; a single example can prove it false.

I heard a while ago that it was disproven using a computer, and a counteresample using very high numbers was found.

That would be a very interesting discovery — since a man named Wiles proved the theorem true in recent times. He’s still living, so someone should call him up or something.

While evidence may be interesting, what we are concerned with is the provability of a statement. Remember we’re working in a domain here where there’s no distinction between truth and necessary truth. That’s not the case for sciences.