> >I'll try to post some examples when I get a chance, but I wondered
> >if there are others who have a notion ofhow to understand
> >computer science as a science, of the principles that help
> >to define it as a science.
> Yes, i have a view. AFAIAC, the closest job definition is that of an
> architect and assistants. For example, iIn the early days of structure
> design, there was concern over the mechanisms that could be employed
> (like, will the building remain standing one year from now after it's
> been windy). Once these were understood (or even before they were),
> another objective was to make it as cheaply as possible and yet
> another was to make it as attractive as possible. Then there was the
> need to make it disaster-proof, accessible to disabled folk, and
> enjoyable to use etc.
> There is some science involved in the operation, but it is borrowed
> from elsewhere. Computer science is an applied discipline and i
> suspect that the word "science" is really a mechanism more for college
> recruitement than anything else.
OK, here's my bit. I agree that the art of designing and building
software is much like architecture, but I'd push it. As far as I know,
architecture works because it is a design effort (almost exclusively)
which requires the kind of rigor and calculation that we don't expect a
sculptor, for example, to need to exercise.
In order to build programs or design buildings, you need to understand
the range of materials you may use, and make decisions about when and
which materials to use "off the shelf" and which will be done
specifically for your design. Architects may look at strength and
durability of a material, while programmers may use speed and
reliability in choosing components or designs. Building these
components seems fundamentally an engineering discipline: learn which
approaches work best in which situations, choosing solutions to fit a
particular blend of constraints: cost, speed, reliability, ....
However, there is a science as well. When you start asking fundamental
questions, you edge into the "science" area. Here are some of the basic
questions of computer science that I feel merit the term science:
(1) Is there a limit to what can be computed? Are there questions that
can be simply stated as computations which can never be solved, even if
we build much faster computers with new, as yet unanticipated
technology? Of course, here the answer is yes, there are intractable
Extra credit: Characterize the "impossible" problems above?
(3) How about "hard" problems? Are there problems whose solution, while
clearly possible, will always be "slow". To answer this, you may have
to make some more specific models of what a computer can do than for
(1), yet still attempt a characterization that will remain correct for
decades. Discovering ways to characterize the complexity of problems
(not just particular solutions) seems to me a fundamentally scientific
(4) How can you tell which programs are "correct?" We've given up on
this one, since we know it can't be solved (there: a scientific
result). It is possible, however, to build "provably correct" programs,
for all different kinds of definitions of "correct program." How do we
build such programs, and what are our standards of proof?
(5) In particular sub disciplines, we have more experimental science to
deal with, but they are not so easily described: you need to know more
of their world:
The analysis and design of algorithms is a mix of math and
experimentation. I would call this "core" computer science myself.
In operating systems it is possible to build systems that will not
deadlock, as well as systems that may deadlock, but never undetectably.
The production of those design elements is, it seems to me, a scientific
To show real experimental science, we often build programs as
"existence proofs" of certain disputed propositions. "FORTRAN,"
"LISP," and relational databases all first came into existence in order
to prove that such things were possible.
I would call computer science that part of the computer field that talks
about "all" programs, rather than "a particular" program. Computer
science is the statements in the field that we expect to be true in,
say, a hundred years. These things are not declarations of how we
should do things, they are discoveries about the nature of the problems
we are attempting to solve, or even discoveries about the nature of the
This process of discovery seems to me to be science, but if you call
math an art, I wouldn't quibble with putting this stuff over into the
And yes, I think Jim Blinn's comment is extremely clever, if not
necessarily completely correct.
-Scott David Daniels