Programming is not a craft, but an art form.
A lot of professions out there merely require skill an experience. You do not need to be creative to be an excellent plumber, mechanic or a systems administrator. You simply need the knowledge of the systems you are supporting, and experience. Your job is to fix, assemble and optimize things and while it often pays to be clever no one expects you to be creative or innovative. In fact, innovation can bite you in the ass as it is usually better to fall back on tried and tested solutions than to make radical choices.
But if you are a programmer then creativity and ability to solve problems in a novel ways is part of your job description. This is why programmers have to solve logical puzzles during job interviews. When you apply for a job writing code, you can usually expect your interviewer to give you an impossible to solve problem, and then judge your worth on how you go about designing a solution for it. It usually doesn’t matter if you actually resolve the problem at hand, but that you demonstrate you can think creatively, and design imaginative solutions to whacked out scenarios under extreme pressure and time constraints.
Software is made by hand. It is not assembled, but weaved out of abstract ideas and representations. Programmers work is akin to that of a poet or a song writer. You take words that have meanings, assemble them into functional verses that are constrained by rules or rhythm and composition in a hope that as a whole they will convey meaning that is greater than their individual sum. You don’t manufacture software – you dream it up. A program is a distillation of creative ideas given a textual form.
Programmers frequently get inspired. They wake up in the dead of the night, stumble upon to their desk and vomit code onto their laptops in violent throes of passion. This doesn’t usually happen to IT professionals or accountants. Financial analysts are not haunted and tormented by their work. Most people live their whole lives never actually conceiving an idea that suddenly explodes in their head, and violently tugs at their frontal lobe trying to escape into the world. They never give birth to an abstraction, and give it a physical manifestation through trembling fingertips in a feverish bout of out of control creativity. This peculiar state of mind is usually associated with artists – painters, sculptors, musicians, singers, writers and poets. But programmers get it too.
We are artists who don’t create art. We are creative souls driven not by emotion, but by the rigors of logic an mathematical perfection. We write poetry that is not about love and desire but about function and procedural complexity. But we too seek beauty and aesthetic perfection in our work. If you put three programmers in a room, each of them will probably have a different opinion on how the code should be structured, what practices should be followed or even what language and/or text editor should be used. The most interesting part is that all of them will probably be correct, or at the very least have valid points.
There is no one correct way to write software. There are rules, best practices and theories but they are mostly guidelines. At the end of the day, writing software is a creative process. And it’s not like we don’t strive to inject some strict, rigid order into our profession. We study software engineering – we try to quantify, and formulate strict procedural guidelines that let us work together in teams. We have made great strides to make programming a team sport – something that is predictable, that can be measured and evaluated. But for all these efforts, we often still rely on that creative spark – that shard of brilliance exploding out of a mind pregnant with ideas. Someone still has to come up with novel algorithm, a clever new paradigm or a paradigm breaking language.
We are artists. We are digital virtuosos. We are the singers of digital songs that drive our civilization. But unlike artists, we are expected to perform consistently and every day. Novelists can have writers block, poets and musicians can run out of inspiration. Programmers are expected to sit down and write brilliant code every day. When they can’t we say they have burned out – that they are unfit for the job, that they need a break. But perhaps that’s not what really happens. Perhaps they simply need inspiration. They need a visit from their muse – a new patron goddess of the twenty first century creative souls – one that Greeks could not even dream up.
Programing is art. Functional art – commercialized one. But it does not make a difference. An graphic designer who makes money drawing cartoons, or marketing posters is still an artist. A composer who makes promotional jingles for TV commercials is still doing creative work. Same applies to programmers. Even though our creations are usually used for commercial purposes, it does not make them any less impressive, and the work we put in it any less creative.