I met a few very good programmers that are a mess. They have fun in their code, they use useless variable names, etc, etc, etc.... Maybe because they are bored.

But what makes a good programmer a good programmer, #1 command of language, be able to write the code on the board, in the text editor, on the bench, and recognize what will work and what will not work. #2 performance, and optimization, knowledge of data structures, and internals. I remember a story where my friend from MS told me one of the MS clients declared bunch of objects in C# utilizing 20GB of memory. If you don't understand what your program does under the hood, you should start wondering, and once you understand that, you will be better programmer.

Now for those dealing with C/C++ - OS environment, Data Structures, Algorithms, Optimizations, Compilers, etc etc etc...