I just came across this post on how to recognize good programmers and it really struck a chord with me. As a freelance contractor I read the post from two perspectives: as someone whose skills and experience are constantly scrutinized and as someone who applies that same level of scrutiny when looking for developers to work with.
In today’s market for freelance Flex and Flash contractors there are a lot of good programmers out there, unfortunately there are many not so good ones also. Lately I have been called in for clean up duty on Flex projects where it’s readily apparent that a not so good programmer was involved and made a mess of things. The client is left scrambling to find someone who can fix the mess and get things on track and operational.
Here’s a quick recap of the positive and negative indicators when evaluating programmers.
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
Give the entire post a read, it’s very insightful.
Interesting article. I think a lot of the points you make in terms of ways to recognize a good or bad programmer are valid, but there are a few I do not agree with. For instances, being involved in personal projects is great, but not every developer has the time to do this, especially if said developer is off doing some of the other things you mention such as learning new languages, perhaps going to school, or engaged in the many activities that people with jobs, families to support, etc. tend to engage in. There are a lot of good developers who either have no time or have no desire to do this type of work.
Also, I do not think it is so bad to only be focused on one or two technology stacks (you mention Java in your example). Java has multiple complex technologies, frameworks, servers, etc. tied to it and to say that someone who is dedicated to (for instance) only Java is a sign of a “bad” programmer is sort of short sighted. It’s like having a heart problem and preferring to see a general practitioner instead of a cardiologist because the general practitioner probably knows more about your body in general. Sometimes you just need a specialist. Furthermore, some technology stacks such as Java and .NET are huge and the more a developer knows about it the better. I feel that particular argument is more relevant to scripting languages/frameworks such as ColdFusion, PHP, Ruby, ActionScript, AJAX/jQuery, etc. In this regard yes, I totally agree variety is the spice of life, learn as much as you can.
Lastly, in terms of a developer who is happy to work with whatever technology the client has picked. I’m not sure about that one. There are instances where the client says you will use “X” programming language if you want to get paid. The programmer is welcome to suggest alternatives, but if this company has done research or is even just adamant about a specific technology, as a developer what are you going to do? Keep complaining about the assigned programming language and keep pushing your solution? Not if you want to keep getting paid
. Last I checked, developers rarely have the final say so in the picking of technologies. That is usually up to management.
Overall, I liked your article and I think there are some valuable points here, but what you mentioned should be used simply as a guideline and I hope no one takes this stuff as hard and fast rules to being a good or bad programmer.
Thanks,
JW
I am sorry but I find this entry such nonsense that i regret i accidentally got here (and ill never return i guess)
I know probably just as many really good and talented people who share many of the negative indicators, and probably as many people who program at home as a hobby, but never finish a single project with “icebergs” of crap projects.
Sorry but this is in my opinion waste of internet space
What’s wrong with “Learns new technologies in company-sponsored courses”??
@Henry, I think he means that if your ONLY source of learning is through company-sponsored training. Yes many of us learn this way, but if you’re any good (and I know you are), that won’t be your only way of learning.
@Derrick, you wrote a great article, best I’ve read this week. I would add to the list something about books a candidate has read.
The problem with it all, however, is this is how you find a great programmer. What you don’t find is a smart person who can quickly learn to be a great programmer. That’s fine, if you’re not in the market to help develop someone and are OK with paying top dollar, but my own story is like that. I was asked some of these questions a few years back, and thoroughly failed every test, but with a little encouragement and a good book, pretty quickly turned into (IMHO) a darn good programmer.
In short, you’re right, but I think it goes deeper.
So unless you let your life, in and out of work, be dominated by programming and development, you’re a bad programmer?
The one about ‘Started programming at university’ is especially elitist. I started programming before college, but I know a few fine programmers who wrote their first ‘Hello World’ in CS150.
The positive indicators seem to be far more accurate (and more importantly: fair) than the negative indicators, which are a bunch of apologetic nonsense designed to boost the egos of developers, especially those who happily live the stereotype of a bunch of misunderstood misfit toys who don’t need someone telling them what to do.
You can have the most brilliant programmer on the planet who has been writing code since he was three, and he is *utterly worthless* if he can’t bear to accept the direction and decisions of others.
I’ve noticed a lot of developers tend to think of themselves as rock stars, and attitudes as in the article you quoted only help inflate such lofty opinions.
Love your work, don’t live it.
@james agreed these are not hard and fast rules and deep knowledge in a single technology stack is very valuable, if it’s the right stack, but knowledge outside of a single stack is always a good thing. Jack-of-all-trades is not always a good thing but a knowledge of many things doesn’t hurt.
@henry nothing wrong with company sponsored courses but that shouldn’t be the only way a person learns, there is much to be said for self discovery and self learning.
@kyle I don’t think your life has to be dominated by programming, personally I prefer a good balance, too much of one thing will burn you out. I’ve worked with uber coders who while great coders were not great to work with and focused so much on code they lost sight of the problems they were trying to solve and ultimately became an anchor on the projects they were involved with. I also know some brilliant book smart C.S. grads who programmed for years before their formal education and for whatever reason are useless in the real world of programming. I don’t think all the negative indicators are equally weighted, especially the university and tech stack ones.
For what it’s worth I didn’t write the article, as I stated at the start, I just came across it and found it interesting and agreed with most of what the author had to say.
Love it – your list pretty much matches what we look for in a programmer. If we had to choose between 2 people with equal skill sets, we will always choose the one with side projects and other items on your list. We want someone that can’t get enough of what they do. Don’t have enough TIME? Great programmers FIND time to pursue thier love. Also, many of the greatest programmers I’ve worked with don’t even have a college education.
This is the biggest pile of B&**%^It i have read for a long time. A good programmer does not have to live programming, in fact i would say its VERY important to have a life away from the computer. You seem to be saying only someone whos slumped in front of a monitor 24/7 can be a good programmer. I’d say get a life.
Good post, but I think the #1 positive indicator is passionate about continuous learning. This trait will help them get the most out of any technology, help them to sound intelligible when conversing about it, and help them become diversely knowledgeable. Age at which they started programming is important — earlier the better — but to me not as vital.
Only the cubicle drones seem to be offended by this post.
So I think I would add a word to the title: “How to recognize a good FREELANCE programmer”
If your goal is to be a good ‘company man’, you can still be a good programmer within that sphere, in which case the criteria are completely different.
The only thing that you’ll ever need as an indicator for good programmers (or as a matter of fact any other type of employee) is one thing: Passion! the other points above are more or less worthless. Passion is the only that counts to do good jobs (experience and skill too but that can be obtained by good as well as by bad people).
Give a good programmer a good job and he will improve it!
Give a bad programmer a good job and it will stay at the same level (or getting worse).