December 14, 2008
Follow me on Twitter

Gregorio: Computer Science Is Broken

Via a Tim Bray twitter, and so to be weighed thoughtfully, Joe Gregoria argues that computer science is badly broken.

Computer Science, at a deep and fundamental level, is broken, and that applies not only to software but to hardware. One of the reasons that I have this feeling is that after programming for the past 25 years the field hasn't really changed. The conversations aren't any different. You could substitute 'Windows API' or 'Borland CGI' for 'HTML and CSS' and you'd be having the same exact conversations I had 15 or 20 years ago. We still struggle with leaks, be it memory, or file handles, or threads, or whatever. We still have race conditions. We still struggle with software that grows linearly in features but exponentially in complexity.

I've been struggling to find a way to express this concisely. The best way I've found so far is to ask:

What part of the computer in front of you is fractal?

The answer is none of it, yet in nature, which has been at this game of computation for billions of years, everything is fractal. We're doing it all wrong.

Gregorio’s commenters focused on the mystical invocation of the fractal, the hope that in some unforeseen and unactionable way The Fractal will save us. But the project is over and we are not yet saved.

The first part is wrong as well. Yes, some of our conversations are still the same. Many years ago, Jim Hammons told me about a colleague, a chemistry professor who gave up tenure and chemistry and got out. Every year he taught Chemistry, and every September he was right back where he started: the new students this year knew no more than the new students last year. OF COURSE students and amateurs and sloppy workers still struggle with leaks. We pretty much understand leaks now — we didn't understand them a generation ago, but we’ve got it now. But we’ve still got to teach it, and talk about it, and once in a while we need to check the code.

Race conditions? Same story, just a little harder. Ten years ago, we though we’d all be building applications as a bundle of threads; today, a lot of people expect that threading is something the operating system will do.

Languages? The perplexities of HTML and CSS? This isn't computer science, it’s not even software engineering. It’s Drivers’ Ed. Training wheels. People who don’t yet understand a language, any language, will always have the same sort of discussions.

Exponential complexity. It’s just not true. Lots of software grows sublinearly as you add features. Quadratic growth is experienced as, “this project is in incredible trouble: we’ve got to fix the design or start over.” Exponential growth doesn’t feel like this, folks: exponential growth in complexity feels like, “You want what? It’s obviously impossible to do that.” We’re computer scientists; we’re supposed to know the difference between O(n**2) and O(2**n).

If computer science is broken, the symptom of the breakage is simply that computer science too seldom informs actual practice. We no longer expect that every session of CHI or OOPSLA will be filled with ideas we can study today and turn into products next week. How many product managers and software CEOs read the literature of any branch of computer science? Quick: who won the Turing Prize last year? And for what? (Clarke, Emerson, and Sifakis, for automated model checking). And so we have business conference programs filled, not with computer science, but with industry gossip and speculation, for empty graphs of "Web 4.0" and predictions of tremendous growth in whatever sector the audience wants to grow.

Lots of things still perplex us about computers. Lately, the things that are easiest to study seem not to be the things we most want to know, and many things we would very much like to know have proven remarkably hard to study.