About the SA Blog Network  














Guest Blog

Guest Blog


Commentary invited by editors of Scientific American
Guest Blog HomeAboutContact

I’m not a real scientist, and that’s okay


ShareShare  ShareEmail  PrintPrint



What kind of discipline is computer science? I thought it was a science when I received my BS. I believed its subdiscipline software engineering was engineering when I received my PhD. I’d heard, and would continue to hear, “This isn’t any kind of science/engineering I know!” from physicists and electrical engineers. I tried for years to prove them wrong. But now I think they’re right.

I’ve seen computer science described as many things—a blend, usually, of disciplines: mathematics and electrical engineering, with psychology thrown in, and occasionally more exotic area like physics (quantum computing) and molecular biology (biological computers). Certainly CS research and practice draw from these areas, but drawing from is different from being, or even being derived from. And none of these descriptions quite hits the mark. In my opinion, we would be best served by viewing CS as a branch of philosophy.

I don’t refer to ethics but to logic, and moreover, logic at the expense of observation. In science, a theory fails if it doesn’t predict observation. In CS theory, there is no observation. Things we use in computing—programming language, an operating system, and a computer’s instruction set—are models of a virtual reality. This reality derives from someone’s belief about the easiest way to solve a class of problems. So far, that’s not so different from science. Copernican theory succeeds because it’s easier to apply than Ptolemaic.

But Copernicus explained the sky he observed. Microsoft Windows provides a model of interaction with your computer, but not a model that explains phenomena, nor one that’s comparable to any other model. At least, I have yet to encounter a Macintosh user who cites repeatable experiments while denigrating Windows. I have read usability studies, but many are controversial and their conclusions are limited.

The cost of performing experiments certainly explains in part why they’re not common. But absence of experimentation also stems from an entrenched mindset in CS researchers.

It wasn’t always this way. Back in the late 1950s, the most important criteria for judging software were: how fast does it run, and how much memory does it use? Researchers, many with electrical engineering backgrounds, answered these questions analytically. Measure how long a program takes to execute on multiple data sets, fit the points to a curve, and voilà! an equation for calculating a program’s expected running time. The problem was that the equation only applied to that program run on that computer. The IBM 709 was not only faster than the earlier 704, its new instruction set dramatically increased programmers’ power. A 709-based program to sort data didn’t much resemble the 704-based version, so a 704-derived equation wasn’t particularly accurate. And if your company switched from IBM to Honeywell, you might as well throw away your data and start again.

Enter the mathematicians. John Hopcroft and Robert Tarjan, devised an abstraction for describing an algorithm’s performance. The abstraction is based purely on the size of the input data set and expresses time and memory performance as a function thereof. It’s not tied to any particular computer. It’s not tied to any physical entity. It’s a simple, straightforward way to compare performance. I won’t describe it here; read Gödel, Escher, Bach for details. Its importance lay in providing a universal tool for predicting performance.

Except it wasn’t, really. Hopcroft and Tarjan’s abstraction predicts performance as a concept, not as a physically measurable quantity. It doesn’t tell you how many seconds your program takes to execute—and can’t, because for that you still need to know the specifics of the computer you’re going to use. And indeed, there was resistance to Hopcroft and Tarjan’s work. But they had created something so powerful that its disadvantages were easily overlooked.

And so CS shifted away from empiricism. Researchers stopped making measurements and explored mathematical formalisms. I’m generalizing here. In some areas of CS, like networks, measurements are still fundamental. But I think I’m safe in saying that most CS research isn’t concerned with empirical results.

Perhaps this history helps explain why CS never developed a research method including steps fundamental in science: observe, and formulate hypotheses. Mathematicians don’t need hypotheses. They only need to state their assumptions and use logic to derive results. It’s Aristotle’s philosophy. It’s a valid approach for deriving conclusions, but unless there’s a rigorous way to test an assumption’s validity, it’s a dangerous approach to apply to the real world. Aristotle’s assumptions led him to conclude the heart was the center of consciousness.

