Computer science is about computers…

…to the same extent that astronomy is about telescopes. ~Edsger Dijkstra (attributed)

Which is to say, computers are tools that allow us to explore what already exists. A stack isn’t contained in the code; it’s “out there” wherever the rest of mathematics is. If there’s a Platonic world with a perfect equilateral triangle, there’s also a stack there. Oh, a stack is just a bag that always gives you the last thing you put in it. The ancient Greeks could have worked with stacks along with a lot of “computer” science. So it’s not about computers at all. Next question: is it a science? In the process, we’ll go through my courses this semester.

My Psych 1 class goes to great length to claim that’s it’s a science, to the extent that the textbook is called “Psychological Science” and spends the first chapter explaining why that’s not an oxymoron. Most of the way through the course, I don’t buy it. Every single finding in psychology is couched in statistics. If I bring a magnet near a piece of nickel, it’s not probable that they’ll attract; it’s absolutely certain. But if I’m manipulated in a certain way, there’s only a likelihood that I’ll behave as the theory predicts. Psychology is a reverse engineering of the human mind. You can examine the chemistry of an action potential, the parts of the brain, the inputs and statistically likely outputs – but none of that tells you what’s actually going on, the rules the mind is using, the source code, if you will. Freud’s iceberg of id, ego, and superego is a nice representation but ultimately they’re just homunculi.

Next, chemistry. This is the opposite problem: yes, you can find mole fractions and partial pressures and bond angles, and these models is a very close approximation of real life. But who cares? It’s meaningless information to me, the properties of chemicals I don’t handle and can hardly pronounce. On the other side of science is my astrophysics class. (Sure enough, no telescopes directly involved.) We work with equations that are approximate, that assume celestial objects are circular when they’re not or an observed rate is steady over time when you have no way of knowing. Sometimes we use an empirically observed constant, a magic number in the middle of a formula for no apparent reason. That said, the answers we get are still accurate (at least to an order of magnitude) and always match observed results. The value of the Chandrasekhar limit, the maximum mass of a white dwarf, may only be known to a tenth of a solar mass (10^29 kg), but any white dwarf that gets that big will explode. (And if it’s not that massive, it won’t.)

So science models. That means that there is slop in the system, both in terms of observed data and the model itself (a real gas is never completely ideal). A good model is quantitative; it has numbers and equations. Or failing that, it gives a qualitative conceptual reason why equations can’t be used. Science walks a line: not so abstract as to be perfectly predictable and not so empirical as to helplessly phrase findings in statistics. The former is mathematics; the latter is….well, it’s not science.

On to mathematics. Essentially, it’s like science except the models don’t have to represent anything physical, and therefore, are perfect. I don’t believe that Platonic forms physically exist; they exist in the shared conscious created by education. Except that’s not quite right; these forms are defined by the axioms in ways that aren’t immediately apparent. I can’t imagine a triangle whose sides add up to something other than 180˚ in Euclidean space. It doesn’t exist. Similarly, a complex definite integral has only one value, even if evaluating it is non-trivial. But that’s way beyond the scope of this post.

So computer science is closer to a branch of mathematics than a science, and prior to the last half-century was completely mathematical. But now, with computers, we can evaluate programs basically instantaneously. I can write code, see output in about ten seconds, go back into the code, change one character, wait another ten seconds, and the exact changes I thought I made, were made. So it’s closer to writing proofs than integrating. Except not really.  So I guess the reason the term “Computer Science” persists, despite being such a misnomer, is that no one really has a better name for it. It’s an emergent field; we haven’t explored the possibilities yet. (By contrast, the 1600s haven’t changed much in 300 years.)

I’d like to point out that while a stack may exist in abstraction, actually modeling it is a different thing altogether. You can program a stack in one of many different ways of storing the data. In science, these would be competing theories, and either one would be right and one wouldn’t, or they’d have complementary strengths and weaknesses. But in computer science, a program that simulates a stack isn’t a model; it’s an implementation. It’s a perfect model, but not the only one. If you get your code to work properly, and ignore that some methods are more efficient than others, and standardize the syntax (details, details) – every implementation of a stack is interchangeable. There is just the right combination of certainty and freedom, constraint and ambiguity, coupled with – for the first time in history, for any subject – nearly instantaneous feedback.

And while there may be a perfect stack that I can implement, an actual program involves design choices. These are subjective decisions that can only be made by a human. A perfect database or game does not exist, even in theory. There’s an art to it. The art of writing extremely explicit instructions. But in a language that’s more intuitive for a computer than a human.

Advertisements

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

%d bloggers like this: