How do you recognise good programmers if youâre a business guy?
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.
I consider myself to be a pretty good programmer. At the same time, Iâve spent a fair amount of time on the business side of the fence, filtering technical CVs for projects, interviewing people, etc. Thanks to this, I think I have a bit of experience in recognising good programmers, and I want to share it in this article, in the hope that it may help other âbusiness guysâ to recognise good programmers. And, who knows, perhaps some programmers who have the potential to be good but havenât really exploited this can also read this and realise what they need to do to become good (although, as Iâll argue, thatâs definitely not accessible to all programmers!).
In his article The 18 mistakes that kill startups, Paul Graham makes the following point:
â⊠what killed most of the startups in the e-commerce business back in the 90s, it was bad programmers. A lot of those companies were started by business guys who thought the way startups worked was that you had some clever idea and then hired programmers to implement it. Thatâs actually much harder than it soundsâalmost impossibly hard in factâbecause business guys canât tell which are the good programmers. They donât even get a shot at the best ones, because no one really good wants a job implementing the vision of a business guy.
In practice what happens is that the business guys choose people they think are good programmers (it says here on his resume that heâs a Microsoft Certified Developer) but who arenât. Then theyâre mystified to find that their startup lumbers along like a World War II bomber while their competitors scream past like jet fighters. This kind of startup is in the same position as a big company, but without the advantages.
So how do you pick good programmers if youâre not a programmer? I donât think thereâs an answer. I was about to say youâd have to find a good programmer to help you hire people. But if you canât recognize good programmers, how would you even do that?â
I disagree with Mr Graham on this one. I think there are a number of very strong indicators of a âgood programmerâ (and, conversely, strong indicators of a ânot-so-good programmerâ) that even a business guy can recognise. Iâll summarise some key indicators and counter-indicators in a list at the end of the article.
#1 : Passion
In my corporate experience, I met a kind of technical guy Iâd never met before: the career programmer. This is a person whoâs doing IT because they think itâs a good career. They donât do any programming in their spare time. Theyâre shocked when they find out I have a LAN and 3 computers at home. They just do it at work. They donât learn new stuff unless sent on a training program (or motivated by the need to get a job that requires that technology). They do âprogrammingâ as a day job. They donât really want to talk about it outside of work. When they do, they talk with a distinctive lack of enthusiasm. Basically, they lack passion.
I believe that good developers are always passionate about programming. Good developers would do some programming even if they werenât being paid for it. Good programmers will have a tendency to talk your ear off about some technical detail of what theyâre working on (but while clearly believing, sincerely, that what theyâre talking about is really worth talking about). Some people might see that as maladapted social skills (which it is), but if you want to recognise a good developer, this passion for what theyâre doing at the expense of social smoothness is a very strong indicator. Can you get this guy to excitedly chat up a technology that heâs using, for a whole half hour, without losing steam? Then you might be onto a winner.
#2 : Self-teaching and love of learning
Programming is the ultimate moving target. Not a year goes by without some new technology robbing an old, established standard blind and changing half the development universe. This is not to say that all good programmers pick up these changes and ride the bleeding edge. However, thereâs a class of programmers that will never, ever pick up a new technology unless forced to, because they donât like learning new stuff. These programmers will typically have learnt programming at university, and expect to get by on whatever skills they picked up there, plus whatever courses their company is willing to send them on.
If youâre thinking of hiring someone as a programmer, and he ever utters the words âI can work with that, just send me on a training course for a week and Iâll be good at itâ, donât hire that guy. A good programmer doesnât need a training course to learn a new technology. In fact, the great programmer will be the one talking your ear off about a new technology that you havenât even heard of, explaining to you why you must use it in your business, even if none of your staff knows how to use it. Even if itâs a technology he doesnât know how to use yet.
#3 : Intelligence
Some business people assume that lack of social tact and lack of intelligence are the same. Actually, intelligence has several facets, and emotional/social intelligence is only one of them. Good programmers arenât dumb. Ever. In fact, good programmers are usually amongst the smartest people you know. Many of them will actually have pretty good social skills too. The clichĂ© of the programmer whoâs incapable of having a conversation is just that - a clichĂ©. Iâve been to a few meetings of the London Ruby User Group and I can say that with only a very few exceptions, most people there are smart, talkative, sociable, have varied interests, etc. You wouldnât look at them chattering away in the pub and think âwhat a bunch of geeks!â - at least until you approach a group and realise theyâre talking about the best way to design a RESTful application with a heavy UI frontend.
This doesnât mean that theyâll all feel comfortable in every social context. But it does mean that if the context is comfortable and non-threatening enough, youâll be able to have as great a conversation with them as you would with the most âsocially enabledâ people (perhaps better, since most good programmers I know like their conversation to revolve around actually useful topics, rather than just inane banter).
Donât ever hire a dumb person thinking theyâre a good developer. Theyâre not. If you canât have a great conversation with them in a relaxed social context, theyâre very likely not a good programmer. On the other hand, anyone whoâs clearly very smart at the very least has a strong potential to be a good or great programmer.
#4 : Hidden experience
This is correlated with the âPassionâ point, but it is such a strong indicator that Iâd like to emphasise it with its own point.
I started programming when I was about 9, on a Commodore 64. I then migrated onto the PC, did some Pascal. When I was 14 I wrote a raycasting engine in C and Assembler, spent a large amount of time playing with cool graphic effects that you could get your computer to do by messing directly with the video card. This was what I call my âcoccoon stageâ. When I entered that stage, I was a mediocre programmer, and lacked the confidence to do anything really complicated. When I finished it, I had gained that confidence. I knew that I could code pretty much anything so long as I put my mind to it.
Has that ever appeared on my CV? Nope.
I strongly believe that most good programmers will have a hidden iceberg or two like this that doesnât appear on their CV or profile. Something they think isnât really relevant, because itâs not âproper experienceâ, but which actually represents an awesome accomplishment. A good question to ask a potential âgood programmerâ in an interview would be âcan you tell me about a personal project - even or especially one thatâs completely irrelevant - that you did in your spare time, and thatâs not on your CV?â If they canât (unless their CV is 20 pages long), theyâre probably not a good programmer. Even a programmer with an exhaustive CV will have some significant projects that are missing from there.
#5 : Variety of technologies
This oneâs pretty simple. Because of the love of learning and toying with new technologies that comes with the package of being a âgood programmerâ, itâs inevitable that any âgood programmerâ over the age of 22 will be fluent in a dozen different technologies. They canât help it. Learning a new technology is one of the most fun things a programmer with any passion can do. So theyâll do it all the time, and accumulate a portfolio of things theyâve âplayed around withâ. They may not be experts at all of them, but all decent programmers will be fluent in a large inventory of unrelated technologies.
That âunrelatedâ bit is the subtle twist. Every half-decent java programmer will be able to list a set of technologies like âJava, J2EE, Ant, XML, SQL, Hibernate, Spring, Struts, EJB, Shell scriptingâ, etc.. But those are all part of the same technology stack, all directly related to each other. This is possibly hard to recognise for non-programmers, but it is possible to tell whether their technology stack is varied by talking to them about it, and asking them how the different technologies they know relate to each other. Over-specialisation in a single technology stack is an indicator of a not-so-good programmer.
Finally, if some of those technologies are at the bleeding edge, thatâs a good positive indicator. For instance, today (November 2007), knowledge of Merb, Flex, RSpec, HAML, UJS, and many others⊠Please note that these are fairly closely related technologies, so in a couple of years, someone who knows all these will be equivalent to someone familiar with the Java stack listed in the previous paragraph.
Update: As a clarification to this point, thereâs in fact two indicators here: variety and bleeding edge. Those are separate indicators. A good variety of technologies across a period of time is a positive indicator, whether or not the technologies are bleeding edge. And bleeding edge technologies are a positive indicator, whether or not thereâs a variety of them.
#6 : Formal qualifications
This is more a of non-indicator than a counter-indicator. The key point to outline here is that formal qualifications donât mean squat when youâre trying to recognise a good programmer. Many good programmers will have a degree in Computer Science. Many wonât. Certifications, like MCSE or SCJP or the like, donât mean anything either. These are designed to be accessible and desirable to all. The only thing they indicate is a certain level of knowledge of a technology. Theyâre safeguards that allow technology recruitment people in large corporations to know âok, this guy knows java, heâs got a certification to prove itâ without having to interview them.
If youâre hiring for a small business, or you need really smart developers for a crack team that will implement agile development in your enterprise, you should disregard most formal qualifications as noise. They really donât tell you very much about whether the programmer is good. Similarly, disregard age. Some programmers are awesome at 18. Others are awesome at 40. You canât base your decisions about programmer quality on age (though you might decide to hire people around a certain age to have a better fit in the company; please do note that age discrimination is illegal in most countries!).
As a final note to this, in my experience most average or poor programmers start programming at university, for their Computer Science course. Most good programmers started programming long before, and the degree was just a natural continuation of their hobby. If your potential programmer didnât do any programming before university, and all his experience starts when she got her first job, sheâs probably not a good programmer.
Disclaimer
None of the indicators above or below are sure-fire indicators. You will find great programmers who break some of those moulds. However, my view is, youâll rarely find a great programmer that breaks all of them. Similarly, you may find poor programmers that meet (or appear to meet) some of these criteria. But I do strongly believe that the more of these criteria a programmer meets, the more likely they are to be one of those elusive âgood programmersâ that, as a business guy, you need to partner with.
The criteria in bullets
So, in summary, here are some indicators and counter-indicators that should help you recognise a good programmer.
Positive indicators:
- Passionate about technology
- Programs as a hobby
- Will talk your ear off on a technical subject if encouraged
- Significant (and often numerous) personal side-projects over the years
- Learns new technologies on his/her own
- Opinionated about which technologies are better for various usages
- Very uncomfortable about the idea of working with a technology he doesnât believe to be ârightâ
- Clearly smart, can have great conversations on a variety of topics
- Started programming long before university/work
- Has some hidden âicebergsâ, large personal projects under the CV radar
- Knowledge of a large variety of unrelated technologies (may not be on CV)
Negative indicators:
- Programming is a day job
- Donât really want to âtalk shopâ, even when encouraged to
- Learns new technologies in company-sponsored courses
- Happy to work with whatever technology youâve picked, âall technologies are goodâ
- Doesnât seem too smart
- Started programming at university
- All programming experience is on the CV
- Focused mainly on one or two technology stacks (e.g. everything to do with developing a java application), with no experience outside of it
I hope these help. Let me know below if you have any comments, or anything to add to them!
Thanks for reading.
Source:http://www.inter-sections.net/2007/11/13/how-to-recognise-a-good-programmer/