from math to biology

When I was learning about computer science* in college, they taught it like math. Everything was entirely comprehensible, if abstract. Terms like "Lamda Calculus" reinforce the association. The study of computer science, in academia, is essentially an abstract theoretical pursuit. The skills you learn in this setting are extremely useful for writing algorithms, and analyzing dozens of lines of code.

When you first start a project, it acts like math. You write down a few formulas to transform your data, and you pass stuff back and forth between your various functions. But as the project expands, somewhere along the way it stops acting like math. You start to bump up against the limits of what you can hold in your head, and then you blow right past those limits. And even though your math skills are still relevant for looking at any one particular small part of the puzzle, it turns out you need a different approach when you're worried about hundreds of thousands of lines of code.

The analogy that strikes me most is biology (think of cellular biology). When you're facing certain classes of bugs in systems "of a certain size," the empirical approach just makes more sense. At some point it doesn't matter what you think the system should be doing, you need to actually test it to see how it performs. As you add modules and dependencies, you're relying on a dozen or a hundred or a thousand other developers, and their bugs are now yours. This is the point at which you say something like, "lets try changing the data and see if that solves our problem."

To a computer scientist, that sounds like defeat, surrender, or worse, a lack of rigor. But in my experience at least, the math approach falls on its face after a certain level of complexity. Just as it's impossible to solve even moderately complicated general mathematical equations, programs above a certain size defy clean theoretical solutions. The biological approach however, becomes more and more effective, in comparison.

I'm not trying to give advice here, more just making an observation. Maybe we should be teaching people about the skills they need to manage software that has grown its own eco system, that has its own biology. Or maybe that's what the IT department has been doing all this time, and I only just realized it.


*Computer Science is what professors call programming. Never tell a professor that you're a programmer. You should be a software engineer at the very least.

1 comment: