I was initially outraged by my claim in the previous post that computer science is not real science, but when I thought about it some more, I concluded that I might have a point.

The argument rests on the following series of assertions:

**1. Science is the reduction of the natural world to mathematical description.**

Of course science is many others things besides, but this I claim is what the core activity of the natural sciences has turned out to be. This indeed is an understanding of things that led to some obstacles for the first two millenia or so; with a few, mostly astronomical exceptions, the world proved too complex to be immediately reducible to simple mathematical forms in the way the Pythagoreans had, in their first flush of enthusiasm, initially hoped; and at least from Plato onwards, mathematicians and philosophers were encouraged to focus their eyes on ideal forms rather than messy reality. However, once maths had developed enough, and had realised enough of the strangeness of its own material not to get too uptight about using tools like calculus before all their aspects had been formally proven; and once science too had learnt from Bacon to distrust arid, scholastic speculation in favour of hard, inductive fact, and then forgotten enough of Bacon to be prepared to make bold theoretical leaps again; once these initial challenges of a tempestuous courtship were overcome, science and maths settled down in a fruitful partnership.

**2. The computational world is already mathematically described.**

As computationalists, we already live in a world of ideal Platonic forms. Numbers are numbers; Boolean values are true or false; imperative statements are predictably executed. There is nothing to be reduced here. Of course, there is magic going on within the circuitry, but that does not concern us; the underlying world of electronics only breaks through into that of computation precisely when it does, indeed, break.

**3. Therefore, there is no science to be done in computer science.**

What then is it that computer scientists do, then? Well, lots of things; it is a diverse field. The most august parts of field, such as complexity theory, impinge back into the mathematical field. But essentially my claim is:

**4. Computer science is to mathematics what engineering is to the natural sciences.**

That is, computer science is mathematical engineering. This claim is liable to cause confusion, for a number of reasons. Regular engineers also use mathematics, as well as the findings of their respective scientific counterparts; but then that is hardly strange, since those scientific counterparts themselves use mathematics. Mathematics has other applied fields, such as statistics; but the essential distinction is that computer science works on problems that have a computational aspect; and in any case there are significant overlaps between computer science and other fields of applied mathematics. There is also sometimes a distinction made within computer science between computer science on the one hand, and software engineering on the other; indeed, my own department is named Computer Science and Software Engineering. However, my claim about this purported distinction is:

**5. The relationship between computer science on the one hand, and software engineering on the other, is the same as the relationship between engineering research and the vocational training of engineers.**

Engineers are not just practitioners; they also do research. The research they do is not, in general, pure research; rather, it is the application of the outcome of pure research to finding novel solutions to complex, applied problems. At the same time, of course, most engineers do not do research, or at least not for the majority of their careers: rather, they apply engineering discipline to everyday tasks and activities.

So too in computation. Computer scientists are not really doing pure research, although they might like to think they are; if they were doing pure research, they would be doing mathematics (as, indeed, so-called computer scientists such as complexity theorists are). What computer scientists do when they do research is to apply the tools and findings of mathematics to complex practical problems, either in the obvious form of mathematical theory (probability, linear algebra, etc.) or the more indirect form of using computational techniques, which in turn are a particular form of mathematical tool, albeit a highly articulated and specialised one. And, as with engineers, most computationists do not spend their time, or at least the majority of their careers, solving these original, complex problems; they apply the discipline of computer science (that is, mathematical engineering) to everyday tasks.

One could reduce this to another form: research engineers (computer scientists) do extraordinarily what professional engineers (software engineers and programmers) do ordinarily.

So, finally, to re-iterate my main thesis:

**6. Computer science is not real science.**

This is not intended to be disparaging (although it would be nice to have a different adjective than "real"). But it is intended to be a statement of reality. And computer science as a discipline will be hampered, and will fail to make its proper contribution to the fullest degree, if it is deluded about its true identity.

My degree was called bachelor's in computer science and engineering. I think every computer science degree should instead be called that.

However, I don't think computer science is not science. There is computer science and there is computer engineering.

