There are quite a few myths about the profession of software developer. Most people find the profession hard to describe. So what is the ‘essence of software development’? For me it’s a mix of creativity, struggle and craftsmanship and love of technology. Striving for the perfect solution in an imperfect environment.
I like to view it as a creative endeavor where I need freedom to shout boisterously with my fellow developers while writing great (if not brilliant) software. Non-developers will probably view this style of working as chaotic and most of all loud. Some of the projects I’ve done had a high noise level and some pieces of software really cannot be modified in silence. This style of development fits me pretty well, but I don’t know if it’s the best way to develop for everyone.
Quite another way of looking at it, is to view the developer as a craftsman. This invokes images of carpenters and sculptors that pass on their wisdom from generation to generation. The love of the trade and the product is central. Good tools and quality of the product. A long day of coding does sometimes feel like sculpting, carving out (deleting) large pieces of material from a massive brick (legacy code) to reveal a deceptively simple result.
Anyway you look at it, a good software developer has a love for technology and systems. There would be no other way she/he would endure all the fiddly syntax issues, obscure error messages and paradoxical problems. It’s like trying to write a sentence, but while you keep trying to end the sentence, the computer keeps saying ‘wrong syntax’. Most developer problems have to deal with this frustrating trail and error cycle. Somehow developers can endure this and find fulfillment in fixing the problem after a long struggle. The worst thing you can ask a developer after such an endeavor is: “Why didn’t you just do it right the first time?”.
What I haven’t figured out yet, is whether software development really needs making lots of mistakes. Do we need to debate the software product and examine it from all different angles? Or is development much more a matter of technology, tools and discipline, the perfect developer being someone who can turn a specification into working software without making mistakes?
I believe software development is a weird combination of creativity and discipline. The software we create needs to work in complex environments with unpredictable scenarios and users. The computer, on the other hand, is nothing like its environment, it’s ruthlessly strict. One misplaced bracket or statement can be enough to bring down an entire system. The world of the system is linear, where everything is black or white, true or false and nothing in between.
Bridging the gap between the organic world where the problem lies and the computer system where (part of) the solution lies is the essence of a developers life. Not many people understand this nature of software development, including developers themselves. Software development will always be a profession made up of conflicts and challenges. I will need to be creative to find a simple solution for hard problems. But I will also long for that perfect program or technology that will be able to solve all problems and situations.