A MasterProgrammer is someone JustaStudent programmers glom onto (apprentice to) in order to learn deep programming.
Think of JediProgrammer?.
A MasterProgrammer obviously refers to someone who has achieved mastery of all aspects of software development. Here are some characteristics:
In my limited experience, master programmers don't believe they're the best programmer in the world. Paul Graham agrees in http://paulgraham.com/gh.html -
Because you can't tell a great hacker except by working with him, hackers themselves can't tell how good they are. This is true to a degree in most fields. I've found that people who are great at something are not so much convinced of their own greatness as mystified at why everyone else seems so incompetent. The people I've met who do great work rarely think that they're doing great work. They generally feel that they're stupid and lazy, that their brain only works properly one day out of ten, and that it's only a matter of time until they're found out.
[Clearly this describes some, but more fundamentally Graham is talking about an aspect of QualityWithoutaName, and so is understandably fishing around for the right words - not making the ultimate definitive statement on the subject, but rather pointing in the general direction of what he means.]
KarlKnechtel: I was going to put the following (unsigned) directly under the list, until I noticed and paid attention to the PaulGraham quote :)
Actually, I think most "masters" think they're nothing special; they're just continually disappointed by the horde of BadProgrammers that (in their world-view) surround them everywhere they go. (I know I have that attitude.) Or maybe this difference in attitude has something to do with the distinction between a MasterProgrammer and a GrandMasterProgrammer? (Although I don't feel so comfortable concluding that I should label myself as a GMP as a result!)
Personally, I would say 1,3,4,5,6,7 and 8 definitely apply to me (*especially* 6 and 7). I'm not up to the standard I'd like to achieve on 2 and 9, and 10 doesn't describe me at all (instead, the PaulGraham quote, and my expression thereof apply). I also haven't applied 1 and 3 to the extent that I'd like to have done.
I am going to express a controversial opinion: I used to think that I was a master programmer. (I guess I felt this way because of the money I was earning and the respect with which my workplace treated me - I know, I know, not good indicators of ability .. nonetheless, it influenced my idea of my own worth.) Then I was exposed to Common Lisp. A most mind-blowing experience. Such style, grace and depth in language design and use. I felt like a intellectual dwarf strolling among giants. CLOS, the MOP, and even rarely used libraries such as SCREAMER were revelations to me. My personal feeling is that if you consider yourself a good programmer (considered as a narrow classification - not domain expertise, or knowing how to handle customers), you should have two skills under your belt: (1) A good working knowledge of mathematics; (2) An understanding of entire Common Lisp language.
Personally, I am nowhere near to accomplishing these goals; I can only consider myself as a "not a BadProgrammer".
As the AnonymousCoward who wrote this list many years ago, I would just like to point out that large portions of #10 are at least half-joking. Except that I do occastionally believe I'm the best programmer in the world. Ok, and I do hate your code. Well, and I can remarkably produce good code without a strict methodology. Well, I did say half-joking.
Much sympathy for the point above about my brain only working properly one day out of ten and that I'm lazy (certainly not stupid!) and that I always feel like I will soon be found out... But then that one day comes along and I get like three weeks worth of work done in a 30 hour push and I realize once again what a GrandMasterProgrammer I really am. :P
See also: GrandMasterProgrammer, GoodProgrammer, BadProgrammer