I have a gripe.
Computer science is a branch of mathematics. It’s a powerful, amazing tool based on logic and reasoning and the work of giants. And it seems to get no respect from the programmers who blithely don’t realize they’re using it every day.
In the business world, programming problems are solved by either gluing preexisting stuff together or “just hack it until it works.” I can’t count the number of times I’ve heard a colleague say, “Well, what if we just try this,” or “I know this trick,” or “I don’t know why that broke, maybe sunspots.” There seems to be little recognition of the value that computer science brings to the table: Everything is just tips and tricks and technologies, not reasoning and technique.
And if (like me) you’re one of the rare ones who uses computer science to solve a problem, it’s not attributed to all those proofs and techniques and hard science you learned: You’re just a “programming wizard.” It’s as if everybody around you is building houses out of pine, and they see you build a house out of stone and think you found really hard, strong pine somewhere. And worse, they then ask you to point out which trees you got it from.
I don’t understand this disconnect.
Now I admit that when I was young, I used to think the same way: Program runs slowly? Don’t use this function, use that one. Switch from BASIC to assembly language, and it’ll go faster. Get faster tools! Hack it a little bit more, and you’ll find something that works. But that’s what I thought when I was a little kid, still chipping away at the surface of programming. By the time I was even twenty years old, I knew enough computer science to know better: Program runs slowly? Use a more efficient algorithm. Program has bugs? Find them by proving where they must exist. And that was nearly twenty years ago.
These days, when you present me with a problem, I use science. (And not this kind of science.) I observe first. I hypothesize. I verify. And I repeat. And I construct proofs, by induction, by contradiction, by exhaustion, by logical reasoning techniques that have been established for thousands of years: I presume upfront that every computing problem has a hard mathematical solution to it. There are no sunspots, there’s no “just hack it,” there’s no “just try this.” You can either prove it or you can’t. It’s either well-established science or it isn’t.
And I think I’d be okay with that if it weren’t for the fact that when business programmers encounter the hard science, they often seem to treat it as if it’s a demonic ritual being presented to a Catholic monk, strange arcana that will devour their souls should they approach it. At best they just avoid it as strange voodoo sorcery. It’s feared, resented, or ignored when it could be solving difficult problems for them.
I realize, of course, I’m griping about a social issue, and griping about it won’t really change anything. People rarely like to change. But if you’re one of the few programmers reading this, take the time to learn some computer science and learn how to apply it: It’s unfortunate to say it, but that knowledge will make you stand out from the crowd.