In college and in my career I have regularly worked with people who originated from foreign countries. Their home may have been China, South Africa, Korea, India, UK, or any number of other countries. One thing we all have in common besides our desire to build rockin’ software is that we speak a common language (i.e. English). However, often they might as well have spoken a completely different language because I fail horribly at understanding them some of the time. And I am sure they have an equally difficult time understanding me some of the time.
Isn’t that strange? If we speak the same language, shouldn’t we understand each other? What could explain this phenomena?
Okay, those were rhetorical, its our accents and dialects! We grew up in different parts of the world. We learned to speak the same language in different ways. And now, while we share the language we have a hard time learning or working together because we just can’t seem to overcome the differences in the way we deliver the same language.
Now imagine a world where a language came with a unified accent and dialect that all people using that language must use. You marry the language in all of its glory with the style of how its delivered. In that world you will have solved the problem of two people struggling to communicate using the same language.
Obviously this would be very hard to accomplish in the world of inter-cultural communication, and that isn’t what I am trying to get across.
When people use the same language and deliver it the same way then communication is easy. Then you share a language, but the delivery is different, then communication is hard. This applies to the way we write our code, and is one of the reasons why coding standards are important.
A world with no coding standards is a world full of accents and dialects. The language may be the same, C, C++, Java, etc, but the way it is delivered differs. Like an accent or a dialect the style of delivery affects the ability of the parties sharing that code to understand it. The code we write is a form of communication. Like a book, when we read the code we see the application unfold before our eyes. It tells the story of how a problem is solved. When we read code that isn’t consistent, and the styles differ so much, our brains spend so much time trying to synchronize the delivery with our own style that it makes understanding the heart of the program so much more difficult.
Unlike inter-cultural communications it is incredibly easy to marry a delivery style to a language, or at least it should be. Coding standards marry set accents and dialects to a language. They define the delivery. The benefits are the same as a language free of accents or dialects, i.e. improved communication.
The hard part of implementing a coding standard is the same as if you were to try it in a spoken language… which accent and dialect would you choose? A person might agree with you, but if they have to give up their coding style they are against it.
The easy way to solve this? Grandfathering. Everyone who was “born and raised” using a particular style can continue to use it, they are “grandfathered” in. Every new person must follow it. Languages and coding differ in that style is easily enforced. A quick review tells you whether someone met the standard or not.