It doesn't take Sherlock Holmes to work out that good programmers write good code. Bad programmers... don't. They produce monstrosities that the rest of us have to clean up. You want to write the good stuff, right? You want to be a good programmer.
Good code doesn't pop out of thin air. It isn't something that happens by luck when the planets align. To get good code, you have to work at it. Hard. And you'll only get good code if you actually care about good code.
Good programming is not borne from mere technical competence. I've seen highly intellectual programmers who can produce intense and impressive algorithms, who know their language standard by heart, but who write the most awful code. It's painful to read, painful to use, and painful to modify. I've seen more humble programmers who stick to very simple code, but who write elegant and expressive programs that are a joy to work with.
Based on my years of experience in the software factory, I've concluded that the real difference between adequate programmers and great programmers is this: their attitude. Good programming lies in taking a professional approach, and wanting to write the best software you can, within the Real World constrains and pressures of the software factory.
The code to hell is paved with good intentions. To be an excellent programmer you have to rise above good intentions, and actually care about the code - to foster positive perspectives and develop healthy attitudes. Great code is carefully crafted by master artisans, not thoughtlessly hacked out by sloppy programmers, or erected mysteriously by self-professed coding gurus.
You want to write good code. You want to be a good programmer. So, you care about the code:
- In any coding situation, you refuse to hack something that seems to work. You strive to craft elegant code that is clearly correct (and has good tests to show that it is correct).
- You write code that is discoverable (that other programmers can easily pick up and understand), that is maintainable (that you, or other programmers, will be easily able to modify in the future), and that is correct (you take all steps possible to determine that you have solved the problem, not just made it look like the program works).
- You work well alongside other programmers. No programmer is an island. Few programmers work alone; most work in a team of programmers, either in a company environment, or in open source project. You consider programmers, and construct code that other people can read. You want the team to write the best software possible, rather than to make yourself look clever.
- Any time you touch a piece of code you strive to leave it better than you found it (either better structured, better tested, more understandable...).
- You care about code and about programming, so you are constantly learning new languages, idioms, and techniques. But you only apply them when appropriate.