How to Recognize a Good Programmer 529
KDan writes to share an article he has written about what some of the key factors in recognizing a good programmer. "It's not as easy as it sounds. CV experience is only of limited use here, because great programmers don't always have the 'official' experience to demonstrate that they're great. In fact, a lot of that CV experience can be misleading. Yet there are a number of subtle cues that you can get, even from the CV, to figure out whether someone's a great programmer."
The more important question is... (Score:5, Interesting)
That they aren't primarily a programmer? (Score:5, Interesting)
I'm guilty of being one of these types myself, but have since moved up to project management around security type stuff after having taught those who replaced me the things that I learned through experience.
Re:WTF is a CV? (Score:5, Interesting)
I actually have something that is closer to a true CV - a portfolio that is about 25 pages of material of all my IT experience, education, major projects, contacts, letters of recommendation, etc. When I apply for a job I send them my resume but if I get called for an interview I bring in my portfolio and use it during the interview - it often has a very large positive impact.
Re:Passion != "Spare Time" (Score:3, Interesting)
One of the best programmers I ever knew wrote and maintained a large Cobol-based Point-of-Sale program for MS-DOS. It was an incredibly good product, with all sorts of hooks for all sorts of POS-based equipment, right down to pump controllers for gas stations. He had an office, worked there, but when he went home, he went home. It's tough in this day and age to do that sometimes, but I really envied the way he actively divided his world between work (development, marketing, support) and home (family and recreation).
Point by point (Score:5, Interesting)
I disagree with a lot of these points.
Reasonably good indicators
Ability to yammer on about a subject one's audience does not care about is a weak indicator of programming ability and a strong indicator of poor communication skills
OK
NO, NO, NO!
A good programmer has an open mind and makes decisions after thought, study, and understanding the users' needs; not based on some knee-jerk personal prejudice.
There is nothing wrong with taking advantage of company-sponsored courses. Taking advantage of classroom opportunities is just good time management (it can be easier to learn more, faster, in a well-taught course than in self-study).
So what you're looking for is a prima donna who will refuse to work in the environment you ask him to, and is insubordinate out of the gate? No. A good programmer will find the strengths of the technology you've picked and design a strategy that plays to those, rather than just telling you you've made a stupid choice and should have used his pet technology instead.
I don't know if it's ever a good idea to hire someone who "doesn't seem too smart."
That's a stupid criterion. Why someone starting programming is a lot more important than when
Inability to write a complete CV is hardly an indicator of competence. The author is biased in favor of people who started programming at the age of 9, as he did.
Nonsense; depth of knowledge is as important as breadth of knowledge. Ability to justify 50 different buzzwords on one's resume doesn't make someone a good programmer. It is a lot better to talk about the problems the candidate has solved, than the technology used to solve them.
Re:They're out there, but scarce.... (Score:5, Interesting)
As one of the elite few programmers who does know how to spell, thank you for noticing. I would say "take it as a good sign" rather than "get out your checkbook" but I'm just the cautious type I suppose.
However - I can spell, and my brother can't. I believe this has more to do with the teaching methods in our respective elementary schools than with our inherent attention to detail. His school used an experimental method that I think failed him utterly - at a time before national standards were yet fashionable.
Re:How would I recognize a good programmer? (Score:2, Interesting)
Re:Useless article-Petsmart. (Score:4, Interesting)
Every interview I've ever had, I interviewed my interviewer as much as they interviewed me. Maybe I'm strange, but it's worked so far.
Re:it's easier than you think: (Score:1, Interesting)
Re:it's easier than you think: (Score:5, Interesting)
LOL - I double-dog dare you to post these magical 20 lines here. If you do, I guarantee you will find that:
(A) Most of us will understand it.
(B) Many of us could make it better.
(C) It's definitely not voodoo.
Re:Baloney (Score:5, Interesting)
The change? Full-time job. After spending a full day programming to earn my paycheck, it just becomes mentally separated from what I do in my spare time. I kind of miss the old college days when I could just spend hours and hours doing it for fun, but now I just want to zone out.
As for the new technology part, I somewhat agree... A good programmer shouldn't be ranting about how everything MUST be done on Ruby-on-Rails, because that's the new fad (Yes, I realize it no longer is. That's the point)... A good programmer will look at a new technology, look at the needs of the project/business, and decide whether or not that technology is a good fit. If it's a major improvement that fixes existing problems, then he'll start pushing it.
On the other hand, when you're interviewing a programmer, and ask them about some personal project or technology they worked with, getting your ear talked off is a good sign, because this ties into the whole "passion" part. If they find this project or tech interesting enough to ramble on about, this is probably someone who's in the industry because they enjoy it, not because their high school guidance counselor told them it pays well.
So, on to social skills. Yes, you need to be able to communicate with and get along with other programmers, even those who aren't on the same level. Apart from that, the importance varies depending on the person's role. If they're going to be one programmer on a large team, working off design documents and style conventions, then it's not that important. If they're on a smaller team, and will be working directly with the business side to design parts of the application, then social skills become a necessity. Of course, if you find someone who just wants to sit in a dark room apart from the rest of the team, and just silently deliver code modules to them, then you might want to look elsewhere.
Qualifications... Degrees... I think the article was basically preaching against certifications, and in that respect I agree entirely. I don't care if someone passed a certification test by Microsoft or Sun... That means they know how to work with one specific area of technology, well enough to pass a test once. It doesn't say whether they can think for themselves, or adapt to a new situation.
On the other hand, an undergrad degree can be a good thing. You don't learn how to program in college (Well, I hope not), but you do learn how not to reinvent the wheel. You learn some standard algorithms, data structures, and methodologies, and you learn about lots of things that you'll consider useless at the time (Natural sciences, higher maths, etc), but will still influence the way you think. A master's degree or doctorate, well, I don't know... I've worked with PhDs who couldn't think outside the smallest box, and I've worked with a few who could work miracles. A dropout might be a bad sign (Though not a disqualifier, depending on other factors), but I wouldn't trust a PhD to necessarily be better than an MS or BS.
In short, you make some good points, but you're leaning toward the other extreme. Remember, you're looking for a programmer, not a corporate executive. This is about looking past the doublespeak and self-promotion and determining whether someone can write quality software.
On a side note... The phrase "working yourself out of a job" is starting to look really scary... I shouldn't have automated this place so well that I have nothing to do but post on slashdot...
Re:Write a C program that... (Score:1, Interesting)
int len = 0;
while (buf[len] != 0) len++;
for (int j = 0; j < len / 2; j++)
{
buf[j] += buf[len-j-1];
buf[len-j-1] = buf[j] - buf[len-j-1];
buf[j] -= buf[len-j-1];
}
return buf;
}
Re:it's easier than you think: (Score:3, Interesting)
Dude, you're right on spot, with the exception of the Bangalore code-monkey, which sounds a bit racist to me.
I've worked with a few nerds before and, in spite of being considered "geniuses" by the management they are a pain to work with, they work too many hours and force others to do the same because they are unable to plan and organise, and also explain themselves and listen to others. Once, for a particular project, the lead developer coded an FTP stack of her own in C++ because he didn't trust the standard ftp unix command or any free FTP library.