Take the 2-minute tour ×
Programmers Stack Exchange is a question and answer site for professional programmers interested in conceptual questions about software development. It's 100% free, no registration required.

Is Computer Science science, applied mathematics, engineering, art, philosophy? "Other"?

To provide background, here is Steven Wartik's blog posting for Scientific American titled "I'm not a real scientist, and that's okay." The article covers some good topics for this question, but it leaves open more than it answers.

If you can think of the discipline, how would computer science fit into its definition? Should the discipline for Computer Science be based on what programmers do, or what academics do? What kind of answers do you get from people who've seemed to think deeply about this? What reasons do they give?

share|improve this question

closed as primarily opinion-based by MichaelT, GlenH7, gnat, Dan Pichelman, Bart van Ingen Schenau Oct 13 '13 at 10:41

Many good questions generate some degree of opinion based on expert experience, but answers to this question will tend to be almost entirely based on opinions, rather than facts, references, or specific expertise.If this question can be reworded to fit the rules in the help center, please edit the question.

1  
Ever academic I've met who says Computer Science is a science has a completely different reason to explain why. –  Macneil Nov 14 '10 at 22:03
5  
Computer Science is Political Science with a little less politics. –  Job Feb 19 '11 at 3:09
1  
computer science is a branch of applied mathematics... "science" implies using the scientific method, which is non-existent in computer science; but it was named when every new discipline wanted to put the word science at the end of their name. –  red-dirt Feb 19 '11 at 10:39
2  
@red-dirt That's not true. There is scientific method in CompSci; you have experiments, formal proofs, etc. Most hardcore computer scientists are into Math and formal logic (see: lambda calculus, the halting problem, etc, etc), and publish papers in peer-reviewed journals. Don't confuse them with people who invent "methodologies", which are not scientists by any definition of the word. –  Andres F. Dec 28 '12 at 20:01
1  
@red-dirt Similar to AndresF, on the more practical application side, the basic scientific method (hypothesize, test, check, repeat) comes into play during debugging - which does usually take up most of the time spent programming. –  Izkata Dec 29 '12 at 5:59

7 Answers 7

up vote 28 down vote accepted

There are two distinct IT disciplines:

  • Computer Science - is the discipline study of computers and computation using the scientific method.

  • Software Engineering - is the discipline of designing and implementing software following proper engineering principles.

The two overlap somewhat, but the distinction is really about desired outcomes of science versus engineering. The desired outcome of a scientific discipline is knowledge. The desired outcome of a engineering discipline is things that work.

So to answer your question:

Is Computer Science science, applied mathematics, engineering, art, philosophy? "Other"?

Computer Science is Science ... when done properly. However, like other disciplines CS has overlaps with Mathematics, Engineering, Physical Sciences, Social Sciences, Philosophy and so on.

I would also add that what most programmers do is neither Computer Science or Software Engineering. It is more like what a craftsman does.

And sad to say, neither academic Computer Science or the Software Engineering profession are as rigorous as older science and engineering disciplines. (There are fields of Computer Science that are traditionally rigorous; for example, the ones with a strong mathematical basis. But for many fields, it is simply too hard / expensive to do proper scientific studies on the questions that really matter.)

share|improve this answer
1  
There's also the hardware engineering – someone's got to design the physical computers for the software to run on – and that's really a (major) sub-discipline of Electronic Engineering. –  Donal Fellows Feb 19 '11 at 3:42
    
+1 for the craftsman analogy, I realized that's the most exact concept to explain what a CS of Software Engineer does. Here's a link for free book from O'Reilly about it. apprenticeship-patterns.labs.oreilly.com/ch01.html –  romeroqj Feb 19 '11 at 7:20
    
"And sad to say, neither academic Computer Science or the Software Engineering profession are as rigorous as older science and engineering disciplines": I disagree with this statement. Among other things, if Computer Science were not rigorous, we would not have advances in programming languages, compilers (and all the formal language theory behind them), cryptography, and so on. All these applications have a solid foundation that has been developed mostly in academia. –  Giorgio Dec 29 '12 at 11:18
    
@Giorgio - It is a pity that you didn't read what I wrote immediately following the sentence you quoted ... –  Stephen C Dec 29 '12 at 15:16
    
@Stephen C: I did read it, and still I am not convinced that Computer Science is less rigorous than other sciences (but I may be wrong, of course). Or maybe one should first define what one considers "scientific" and "rigorous" and what not, but this could require a long discussion, I guess. –  Giorgio Dec 29 '12 at 23:23

Programmers rarely "do computer science". They mostly use results of "software engineering", which is an engineering discipline, obviously.

Other than that, Computer Science is Applied Mathematics. If you compare CS with something indubitably belonging to applied maths, you'll notice a lot of resemblance.

Computer scientists design and study ways of computation (algorithms), taking most of theory from Mathematics (logic, graph theory, combinatorics, etc)—and contributing to it at the same time. Just like the rest of applied mathematics.

They evaluate properties of these models and algorithms theoretically, and carry on modeling experiments (write test programs). Like applied mathematicians simulate flow of liquid in tubes on clusters, computer scientists use computers to experiment with implementations of their algorithms. The results of these experiments go directly into production: either to an oil refinery or to a software for stock analytics.

In the university I finished there isn't even a special department for computer science: among other, non-computer domains, computer science chair is a part of Department of Applied Maths.

share|improve this answer
    
but in other universities, Computer Science is a separate department within the Maths Faculty, a department of the Engineering Faculty, the Science Faculty, or ... none of the above. These are adminstrative / organizational issues and have little to do with the actual subject material. –  Stephen C Nov 16 '10 at 2:20
    