I would put Complexity Theory, Theory of computation, Some aspects of Numerical Computation, Scheduling Theory, Information theory, Statistical Learning Theory, Quantum computing, etc, etc, etc into the computer science bucket.

All the engineering extensions of the theories, etc would be computer engineering.

Let me ask why you think mathematics is a science. It does not, to the best of my knowledge, make use of the scientific method.

http://en.wikipedia.org/wiki/Scientific_method

If I can understand why you think mathematics is a science, then perhaps I'll be in a better position to understand why you think computer science (which at least in some cases does make use of the scientific methods) is not.

Interesting. Based on your argument, I'd have to conclude that Computer Science is not a science because it doesn't rely on the scientific method. It is more a branch of mathematics, with its concerns on algorithm discovery, characterizing algorithms, and proving theorems about the performance or equivalence.

While Computer Engineering, is a science. Computer Engineering's concerns are frequent explorations of "What are the bugs in this program?" and "How can I make this program go faster?", with its debugging tools like dtrace, gdb, Tools to keep old bugs from re-appearing as the program is modified like unit test frameworks. Performance measuring tools like shark, and scientific literature publishing tools like bug databases and source code control systems

Since the work of Computer Engineering is a science, then Computer Engineering isn't engineering: you can't just look up its principles in a book and apply them. Our term for that is "calling a subroutine' and it is a negligibly tiny part of the job of building a new program. Instead, we spend our time in the debugger forming hypotheses, and gathering data to test our theories.

Computer science is not natural science, but neither is political science. 'Computer science' is simply the best term some guy came up with. You have a better one?

Daniel T: certainly, under the terms on my analysis, mathematics is not a science; nor is it a science in the sense of following the scientific method, as commonly understood. I agree also that computer science involves some science, in both my sense and in yours, whereas mathematics involves none.

Fields of computer science do commonly make use of the scientific method; our field, that of information retrieval, makes particularly heavy use of it. However, we do not make use of scientific method to solve computational problems themselves, but rather other issues, such as the intersection of computation and human perception. In so doing, we are part-time practitioners of sometimes psychological science, sometimes social science, sometimes some other scientific field; but there is not here any specifically computational science. I would argue that what is involved here is not so far removed from what is done in research engineering: because the problems faced cannot be simply reduced to formal proof, we must use the scientific method to validate our conclusions.

There is, however, one aspect in which I will concede that there is a computational science. When the computational systems we build are too complex to be formally analysed and proven, then we can treat them as a kind of artificial phenomenon that requires scientific method to reduce to predictable form. I concede also that there is a analogue to this problem of complexity in the natural sciences. There, we might be able to explain some natural system in complete. mathematical detail at some component micro level (say, of the atom in physics, or of the gene in biology), without being able to extend this micro analysis formally to a macro level. At the macro level, therefore, we are forced again to scientific method, to reduce the phenomena to predictable, mathematical form.

Erm, computer science, as a fundamental process, is how model computation using physical phenomena.

Seems scientific to me. Just because later it means having rooms full of idiots who will pay for 'computerslol' on their resume, and learning about colour-coding error messages (ok, that is a science as well), doesn't mean it isn't a science.

tl;dr, I didn't read your article, but since I've proved you are wrong, you are redundant.

Doh, why not simply consider it a branch of mathematics? Word "computer" may sound modern and more attractive but in fact "computer science" is nothing much but a branch of mathematics. Software Engineering is different.

It's just a name - I think if we called it "informatics" (iirc many other languages use some word of that form for what we call "computer science") or "software engineering" the confusion would go away.

I think there's a misunderstanding about what the scientific method is. It's used every time someone does something as trivial as debugging.

how is debugging scientific method? Please explain?

One principle all lawyers know is that whoever controls the definitions usually wins their argument. So it's easy to see how you could confuse yourself by making up your own definition of science. You also seem to consider "programming" and "Computer Science" as synonyms even though most computer science doesn't involve programming at all.

But, just off the top of my head, I can think of several fields in artificial intelligence that fit even your definition of science.

