I have written web apps and low level networking code and plenty of stuff in between, aka a web server. I have worked with computers that have less than 1kb of RAM and distributed networks. I have written code 100x faster than a coworker who was still better than average (30 min vs 7 days). I remember spending a few days coding something so so our customers did not have to the post office website to find zip+4 addresses and realizing using them as a backup was almost pointless because I had a better solution. I love solving hard problems, and most of the time I don't code at home.
PS: Ok, I did just start working on an iPhone app, but that's mostly because I stopped coding at work. There is a life outside a compiler and going snowboarding, watching amine, reading, or any number of other things are just more fun.
Don't be insulted; it's just an argument on the internet. Besides, the correlation people like me are claiming is at most a statistical pattern with lots of room for variation. (You sound like a good programmer regardless. But what I find endearing in your comment is how you go and spoil your argument by hacking on an iPhone app in your spare time - and feel obliged by intellectual honesty to fess up to it!)
Of course, you might also mean that the debate is insulting because it's pointless. I can understand why it would seem that way. What does it matter whether someone programs outside of their job or not? It doesn't, intrinsically.
Here's why I think the subject is interesting anyway: there's no cheap way to tell who the really good programmers are. This is not just a hard problem, it's a hard problem that seems like it ought to be an easy one. Why can't you just devise a test? People have tried to figure this out every which way, spending many millions, maybe billions in the process. And no one has a good answer. That's genuinely surprising.
Given that situation, any criterion one can use as a (cheap) proxy for "good programmer" is of interest, even if it's imperfect.
What makes the "hacks in spare time" correlation with "good programmer" interesting is not that it captures all of the good programmers. There are certainly good ones who don't do that; i.e. the test does produce false negatives. What makes it valuable anyway is that it excludes the overwhelming majority of bad programmers, the ones for whom it's a job that they aren't very good at and aren't motivated to get good at, who form 90% if not 99% of the professional population. In short, the test is interesting because it excludes many more false positives than it admits false negatives.
A corollary is that all the people who protest "I don't code in my spare time, yet I am a good programmer" aren't really adding much data to the discussion. The ones we need to hear about are the bad programmers who do. :)
Even if all good programmers were programming at home the knowledge that a programmer is coding at home wouldn't give us much.
G - good programmer
C - coding at home
P(G|C)*P(C) = P(C|G)*P(G)
P(G) = 1% # percent of good programmers among all
P(C) = 20% # percent of programmers that code at home
P(C|G) = 100% # assume that all good programmers code at home
Probability that a programmer is a good one given that it codes at home:
I think 20% is on the low side. But, you really need to define your terms. I would call 1/3 of all programmers useful, in that they can create more value then they cost. However, when you have a tiny budget and need to find useful programmers willing to work long hours for low pay then you really want young smart programmers with a lot of experience. And they only way to have a lot of experience at a young age is to do a lot of side projects.
There are plenty of programmer that will blow your mind making 150+k/year, finding programmers that will blow you mind and are willing to take far less and a slice of equity is far harder.
PS: There are talented older people that are also under payed, but that's normally because they are happy where they are. Finding them and getting them to work for you is hard and expensive.
Good points. It's worth remembering that when it comes to this stuff, we're all anecdotalizing in the dark. I say that because it sounds like we've had quite different experiences. (20% of programmers work on side projects sounds low to you, very high to me.) Frankly, I'm not even sure it's possible to properly define these terms, let alone measure them.
I just wanted to point out the interesting juxtaposition of
"P.S. Another trait that good programmers tend to have is not seeing themselves as good enough and not getting defensive about proving how good they are. Exercise to the reader."
followed immediately by:
"I find this debate insulting."
This seems to always happen with hiring debates - last time, it was the "Would you hire someone without a college degree?" question on Reddit about 8 months ago. Interestingly, all the degree-less folks I would hire kept their mouth shut in that debate. They know that they're good enough to hire with or without a degree, so they don't need to prove anything to anybody. It's the folks who aren't quite sure that need to rant on and on.
It doesn't matter if everyone likes you, so long as someone likes you. Applies as much to jobs as it does to friends, girls, or customers.
FWIW, I do code at home. And I find this debate rather baffling. I code because I want to, not because I care whether someone will hire me for it. If it gets me a job, so much the better, but if it doesn't, I can always start a company, compete with them, and kick their asses. It doesn't have to be mutually exclusive to having a life, either. I read, too, and play violin, and occasionally go hiking or see a movie with friends, or play Starcraft or board games after work, or any of a number of other activities.
I have written web apps and low level networking code and plenty of stuff in between, aka a web server. I have worked with computers that have less than 1kb of RAM and distributed networks. I have written code 100x faster than a coworker who was still better than average (30 min vs 7 days). I remember spending a few days coding something so so our customers did not have to the post office website to find zip+4 addresses and realizing using them as a backup was almost pointless because I had a better solution. I love solving hard problems, and most of the time I don't code at home.
PS: Ok, I did just start working on an iPhone app, but that's mostly because I stopped coding at work. There is a life outside a compiler and going snowboarding, watching amine, reading, or any number of other things are just more fun.