Does programming really suck?
A few days ago I stumbled upon an article with a controversial title: Programming sucks by Peter Welch which can be seen as funny or sad depending on current mood or build system state (our build is sometimes broken several times a day by developers from other teams, sometimes countries and it is definitely no fun). The author describes all woes and pains of typical software developing job with main punch lines such as All code is bad, All programming teams are constructed for and by crazy people, There is only darkness etc.
Anybody who has been in software development longer than six months can confirm that most of the things the author mentions are in reality true – once beautiful code rots, teams whose leading idea is code quality and coverage are pressed by the clients to implement quick and dirty solutions and every now and then everything just falls apart without apparent reason.
Why do people do it then? There are far easier ways to make money; It would be so much easier to be a medical doctor for example – during one’s career people will surely not get another set of completely new limbs which resemble the old ones only on the surface. Things change in other professions too but never so quickly and violently as in programming.
Luckily we can also experience programming from a completely different angle – programming can also be enjoyable and rewarding.
Recently I finished one of seminal books on IT project management and programming itself – The Mythical Man Month by Frederick Brooks, called also The Bible of Software Engineering. Although the book was written at the time of transition from punched cards to magnetic disc systems its value is timeless.
What struck me the most was a way of thinking which I recognized in myself and many other developers – first of all positive thinking and optimismand before all sense of awe and wonder of the world of possibilities.
Brooks names five internal factors which drive programmers – The joys of the craft:
- Sheer joy of making things (one of joys of parenthood is that i get to play with Legos again)
- Pleasure of making things that are useful for others
- Problem solving,
- Continuous learning
- Working in a tractable medium: “The programmer, like the poet, works only slightly removed from pure thought stuff. He builds his castles in the air, from air, creating by exertion of the imagination.” later on the author compares programmer with wizards of legend – in order to work properly programs must be perfect: “If one character, one pause, of the incantation is not strictly in proper form, the magic doesn’t work”.
Alas – humans are not perfect, we are deeply irrational and illogical beings and thinking in abstract, strictly logical terms is unnatural. My own experience after intensive development session, especially if the problem is not entirely finished, is that I feel like walking under water, looking the world through some blurring goggles and standing dumbfounded in conversations, answering and eating like a robot and just waiting to return to the problem, to solve it and defeat the beast.
Further the book deals with project management, with perhaps the most memorable quote“Adding manpower to a late project only makes it later” because of increased communication. And also my favourite: “Nine women can’t make a baby in one month”. There are too many jewels to cite them all here, the book is a definite must read for anybody in the software industry or project management.
One of the ideas intertwined in the book is that IT serves business, something that many technical people in the industry forget – it is all about the bottom line. Although it is cool to think out of the box and devise castles in the clouds, most of us deal with CRUD forms (the lucky ones) or with translating and importing data from web service to database and vice versa. (Finely elaborated in another programming sucks article but with much more positive tone:http://thedailywtf.com/Articles/Programming-Sucks!-Or-At-Least,-It-Ought-To-.aspx)
From time to time we are given a new toy – a completely new legacy system which was long forgotten on some attic, used only by one or two people but we are happy to be able to learn something new and to help those people to do their job in five minutes instead of five days.
In the end it is all about people and communication. Programming is in the essence just another means of communication: with machines, with other humans who will come to maintain legacy systems that we are building now and very often with ourselves and because of that it pays to write clean code and quality documentation. Anything worth doing is worth doing right.
What do you think – does programming suck because everybody is better paid and respected than us – code monkeys or are we gods in disguise, shaping new universes with our bare hands and sheer power of mind.
All ideas and views expressed are my own and do not represent my current or previous employers.