15

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?

PeterJ
  • 145
  • 3
  • 4
  • 13
Macneil
  • 8,223
  • 4
  • 34
  • 68
  • 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 03:09
  • related: http://programmers.stackexchange.com/questions/848/computer-science-arts-or-science – spong Feb 19 '11 at 06:07
  • 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
  • Most if not all of the original computer scientists were mathematicions so i guess thats the closest to a correct answer – Karthik T Oct 09 '12 at 05:50
  • why does it have to fit into another box, can't it be its own box. – NimChimpsky Dec 28 '12 at 13:26
  • the more you think on this question, the more confusing it gets ! – Chani Dec 28 '12 at 14:47
  • 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 05:59
  • I do wonder about one thing: why is it important to you, what discipline CS belongs to? It doesn't change CS. – phant0m Dec 29 '12 at 19:51

7 Answers7

30

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.)

Stephen C
  • 25,180
  • 6
  • 64
  • 87
  • 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 03: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. http://apprenticeship-patterns.labs.oreilly.com/ch01.html – romeroqj Feb 19 '11 at 07: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
  • @Giorgio - My criterion for "scientific" is that "The Scientific Method" is applied / followed: https://en.wikipedia.org/wiki/Scientific_method – Stephen C Jun 01 '13 at 00:35
  • @Stephen C: OK. Regarding your observation "for many fields, it is simply too hard / expensive to do proper scientific studies on the questions that really matter": if you refer to such things as "programmer productivity" or "the effectiveness of a development methodology, I agree with you: these are important questions but conducting studies with accurate measurements and verification would be too expensive. So, I agree that you cannot apply the scientific method in these areas. – Giorgio Jun 01 '13 at 08:49
  • On the other hand you can be "rigorous" in the sense that you try to produce a meaningful, logically consistent interpretation of facts and, even you can't produce mathematical formulas that you can verify against experimental data, you must still verify your theories against all known facts. I think this kind of method allows to distinguish knowledge from fairy tales. But yes, disciplines that work with measurable data can produce more "objective" results. – Giorgio Jun 01 '13 at 09:03
  • 1) I am referring to things like designing a programming language, protocol, operating system, etc. 2) A coherent explanation of facts is not (hard) science. Science requires falsifiability, – Stephen C Dec 10 '18 at 10:04
12

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.

Stephen C
  • 25,180
  • 6
  • 64
  • 87
P Shved
  • 7,427
  • 35
  • 50
  • 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 02: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. – P Shved Nov 16 '10 at 06: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 07: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 06 '12 at 07:32
  • Calling "software engineering" an "engineering discipline" is insulting for engineering. Ok, it's *soulless* like engineering, (and that's probably why it got that moniker slapped on by math people) but it certainly isn't accurate enough to be considered hardcore engineering. – ZJR Dec 29 '12 at 00:37
5

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.

1

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.

CMR
  • 829
  • 4
  • 11
0

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).

KeithS
  • 21,994
  • 6
  • 52
  • 79
0

Computer science is applied and experimental mathematics.

philosodad
  • 1,775
  • 10
  • 14
0

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.

bit-twiddler
  • 2,648
  • 1
  • 16
  • 17