Creating Software

I read Paul Graham’s essay ” Hackers and Painters” the other day and was in awe. It was as as though someone peaked into my head and took my collection of opinions on software development to organize them into an eloquent essay. It’s not that I haven’t given the topic of the artful nature of software development thought; I wrote a blog post about it last year at UNB.

I’ve always looked at writing software like writing a story or composing a piece of music. Different people, like lyricists and playwrights, play different roles in creating something beautiful. While I knew that people outside the industry didn’t see software developers in this light, it never occurred to me that anyone inside the industry wouldn’t, either. Or that they would do anything else but strive to be a creator of software.

Some developers are content to be given a exact specification of what a piece of software is supposed to be and then they write the code for that software. Is this creating? I don’t believe it is. It’s more like following the assembly instructions for LEGO. Was the joy in LEGO building the model exactly as it was specified? Not to me. I always found the best part of LEGO was deviating from those instructions to make something unique (and way cooler).

Are these other developers wrong? I don’t think they’re wrong. They just have a different approach. I won’t say it’s a worse approach, but it makes them a different kind of developer who writes a different kind fo software. When the specification for software changes, it means that the software is getting better. Maybe new features or a better designed interface. I embrace these changes while this other kind developer avoids them.

As a software development team, how can we know that an approach or a feature is a good idea unless we try it first? Like a composer who needs to write a verse before realizing the song would be better without it, sometimes teams need to try a change before realizing it is a bad idea. Developers who want a rigid specification from the beginning of a project are going to resist these sorts of changes, leading to a software product that might not be the best it could be.

That’s unacceptable to me. I’m in this industry for the opportunity to create something beautiful and intuitive - to strive for the absolute best something can be. I’ve only recently really realize how specialized that makes me.

Please submit typo corrections on GitHub