@Stephen, that's why I specified the university, instead of saying "in most universities" or "in many universities" :-) That's just a small example, not the gist of the answer. –  Pavel Shved Nov 16 '10 at 6:04
1  
sure it is a "small example", but my point is that it is not a representative example, and its is not even particularly relevant to your argument. To illustrate, the University where I work is in the process of restructuring the Faculties ... not because of any deep thinking on what relates to what ... but in order to reduce administrative costs. A few years back, the CS and Elec Eng schools were combined for the same reason. –  Stephen C Nov 16 '10 at 7:02
    
As I stated in my initial reply, computer science is an applied mathematics discipline that deals with the design and application of computational automata. Programming is not computer science. Software is a means by which to implement computational automata without whipping out a soldering iron (any program can be implemented using sequential and combinatorial logic given enough real estate). The von Neumann architecture was different from the architectures that preceded it in that it is a general purpose automaton that serves as a base for creating “soft” special purpose automata. –  bit-twiddler Feb 19 '11 at 20:35
1  
@bit-twiddler - Your definition is too narrow. It excludes lots of academic areas that are traditionally classified as "computer science". –  Stephen C Jun 6 '12 at 7:32

Computer Science is a term which these days cover many, many things:

  • The master craftsmen doing work for others based on their experiences with their tools (and having apprentices etc).
  • The tool smiths inventing and creating new tools for the craftsmen
  • The researchers developing new alloys and other materials - like plastic - for the tool smiths.
  • The theoretical scientists figuring out how stuff works so the alloymakers know how their tools work.

Note how all the above have distinct naming instead of just "computer scientists". The difference is just that Computer Science is too new for naming to settle.

share|improve this answer
    
Point 2 is more of a toolsmith centipede, but this answer's right on :) –  ZJR Dec 29 '12 at 0:39

Computer science is applied and experimental mathematics.

share|improve this answer

Computer science is a branch of applied mathematics that deals with the design and application of computational automata. Software engineering is the proper subset of computer science that deals the formalized design and construction of code for the von Neumann architecture. The von Neumann architecture is only one way to implement a computing machine. For example, the machine used to crack Enigma-encoded messages was not a von Neumann machine.

Software engineering is a practitioner discipline. Computer science is research-oriented discipline. Most computer scientist undergrads end up in software development because research requires one to hold at least a masters degree, which enforces the belief that computer science is a glorified programming certificate.

share|improve this answer
3  
I don't think that many academic computer scientists would accept a definition of CS this narrow. –  Stephen C Jun 6 '12 at 7:33

First of all, it is computing science. This deals with mathematics behind computation.
There are other disciplines that are more oriented towards engineering.

The difference is the same as any related science and engineering disciplines. One is about accuracy, other about precision. Computing science is theoretical, others are the science applied to problems: branches of engineering.

share|improve this answer
1  
MIT disagrees with you eecs.mit.edu –  Alison Feb 19 '11 at 22:06
    
@Alison, please fix the wiki entry (en.wikipedia.org/wiki/Computer_science) as well. –  CMR Feb 20 '11 at 3:22

The discipline most accurately called "Computer Science" is, in most universities I've checked, an applied science, similar to engineering disciplines; if you major in it, you receive a "BS" or "MS". Texas Tech's CS degree was offered by the Engineering college. The discipline, as taught, is mostly theoretical; you learn the concept of Turing machines, DAs/NDAs, and other fundamental concepts that the "day-to-day" programmer doesn't really have to keep rattling around in their skull. You also get a pantload of higher math; the Texas Tech CS degree, and I'll bet many others as well, pretty much hands you a Mathematics minor to go with it. To that, most university's degree tracks add in a hefty dash of practical low-level application; you learn an assembly language, a 3rd-gen language, you explore computer graphics, operating systems, and even a good bit of electrical engineering/digital design.

However, most people who code for a living are not "computer scientists"; they are, strictly speaking, "software developers" or (when you add in analysis/design) "software engineers"; that job is much less hardware-level (though you have to know the basics of that), much more systems analysis, design and straight-out coding. Many universities have a different track just for that; at Texas Tech it was called "Management of Information Systems" and it was a Business degree (BBA/MBA). That track was lighter on higher math (what you had to know about algebra and differential/integral calc was squeezed into two semesters of "business math", and didn't include vector/tensor calc, linear algebra, etc), much heavier on financial math (a semester each of stats and finance, with two each of accounting and economics). Lighter on operating systems, heavier on "stack" technologies such as databases, web servers, networking and general systems administration. Lighter on low-level languages, circuit design and AI, heavier on 3rd and 4th-gen languages, systems analysis and project management. I got this degree from Texas Tech and by the time I'd left I'd had at least a semester each of Java, VB, C# and web languages (HTML/CSS/PHP), plus a year of OOA&D and various other courses in IT project management.

Which is better in the real world? I got the MIS BBA, my brother got the CS BS, and we're both employed at roughly the same salary level (adjusting for cost of living) as senior software engineers. He had to learn a lot of the required OOA&D on the job, as well as spin up pretty quickly in C#/Java from his basic C++ knowledge. For my part, I wish I had the two semesters of conceptual algorithm study that he got while I was stuck in business management courses (yes, MIS is a "Management" degree, but I've found that 99% of my knowledge of how to manage and not manage other people has been learned by example).

share|improve this answer

Not the answer you're looking for? Browse other questions tagged or ask your own question.