Let me give a present-day example to illustrate the danger. A year or two ago I saw a paper explaining why open-source software is inherently less secure than proprietary software. It had flawlessly logical arguments—yet in the real world, more security flaws have been discovered in Microsoft’s software than in open-source software. This wasn’t data manipulation; the paper had no data. The authors made their point by starting from assumptions about how flaws are discovered. I doubt anyone can contradict their assumptions: Virus writers don’t offer themselves and their techniques for study. But clearly, something in the paper is amiss. And there’s great risk in accepting its conclusions.

Mathematicians, then, have influenced CS as a discipline, but there’s too much of CS that can’t be formalized to call it a branch of mathematics. This is why I find it more of a philosophy. The ancient Greeks, to whom mathematics and philosophy were more or less indistinguishable, would be inclined to agree, I think. The different camps I’ve encountered over the years (best programming language, best operating system, best software development methodology) seldom back up their beliefs with data; when they do, their experiments are met with the kind of skepticism the medical community reserves for cancer studies funded by tobacco companies. Each camp has a “philosophy” about the best way to develop software and doesn’t question its righteousness.

I don’t think this is bad, as long as it’s acknowledged. Though I know CS professors who wouldn’t be caught dead in a philosophy department, I think both education and practice could benefit from a better understanding of philosophical thought. My own work involves thinking about how to structure information to make it understandable. In my undergraduate days we used to debate whether a car without wheels is still a car, and then what if you remove the engine, and just when does it stop being a car? This argument, which is quite relevant to my work, I now know I can frame as a debate between the philosophies of Aristotle and Wittgenstein. There isn’t a right or wrong answer, just different solutions depending on which answer one chooses. Wouldn’t it be great if students learned there was nothing new under the sun?

From time to time I’ve seen calls for a “new kind of science” that encompasses disciplines like computer science. I dislike the ideas; I find them misbegotten attempts to confer the prestige of science. What’s wrong with being a philosopher, anyway? Let’s use tools appropriate to our trade, and recognize the strengths and limitations of every discipline—scientific and nonscientific alike.

About the Author: Steve Wartik works at the Institute for Defense Analyses as an Information Analyst, studying how to structure and represent data to maximize its usefulness. He believes his career, which has included stints in academia, private industry, and nonprofit organizations, has given him perspective on the many different paths of human progress. He is grateful to his wife, science writer and former biomedical researcher Elia Ben-Ari, for forcing him to confront the nature of his profession.

 

The views expressed are those of the author and are not necessarily those of Scientific American.






Comments 23 Comments

