
Computer Science is Not Math - scott_s
http://www.scott-a-s.com/cs-is-not-math/
======
ArtB
I have a problem with his analogy to physics. The experimental physicist
purpose is to verify in the real world the laws discovered... but the person
actually using those laws to build products (I'm skipping a few steps) is
called an engineer. Physicists prove the existence of atoms then engineers use
knowledge of them to build chips.

But we don't start grouping those engineers in with the physicists. We treat
those as two separate disciplines. Well, lets keep computer science a
theoretical science and call those people who apply those theoretical
discoveries engineers. Much neater and cleaner and makes sense to me.

~~~
scott_s
Which is a fair point - I grapple with how much of what I do is science, how
much is engineering, and how much is neither. But, the problem is, that's what
the word "computer science" means now. We could try to retroactively redefine
a word to fit what we feel is a more natural division, but how often is that
successful?

~~~
ArtB
In what I do (mostly business cruds) it is mostly an art. The skill is not to
get it done, but to organise the code effectively so that it will be easy to
debug and adapt and reuse etc. It really doesn't feel like a science and more
like being an editor of an anthology.

~~~
scott_s
I consider that software engineering. "Doing" computer science means you're
doing research. To keep abusing the physics analogy, your work (software
engineering) is to mine (computer science) as mechanical engineers are to
physicists.

~~~
pm90
Interesting. I talked about this with a friend, who did her BS in Math and
Physics and now is a PhD in engineering. What we finally agreed was that
physics is just so vast, that the `practical' aspects have spawned engineering
branches. i.e mechanics == mechanical engineering, electromagnetism ==
electrical engineering, atomic physics == nuclear engineering and so on. Maybe
we should do the same with Computer Science

------
stiff
There is an article on the same topic by Professor Donald Knuth which I find
much more insightful:

[http://mathdl.maa.org/images/upload_library/22/Ford/DonaldKn...](http://mathdl.maa.org/images/upload_library/22/Ford/DonaldKnuth.pdf)

~~~
jashkenas
Follow up with Knuth's "Computer Programming as an Art":

<http://awards.acm.org/images/awards/140/articles/7143252.pdf>

------
Dn_Ab
The article can be efficiently summed as: Computer Science is not always Math,
sometimes it is more of a Science or Engineering or something of all of them.

I think this is one of those places where a word has different meanings to
different people and correctness takes a religious quality and fruitful
discussion requires telepathy. Also often depending on the resolution of the
definition and where a person stands on if the thing and its description
can/should be distinguished.

People who say computer science is math I suspect are hard pressed to find
anything that isn't. Myself for example, I define math as the maximal object
that has something to say - about anything that has structure - in a
systematic way. You magnify/exaggerate a certain aspect of the structure you
think is key and explore it in a systematic way to gain insight on the whole
thing. So while aspects of computer science are more engineering or science
than math, I can look at the whole system of doing computer science in an
engineer like function as mathematically describable.

------
ekm2
Programmers are perfectly comfortable talking about
history,psychology,philosophy,economics,the arts,but when math comes up
everyone starts crafting intricate theories why it really has nothing to do
with his craft(and is therefore not worth wasting time on).Is this a
rationalized adult version of math phobia?

~~~
demian
There are two "extreme" ways of doing things, the "crafting" way in one side
of the spectrum and the "engineering" way on the other side.

You can "craft" a car without knowing a single formula, but that proved to be
inefficient.

In programming is kind of the other way around. There is a way to use formal
mathematical methods to "engineer" programs, but for general use they seem to
be economically "inefficient".

------
demian
I believe that designing and building software systems is not "equivalent" to
experimental physics, that it is not "experimental" computer science.
Following the metaphor, I believe it's more accuarate to relate it to design
and engineering. As in physics, there are very exact scientific theories that,
mixed with technical/practical knowledge and insight about systems and people,
can be used to create technology.

But I would also argue that there may be a way to "experiment" in a similar
way physicist do, and it's by looking at "computing" as a phenomenon of the
natural world.

Computing can be considered a science similar to phyisics, because it can be
seen as laws that describe nature, or more specifically how information is
processed in the natural world. This "computing" works at a "higher level"
than physics, which studies the laws of the "hardware". The most used example
is the DNA, with information in a higher level of abstraction than the
chemical physical support.

I always find amusing to imagine what if Newton had developed his theories as
a way to solve practical problems instead of trying to explain motion laws[1],
and how maybie that's what happened to "computing".

[1](Physics = "Engine Sciences"?)

------
gatlin
Computer Science has always seemed to me to be the study of algorithms and
information, correctness, methodologies, and their applications. Math is used
in order to advance this knowledge. It is readily apparent to me that
everything in CS is applied math and logic.

And in the same way a mechanic uses physical principles (arrived at by way of
math), software engineering uses insights, practices, methods, and languages
(which are mathematical entities to control a Turing machine) _developed by_
computer science. Computer scientists in turn also learn quite a bit from
challenges found and attacked by the engineers.

A few computer scientists I've met have math degrees and they enjoy exploring
intersections of discrete math and formal methods; some also do research
almost exclusively in engineering / application domains (e.g. computer
graphics). And, some engineers I know do quite a bit of graph theorizing
before hitting the keyboard (whether they recognize it or not) because it's
useful.

A good SE will be a computer scientist when faced with a new, challenging
problem and a CS will engineer on occasion to help her research.

------
qznc
computer science = information theory + software engineering

My opinion is that education should split computer science into the
information theory part and the engineering part. The information theory part
might even merge back into the math departments where it came from.

~~~
cantankerous
I think the integration of software engineering as the core of a computer
science program essentially destroys the computer science program. Sure, many
people with CS degrees wind up doing software engineering, but comparing CS to
SE is like comparing a metallurgist to a blacksmith.

~~~
xcallmejudasx
That's exactly the comparison I was looking for.

Sure the blacksmith and the SE can build the final products but without the CS
or metallurgist to build the foundation they wouldn't have a job.

~~~
cantankerous
:-) I think another important thing to note is that both software engineers
and computer scientists reinforce and add value to each other's work. CS can
improve and verify the methods employed by those in SE and those in SE can
provide direction (necessity is the mother of invention) to and implement the
methods developed by CS. It's a very unrefined observation, but I think it
gets the general idea across.

------
zeteo
Oh yes it is. Programming is exactly equivalent to writing mathematical
proofs.

[http://en.wikipedia.org/wiki/Curry%E2%80%93Howard_isomorphis...](http://en.wikipedia.org/wiki/Curry%E2%80%93Howard_isomorphism)

~~~
lincolnq
Did you even read the article?

Edit: This is exactly what the author is arguing against. Yes, you're writing
a proof, but that's not the point of what you're doing at all.

~~~
zeteo
Of course I've read it. He says just the foundations are math. He says actual
programs (e.g. those implementing networking protocols) are not math. Curry
and Howard beg to differ.

~~~
ArtB
They can be interpreted as math, but they aren't really. If you are using Coq
or something verified it can be, but especially when you are using a dynamic
language and you have no idea of the types of objects that will be passed as
parameters or when you are just slapdashing bits of scripts together (like,
"hmm, that failed, maybe I should just +1 to it?") it's hard to compare that
to the rigorous discipline called math.

~~~
zeteo
Math went on for millenia without computerized proof checking and yes, some of
those proofs were buggy. The difference between a professional mathematician
and a software engineer is no more than that between a C and a Prolog
programmer. Anyone who has written both proofs by induction and recursive
programs can easily see the correspondence, even without the Curry-Haskell
proof that the correspondence exists.

------
generateui
And software engineering is quite dissimilar, if not completely different to
computer science. Creating API's, building user interfaces, testing, has
little to do with computer science, or information theory, or mathematics.
Yes, it has some overlap, but not nearly as much as academics like to think.

Take an example as implementing a 3D renderer. A computer scientist might
argue that underlaying 3D calculations should be correct. A software engineer
might optimize for speed, and simply allow incorrect/imprecise calculations,
as long as the rendered result does not look very different.

~~~
emmapersky
Except underlying that 3D renderer is a whole bunch of Computer Science
research that had to be done in order to allow the engineer to make an
optimized implementation. And I doubt a decent Computer Scientists would argue
that. In fact, you might need some more CS (or science in general) to figure
out what tolerance can be allowed for. Further more, while an optimized
implementation is good, an optimized algorithm is probably even better, and
right there i more CS.

------
cprussin
I would claim that Computer Science is a term that is supposed to apply to any
science directly interested in computation. I really see no point in that.
Mathematicians are interested in algorithms and complexity and the like,
software engineers/db engineers are concerned with databases and UIs. There
are different programming languages for each purpose. I see no reason to
insist on clumping them in the same group.

tl;dr: every study involving computation or programming doesn't need to be in
the same department.

------
terio
This is a problem of definition more than anything else. I feel more
comfortable thinking of Computer Science as the Math used to study algorithms
and processes. The rest, although based on Math and the scientific process,
looks more like Engineering to me.

------
dsirijus
Still haven't read through all the articles referenced to in the comments, but
please - do not equate "what I do every day as a computer scientist" to "what
computer science is". Let's keep the ideals, shall we?

------
alsothings
is Computer Science the same as Software Engineering or Software Development?
If it is then sure, this article makes a fair point, but I've always thought
these were related but distinct things. And if they are in fact distinct, then
Computer Science is the part that is _Applied Mathematics_ by another name.

But really, all of this is just quibbling about semantics.

~~~
xcallmejudasx
As much as I agree that everyone is just quibbling about semantics it is
something that needs to be finalized and agreed on.

In some states it's illegal to say you're an engineer unless you specifically
have an engineering degree. Most CS degrees are offered as a science degree
with an alternate Software Engineering degree being an engineering degree.
There's also a noticeable gap in what you're taught depending on which path
you take. Friends of mine who majored in software engineering ended up
learning more practical languages, how to use source control, software
engineering practices, and never had to take a class related to the theory
side of it. Whereas half of my classes were information theory, and abstract
or theory based math classes.

Does this make them better programmers because they know more languages and
tools? That's subjective. However, there are times when you need a computer
scientist and not a software engineer but most companies and even developers
themselves couldn't tell you the difference between the two.

Purely hypothetical at this point but suppose you were tasked with creating
the first ring based authentication system. This involves a decent
understanding of group theory . I don't doubt for a second that a software
engineer would be able to accomplish this after first teaching them self about
group theory but my first bet would be to go to the person with the CS
training. Sure they might not be able to code it as well but once the idea has
been developed and proven to be mathematically sound it can just be sent off
to the engineer.

------
vbtemp
Note to OP, I'm really not a huge fan of people posting links to their own
blogs...

And in response to your essay, which by and large was tldr, I don't think many
people run around saying that CS is math. Many computer scientists, as I'm
quite sure you know, need to model their computable structures formally, show
reductions or equivalences to other well-studied constructs, and then use the
properties of these constucts to establish the
expressiveness/complexity/whatever of their model. If outstanding questions
remain then it can motivate basic research into the relevant mathematical
field (particularly true with cryptography). These people "do math" - many
other's from a CS background don't.

~~~
scott_s
I've been here for a few years. It's a common enough practice that I felt it
was okay. Further, I wrote this because I have made the same comment here at
least five times (<http://news.ycombinator.com/item?id=3596446>).

