We could ask widely-acknowledged great programmers, like Stiff did, what makes a great programmer. Ironically, one of these great developers, Linus Torvald, has terrible habits that violate the criteria of each blogger.
Paul Graham, who wrote about Great Hackers, also notes that is difficult to recognize a great hacker without working with one.
So who are the great hackers? How do you know when you meet one? That turns out to be very hard. Even hackers can't tell. I'm pretty sure now that my friend Trevor Blackwell is a great hacker... But when I first met him, I thought he was a complete idiot.
Paul says its also difficult to recognize one's self as a great hacker. Naturally, every one thinks himself to be at least a very good developer. How do you know for sure?
Someone at Reddit asked "How do you know if you're a good programmer?" Interestingly, one replied that only good programmers ask themselves that question. Another commenter, BigTech replied,
To me, a good programmer optimizes code--they can get more done with less code, for example:
If X = 0, then X = 1 else X = 0 End If
By BigTech's own definition, he doesn't seem like a good programmer. (He also uses VB--a warning sign.) His expression could be optimized down to 1 - x or even !x. Apparently, BigTech mistakenly believes he's a good programmer; he didn't realize that he defined a function over two points, which could be directly expressed as a linear function. I also disagree with his optimization theory, but then again Steve Wozniak spent "his whole life trying to optimize things."
BigTech's overassessment of himself reminded me of Chris Sell's post on how to recognize expertise. (Apparently, Chris didn't have a mirror at home.) Chris later mentioned an article called "Unskilled and Unaware of It. How Difficulties in Recognizing One's Own Incompetence Lead to Inflated Self-Assessments," which Alan Bellows has a good summary on:
When asked, most individuals will describe themselves as better-than-average in areas such as leadership, social skills, written expression, or just about any flavor of savvy where the individual has an interest. This tendency of the average person to believe he or she is better-than-average is known as the "above-average effect," and it flies in the face of logic… by definition, descriptive statistics says that it is
impossibleabsurdly improbable for a majority of people to be above average. Clearly a large number of the self-described "above average" individuals are actually below average in those areas, and they are simply unaware of their incompetence.
Just as we might overestimate ourselves, so too we might overestimate the abilities of others we regard as great. John Rozewicki argues that we turn great people into superhumans, but in reality no one is a genius. (How else can three housewives outsmart computer engineers, rocket scientists and NSA?) Guardian Unlimited writes how Einstein struggled with his grand theory - and the maths. Einstein also had a smaller than average brain, which probably doesn't mean anything. Another research article, "The Expert Mind," suggests that anyone can become a genius. Even for child prodigies like Mozart, Gauss, and Bobby Fischer, heavy labor spanning over a decade was required to prepare each genius.
Stevey, who equates greatness with fame, writes "get famous by not programming." His programming heroes, he realized, become heroes either because they were more vocal by writing a popular book or blog or were associated with a popular product, neither of which necessarily equate to being a good programmer.
Do you have any programming heroes? I do! Oddly enough, though, I've never really seen much of their code. Most of the famous-ish programmers I respect have actually made their impact on me through writing, and it's usually just prose, with maybe a little code interspersed....
.... But when someone builds a framework — any environment that we live in and actually enjoy programming in — and there's one person who's chiefly identifiable as the primary author of that framework, then I think we tend to admire that person, and unlike other programmers, the person starts to become famous...
Even if they're a crappy programmer.
Joel, I am pretty sure, considers himself a great programmer. The post suggests that he may just be famous because of the articles he's written and how he leverage that into book sales, product sales, and forum activity. As for whether he's a great programmer, he's has the same natural tendency to inflate his worth as any other developer. He could simply be tooting his own horn, which is larger than everyone else's. Is FogBugz really that technologically impressive? Well, Joel does have one attribute of genius mentioned by Bertrand Russell.
One of the most important elements of success in becoming a man of genius is to learn the art of denunciation. You must always denounce in such a way that your reader thinks that it is the other fellow who is being denounced and not himself; in that case he will be impressed by your noble scorn, whereas if he thinks that it is himself that you are denouncing, he will consider that you are guilty of ill-bred peevishness. Carlyle remarked: ``The population of England is twenty millions, mostly fools.'' Everybody who read this considered himself one of the exceptions, and therefore enjoyed the remark.
In another ironic twist, Bertrand Russell also says that one must delude himself (a common refrain of mine) in order to become a genius.
Ignore fact and reason, live entirely in the world of your own fantastic and myth-producing passions; do this whole-heartedly and with conviction, and you will become one of the prophets of your age.
If we are to delude ourselves, how do tell if we're geniuses or simply incompetents with inflated views of ourselves.