My Rugby Experience: A Lesson for Programmers

rugby-tri

Where I went to high school, rugby was a big thing. You looked tough and impressed the girls if you played the game. You didn’t need to be exceptional. Showing up at the dinning hall in soiled shorts, grazed elbows and a limp – which didn’t even need to be genuine – often did the trick. In those pubescent days, you didn’t aim for a kiss. That was far too high. Even a hug was considered a bonus. Just a gaze that lingered a second longer than usual was good enough. If you were lucky, they poked each other’s ribs, pointed at you and whispered – or giggled. And you felt like a warrior.

There were many of us like that. We played the game for the glory. We never saw it for what it was, as much a game of wit and strategy as it was of brawn. We saw it as a contest in brute force. We hit hard even when there were less violent and more productive alternatives. We delighted in our injuries and proudly wore them as emblems of valor. When we didn’t get hurt, we faked it.

Then there were those who knew what they were doing. They played because they honestly enjoyed doing so. And they knew the real goal. To win. Like us, they would get hurt every once in a while. That was impossible to avoid. But unlike us, they never celebrated injury or took any pride in the acquisition of it. They did everything they could to avoid it, and certainly never faked it. They knew that just a point more than the opposing team was enough reward. It brought the glory and the recognition. You didn’t need a broken nose or a sprained ankle. In fact, those were liabilities that got in the way of winning.

It is many years now since I last feigned a limp. Yet in my programming career, I have witnessed something curiously similar to what happened on my high school rugby field. There are people who write code for the glory and those who write it out of enjoyment. Like in rugby, the glory-seekers are inept and disinterested in the inner workings of their art. They take pride in sleepless nights spent chasing after shallow bugs that could have been avoided in the first place. They delight in the unnecessary complexity of their classes and methods. When they pick up a design pattern, they use it to the point of abuse, often employing it to complicate what could otherwise be achieved by clearer means. They are happy when they explain a piece of code to you and you can’t get it. It gives them a high. For them, complication equals genius.

And then those who write code for the love of it. They are smart and solution oriented. Often they have so much useful work to do they could scarcely afford a minute on a needless bug. They aim to get it right the first time. From seemingly mundane observances like variable naming and code formattingĀ to lofty ideals like unit testing and defensive programming, they are meticulous to a fault. They take pride not in the obfuscation of code but in the elegance of it. When they do obfuscate their code, it is on purpose, and they are jolly good at it. They invest time and effort in studying their art. They strive to understand every rule or suggestion of good practice. Because then that education becomes a permanent source of illumination rather than a temporary euphoria of illusory competence. Above all, they keep their eyes on the goal – software that makes its users happy, is maintainable and scales well. That is how they judge their success.

Which type of programmer are you?