Add Comment
  1. 1. RDH 10:42 am 11/12/2010

    Virus writers concentrate on Windows and/or Office software because of the ROI. Just look at market share. Why target software that runs on a tiny percentage of accessible machines?

    Virus writers know very well how to "experiment" with software in order to find security holes that can then be exploited.

    Programming is essentially engineering. In the past especially, software would be converted to hardware (to get the greatest speed). And many an EE ends up as a programmer, as do many that obtain math degrees.

    Link to this
  2. 2. yevoc 12:02 pm 11/12/2010

    Based on my experience as a lead engineer hiring programmers, I wholeheartedly agree with this article. Like mathematicians, programmers can have a fundamental disconnect with the real world which has yielded catastrophic results when our engineering firm connected their software to very large and powerful machinery. It always took the work of our physicists or engineers to go back and fix the "bugs of physics" in the code, as the programmers seemed unable (or perhaps just mostly unwilling) to understand and apply the physics of the situations. For some reason, they [coders] always seemed more interested in the high level abstractions, user interface, and the human aspect of our products’ interaction, which seems to agree with your conclusion in this article on where the general focus of computer science is.

    Link to this
  3. 3. dbtinc 12:53 pm 11/12/2010

    Guess that means astronomers aren’t scientists in that it is a purely observational endeavor where parameters cannot be varied to prove a hypothesis! But then again the author may be right after all!

    Link to this
  4. 4. chetrasho 1:05 pm 11/12/2010

    Computer science is absolutely a "science". Science is the combined work of mathematicians, scientists and engineers.

    Mathematicians use logic to create mathematical theories. Scientists hypothesize about how these theories apply to the real world. Engineers use the hypotheses of scientists to build things in the real world.

    The classic example is physics. Newton/Leibniz researched physical motion. This led them to discover calculus and its applications. Mathematicians expanded upon calculus to create analysis. Scientists used analysis to create physics. Engineers used physics to build bridges, planes, cars, etc.

    Computer Science is no different. Allan Turing was working with machines when he discovered the Turing Machine. Mathematicians expanded on his discovery to create the mathematical field of computer science. Computer scientists hypothesize about possible applications to the real world. Computer engineers use the ideas from computer science to create things in the real world (eg. hardware, code).

    Obviously, this is a simplified model. Most science people are a mixture of mathematician, scientist and engineer. However, I think it’s important to understand the different work that these people do and how this work creates the field of "Computer Science".

    Also, you present a very weak argument that "there’s too much of CS that can’t be formalized to call it a branch of mathematics." The opensource/propriety example you provide sounds like a poor application of mediocre math (ie. bad science). However, the existence of bad computer science in no way precludes the possibility of good computer science based upon sound mathematics.

    Link to this
  5. 5. chetrasho 1:31 pm 11/12/2010

    ps
    And when I say that Allan Turing was "working with machines." I mean that he was breaking the nazi code. Of course he was later prosecuted as a homosexual and punished with female hormones. He then committed suicide. I think this is why Allan Turing is largely ignored as the founder of Computer Science. Scientifically, I think he deserves to be honored alongside Newton and Leibniz. I also imagine that his actions against the nazis saved countless lives. It’s a shame that homophobia led to his early death and the denigration of his legacy.

    Link to this
  6. 6. peakflow 2:58 pm 11/12/2010

    I think computer science is not science, it’s the theoretical branch of computer engineering.

    The term ‘science’ usually refers to natural science, but it isn’t a natural science at all by and large. However, there are some connections with the natural sciences like quantum theory and entropy in some places.

    And it does use mathematics and scientific methods sometimes, but then so does engineering.

    The other thing to remember is that there’s an awful lot of bad software engineers.

    Link to this
  7. 7. ormondotvos 4:08 pm 11/12/2010

    This article is a hoax.

    Link to this
  8. 8. ormondotvos 4:10 pm 11/12/2010

    He’s right. He’s not a scientist. He’s a troll.

    Link to this
  9. 9. ormondotvos 4:11 pm 11/12/2010

    He’s right. He’s not a scientist. He’s a troll.

    Link to this
  10. 10. anotherjoe 4:32 pm 11/12/2010

    If you need ‘philosophy’ to justify your work, then you are not a ‘scientist’. Science begins with evidence, it does not ask ‘why’ ’till it succeeds in predicting a repeatable event.

    Consider the career of Einstein. The negative result of the Michelson-Morley experiment was his starting point for Special Relativity; then he brought in the principle of equivalence to develop General Relativity. The young Einstein was an unbelievably intuitive and pragmatic physicist.

    The 4-dimensional space-time cosmology came about as a result; he did not start with a new geometric conception of physics. To prove his theory, he suggested verifiable observations.

    So was Newton. His optics work were a series of ingeniously conceived experiments, they would make a good laboratory manual today. The grandiose ‘System of the World’ came after he had sweated out all the orbital and inverse-squared calculations.

    James Clerk Maxwell, considered today the icon of a ‘theoretician’, learned about electricity as a member of the standards committee to define the unit of electrical resistance, the Ohm. Later, he made a pest of himself asking for a more accurate number for the speed of light.

    Charles Babbage didn’t just ‘think’ about computing, he started with an ‘engine’ of gears and indexed wheels. Alan Touring had vast experience using calculators to crack enemy encrypted messages.

    Using your example, if you just ‘think’ about cars, you are not a scientist. Call yourself a ‘social scientist’, if you like. If you conceptualize a car as a capsule that transports objects having volume and mass, over distances, utilizing energy to overcome friction, then you are a scientist; and an engineer if you actually proceed with a design, imaginary or real.

    Link to this
  11. 11. jmblock2 5:08 pm 11/12/2010

    The issue is interesting, but it just gets bogged down by bad/unclear definitions. Just off the top of my head, it seems like there are three categories often thrown around: philosophy, science, and engineering. These can all apply to any field of study. For persons like Turing and Newton, they were clearly making strides in all three categories in their respective fields.

    I’ll try and make a reasonable stab at describing the differences between the categories:

    A philosopher is reasonable trapped by the abstractness of the idea. It might be hard or impossible to measure the difference between two opposite ideas. There is a ‘value’ judgement taken and that is followed to some conclusion. It could definitely fringe on science when that difference is attempted to be measured.

    A scientists is one that is rigorous in methodology and observation. The methodology should often follow the scientific method, where hypothesis are suggested and rigorous observation is performed. Important questions for a scientists are: are you actually measuring what you think you are measuring, are you making any logical fallacies in interpreting the results, are you improving on your hypothesis and thus able to make future predictions? This can of course fringe on engineering and philosophy, depending on the field and level of abstraction involved.

    An engineer is one that is trying to solve a problem with specific constraints (money, time, weight, etc) with tools that are already developed. It often involves some creativity and a lot of hard work, but it isn’t done in a scientific framework.

    Anyways, I think the crux of the debate is just a result of over-categorization (can’t remember the word).

    Link to this
  12. 12. Dr. Strangelove 6:01 am 11/13/2010

    Steve Wartik,

    Computer science is a combination of applied mathematics (software) and electronics engineering (hardware). The pioneers of computer science were mathematicians and electronics/electrical engineers. Babbage, Turing, Shannon, von Neumann, Aiken, Zuse, Mauchly and Eckert.

    You think it’s philosophy bec. of its connection with logic. It’s actually closer to mathematical logic. Historically, philosophical logic and mathematical logic are intertwined. In formulating the Incompleteness theorem, Godel was influenced by Bertrand Russell’s analytical philosophy and ancient logical paradoxes. In formulating the Turing machine, Turing was influenced by Wittgenstein’s philosophy.

    So you’re right, computer science, at least the software part, is, like mathematics, more art than science. But the hardware part is engineering.

    Link to this
  13. 13. swartik 6:03 pm 11/14/2010

    Your point about opportunities is true, and I don’t deny that bad guys have targeted Firefox. However, the authors of the paper I mentioned claimed proprietary software is inherently more secure than open-source software. I know of no evidence to support that claim.

    Is programming really engineering? Dictionary definitions of "engineering" refer to the application of science. Where then is the science? In my experience, it’s from the application’s domain, not from the theory of computing. I think this is one reason there’s been so much disagreement on the required body of knowledge for certification of a "software engineer".

    Link to this
  14. 14. swartik 6:04 pm 11/14/2010

    I agree with this definition, though personally I’d be happier if the term was "computing theory" rather than "computer science".

    Link to this
  15. 15. swartik 6:05 pm 11/14/2010

    A troll? My wife took that picture!

    Link to this
  16. 16. swartik 6:07 pm 11/14/2010

    Richard Feynman remarked that "physics is to math what sex is to masturbation." Please keep in mind that math is not a science, but a tool for performing science.

    Link to this
  17. 17. swartik 6:11 pm 11/14/2010

    Agreed. I did say I was generalizing, and I was mainly referring to the non-hardware aspects. (And note my qualification here, too: there are non-hardware aspects of computing that I would categorize as science.) But I stand by my larger point: I wish fewer people in the profession thought of themselves as scientists and engineers.

    Link to this
  18. 18. Dr. Strangelove 8:30 pm 11/14/2010

    Yes. Computer programmers aren’t scientists or engineers. They’re mathematicians. Computing itself, whether using electronic computers or otherwise, is obviously mathematics.

    I think the confusion lies in a lot of people think mathematics is a subset of science. Science deals with things that exist in the universe. Mathematics is not limited to that. It also studies concepts that may not physically exist. Think of infinities and high dimensional spaces. In science, you prove theories by experimentation and observation. In mathematics, you prove theorems by just thinking about it (mathematical logic).

    Link to this
  19. 19. robert schmidt 8:59 am 11/15/2010

    @swartik, I think the challenge here is that it is all three. Certainly there are times when it is clearly engineering, where I apply a design pattern to a known issue. There are other times when it is pure science, when I am discovering how to simulate neurons or genetics. Many times it is philosophy, when I am trying to find an elegant solution to a computational problem. It can also be a combination of the three as when I am building complete systems as they tend to involve known approaches, new approaches and optimizations. The problem with real systems is that they sometimes defy our attempt to cleanly categorize them.

    Link to this
  20. 20. dunning 2:30 am 11/18/2010

    Owned! But this is more of a criticism of the CS culture and its otaku () denizens than of the very real technologies involved. An engineer is a person of technology first and foremost. It is almost an oxymoron that an engineer could also be socially cool. For some of us, though, coolness involves the perception of the big picture: science, technology, people, dancing, … All of it harmoniously blended by those who know.

    Link to this
  21. 21. bucketofsquid 12:31 pm 11/18/2010

    I have a degree in computer science. I’m very good with Boolean Algebra and terrible at any other form of math except base conversion. Therefore I don’t consider myself a mathematician.

    The software I write is based entirely on components provided by the OS or hardware vendor. This eliminates "scientist" because I never create anything truly new and do not expand basic human knowledge.

    An engineer creates tools or engines to accomplish tasks. As a software developer I use an existing tool and apply it in predefined ways to generate results that may or may not be essentially new to the end user. Since I’m not creating anything new I don’t consider myself an engineer.

    As for philosopher, I feel that everyone that ever asks why is a philosopher (to varying degrees of success) making this label to general to be of use.

    What I really think of myself as is a technician. Much like a plumber, electrician, TV repair pro or car mechanic.

    Link to this
  22. 22. porthome 11:31 am 11/21/2010

    I’m reminded that back in the ’70s there was great controversy over the move to declare programming a professional discipline, like law or medicine, with qualifying standards, exams, and certification. Everyone with a specialty, sooner or later, seems to strive for unique recognition in terms of a degree, diploma, title, or whatever. Computer Science is no different.

    Link to this
  23. 23. randcraw 4:37 pm 11/29/2010

    Nice article, Steve. I’ve been puzzling for decades over how best to categorize computer science.

    I would describe CS as the computer-based simulation of any system that processes information. We programmers spend our lives building imaginary worlds. We start with a real-world problem, convert it into an abstract ‘problem space’, identify essential information as input and output, then we guide the information flow from the problem space to the ‘solution space’ by devising abstract processes that reshape the information as necessary to achieve the desired outcome. And we try to confirm that the simulation is efficient and reliable, and the results are correct.

    The art of CS lies in the design of the data and the processes, which we personify to resemble real world entities because it helps us keep a handle on the details of the simulation. The practice of CS is the effective use of software/hardware tools to achieve the desired end in an acceptable amount of time and space.

    Is computer science a science? Engineering? Business? Or an art? I guess it depends on the system we model. CS can simulate anything conceivable, using any philosophy or methodology. Its domain and utility is limited only by the programmer’s imagination and skill.

    Computer science? I’d say it’s about playing god.

    Link to this

Add a Comment
You must sign in or register as a ScientificAmerican.com member to submit a comment.
Click one of the buttons below to register using an existing Social Account.

More from Scientific American

Account Linking

Welcome, . Do you have an existing ScientificAmerican.com account?

Yes, please link my existing account with for quick, secure access.



Forgot Password?

No, I would like to create a new account with my profile information.

Create Account
X