views:

166

answers:

7

When hiring a programmer, do you tend to prioritize fundamentals or knowledge of specific technologies higher? Fundamentals include things like algorithms, data structures, decent communication ability, good understanding of design patterns and principles, a good understanding of system fundamentals such as memory management and pointers, good math skills, etc. Specific technologies are things like programming languages, frameworks, and APIs. Under what circumstances do you hire for fundamentals, and under what circumstances are specific technologies more important?

+3  A: 

If a programmer has good fundamental knowledge and ability to learn, then he can grasp the specific technology rather fast.

Opposite does not always work.

Rinat Abdullin
+1 ...and if they know more than one language / framework / environment, then with some exceptions anything else is most likely just another one and probably won't faze them too much.
frankodwyer
Precisely. More you know, easier it is to learn something else.
Rinat Abdullin
+1  A: 

Simple. As you well know, technologies come and go. Choose a programmer that not only is good at a certain technology you need but that is also smart enough to learn and be prepared for the next technology. Being all the things you mentioned is important, but it won't help you if the only technology known is SmallTalk and you really need an ASP.NET/C# person to hit the ground running.

Otávio Décio
+6  A: 

If you're offering someone a career, then you're looking for someone who demonstrates that they understand the fundamentals and can adapt to anything. Then invest in their continuing education.

If you're hiring someone on a short term contract to do a specific job, then hire someone who already knows the specific technology you need. Let someone else pay for their education!

slim
+1  A: 

Generally, hire for fundamentals. That said ...

While it's not fun to think about, your immediate needs may occasionally justify getting someone who's got deep experience with a specific area, but is not well grounded overall. For example, if you have some really hard SQL problems that you need solved right away, you might opt for getting a SQL guru, even if she failed your "data structures" interview questions. The alternative (getting a smart person who has never seen SQL before) is not going to help with your immediate problem, as it'll take anyone a while to get up to speed on RDBMS concepts and SQL (especially if they've never seen it before). Same holds true for any specific technology or language - it's possible to get quite far in any one thing without all the fundamentals.

The trouble with this appraoch, of course, is that after your immediate niche problem is fixed, now you've got a full-time hire sitting around who might not be up to par in other ways, and might not be of optimal use as your mix of needs change. This can be mitigated by a) only hiring contractors when you have an issue like that, or b) investing in the person to help them shore up their fundamentals.

The ideal thing, though, is not to get yourself into that situation in the first place - hire only people with strong fundamentals, and anticipate your needs far enough in advance for your strong people to learn what they need to know. Easier said than done, of course ...

Ian Varley
A: 

http://www.joelonsoftware.com/items/2007/06/05.html

You do not really need to read the book, book's title already answers your question. He must be smart (fundamental knowledge) and get things done (experience, maybe with different tool-set)

Muxecoid
A: 

As for immediate need for a specialist, as Ian answered, it might be better to hire a consultant or a freelancer to do the "burning deadline" specific assignment (considering hiring and long-term costs, it may well be cheaper too), and seek people with understanding of fundamentals and experience that proves it as full-time employees.

MaxVT
A: 

It may also depend on how many developers you have. The fewer people, the less flex you have to hire people who need to learn a new technology. I worked one place that had one developer and one database person. Under those conditions, I wouldn't hire someone with C# knowldege for a job like this (assuming that is what I needed) who did not also understand the fundamentals. (Fundamentals may of course vary widely from job to job)

So bascially I would rank people like this: 1. has specific knowledge and fundamentals and accomplishments 2. has fundamentals and accomplishments, but no specific experience in one or more of the tools used 3. has fundamentals and accomplishments, but no specific experience in any of the tools used 4. has specific knowledge and fundamentals and no accomplishments (For trainees only) 2. has fundamentals and no accomplishments, but no specific experience in one or more of the tools used (For trainees only) 3. has fundamentals and no accomplishments, but no specific experience in any of the tools used (For trainees only)

I would not usually consider hiring the person who has specific knowledge but doesn't understand fundamentals needed by the particular position. This person will create problems in your code base. And no one beyond the trainee level would be considered without some accomplishments.

HLGEM