All programmers of any competence go through three modes of professional development: an Arrogant mode, a Sponge mode, and a Mentor mode.
All good game programmers are born into Arrogant mode. An Arrogant programmer believes that he is personally capable of writing the smallest, the fastest, the "best" code possible, and that other programmers don't have the depth of understanding that an Arrogant programmer does. This extreme self-confidence is the fundamental motivator for the Arrogant programmer to produce high-quality results.
Arrogant programmers maintain and defend control over all aspects of their code. Arrogant programmers may or may not comment code, but if they do comment code only the Arrogant programmer will understand the comments. Arrogant programmers tend to follow coding conventions of their own design. Conventions like Hungarian notation seem unnecessarily complex to an Arrogant programmer. Arrogant programmers will always rewrite code written by others, even if the existing sources are available to them.
All $kr1pt k1d$ are Arrogant programmers, however, not all Arrogant programmers are $kr1pt k1d$.
Arrogant mode programmers learn primarily from doing. They inhale technical manuals and learn from their own mistakes. Since an Arrogant programmer is confident that he is the fastest coder on the planet, he doesn't see the point of having more than one programmer on a project. Arrogant programmers achieve minor development miracles through coding marathons. They are comfortable with the idea of devoting every waking hour to writing code.
Arrogant programmers do not play well with other programmers. An arrogant programmer believes that code secrecy is the best policy; at least, it guarantees job security for him.
The days of Atari 2600 game development were the happiest times for Arrogant programmers. At that time, the standard development model involved exactly one Arrogant programmer with complete control over all aspects of the game code. Today, it's very difficult for him to find a project where he has this level of control.
Given enough time and experience, an Arrogant mode programmer will grow out of this phase of professional development and turn into a Sponge programmer.
Sponge programmers believe that other programmers exist who have a deeper understanding of the code than they do, and Sponge programmers are committed to learning from these more experienced programmers.
Like Arrogant programmers, Sponge programmers snarf up technical magazines and books, the more technical the better. While a sponge programmer will enjoy reading a Gamasutra article or watching a GDC presentation, a Sponge will internalize advanced programming concepts most readily by reading and following the execution of working code.
Sponge programmers are the second largest class of GDC attendees, second only to middleware sales staff. All reverse engineers and crackers are Sponges, however, not all Sponges are reverse engineers or crackers.
The days of 6502-based game development were the happiest times for Sponge programmers. Sponge programmers enjoyed ripping code and techniques from one another to make an Apple II routine that played three notes simultaneously, or a Commodore 64 routine that played back four-bit sampled sounds. Many programmers have old cabinets full of 5.25" floppy disks, physical evidence of their Sponge history.
Sponge programmers achieve minor development miracles by adding a unique or interesting twist to a well-understood technology. The first programmer to display sixteen sprites on the Commodore 64 was a Sponge. MAME has been ported to dozens of platforms by a network of dedicated Sponge programmers.
Unlike an Arrogant programmer, a Sponge programmer might be open to the idea of reusing code written by others. Especially if the code demonstrates some new language or functionality, a Sponge programmer will look for excuses to take it apart and understand it. This is not to say that a Sponge programmer will automatically reuse that code. Most likely, a Sponge programmer will feel that the shared code can be improved, and he'll end up rewriting it while incorporating his own concepts.
Given enough time and experience, a Sponge mode programmer will grow out of this phase of professional development and turn into a Mentor programmer.
Mentor programmers extend their own programming abilities by helping, teaching, coaching, or managing other programmers. A Mentor programmer may end up as a manager, or they may give yearly presentations at GDC.
Compared to Arrogant and Sponge programmers, Mentors spend surprisingly little time actually cranking out code; they'll often spend as much time talking about writing code as actually writing it. A less than competent manager would see this behavior as screwing around. In fact, an extended discussion usually precedes a Mentor sitting down and cranking out code. A Mentor uses code reviews, either formally or informally, to check the validity of his designs.
Because a Mentor has a relatively diverse skill set, a Mentor programmer will spend the least time reading technical documentation of any of the three modes. Mentors tend to take their documentation with a grain of salt, keeping in mind that it may be wrong. Because they read the least of any of the three modes, Mentor programmers find it difficult to keep on top of all the latest game development technology.
Mentors achieve minor development miracles through creative code reuse. If a Mentor is able to create a working filesystem over the weekend, he might allow you to imagine that he built it from scratch. However, if you question him closely, you'll find that similar code existed from another project, and he was able to port it by rewriting a few #define's.
The stock in trade of a Mentor programmer is technical information, and he prefers to distribute it freely. This redistribution of information is the hallmark of a Mentor programmer. Mentor programmers are comfortable writing basic technical documentation, because they realize that they may be asked, at some point in the future, to modify code they've forgotten, or ask someone else to do the same. While nearly all Linux hackers are Sponges, Linus Torvalds is a typical Mentor and influences the development of Linux accordingly.
All authors of hacking tutorials are Mentors; however, not all Mentors write hacking tutorials.
The happiest period of game development for a Mentor programmer is the present. Because all modern game projects involve multiple programmers, no game project of any meaningful size today can exist without a Mentor programmer.
So we have three modes of programmer development: an Arrogant mode, a Sponge mode, and a Mentor mode. Over the history of game programming, there have been periods where each type of programmer was the most useful on a game project.
Although they once were responsible for all games, Arrogant programmers are no longer useful for game development. All modern game projects require several Sponge programmers and at least one Mentor programmer.
If you're a manager of an Arrogant programmer, your job is to grow him into a Sponge programmer, so he'll be useful again.