Since your whole argument is about the definitions of computer science and science, I think you'd be better off to start with formalized definitions of each that are generally accepted. And you'll want to spend the bulk of your work explaining why those definitions are correct. Above you merely state your definition of science, then agree it's incorrect, but continue to use it anyway. You never attempt to define computer science, but it's fairly clear from the text that you think it's the act of typing code into an IDE.

Computer scientists and software engineers are not engineers - Real engineers learn much more about designing reliable systems from unreliable components. This would make an interesting base for a future post. It's no wonder computers and software are so hard to use and unreliable.

i agree that Computer Science is not a Natural Science but i doubt that it require the knowledge Physics: a natural science subject.

You're all wrong! Mathematics is not a science and computer science is a discipline of mathematics. And as a mathematician would say: Computer science is not a science by construction.

well, i see scientific methods in computer science. just look at it. the methods are basically the observing of a phenomenon>forming of hypothesis>test and experiments>retrieving empirical data>and last but not least the finding if the truth. in computer science, we observe a phenomenon, both the natural and artificial phenomenon, work on finding a solution through computations and programming. using computers as a tool, we create models of the natural world, such as cellular automata to study and predict the world. of course, programming and computations are the testing and experimenting part.

if you look closely at other sciences, such as chemistry, we sometimes dont study nature directly. we figure out that '50ml of chemical A with a smaller molecules/atoms mixed with 50ml of chemical B with a bigger molecules/atoms does not give you a 100ml'. how do we model it to study them? well, back in my class, we teacher gave let us mix 5ml of green bean and 5ml of perhaps rice to show how it does not give us a 10ml worth of mixture. i think computer science is very similar, we not only study natural phenomenon with the aid of one or more tools, we also follows the scientific methods.

however, i acknowledges that not all computer scientists agree with whether computer science is a science or not. that might probably depend on their aim to study computer science. some studies computer science with notations for expressing computations, while the others study it for the finding of the absolute truth of the world.

what say you? im actually writing a report on computer science, will be glad to take in some propagation and debunking.

Dijksta regarded Computer science as a branch of applied mathematics, and a particularly difficult one at that. He said: "Computer science is no more about computers than astronomy is about telescopes".

But it kind of begs the question - is mathematics a science?

Does science require that evidence come from nature?

Interesting article here:

http://www.arachnoid.com/is_math_a_science/index.html

definitely you have no concern what is science, science does not equal natural world the name is computer science which means the science of computing because there are fundemtal laws and methods in computing which laws are defined as scientific method.

I would recommend peeking through Peter Denning's hallmark "Is computer science, science?" (or several of his other publications) looking into this very question.

My suspicion is that you seem to have your own very narrow understanding of what is computer science rather than accepting the fact that a lot of what is computer science, is exactly that, science. On the other hand, there are a lot of computer scientists that are not doing science in any shape or form of science. That does not however extend to all computer scientists. Such a claim would be so bad that it isn't even wrong... :-).

