Software Futurism

Challenging the status quo of Software Engineering



Computer. n. A device for saving human labor.

Often computer science literature talks about what and how, but not so much about why. Computers are meant to make our lives easier. If they fail in this task, we are better off burning the lot of them.

When viewed as a whole, computers have saved us countless volumes of time and enabled the human mind to achieve feats previously thought impossible. Even more importantly they have allowed us to achieve feats previously not even anticpated or imagined.

However, the picture is not always this rosy. For many of us, much of our day is spent on front of the computer. The computer should be serving us. All too often though we feel like we are serving the computer. The computer should always save work for us but often it creates work for us. We throw up our hands and assume this is the way of things.

It doesn’t need to be this way. The computer is our creation. When it isn’t serving our needs we must step back and figure out how to make it serve us.

We must remember that computers are only a means to an end. They are not the end in themselves. Edsger Dijkstra famously summed this up as “Computer science is no more about computers than astronomy is about telescopes”. We have become to complacent in our view of computers. Some of us do not remember a time before computers, and assume that the form they take and the way they operate isn’t open to change. We must remember the computer should adapt to serve us, and that everything about it is open to change.

Much industrial computer science these days amounts to a “paint by the numbers” approach. We follow methodologies blindly, only rating ourselves on how closely we follow the method, rather than analyzing how well we are achieving our actual goals. Good software engineering is difficult, so we use methodologies as crutches to make us think we are treading correctly when in reality we are blindly going down the wrong road. Software engineering is a creative endeavor. No amount of fixed methodologies will change that. To achieve something novel and useful will require creative thinking. The computer has no creative powers. By removing the creative element from software engineering we are removing the possibility of real advances in the craft.

How then are we as programmers going to make computers improve our lives? To start we must never lose sight of the why: save us labor. Saving us labor saves us time. And the old adage tells us what time is: if you’re good at making the computer save time, you can make a lot of money. Money is a powerful motivator, but it’s not the only motivator. More so than money, saving us time frees us up for other pursuits. By doing the grunt work the computer liberates us to do the creative work. And since computer science is as much an art as a science, you could say computer science is a liberal art.

These of course are reasons why we must sharpen our skills as computer programmers and computer scientists. Well then, how are we to go about it? There’s no one single way, good old creativity and ingenuity will have to power our way. Let’s explore how in upcoming writings, but never forgetting why.