I work with an awful lot of talented (and real crappy) programmers, and I've been observing them to try to learn what makes them so good (and so bad). I've come to the conclusion that there is no magic answer. It's a combination of things, and different programmers have different combinations. Here are three examples of gifted programmers, with very different skill sets.
This first programmer is only a few years out of school, but he's quickly become one of the company's top engineers (and we have about 800 of them). He has an incredible ability to research and learn (he's like a sponge), but what sets him apart is his creativity in applying what he's learned.
He's a more senior engineer. He's an "old-school" C programmer, and so his C++ code has a lot of globals and pointer arithmetic, but he doesn't make many mistakes (if any). In addition, he has a lot of vision and an uncanny ability to predict the future. His code reflects this, by leaving a lot of flexibility for future development.
In terms of experience, he sits somewhere between programmer A and B. His key to success is simplicity. He doesn't use fancy code or technologies to get work done. He relies on tools he knows well, always picks the right tool for the right job, and makes sure his code is as simple as possible. It may not be flexible or fancy, but it's so easy to read that anyone can understand it. It's quickly modified, and there are rarely any bugs in the code.
Each of these programmers has his own strengths, and I could go on for a while about what makes them so good.
Documentation, efficiency, and all of the other traits you mentioned are all good qualities for a programmer to have, but in the end, knowledge, and the ability to apply it, is what sets them apart. You can be the most organized, efficient, creative person on the planet, but if you don't know the tools and technologies you're using, and you don't know what problem you're trying to solve, your code will be crap.
Read, learn, apply. Often. That's the key to becoming a wicked engineer (IMHO).
Posts are HTML formatted. Put <p> </p> tags around your paragraphs. Put <code> </code> tags around your code and data!
Titles consisting of a single word are discouraged, and in most cases are disallowed outright.
Read Where should I post X? if you're not absolutely sure you're posting in the right place.
Please read these before you post! —
Posts may use any of the Perl Monks Approved HTML tags:
You may need to use entities for some characters, as follows. (Exception: Within code tags, you can put the characters literally.)
- a, abbr, b, big, blockquote, br, caption, center, col, colgroup, dd, del, div, dl, dt, em, font, h1, h2, h3, h4, h5, h6, hr, i, ins, li, ol, p, pre, readmore, small, span, spoiler, strike, strong, sub, sup, table, tbody, td, tfoot, th, thead, tr, tt, u, ul, wbr
Link using PerlMonks shortcuts! What shortcuts can I use for linking?
See Writeup Formatting Tips and other pages linked from there for more info.
| & || & |
| < || < |
| > || > |
| [ || [ |
| ] || ] ||