Unless you also support the claim that medicine isn't science (there is not scientific method behind modern medicine, just approximations of it), any social or political science is also out, in fact Newton wasn't a scientist (he certainly didn't experimentally prove all his theorems), that goes for Einstein and in fact a lot of the classical scientists. A lot of theoretical science does not fullfil your criteria, so which is wrong. You or the world?

@Original blog post

Man, I agree on your point that computer science is the "engineering arm of mathematics" in that it bends mathematics to fulfull certain tasks, but I wouldn't use the wording you did, I'd definitely not say computer science is "mathematical engineering".

So, Computer Science is about bending mathematics to specific tasks, but so is Operations Research, which is considered an applied mathematics discipline rather than an engineering discipline. Computer Science is not much different from Operations Research at all, and I think it should qualify as Applied Mathematics too.

Someone stated that Computer Science should be called Software Engineering, and that's just wrong. Software Engineering is concerned with working under the limitations of technology to create digital software and systems according to specifications, and Computer Science, on the other hand, is more concerned with the mathematics underlying the computation of results, not restrained to the existing computer technology. Software Engineering suffers from engineering-type constraints of feasibility, viability, etc. while Computer Science's constraints are mathematical possibility and human imagination.

I like how you completely ignore Theoretical Computer Science in your post. TCS is definitely Mathematics, and not "Mathematical Engineering". It aims to study and research the deep underlying patterns of the mathematical entities of computation to find out new theorems and properties, not merely "applying mathematical tools to serve application purposes".

The mathematical entities studied range from algorithms, where computer scientists reduce their properties to discover similarities and qualify different algorithms under different algorithmic classes according to the way said algorithms tackle a problem; all the different kinds of automata, to discover numerical, combinatorial and computational properties of language processing automata, such as mathematically analysing and discovering the computational possibilities of different classes of automata, as well as the qualification of different languages according to the kind of automathon that can compute them, and other theorems regarding the nature of automata themselves (such as the theorem that states that for any NFA an equivalent DFA exists); computational complexity classes, discovering different properties that make problems belong to certain classes under a certain computational model, but tp other complexity classes under other theoretical computational models, discovering the patterns and properties of different computational problems situated in ranges of their complexity classes (an important theorem in this subject is Shaefer's dichotomy Theorem); and finally, the study of mathematical abstractions of computational models, including, but not limited to turing machines, quantum computers and other theoretical non-deterministic impossible "oracles".

By saying that "the computational world is already mathematically described" you're completely taking for granted the structures cited above, which are studied and researched by Computer Scientists to reduce new conclusions about the immutable properties surrounding computation in our reality. It might be that algorithms (mathematical imperative statements) existed for a long time already, but an in-depth study on their true nature was never done before Alan Turing, who created Theoretical Computer Science. Automata, complexity classes, computational classes of combinatorial languages and the properties of theoretical computational models are all mathematical structures that had to be reduced and researched by computer science, and they have their immutable properties, theorems and definitions, just like any other mathematical entities, not merely "inventions to serve a purpose", but actual "mathematical structures reduced by the study of the underlying properties of computation".

So, in fact, as you can see above, there was A LOT that still had to be reduced in computer science.

You might argue that this all is mathematics, not science, but nor is it engineering.

tl;dr version: Stop being so narrow-minded.

Is 'computer science' then an applied art? a decorative art (ornamental and functional)? When someone who is not a scientist claims to be one, has he been cheating from the first moment that he made this claim? Is it possible to sue him? If he insists on his views, is he a pseudoscientist?

Agree.

Actually, Computer Science is exactly equal to Computer Studies, because they are a subject related to computer, not study the physical nature. So, It should be classify as a technology discipline, rather than science discipline.

Software Engineering is a technology discipline, rather than Engineering discipline.

The line I've heard among computer scientists is that you can tell it's not a real science because it has "science" in the name.

More seriously, along with mathematics, engineering research, and the social sciences, it fits well within the realm of the sciences because it takes falsifiability seriously.

Yes sure. Have you ever tried to learn

and use formal methods? The Z language?

Computer Science is harder than rocket science.

We hold the actual gates of today's world.

Hm. What about the connection between proofs and programs, via type theory? You don't find something that affects the foundations of mathematics to be interesting?

I'm an undergraduate in computer science at a large research university in the U.S. I am very passionate about answering unsolved research questions, and I'm am easily exasperated with wheel-reinventions that claim to be research.

I've been fortunate to find good advisors who have helped me to develop and contribute theoretical approaches that apply to a broad variety of applications. However, a huge volume of computer science journal/conference papers solely discuss implementation details and contribute little that generalizes beyond the specific application.

If much of the CS research community is focused on implementation and if I have to fight to find "real research questions" to study, is this a warning sign? Should I go be a mathematician or physicist, or am I not seeing the big picture of CS research?

And why is it so very important to determine whether computer science is really a science or not? Assigning or not assigning it such a title is just an artificial construct...computer scientists and computer science will do what it has done for the world regardless of whether you call it a science, or an engineering field, or whatever...

Certainly there are fields and advisors within Computer Science who are committed to developing theoretical approaches; it's just a matter of finding them.

I've considered this before, and I agree that "Science is the reduction of the natural world to mathematical description". Hence Physics is the pursuit falls perfectly into this category.

Now Computer Science as taught in Universities may be a bit off course, but I submit that the pursuits in the computer realm of such as machine vision with pattern recognition, modeled after human perception is a science, hence a Computer Science. With a computers' native language, mathematics, we attempt to model the physical process of recognizing the visual world, or reduce it to a mathematical description. Which brings us back to the initial statement.

Science is about understanding the natural world; Mathematics is about, well, mathematics; Engineering is about applying science and mathematics to build things and solve specific material problems.

So obviously Computer "Science" is not science. Theoretical Computer "Science" -- in particular, computability and complexity theory -- is obviously a branch of pure mathematics (and one of the least useful, I would dare to say). Everything else is obviously engineering. Problems, methods, criteria for value and success, publication vehicles and style, job market and career structure -- in all those aspects, computer "scientists" are quite similar to other kinds of enginees, and quite unlike scientists or mathematicians.

Indeed it is hard to understand why the non-theoretical computer "scientists" are so attached to the "science" label and reject the "engineering" one. Do they see engineering as inferior to science ("cookbook recipes", "sloppy", "mundane", etc)? Or is it just because of academic and funding politics?

Show me a computer scientist.

[...] people confuse computer science with IT or programming. We want to be respected as scholars. Arguments about whether or not computer science is a real science almost invariably begin with the premise that being a “real science” makes a [...]

This is a lame discussion, and statement. Definitions serve a purpose. You come up with one definition of science. Has there not been any discussion on the definition of science before somewhere? Couldn't you refer us to a source of such a discussion? Scientist who start claiming a definition by "but this I claim is what the core activity of the natural sciences has turned out to be" can't be taken very seriously. We can end this discussion quite simple by putting computer science on a two dimensional continuum with "real science" on the left end, and "no real science" on the other end. You would obviously come to the conclusion that computer science will be somewhat less to the left, than e.g. mathematics or physics. How big of a difference that is can be a point of discussion, but it does not serve any practical purpose. Computer science is a science in the form of a container model (or can be seen as such). Just like Business Administration and others.

The great Richard Feynman made me look for more.

https://www.youtube.com/watch?v=lL4wg6ZAFIM

I. Logic/Reasoning - methods for verifying and establishing facts through

II. Mathematics - study of numbers, quantities change (calculus), statistics, probability theory etc.

- Some branches of mathematics use computers and algorithms to solve mathematical problems, but that doesn't make it a "computer science" -- it's still math

III. Natural Sciences - study of natural world through empirical and scientific method

- Physics, astronomy, chemistry, biology, cosmology

IV. Applied Sciences - uses existing scientific knowledge (hint: look at the subjects above) to develop more practical applications, such as technology or inventions

- ENGINEERING (bio-engineering, medicine, mechanical engr, political science uses statistics to formulate their dumb pseudo-theories, etc.), using COMPUTERS to engineer, using COMPUTERS to "PROGRAM", using COMPUTERS to build "SOFTWARE", in other words 80% OF WHAT YOU LEARN IN A COMPUTER SCIENCE CURRICULUM IS APPLYING KNOWLEDGE GAINED THROUGH MATHEMATICS AND THE NATURAL SCIENCES TO BUILD SOFTWARE. It's an applied science.

V. Social Sciences - philosophy, sociology, etc.

Some classes you take in computer science don't even use computers, usually algorithms, and artificial intelligence. Those are clearly not programming classes, but branches of mathematics. And all computer programs are, are digital means of representing complex problems that were originally solved using binary electrical circuits (electrical engineering). I'm surprised this argument went this long with anyone establishing definitions.

In any case, you see how my outline of subjects neatly follow each other? How you use reason and logic for all the subjects below it? And how you use mathematics for all the subjects, below it? And how you use the sciences for applied sciences? Genius isn't it?

VERY well written and some valid points, but I respectfully disagree with the conclusion. As I earned my degree in computer science, I was taught to use the scientific method in problem solving. To say a "problem" isn't "natural" and therefore not real science seems a rather arbitrary thing.