Tuesday, November 13th, 2007...1:28 pm

How to recognise a good programmer


Jump to Comments

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.

[?]
Share

280 Comments

  • Its a good list!

    Focusing on one or two technology stacks can cover a hell of a lot of technology and shouldn’t really be cause of concern. In fact constantly following trends and the bleeding edge could also be an indicator of a limited attention span / inability to master technologies. I suppose thats one to be looked at in a interview.

    So where’d you find these programmers?

  • You´re totally right!

  • Hi Daniel .
    Great essay! I absolutely agree with you. Specially, I believe that most of great programmers -i.e. great hackers- have a bunch of programming languages ans technologies in their pockets to deploy them in appropriate conditions. This viewpoint avoid them to choose dump ways. And this fact leads them confidence and audacity to get their jobs done . That’s why great programmers are eager to learn new technologies and have a lot of fun with them :)

  • Nice summary! I agree with the comments about developers who started programming at university, and see it as a day job (to me, they are two sides of the same coin). Until I worked in IT professionally, I didn’t even realised these people existed! I assumed that all computer science/software engineering etc graduates were previously teenage hackers.

    One positive indicator I think you missed is that most, or at least many, great programmers have excellent command of written language. This isn’t quite the same thing as being good in conversation, where being quick-witted gives some people an illusion of talent. I would certainly not hire someone who couldn’t form coherent written sentences - if they can’t do it in a natural language I wouldn’t have much confidence in them doing it in a strict programming language. (Unless you are hiring for VB work of course, in which case the reverse may apply.)

    Also, something that has stuck with me long after I forgot where I read it (possibly the Jargon File?) is that you should look out for developers with highly-developed outside interests. Generally, the ones who excel at or show extreme dedication to their hobbies are better hackers than those that don’t. I’ve got no idea why this should be the case, but I have seen many examples of it. Perhaps it’s because they find inspiration in strange places, or perhaps because they solve as many problems subconsciously as they do in front of a keyboard.

  • I agree with everything except by the fact i consider myself a pretty good programmer as well even though i started to program at college; i think the passion and self-learning attitude are more important than any “pre-college” experience.

    Keep the good work!
    Regards from Brazil

  • Hi Vitor,

    As I mentioned in the article, but it is worth repeating, these are all only indicators. None of them is sure-fire. You will find excellent developers who break some of those indicators. Marcel Molina Jr, one of the leading lights of the Ruby community, started his career as a Linguist before falling in love with Ruby. However, I think that few great programmers break all of these indicators.

    Thanks everyone for your comments!

    Daniel

  • >I consider myself to be a pretty good programmer.

    Well, then you don’t want to hire me!

    Confessions of a Terrible Programmer

    :-)

  • Marc:
    Good article, quite smart :-)

    Looking at your list, I see you actually match my list pretty well: you’re opinionated, you know what you like, you’re articulate, you’ve got experience in a good variety of technology stacks… I don’t know about the rest, but that’s a good start!

    But I’m guessing you didn’t post this to start an argument :-)

  • […] Recognizing good programmers 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… […]

  • I am a self taught programmer and this list is almost the same as the one I use when hiring on new programmers. Our team is like 50% college educated, 50% fully self taught, some guy has a biology degree, etc.

  • Hey, we’re all good programmers, aren’t we!

    I completely disagree with this essay.

    Basically, you took a description of yourself and said “Here is what a good programmer looks like.” On the other hand, there are plenty of bad programmers that look just like that as well. Of course, at least half of them believe they are good programmers.

    I also know good programmers who weren’t into computers when they were growing up. Most bad programmers will list all of the latest technology on their resume to make it look good.

    Anybody who tells you in an interview that they decided to be a programmer for the money, will probably fail the intelligence part as well, so at least that one is right. The young woman who I got to babysit my children once was overheard at a party asking “Give my name out for babysitting because I love money.” Needless to say, she turned out to be a lousy babysitter, even though she had all of the qualifications (first-aid certification, etc.)

  • @Ashley Moran

    Some of the best developers I have ever seen are dyslexics or have other similar problems with natural language…so I think comparing written work at the lowest level may not be the best indicator - I agree that verbal statements may however be some of the best structured sentences out there however.

  • Gott… I have all but intelligence :-(

  • I think there are many good things in this list, but… the inevitable but… i think many “hacker” types are terrible programmers. Not that they write terrible code, but from a business perspective. I have many times seen programmers use bleeding edge technologies in places where it was inappropriate from a architectural point of view but .”…but this is really cool, we NEED to use this pattern/ technology etc.” and then clutter the application with unneeded complexity, just because “its cool”. Naturally a university degree will not safe guard you from bad designers but i prefer programmers who have the big picture in mind and not go goofing off with their pet technology

    Never the less, there are many good points in this list. :)

  • Considering I’m not in a position to review the talent of all that many developers, my opinions aren’t based in nearly as much hard data as I’d prefer. However, I take exception to these two bullet points:

    # 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”

    Knowing a lot of technologies and being able to determine which to use in specific circumstances is clearly a benefit. However, being overly opinionated on the matter could easily lead to conflict. Team dynamics and the social aspect of software development, such as being pleased with the people you work with and the environment you work in, is very highly correlated with successful software projects. If one developer is going insane trying to convince the team to do things their way, it will harm the project significantly more than using a slightly less skilled developer who won’t cause problems.

    Furthermore, such developers as you listed are prone to becoming magpies (c.f. http://www.codinghorror.com/blog/archives/000916.html )

    Anyway, as I said, I may just have read too much into what you wrote.

  • I work for a large software company in the Seattle area…one thing I am really surprised by is how poorly managed the interview process is. They ask puzzles, even though officially they are not supposed to. So reading one of the books on puzzles is a qualification. And they ask programming questions that are either impossible in the time given or for which they are looking for a very specific answer to regardless of if there are other valid solutions. I think they want to see the solution they received in their CS course.

    Basically we don’t consider any of the ideas mentioned in this article. And since anyone on the team can sink a candidate then good candidates are sunk while candidates who have studies to the interview get through. Its frustrating to watch and its frustrating when trying to make lateral moves.

    But hey, if upper management doesn’t care what can you do? The worst situation is when upper management is happy with the products you are producing, profits are up, even though you feel, nay know, they are total @rap.

    Sometimes all you can do is plan for an exit.

  • I’m very suspicious of this, it looks to me like you’re projecting an (idealised) version of yourself.
    The first attribute you describe as passion is really just a hobbyist mentality, you even say they will do it without being paid. Number 2, love of learning, follows on from #1 and is a useful attribute for a lot of workers - when it’s focussed as initiative and not just limited to collecting new skills like a butterfly collector takes specimens. Some may even call it a lack of loyalty, as they are just using you as a stepping stone in their career.
    Number 3 “… if you can’t have a great conversation … ” is a bit of a giveaway about reflecting your own personality. Ever considered they may not want to talk, or have other things they’d prefer to be doing than brown-nosing with the boss? Like getting home to the husband or wife (or can’t a great programmer have a home life and a family???)

    Pretty much all the other attributes fit any good worker in any field, you could just as well say “car mechanic”

    My measure of a great programmer would be one who does what they say they will, on time, in a clear and organised way. They will be able to integrate into a team and use his/her initiative to circumvent problems. They will be able to communicate at a professional level and have a JFDI mentality - without any tantrums about “my way is better than your way” languages/methods/coding style etc.
    But most of all, their code will work. It will be efficient, reliable, tested and fully documented so that when this great programmer gets a greater offer, what they leave behind can be picked up easily by the next great programmer you hire. That’s the most important attribute of all.

  • Great post. The one thing I would add is you should look for these types of attributes in employers when you are job hunting. Often if an interviewer shows no passion or interest in what they are doing, it probably is not a place you would enjoy working.

    In addition, you can apply these same principles to almost any IT job, not just programming.

  • Daniel,

    Awesome post. In my experience, I too have found the same common criteria for all good programmers I’ve hired and/or worked with.

    -Jonah

  • Wanted to mention that often a developer that was required to acquire certificates for a prior job (for whatever reason) will often gloss over them because they know how meaningless they really are, whereas a poor programmer will talk them up no end and make sure to emphasis them.

  • I think the passion indicator is entirely overrated. I see cases all the time, especially in college, where a person’s passion exceeds their abilities. They are the same people who spend day and night in the computer labs and even know a plethora of cutting-edge technologies, but are ultimately mid-tier students who are passed up by truly good programmers.

    With that said, raw intelligence is the best indicator. That’s why puzzle questions are not entirely bad. They generate less false-positive, which is the worst-case for a new hire, and are harder to fake. All of the qualities you listed above can be faked easily. They are also universal in the sense that the business-minded variety are capable of asking them.

  • You must got really hairy balls

  • The simplest way to check for 1337 programming skills: pony-tail

  • The best programmer I ever worked with:

    1) Had a life outside work and did not in general talk shop outside his 6am-3pm schedule. He had once been “passionate” about his code but after too many projects got canned he realized that in the end it is just a job. (Corollary: why do so many programmers think the rest of the world isn’t passionate about THEIR work?)

    2) Had EXPERIENCE in designing and implementing larger systems.

    3) Always wrote his code so that it could handed off immediately to someone else. Nothing was ever his “baby”.

    Those are qualities I see way too rarely these days.

  • Great article! A lot of what you said rings true with me… and of course I was flattered that most of your points are things I could say “yup that’s me” to :)

    The opening quote was also interesting because I’ve never considered what a huge task it would be to be the “business guy” who has a great idea but has trouble hiring good talent.

  • Why didn’t you write this when I was 18, bright eyed and bushy tailed - and looking for my first programming job! :)

  • Good list and I’d like to emphasize #5. My position is that I -never- hire a programmer without experience/knowledge of more than 1 programming language. The Sapir-Whorf hypothesis applies; if you know only 1 programming language you can’t really think through alternate approaches to the problem. I’ve told people who clearly qualified based on the other criteria in this list, “Go learn another programming language and then come back and I’ll hire you.”

    See also this article: http://www.stsc.hill.af.mil/CrossTalk/2008/01/0801DewarSchonberg.html

    With respect to #4, some of us are old enough that our first chance to do any programming was when we got to universities. And that’s a point I’d like to make: Experience counts. Someone with 20 years experience, even if it’s not in the hottest technologies, but that otherwise meets these criteria, is often likely to be more productive in the middle to long run, than someone with 1-2 years of direct experience but no “time-in-life”. A tremendous amount of stuff I experienced 20 years or more ago in some “antique” technology is still relevant; part of the skill to look for is an ability to apply life experiences to the new technologies. Remember that 1 good programmer significantly outperforms several mediocre programmers (based on both skill and Brooks’ Law about team sizes.)

    dave

  • A very good article! I started programming back in 1965 on IBM 1401’s, doing cryptology for the Army. (When other guys were working on their cars I was building Ham Radio sets and Stereos…Vacuum tube technology.) In today’s market I’m almost unemployable. Why? Because I’m 60 years old and have had over a hundred jobs (contracts). But I do program for myself. I love assembly language programming, I can write competent programs in dozens of higher-level languages, I love to THINK about how to solve difficult problems, and I love the fact that there is a wealth of opportunity in the form of unresolved, undiscovered, un-articulated possibilities. In my lifetime I have seen programmers hired who had a lot of paper credentials and could not think their way out of the lunch room.

    Something that is implied in your article, but not mentioned explicitely, is a system for describing problems and then a system for resolving them. At this stage of my life I think that coding gets in the way of real programming, and a good programmer solves problems ‘way upstream from the actual code.

    Another good indicator is a person who gets so involved in the process that their coffeee gets cold, they lose track of time, and don’t get up until they absolutely HAVE to go to the bathroom.

    Mike

  • As someone that has programmed for nearly 15 years (hobby and professionally) with a background in psychological research I hate to say I find this “essay” not very scientific. This is all based on anecdotal evidence, stereotypes, and conclusions were reached without a solid methodology.

    Can I find people that fit these bullet items that are good programmers? Sure, but I can also point to some really bad programmers that fit this model in nearly every way also.

  • prefer prgrammers that can use a soldering iron
    or have other hardware expertise.
    “pure” programmers are often unable to “jump”.

    This meshes into the no single stack argument
    G!
    MACC

  • Yup, I agree with you.
    I would add another point:

    Values simplicity.

    This is the rarest of things to find.

    We programmers tend to have rivers of thoughts flowing in our brains all at once.

    A good programmer will find an elegantly simple solution in a word of complexities.

    Ask them about the K.I.S.S. principle :-)

  • Great! Now I have a list of things to act out when I am applying for all those crappy boring jobs. Come on folks we all know that 95% (or more?) of the work out there isn’t what we’d rather be doing.

    What percentage of you are going to even get an interview at Google, Apple, Microsoft, or some sexy startup? (OK, I did at two of them…but that’s not my point.)

    My point is it can be hard to fit this list when you are interviewing at Billy Joe Bob’s Insurance Co. for some churn and burn IS programming job.

    Oh well, at least we all now have a guide about how to act to get a job ;-)

  • Your list covers only half of the requirements of a good programmer. You might say its the basics. Whitout that you cant be a good programmer. But I have know a lot of programmers who got all the skills, abilities and markers you list and still where lousy programmers. By a lot I mean 60 - 70 %. Tinkering with code and technology has only little to do with writing clear, consice, maintainable code. Picking a new sexy technology is probably the best way to screw up a serious project. Jumping from one interest to another does not show the disipline you need for good programming.
    A good programmer can balance his skills and eagerness with the need of the programm/employer. Not to mention the social skill he needs to understand his employer.

  • Your list is completely wrong. I am a great programmer and you have missed on every point…

    Actually, I was reading through this and found that I fit in pretty well with many of your points. While I would like to think that your list is good because of this, I do not consider myself a good programmer.

    One of the issues that compelled me to comment, was about learning a first language in a college course. I am mostly a self taught programmer, which shows determination and interest in the subject. It doesn’t really mean that I am a good programmer. Because I am self taught, I may have sloppy code that gets the job done, though horribly inefficient. A more fitting title for this article is “How to recognize an enthusiastic programmer”.

    An enthusiastic programmer can very likely be a good programmer, but not always. A good programmer should have a more intimate knowledge of programming procedures and logic, then of any particular language itself. Most any programmer knows that there are many ways to construct a procedure, but a good programmer knows how to create the most efficient procedure. Knowing the difference between and the proper use of a ‘for each’ loop verses a ‘for i=0-10′ loop is only one example (and one that I actually learned more recently in my career).

    Though an enthusiastic programmer is a good one to have:
    Enthusiastic != Good
    Good != Enthusiastic

    I have no problem calling myself an enthusiastic programmer. Instead of learning new languages and technologies as I have done in the past, becoming a _good_ programmer has been my ‘hobby’.

    Your article was great, and I very much enjoyed reading it. You also warmed my heart a little. :)

  • I am not sure how I feel about this list.

    It is a good overall pattern to follow for someone who does not have strong development experience, such as business manager. Employment is one area where trial and error is not a good method for success, so examples from experienced people are very helpful. Still, I have to strongly disagree with two items on the list. At one point in my career, I would have agreed with them, but additional experience working in the enterprise has changed my mind.

    #1) someone who suggests bleeding edge technology does not know what it takes to develop real world solutions and maintain those solutions. I consider this to be a major indicator of inexperience. Good developers have lots to do, so they cannot afford to spend large amounts of time evaluating things that might or might not apply to completing their tasks. Good developers know how to use the tools they have to get the job done. New tools tend to waste time. I am not saying that an interest in new technologies is bad, but I am saying that someone who suggests AJAX as a solution rather than just a potential method for achieving an end probably does not know much about real world web development.

    #2) Good developers do not spread their time all over the place learning every technology under the sun. Good developers understand that solving problems is the name of the game, and to be efficient you have to focus. I evaluate developers for new hire all the time, and I am suprised by how many different technologies they put down on their resume. How do you obtain expert experience in a technology within 6 months? You barely understand syntax and overall theory in 6 months. It takes years with a technology to understand what it does or does not do well, and where all the gotchas are. Focus is much more important than spreading it around.

    I usually spot good developers through one easy test. I mention a problem that we are having to them. I look to see how they approach it. If they start breaking it down and asking questions that get to the heart of the matter then they are good. If they start asking if I have tried this technology or that product or tell me about their agile methodology for tackling problems then I politely escort them to the door. A good developer knows how to see what is important in solving the problem and knows how to get there quickly.

  • I think you missed one key factor that I would put at #3. The ability to systematically break down large problems into small, managable ones.

  • […] I’m going to offer up a great list provided by the Daniel over on inter-sections.net. These points all rang true to me when I read them so make sure you jump […]

  • …and then there are the morons who look to get someone who is a great programmer/thinker/developer and then “test” you with arcane references within their required language stack that have no bearing on being able to create or develop and then rub it in your face that you must not know what you are doing…because his onscreen definition that he found on http://www.howcomputerswork.com is not what you just said….

  • “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” - this is not a valid statement. True, if you start programming earlier and continues to do so, you would probably be a good programmer. But I am a good programmer who doesn’t start programming before university. Other than that, I agree with you mostly.

  • After reading some more recent comments:

    Avoid programmers that think of themselves as
    “great programmers”.

    And yes, KISS is allimportant.

    G!
    MACC

  • I don’t think someone that goes home from a long day of programming and wants to do something other than program is a sign of a bad programmer.

    My main criteria are:

    1) ability to think logically

    2) works well with others - knows when to take a stand and when to be pragmatic

    3) a certain creativity and intelligence that can take a complex problem and break it down to its fundamentals (writes solutions that can be understood by “the next guy”)

    4) curious - wants to know “why” - solutions can often be improved with a deeper understanding of the problem or task desired (or of the target system/environment)

    Disclaimer - My list might be more relevant for software engineering than just “hack ‘n slash” programming.

  • Good article.

    One error I’ve seen managers make (myself included) is finding a programmer that is good in one area and then later trying to fit them into something entirely different. Crossover is possible, but the programmer has to be interested in the new area and self-motivated to explore it.

    E.g., good in compilers != good in computational linguistics, even though on the surface they may look related.

  • I agree with Pp (way up there). Although I agree with some of your assertions, I have found in my experience that many great programmers are not necessarily great employees. I have worked primarily for corporations that deal with sensitive data, and they have all been very hesitant - even somewhat apprehensive - about implementing the “hottest” technologies. Often times, security holes or other vulnerabilites are only truly exposed until after a product has been out for awhile. So it is important, in my opinion, to have a solid foundation in the basics, like VB, Java, C++, or even good old ASP, HTML or JSP. Sure, it’s great to know Ruby, AJAX, and all the hottest stuff. But I can tell you from experience that those technologies are not to be found in banks, hospitals, insurance companies and other large organizations - some of which are still running Windows 2000.
    The other major objection I would like to voice is your point that “most average or poor programmers started programming at university” - I don’t think I need to beat this dead horse, as several others have addressed it. The best 2 programmers to come out of my class in college were myself, and my buddy - both older guys just learning to program.
    And the reason we were the best is my final point : to me, the one most important quality of any programmer is DEPENDABILITY. When given an assignment, is it completed on time, and as requested? Many of the young guns I went to school with were avid hackers, and very talented. But they could never complete anything on time, or as requested - if it wasn’t something illegal, or “fun”, they simply lost interest. It doesn’t matter how many technologies a person knows, or that they programmed their first OS at 10 years old, or that they cracked their own iPhone - in the business world, if you cannot be depended upon to deliver requests on time, and within required parameters, you typically don’t last long.

  • Well, I am happy to know that I am almost a good programmer ;)

  • This is the first time I ever read an article that assumes the meaning of “smart” is great social skills and the meaning of “dumb” is lack of social skills, am I losing something?

  • You obviously don’t have your SCJP to say that it is completely irrelevant.

  • Daniel is someone who makes stupid decisions.

  • crap, crap, crap. I hit every one of those points. Self driven learning, always exploring new forms of technology and then applying it to the current business, etc. etc. Maybe if I hadn’t been so good, my hands would still work and I wouldn’t be living with constant pain up to my elbows. What’s ironic is I left my father’s rigging business (machinery moving) because I saw so many people around me losing fingers, damaging their limbs and back etc.. and I wanted to go do something where I wouldn’t be injured on the job. Since I had been programming in high school, I thought hey, this is not a bad career. You work indoors, you’re not covered in grease, you don’t breathe toxic chemicals and you aren’t going to get injured by heavy machinery falling on you.

    Ha.

  • […] (titta så fint jag anger källan) hittade jag en lång lista på vilka egenskaper som utmärker en bra respektive dålig programmerare. Jag har märkt för min egen del att bredden håller på att avta lite för mycket. Kanske dags […]

  • I slightly disagree with one bullet point:

    * Happy to work with whatever technology you’ve picked, “all technologies are good”

    I think that you need to discover what motivates the programmer.

    If the project’s goal motivates the programmer, then she might be happy to use any (reasonable) technology to reach that goal.

    If the programmer is coming from a different platform, she may choose not to have a strong opinion about which particular technology to use.

  • WOW! Sorry to have arrived at your article so late! I really can say much of what you have written sounds similar to what I do when sourcing/reviewing/hiring new candidates. I think that your bulleted list gives clear enumeration to what we all should be aware makes a good startup candidate, period! :)

    Love the info and perspective. I’ll be relying on this piece from now on!!

    Thanks and take care,

    Steve

  • about new vs old technology

    In programming-land I am a rare case. I like to take on ‘challenges’ on old software code that other people created, modernize it where necessary and make something useful of it. In my company people always are complaining when some other colleague created something, left the building and they have to figure out what and where, however I do like that.

    It gives a bit of a base, you’ll have to work around things that are weird/hacked in, etc. The fact that I do like that, makes that I may become stuck in “Old Tech”, like java 1.4 whereas java 1.6 and such are more current. That’s where home-hacking comes in; the company is in web-space, so at home i try to develop a suite of gui applications, etc.

    And trying to learn a programming language you do not know each year, in a few weekends, is always a very nice experience I my opnion.

    Nice article, and nice discussion afterwards, which amazingly is still going on.

  • That’s real good insight into the process of hiring. Except maybe for one thing. Before you start interviewing people, you as an employer need to cut the list of applicants short by about 90 %, unless you have unlimited time. And most of the criterias you mention do not show up in a CV.

    Still, a one-in-ten chance you happen upon a great programmer!

    But really, what the CV-bound hiring process does is it swings the pendulum at least 60-40 in favor of people with great communication skills. And if you know your DISC, you’ll understand that is not the main trait to look for in an employee with a problem solving profile.

  • @gordon

    how many of those “mid-tier students” go onto become great programmers b/c of their work ethic and desire; whereas, how many of those “great programmers” at school, who do not have this work ethic/passion, inevitably flame out and end up hawking some “mid-tier students” tech in pre-sales calls???

  • I don’t get the bit about “started programming before University”. It doesn’t make any sense to me. Your other points are equally unreliable.

  • “I usually spot good developers through one easy test. I mention a problem that we are having to them. I look to see how they approach it. If they start breaking it down and asking questions that get to the heart of the matter then they are good.” — Raymond’s post, Jan 11

    And if they offer a solution, they are worth hiring. Which is how my oldest son happens to be writing code at FaceBook.

  • I think your comment about the “exotic” ruby libraries is completely wrong, and perhaps leads to the problem with your argument. Writing a website is simple. Any douche can do it. Rails code is so simple that even NON programmers can do it - so it shouldn’t be held up as a sign of greatness.

    When I look for great programmers, I look for the following:

    1. Fluent in lisp or prolog - there is no prolog/lisp programmer who cant pick up ROR in an hour.
    2. Understand to at least an undergrad level another field (soft sciences).
    3. Can design complex software (database indexing, data mining, distributed memory) with

  • You’ll catch flak but this is all essentially on target. In particular, you’ll catch shit about the ‘formal qualifications’ thing. But it’s closer to be being true than not.

    Most non computer people don’t realize that coding is far more of an art than either a science or a craft, much like painting or writing, I don’t think you can teach someone to be good at it. I think you need to be ‘wired’ a certain way to be good at it. In other words, born with the talent.

    As such, hiring is difficult, it becomes almost more of a ‘tocuhy feely’ thing.

  • I think it’s all about time. The best programmers can do the most work in the least amount of time with the least amount of errors. The gurus can do that and make it easy for other people to understand. “They make it look so easy”.

  • Programmer and former software development manager
    January 11th, 2008 at 11:41 pm

    I think you forgot couple. These come to mind:

    Pride of ownership in one’s work.

    Awareness of quality and how to produce it.

    Attention to detail.

  • oops–

    with

  • Thanks for making my job search that much harder - the fact that I’m not one of those guys who started programming before college I’ve lost my confidence.

  • wow you spelled recognize wrong, nice job.

  • When I went for my first programming job, they gave me an aptitude test. Good programmers I met in the office had scored above 95%. Ok programmers scored above 80%. We learned an archaic version of BASIC for ten years! It made me a bored expert in this particular language.
    When I taught myself vbscript in my spare time I quit and got into web development. As a programmer I can usually hand some code to a potential recruit and ask them to modify it to do such-and-such. Good programmers usually make efficient changes in elegant code. I’d say it takes a good programmer to spot this trait though.

  • OH! And, the resume/CV is not the ONLY thing one needs to be using when picking the right person, as you’ve clearly pointed out here in your post. In fact, any hiring manager and lead/architect should be spending their time TEACHING THE RECRUITER and HR rep how to find those diamonds in the rough so you spend less time reading those friggin’ resumes yourself, ya know?

    Get to the best, the fastest, and get crackin’ on creating your product. Forget the “know it alls” ’cause they’ll just end up being trouble. Those that stay monocular, force your development effort into a single path/solution … ugh … seen that too many times …

    However, those that can shift and see the shift make the best team members.

  • I just did a search on this page, and the word ‘algorithm’ doesn’t show up. Funny.

  • Being opinionated is good. Taking the advice of said opinionated programmer… not so good. Yeah they make good programmers, but just watch out for that line between commited and should-be-commited.

  • You kinda missed something fundamental here. Something, that I’ve seen time and time again…The programmer with tons of different stuff on his resume may very well be just some guy who likes working on different things and never actually gets ‘good’ at anything. The proverbial: Jack of all trades, master of none. For many projects, this may well be ideal, fine, but dear [insert deity here], have the sense not to hire someone like that for a low level, high performance, depth of knowledge kind of position! Think about what actual skills are required to do what you’re planning. I can see someone with a ‘great’ resume for a high level web-programmer (someone who IS a great web-programmer), but you can tell by what’s missing that it would be suicide to give them a job where careful memory management was needed. Most of them have never even thought about memory management before, I’ve met more than one who didn’t even know what memory management was aside from being something handled by the VM! Damn sure you’d never put someone like that on OS work, or driver development, or embedded systems, etc… Here you are trying to build a real-time, massively distributed, super low latency simulation package, and some new-tech fan-boi can’t figure out why it’s a bad idea to do the comms by packing up and parsing out a bunch of XML passed around by http. They say: it’s FAST it only takes a hundred ms or so! Then you have to try to get them to understand why that’s complete dog-shit when you’re trying to run at the fixed 85Hz gen-locked to half a dozen displays. Then you’ve got the hobbyist/ gamers who actually believe they’re seeing 150 frames per second on an LCD that only refreshes at 60Hz…

    You want a ‘good’ programmer? Make damn sure you’re talking to someone who ‘knows what they don’t know’.
    i.e. someone who understands the limits of their knowledge.

  • I know exactly what you are talking about! I’ve some friends who are just like that and are just brilliant technologists!

    I came to study at the university in the US from a third world country. Growing up, I didn’t have too much access to computers and video games. And I didn’t come to study computer science. So you could say I got a very late start and do match some of the criteria on your list of negative indicators. Being around my friends over the years, I personally know how it feels to be “less” competent in a sense of how much effort one has to put in to get on the level of these guys who have had a long head start and have become “natural” at it.

    [quote]
    #4 : Hidden experience

    … 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.
    …[/quote]

    For me the “coccoon stage” has occurred at my jobs - trial by fire so to speak :) These weren’t very pleasant moments. But coming out successfully in each has given me confidence in my abilities as a programmer. I do wish I had more mentoring guidance - a programmer angel - who could patiently teach me the tricks of the trade. But such people do not exist and may be counterproductive to one’s determination to succeed.

    These experiences have laid a foundation to a degree where I feel much more passionate and have the confidence of somewhat of an “equal” to start my own projects. I have recently got together with few programming friends to start our own software company on the side. This is happening 10 years later after coming into this country!

    To summarize from my own personal experience to get to
    #1 : Passion, #2 : Self-teaching, #5 : Variety of technologies points, one needs a lot of dedication, help, network of close “super programmer” friends, and a bit of luck to get started and succeed. I’m still no where near these guys but I do have the foundation now to get there. I think building this foundational knowledge and confidence are the most crucial state to strive for people in my category. After this, everything opens up (or so it seems exponentially).

    On a side note, there is a danger in putting such lists out for some business guys to use as a “standard” to make their hiring decisions on. For one, it takes that opportunity out of people who are trying to “break-in” into the practice. It’s hard to be passionate and self-taught if one doesn’t get these breaks that one needs to get started; after all, there are bills to pay ;)

  • I disagree with this list too.

    It ignores that some people are introverted, and just don’t talk easily with strangers. Introverted people, in fact, are prone to be better at focusing on a task.

    It seems to assume that passion is a good indicator of programming talent. While that’s just not true, I’ll grant that NOT having passion is a bad thing.

    Presents inability to use whatever tools (tecnologies/methodologies) are available as a good indicator of talent. In fact, on _my_ list I’d expect good programmers to consider inadequate tecnology a challenge to their skills.

    And, finally, consider a lack of interests outside programming as a good thing. In my experience, good programmers are usually interested in a wide range of things, and might spend off-time playing RPG, doing amateur archeology or, perhaps, fencing. Or, perhaps, contributing to Linux.

    On the other hand, there are people who are obsessed with programming, completely passionate about it, always learning new technologies, regularly working on pet programming projects and who, in fact, suck at programming.

    Your list is intuitive, “feels” right, but I can easily find false positives and false negatives.

  • So, I have a question: How do you spot a company that employs people who care the least bit about these attributes? I hear from recruiters all the time, but all I hear from them are about companies looking for specific things: OAS, Hibernate, Vignette, WebSphere 5.0, and on and on. It would be cool if companies were interested in finding people that not only know a lot of those things, but also have the capacity (not to mention the desire) to learn something new! It’s like they’re looking at a rack of clothes, trying to find a shirt with just the right color, and nothing else will do.

  • – to kelly –
    You’re right, and that is quite often the fault of the recruiter/sourcer! And, if the company/hiring manager is not in control of those in the field PRESENTING the right candidates, you’re the wrong colored shirt that just doesn’t fit …

    It’s a messy, messy, situation out there … I love this post ’cause it provides everyone some good solid points to consider. And, that goes for the one on the hiring side and the one on the looking side …

    Steve

  • Couldnt the list apply to most disciplines (atleast technical ones)?
    I think of folks I know who are great mechanical engineers, electrical engineers, embedded engineers, software engineers, manufacturing engineers, mechanics….All them them seem to fit these criteria.

  • It’s a lot about problem solving skills! If you understand this, then you are mostly there.

  • I think that formal qualifications, taken after one has graduated from school, tend to be counter-indications. If someone has things like a long list of classes they took to learn java, I immediately conclude they have no hope. A working professional who can’t just pick up a new language just by toying with it may be an okay programmer, but they’re absolutely not one of the greats.

  • I find it interesting that “Java, J2EE, Ant, XML, SQL, Hibernate, Spring, Struts, EJB, Shell scripting” is mentioned as a bad example given the time needed to learn all of these i mean its specific but its freaking huge area and if you want to be good at all these technologies we are talking about 2 year+ experience.
    What i hate the most is a cv where a person has 1 year of experience with a language and grates themselves 5/5, bullshit noone learns all the patterns, speed optimisations, thread usage, ide/tools and the api in a year while working in a company.

  • - A passion for programming is a fine attribute, but people demonstrate passion in many ways, not always through effervescent chatter.
    - My experience of over 20 years as a programmer is that smart people are not always great programmers, but stupid people rarely are (great programmers). I’ve known very very smart people who wrote garbage code.
    - Not all Programming is equal. I would not necessarily hire the same person to program a DSP as I would to write a distributed web application. Aside from the technical differences, some people are more suited to certain types of programming.
    - I look for people who can think, and can think on their feet. I am just as interested in “why” someone takes a certain approach to a problem. If they can intelligently and logically justify a solution, that goes a long way in my book.

  • As for the talk you ear off bit, there are programmers that will “write” pages and pages to you more over than any amount they’ll actually “talk” to you. This is a simple explanation and not a sign of a bad programmer. There are just visual people out there. They are not auditory. Doesn’t mean they can’t hear or not talk, just their social skills and learning skill have more breadth on the visual side. I’ve explained it by the left-hand/right-hand analogy. Call your right-hand “Auditory” and your left-hand “Visual”. Now pick up a rock and throw it. How many people pick up with their right hand? We know most do. Ok, now use your other hand to pick up the rock and through it. Can you manage to do it accurately? It’s uncomfortable — isn’t it! How do you think a Visual person feels like in an Auditory world? Gotcha, didn’t I! =)

  • I run a software house (staffplan.co.uk) and started out as the only coder (now I am not allowed to touch the code). I agree with most of the list (I would never employ someone who didn’t have a machine the used for development at home) but I think there is a huge ommission: the best programmers are happy to steal (legally) code snippets or resources from others and are able to quickly and accurately evaluate which library / component they are going to use.

    By the way we are recruiting an ASP.NET / C# programmer in South London at the moment - and we do employ people who care about these attributes. (Don’t judge us on our website - we are too busy to re do it).

  • It has certainly been my experience that the best programmers I have worked have these positive qualities.

    One thing that proves effective for me when interviewing a candidate is to ask them to “describe any system or design that you have implemented that you are proud of”. I look to see if they can effectively communicate the core of the domain and their solution. I then create a new requirement for their domain and see how well they can incorporate it. This is one of the best indicators of their ability to work with business requirements that change over time. The best ones will find a way to model the new requirement, or re-factor elements of their design to meet it.

  • One more indicator: The very best programmers I’ve known (and in forty years, that’s quite a few) all could play one or more musical instruments well.

    Also, none of them would know what “1337″ means.

  • Good article. Need to cross it with another item - “How to recognize a good worker” (or employee). Try to optimize both but don’t let either one get very low.

  • This is so juvenile….so immature…i guess this guy has not even completly programmed his life….still figuring out what to do with it….

  • Wow, hit number two on Google for keyword “recognise.” Though, in America, we probably wouldn’t be able to find the page, since we wouldn’t recognize it. :)

    Seriously, great article. Couldn’t agree more.

  • Careful to correctly identify the “sees it as a day job” crowd. I got my ‘day job’ so I could get serious about my ‘hobby’ and be paid to do something really cool, while clearing an immense amount of room on my plate for a variety of other hobbies, a full social life, and keeping in touch with colleagues.

    Not necessarily bad reasons to keep work, or the specific work that I do, in its place. I still indulge in lots of technical experimentation, it’s just that now I get a guaranteed healthy dose of what I like, so sometimes I spend my time having fun in other ways, and becoming more “socially enabled” ;)

    :wq

  • http://en.wikipedia.org/wiki/Overconfidence_effect

  • Love of learning is nice, but from a programmer who works in the trenches, my view is this. If you have “exposure” to dozens of programming technologies across a broad spectrum of programming technology spheres, I would contend you won’t be able to hack it in the real world.

    Real experience comes from digging deep into one or two programming technology spheres and specializing in them. Anyone who expects someone to have expert level experience in .NET, Java, C++, and PHP is out of their mind. I laugh when I see it on job posts. And real programmers wouldn’t want to. We debate over minutiae, quarrel over our preferences. Linux vs. Windows. VB vs. C. Ajax vs. Ruby.

    There is simply only so much time in the day. I have programmed long enough, where it’s only a matter of syntax to me, and I am capable of learning any technology. But I choose not to. I choose to specialize in that which I am most passionate about. That is not an indication of being a poor programmer, but rather, it is the reality of a focused programmer.

    That’s what it takes to really know the nitty gritty. The nuance that is never ever found in a book. Hands on experience is what produces a reliable end product. Undocumented “features” abound in the programming world. Debugging endless permutations over the years to truly learn what delivers the best performance, not going by one dude’s blog posting about his particular scenerio.

    I would contend, rather than broad exposure to a variety of programming technology, a good programmer is a specialist in what he does, but posseses a broad interest in other areas of life. A good programmer is often a rounder, individual. And if you’re lucky, he has a sense of humor too.

  • […] Nice little blog post on “How to recognize a good programmer”: http://www.inter-sections.net/2007/11/13/how-to-recognise-a-good-programmer/ […]

  • I love it. Great article. Two things that hit home were that first the cliche that great programming and social skills are mutually exclusive and the “cocoon” stage. You really hit on a point here that I could never put into words but have tried to ask people about in interviews. If I use that term in the future, I will attribute you.

    Cheers,
    Jason
    San Diego, CA US

  • If your entire need for software can be satisfied by a couple of coders, then the factors you identify are sufficient. However, if you’re trying to assemble a productive team of developers who can understand user requirements, develop a resilient architecture, produce a high-quality implementation in a predictable manner, and do so in a sustainable fashion, then there are a few other considerations.

  • The list is mostly OK. I’d bet $10 that the author is a fairly young guy. As a not-so-young guy who works with a number of aging good programmers (yes, they work on MAINFRAMES, and they have a superiority complex about it), I can say that the enthusiasm for new technologies wanes with experience. It isn’t that I don’t like anything new, but I’ve seen enough things come and go (I think I’ve finally sussed out why CORBA failed) to see the virtues and flaws in a technology when it hits. I’m also at a pay point where the focus has to be on ENTERPRISE. If it can’t scale to hundreds or thousands of boxes, if it can’t handle hundreds or thousands of requests per second, and if it can’t handle millions of database rows with tens of thousands of tables, I’m not going to suggest it to anyone, lest I be laughed out of the room. Not many bleeding edge technologies are going to meet those criteria. I may futz with something on my own time, or use something less-than-bullet-proof to write a personal tool, but I’m not going to bet the customer’s data/application on it.

    I’ve also seen some surprisingly odd reasons for technological “success.” Perl will always be with us, because we have CPAN — if you want it done, someone, somewhere has done it in Perl and put it on CPAN. C++ is going to be around for a long time, partially because of BOOST, and partially because, due to an inability to say NO to any feature, it is now a veritable Swiss Army Knife of software tools and technologies.

    Anyway, my point is that I might read up on Rails, and stay conversant about it, but I’m probably not going to waste a heck of a lot of time on it until I can actually use it on the job. And I sure wouldn’t suggest using a technology with which I was unfamiliar (I would familiarize myself with the bastard first).

  • […] Uncategorized — Sonia @ 2:55 pm KDan (via Slashdot) has written a really good article on how to recognise a good programmer; I think many of his points also apply to system […]

  • “Started programming at university” - is one of the most out of place indicator. Some people get hands on a computer only in university and even if the person worked with computers before, it means nothing. I happen to work with a person who IS a good programmer BUT he started programming only in university, where he got by literally flipping a coin for economics vs IT.

  • Hiring good programmers is a great topic, and all your points are valid. Of course, one has to have some experience to know how to apply them!

    I started programming in ‘58 on an IBM 650 in “Bell Language”, long before ‘C’. I have never been a good programmer, but I’ve worked with quite a few. (we won’t talk about when I got Ray Kurzweil, then a college student, removed from a project).

    High on the list should be ability and willingness to learn. There were people long ago who thought if they learned Cobol, they would be set for life! (Not!)
    I still do programming, both for fun and for pay, because I enjoy it. Had to finally learn PHP this year!

    tlw

  • Most of the comments here actually try to define what is a good programmer, rather than trying to recognize if a potential candidate is a good programmer or not. Obviously, these two are different things.

    I agree with most of the points made in the original post and they indeed might be very effective in spotting good programmers. But they are not carved in stone either.

  • The one common factor I have found amongst all good programmers is the ability to clearly understand the business problem they are trying to solve. All too often I find the “passionate” programmer is more interested in the technology they are using and enhancing their CV rather than the focusing on the problem they have to solve.

  • […] about this issue as I read this post about how to get hired by Google. Then, along comes this terrific list of criteria is about screening for good tech hires. Hint: what you want is not printed on the resume. I am sad […]

  • I’m a rural white American Tech Architect whose job involves interviewing Asian contractors for 6-month jobs. After the first hundred interviews, one learns not to equate Nebraska Anglo eloquence with intelligence.
    Programmers who blindly champion tech products while having no practical experience with them, are seriously deluded by their self importance. Mostly, they’ve been treated as the golden child by stupid business managers and have now resorted to breathing too much of their own air.
    The programmer you want will always approach every interview with humility and curiosity. When you start hearing that ridiculous sermon about their solutions to well-understood 1995 problems you can hang up.
    My favorite comment from an interview in the last 4 weeks… “in a common web application, about how many clean lines of Java do you write in a typical day?” His answer… “usually, if I have an 18K line program that is due tomorrow, I can write 18K lines per day.” I hired him.

  • Totally right on the mark. I have a hard time find good developers period but especially good developers to work in an older framework (perl). Any advice?

  • IMHO, this is what makes a good programmer:
    - knows algorithms and knows what complexity is
    - knows object oriented design and patterns for real
    - C and C++ and have good knowledge of an assembly language
    - a little math doesn’t hurt
    - have hardware knowledge
    - knows a little bit how an OS is working under the hood; kernels knowledges are great

    I don’t agree that is absolutely necessary to start programming in infancy in order to be a good programmer. This is crazy.
    To elaborate:
    - How can an 10 years child understand the difference between an AVL tree and Red Black tree. Can such a child implement efficiently and understand the theory behind a B tree. I doubt. Can a child really understand graph theory ? It would be really amazing I think ? Can a child understand exactly how TCP IP works ? What about cryptography and prime number theory ? What about real OS internals, like the linux memory manager os scheduler ?

    Get real and make the difference between professional programmer, infantile programmers and hobbists which are creating yet another web site or VB/Delphi interface just by using a wizard.

    Good algorithm design is hard. Good OOP design which scales to big application is also hard. Is not for everybody. And is not for kids also.

  • What is this BS that if you can’t have a decent conversation with someone in a “relaxed social context” then they probably aren’t a good programmer? Does that mean some people with Asperger’s or mild autism, who may write elegant, functional code, are lacking something? Jeeze…

  • Hi Daniel,

    It’s a very good list. Though I disagree on one of the bullet points on your Negative indicators. This one: Started programming at university

    In my own case, I started programming in the university because…

    Computers were virtually unknown in my home country of the Philippines when I was growing up. I’m not saying that there were no computers in the Philippines during my high school days, but what I mean to say is that because I was educated from a public school, there were no computer, not a single one accessible for me to use. During my high school days, computers were only affordable by the rich. I remember in school, being the managing editor of our school paper, we had to use a typewriter to stencil our articles for publishing. Imagine that.

    When I went to college, on scholarship, that’s when I discovered the mighty computer. Oh what a joy that was everytime it’s computer lab time. The very first programming languange I learned was turbo basic. Imagine, my group was the only one in my class who ever finished our class project. I was the lead, and I architected and wrote a game. The game of ‘mastermind’ complete with a graphical interface in monochrome.

    When I graduated and got a job, guess what I bought first? A computer.

    I have been a computer enthusiasts since.

    Now, in case you’re wondering, I’m now in the United States and I professionally program in perl and C#.

    So, I guess, when you are interviewing for a potential candidate, you might want to consider which country they were educated in.

  • Pssst, it’s spelled “recognize “.

  • I have problems with #5. Knowing about new stuff is good but I have worked with some programmers that tinker with new technologies so much that they are unable to get there work done. A majority of programming is repetitive / boring whether you use a Rails or not.

    I think you are missing patience in the equation. Sometimes you need to rewrite the code you wrote yesterday for a satisfactory outcome tomorrow. This can be frustrating and demoralizing. But figuring out how a person copes with these small failures is good too.

  • Have to disagree with parts of this list. I don’t care about a good programmer. I want a good software engineer. Someone who can write maintainable code. Someone who can correct a bug with minimal impact to the rest of the system and who can produce quality tests to verify the change. Someone who can use the CM tool to its fullest. Someone who can write supporting documentation that is correct, complete and maintainable.

    Not everyone has time to be “passionate” in their spare time. I used to be that way, but I have a family. I now play my guitar more in my spare time and do less coding at home simply because I need something different after spending all day at work developing. So not tinkering in your spare time doesn’t make you a bad programmer. It’s all about priorities.

    Regarding programmers who refuse to use new technologies. That shouldn’t be taken as a negative. If I don’t want to learn C# and I want to stick with Pascal, that’s my perogative. It doesn’t suddenly produce a huge neon sign over my head saying “don’t hire me!”. It may be that Pascal floats my boat and I think that C# & .NET are utter crap.

  • […] How to Recognize a Good Programmer How to recognise a good programmer […]

  • […] Inter-Sections » Blog Archive » How to recognise a good programmer (tags: programming business) Published by ichen January 12th, 2008 in General […]

  • These are actually much more indicators that someone is a “self-taught” programmer rather than “good / bad”.

    In fact, the last lines of point #2.. “Tells you that you MUST use a new technology even if he doesn’t know how to use it yet” is almost a 100% guarantee that the person is completely incompetent, professionally. No one in their right mind should hire a person who does that habitually in *any* field. That sort of behavior is exactly what makes Dilbert’s pointy-haired boss the butt of the joke so often.

  • what is CV?

  • Lordevin J. Gould
    January 12th, 2008 at 2:45 am

    I always ask candidates to talk about when they learned to program and their ‘favourite’ programming languages to see how th