Editor’s Note: This article was originally published by The Black Liszt on November 6, 2024. With edits to match Minding the Campus’s style guidelines, it is crossposted here with permission.
To call what is taught in the “computer science” departments of universities a “science” is a mind game to get everyone involved to believe that what is taught meets the normal criteria for being a “science.” It doesn’t come close. Well, you might say, some of those departments are more humbly and accurately called “computer engineering.” True. At some point in the distant future, what is taught in computer engineering might rise to the level of what is taught in, say, mechanical or electrical engineering. Until that goal is in sight, it would be more accurate to call the classes something like “Fads, fashions, and sects in computer software practice.”
Physics, Chemistry and Biology
I hope we can all agree that physics, chemistry, and biology are sciences. It wasn’t always that way! They have only gotten to be sciences after long struggles. Physics started emerging about 400 years ago, chemistry a couple hundred years ago, and biology just in the last 150 years or so. In each case, they are studies of reality, with generally accepted statements of how that reality works, as shown by many experiments. In each case, they advance by someone making a hypothesis that can be dis-proven by experiment. If the hypothesis is supported by experiments, more tests are done by many people to refine it, and then it becomes part of the accepted science. Sometimes, a new hypothesis contradicts something that’s accepted but more often refines it—for example, the best way to understand most of Einstein’s work is that it refined Newton’s for special, highly unusual cases. In the vast majority of cases, you can safely use Newton’s laws of motion without being concerned about relativity theory.
[RELATED: Shaky Studies on Women and STEM]
How does Computer Science stand up to these paragons of science?
In physics, you learn the rules of matter, energy, and motion. In chemistry, you learn, first of all, the periodic table of elements, and then all the molecules into which they assemble themselves and how they interact. In biology, you learn about all the living things, from viruses, through plants and animals. What’s the equivalent in computer science? You can say, “oh, it’s the science of computers;” except that physics, chemistry, and biology are things that exist in the world. Humans didn’t create them. Computers are 100 percent human creations, no less than spoons and baseballs. There is no science of spoons—there is a bit of history and a range of modern methods and styles of making them, just like computers. Until we decide that it’s OK to create an academic department of Tablecloth Science, we should be able to agree that there is no such thing as computer “science.”
How did it happen that loads of departments with courses about obviously bogus computer “science” come to be?
The innocent explanation is that, in the early days, computers were closely related to math and were seen basically as giant programmable calculators. In fact, the word “computer” was originally the name of a person, almost always female, who “computed” the answers to math problems. While math isn’t a “science” in the normal sense of the word, it is a kind of pre-existing non-physical reality that, in ways and for reasons that have never been explained, pervades and underlies everything about us and the world we live in. It’s the grounding of all of science. Computers were often studied by the math people in academia, and the precision naturally associated with computers seems to justify the association with science.
But in the end, computers are just fancy machines that people design and build to do stuff. How would you feel about “Refrigerator Science?” Refrigerators are great, and I like what they do. The advances in Refrigerator Science since we used to call them “ice boxes” is amazing. Uhhh, maybe not.
The less innocent explanation is that everyone involved realized that no way is there such a thing as computer science, if we’re at all serious about the term “science.” But there’s no doubt that it makes everyone involved feel better about themselves, so as propaganda, “computer science” gets an A+.
[RELATED: Curricular Visions: Technology as Human Nature]
OK, OK, We’ll call it Computer Engineering
Many places do call it computer engineering. Is that any better? Think about mechanical engineering, for example. Let’s look at my favorite example of building bridges. I’ve gone into huge detail about the differences between bridge-building in peace and war and how it applies to software.
Let’s step back and compare the normal peace-time bridge engineering project with the normal computer software one. At the outset, they seem pretty similar. They start with requirements, then an overall design, then build, testing and inspection and finally production. In fact, many engineering-type methods are used in software, including project management.
For bridges, it works out pretty well. Bridges get built and work, 24 by 7, year after year, with routine maintenance. There are exceptions, but they’re rare. Software? Not so much. Just to hit some highlights, the problems include:
- Bridge-building project management methods are sound and generally produce reasonable results. Software project management methods don’t work.
- Bridges are generally built in-place, so installation is an integral part of the build process. Installing standard software is a nightmare.
- Once built, bridges work. Software QA is broken.
- Bridges just keep working. Software is full of horrible bugs.
- No one stealthily sneaks onto bridges and steals the cars that are on it. Software is full of horrible security holes.
- Bridge-building is driven by solid, proven engineering practice, backed by scientific principles. Software is driven by fashion instead of sound practice.
Given all this, I guess we can still call it computer engineering. But to be fair, we should have it on probation and call it “Computer Sadly-Deficient Engineering” until it rises to the level of mediocrity—which it may, with some luck, someday achieve.
Conclusion
Computer science is not a “science.” Not close. To call it science is propaganda, fraud, ignorance, whatever. Computer engineering is another matter. Computer engineering, both as taught and as practiced, is horrible. The methods, largely lifted from other disciplines, just don’t produce good results most of the time. There isn’t even a movement that recognizes this and agitates to fix it!
Happily, the solutions—good computer engineering practices—exist and have been proven in practice many times over by different groups in different times and places. I have discussed what I know of these methods extensively in this blog and in books. Top programmers discover large parts of them on their own, and use them to achieve stellar results—outside the purview of corporate types, regulators, and bureaucrats. For entrepreneurs versed in these methods, it’s a serious competitive advantage while the crippled, lumbering giants of software shuffle along.
Image by EduLife Photos — Adobe Stock — Asset ID#: 411235827