导读:
Tuesday, November 13th, 2007...1:28 pm
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
mustuse 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 raycastingengine 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: varietyand 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.
234 Comments
Filed under Business, Technology
234 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!
:-)
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.
suffering fools
January 11th, 2008 at 9:45 pm
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! :)
David Emery
January 11th, 2008 at 10:26 pm
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.”
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
Michael E. Burke
January 11th, 2008 at 10:27 pm
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.comis 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
Merijn Vogel
January 11th, 2008 at 11:30 pm
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.
James Priestley
January 11th, 2008 at 11:34 pm
“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
Mingo-Jones
January 11th, 2008 at 11:47 pm
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
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 […]
clicktician
January 12th, 2008 at 1:13 am
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 they’ll fit.
For example if someone tells me: “I learned to program using direct hex input and z80 assembler on a Magnavox Oddessy2 console. Graduating to Basic, Action!, Forth and 6502 Assembler on an Atari 8-bit… but my favourite programming language is still Smalltalk… which is why I like Macs, because Objective-C is a good hybrid…”
That’s a really good sign. Especially if those old technologies mean the person was 8 at the time.
Favourite computer science course is also a good one:
“Compliers - I built a full C++ complier with multiple inheritance and optional type checking in Smalltalk… and then rewrote it and recompiled it in itself just for fun!”
Is a winner.
If someone says “Java” (or any other programming language / technology name that’s one of the job requirements) and doesn’t elabourate - no way.
jerryfromhouston
January 12th, 2008 at 2:46 am
Mostly Good Essay.
I’ve worked with some fine developer’s who first tasted IT at university. That met all your reqs except that one.
Passion! As it is in every profession.
Keep writing.
I think I disagree with much of this list, but I guess it depends if you’re looking for programmers or software engineers. Programmers can be brilliant solo hackers, but software engineers are what you need on a professional team.
I think good software engineers care about processes and methodologies more than technologies. Honestly, once you’ve been developing software for a while, learning a new technology is trivial. But great software folks spend a lot of energy thinking about how they and their teams work.
Do I care if somebody knows about Rails or LINQ or whatever’s the latest great thing in the Java world? Not really. But I do care if an applicant knows about unit testing (ideally TDD), continuous integration, or project management (Agile, PMP, CMMI, something!).
At my current employer, the mantra is Attitude >Aptitude >Skills. And I think that’s the right philosophy. I’d rather work with somebody who cares about writing high quality code, even if they’re not suited to the most complicated tasks. And I’d rather work with somebody who can and wants to learn than somebody who knows a lot but is stuck in flawed, obsolete approaches to solving problems.
I can teach you skills. I can accept that you’re merely smart and not an uber-genius. I have no use for you if you’re not interested helping our team mature and consistently produce results that are valued by our clients.
And honestly, unless somebody is fresh out of school and has no real-world experience to talk about, I think logic puzzles are just about the dumbest interviewing strategy, barely nudged into second behind f%#ing algorithm questions . I have ended phone interviews, because the interviewer insisted I answer ridiculous puzzle questions. And if somebody asks me something like how I would implement a bubble sort algorithm in X language, I always answer, “I would use this website called Google to look for an existing mature and well-tested open source sorting library.”
If somebody has years of experience to talk about, please don’t ask random puzzle questions and please don’t ask them something they could look up in a matter of minutes. It’s insulting. Their intelligence will shine through when they talk about the projects they’ve worked on.
I would find this article much more believable if you “learnt” to spell.
I really enjoyed reading your essay, as I agree with most of it. Of course the point you make in the end saying that list doens’t prove anything at all is quite important, but I would tend to believe this list is a good test.
I will not give a relevant opinion here as I still am a student learning programming, but I recognized myself in every part of the list and I must admit it gives me additionnal reasons to believe I could eventually become a great programmer :)
By the way to answer to the question asked above : a CV is a Curriculum Vitae, also called a resume, but I guess a little bit of search over the Internet would have helped as well.
Especially the ‘hidden thing’ is really nailing it.
Great article. I especially agree with your first point about having passion for programming. I work on my own projects every single day (some of which I blog about). It’s just fun; I’m not sure what I’d do otherwise. I even write apps when I’m on vacation from my regular job. I know I should be relaxing, but for me learning new things and making my computer do cool stuff _is_ relaxing.
If I instantly became a multi-millionare such that I didn’t have to work anymore, I’d still write programs. And speaking about programming and vacation - I just came back from having two weeks off, and for some reason I had the inclination to take Quake 3 source code and start porting it to managed C++ .NET VS 2008 (something that I’ll be posting on my blog within a week or so [gregs-blog.com]). I already ported the Quake 2 source to the same platform back in November, so naturally, Quake 3 seemed like the next thing to do.
I’m also ultra passionate about 3D graphics programming. Like you, Daniel, I started learning how to program via writing a ray-casting engine and afterwards quickly started work on an arbitrary 3D, six DOF, polygonal graphics engine which took two years to write and ended up looking identical to Quake 1 (mine was 100% software rendered because we didn’t have 3D cards back then, 1994 - 1996). It’s funny because when you talk about “hidden” experience, this project is the pinnacle example - it was _this_ experience that really gave me confidence as a programmer, not anything that I did at programming “day-jobs.” I learned more from that project than any other “for pay” software work. And, you’re right, my resume doesn’t reflect any of it because you’re only supposed to put professional work experience on them.
Why I work on my own projects, and what makes it fun for me, I don’t know. It just makes me restless if I’m not working on _something_ programming related. This is just who I am; I’m a little strange. I’ll swear I’ll be writing code on my death-bed, up until the last neuron dies in my brain. And if we go anywhere after we die, I’ll program there too! ;-)
-Greg Dolley
I work for a very large software company (7,000+) which is well known. If I think about all the top performers they embody each one of your positive indicators. If I think about the poorest performers, they embody several of your negative indicators. Based on my experience, programmers who are also going to school in the evenings to get an MBA are also often the worse. I would say 10-15% of programmers who go on to pursue an MBA are actually decent.
Anonymous Oldfart
January 12th, 2008 at 3:41 am
I must not be a good programmer, and there are surely very few “good” programmers my age or older, because I didn’t start programming until I “got to university” in 1976 - before then it was rare for high school students to have access to any type of computer. But once I got to college and learned to dialup the mainframe, and wire memory decoding logic and write code for a (then new) 6502, I did my best to make up for lost time.
One requirement I would look for is strong knowledge of data structures, especially if needs are OO based.
I was a self-taught programmer from a very early age, from Basic onto pretty much anything more popular than Haskell, but it wasn’t until I did a data structures class at Uni that I realised the real power of it. Good data structure design makes efficient and maintainable code. If the code is mangled, it is usually so because of bad data structures that the code needs to work around of.
[…] Inter-Sections ? Blog Archive ? How to recognise a good programmer (tags: good-reads software programming blog) […]
great article. I find that I hold all of the positive qualities that you mention but I don’t think of myself as even a good programmer. I guess there is a big hole in your argument for my special case (learning disability perhaps?)
There’s two major types of programmers, script/GUI/server programmers, and programmers that make hardware sing.
I’m a hardware guy that writes software to control hardware. In my line of work, if you bleeding edge, or always moving to the “new” programming language of the day, you’ll have a pretty resume, but your worthless in my group. You need to know C, C++, assembly, and basic scripting. Having the passion to want to know how a cool new chip works, and how to communicate with it, is vital to this sort of programmer. The willingness to write an interface for any type of chip, or communication protocol is important. Also, the ability to spot very subtle bugs, and fine unique firmware ways to speed up the system are necessary. In true hardware programming, you can’t always just reboot the processor, or buy a faster computer.
[…] How to Recognize a Good Programmer […]
“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”.”
These people then are inexperienced. That is one of the reasons why the pre-college experience is a good indicator of a good programmer. The hacker types get all that “play with crap even though it’s the wrong choice for the job” stuff out of their system and learn first-hand why that is bad in a production project long before they’re actually hired to work on a production project.
Back when I was 14 and started working on a large and long-term personal project I kept swapping in new technologies, trying new things, etc. Two things happened. First, I learned a hell of a lot of things about a wide range of technologies and topics. Second, I learned that trying to use the latest and greatest inevitably kills a project before it’s ever completed.
That particular project lasted some 5 years before I realized I was running it in circles. It made a lot of progress, and I am content with how it turned out, but it wasn’t anywhere near complete, and it could have been in done in a year (given the kind of free time I had back then) if I had all my current experience back then. I’m just a few years past college graduate age, yet I have a decade and a half of experience in a huge range of languages, tools, and general CS topics. Programmers who start out in college might be fully capable of being really good, but they’re definitely not going to be good by the time they graduate.
Especially not with the quality of instruction I’ve seen in the few colleges I’ve attended. Most colleges teach students to be the “ideal” crappy one-trick-pony Java nugget. Colleges don’t seem interested in teaching actual computer science anymore, they just teach the bare basics necessary to write a Factory class in Java and then kick you out the door.
I would expand on the list above by adding that candidates should have a firm grasp on a computer architecture works, knowledge of compilers and machine language, familiarity with multiple programming paradigms, and has a grasp on some of the real math behind CS.
I really hate wording like “familiar with multiple technologies,” because the word technology is really vague. I’ve seen one big-wig coder (currently the lead dev at Digg) refer to Smarty (a PHP templating engine) as technology. By his definition, I suppose a secretary is familiar with multiple technologies if he knows how to use both a ball-point pen and a fountain pen. ;)
I’d also be wary of any individual who can tell you all the reasons the latest fad is really cool, but can’t name any of its shortcomings. For example, anyone right now who is a fan of Ruby on Rails but who can’t name at least 5 solid reasons not to use it (not to say that it shouldn’t ever be used - every solution, even the best one for a particular job - has its drawbacks) is probably both lying about his experience with Rails as well as the kind of inexperienced latest-thing-chaser bad programmer you don’t want to hire, even if you’re a Rails shop.
The cynic in me also wants to add that any programmer who lists Java as one of his strongest points should be thrown out the door of the interview office. ;)
Great Read!
Your points are biased to your own personal experiences. As a programmer and a business manager who has seen programmers age 20 to 50 come and go, whether by choice or by termination, I say the best programmers can be identified by determining if they:
- will do the job that needs done, whether it is creative or tedious.
- know how to research not just technical but also business materials in order to meet requirements.
- will come ask for more work when they are out.
While difficult to determine in advance, those are the only questions that need asked in an interview, and they do not require technical acumen to relay and understand the response.
To be ‘great’ is not to be measured based on the success or failure of a startup company. To be great one must do the cutting edge work, and not be too proud to crank out some reports, documents, help files, and the like when the need is there. A cool widget written in the latest toy language is worthless without all the other things that widgets need these days.
Nice article. On target and well conceived. The only point I take exception to on the negative indicators is :
“Happy to work with whatever technology you’ve picked…”
That is a double edged sword. Some have enough experience to successfully handle multiple technologies. It may not be “liked” but at the same time can not be dissed in an interview setting.
Interviewers: if in doubt, ask and see if the candidate “talks shop” on it.
Thanks for the great read!!
Good list, but not all that different from Joel Spolsky’s.
#1
Passion is important, although I disagree with “Good programmers will have a tendency to
talk your ear off about some technical detail of what they’re working on”.
If asked, a programmer should tell you about things with passion, but having them blather on about an arbitrary thing just means they probably are spending too much time on it in general.
I should mention, hearing good criticisms and bitching about what should be different, I see as good.
“Dammit, why doesn’t apple’s Cocoa documentation list all of a particular classes APIs in one place somewhere? There’s NSString, and AppKit’s NSString, ugh” and “Drawing text on OS X is a pain in the ass —there’s at least 5 APIs that all fail in some way or another” would be two examples of what I consider good criticism.
#2
Yes, wanting to learn and self teaching are great qualities. Although:
“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.”
This is idiotic. A good programmer should be sensible and reasonable– not fearing change, but not changing for no good reason (and certainly not for something he doesnt know himself!). And again, talking your ear off about any particular technology is a warning sign. “OH, you just HAVE to use X”. BAD.
#4
Yeah I really want to see code that they’ve created (either for fun or otherwise). That says everything.
#5
I don’t think bleeding edge is worth anything. Variety is good, although I must admit the scope of my programming is mostly limited to assembly and C-like languages, so (rationalizing) it isn’t everything, as long as you’re willing to learn.
Of course, the article misses a key point:
Programming is a medium to accomplish goals. Having someone who understands the goals and vision, and can program worth a shit, is worth more than anything else.
I think you hit this right on the button! Programmers are a dime a dozen - but it’s been my experience that the bad ones out number the good ones. Your list provides a great basis for filtering the good from the bad.
I would also suggest that most programmers working for firms (specifically - outsource agencies) are less creative than the others who work independantly in a freelance capacity.
CV’s are usless - references and your gut feelings is what I suggest!
I fall into that category of people that picked up programming after starting work. I started from the business side and learned some programming later. Although never educated in programming and never in an IT role I have learned in my various business analyst roles, VBA and VBScript, Command Line script (for Batch Files), Javascript, IBI WebFocus, SQL, and whatever other tool I can get my hands on in our company to get the job done. I get a kick out of how much hatred IT professionals have for Visual Basic (they are usually the ones that were taught JAVA or C in school and hold a patronizing and disdainful view for the commoners programming language VB) . I can honestly say that I get more things done for the business using VB and our data warehouse in a month than our IT department that is supposed to be supporting us does in a year (I’m not exaggerating. I’m sure someone here knows what I’m talking about.). I have to admit that our IT department is extremely top heavy though. I would argue that all that is needed is passion, aptitude, and the drive to learn.
i would classify your criteria into two categories–related to intelligence; and related to personal life/personal time. i think you’re completely correct about intelligence. ability to learn on one’s own seems to follow from that, in my mind.
however, i think you’re completely off base on the personal life criteria. it’s very possible to be passionate about programming, have strong well reasoned opinions about it; and have little interest in spending one’s free time doing it. the way i look at it, if you spend 8-10 hours a day on one of your passions (programming), you should be allowed to spend the other hours on your other passions (photography, news junkie, reading, music, etc). i wouldn’t disqualify someone whose only passion seemed to be programming (though i’d be leery of spending much time in their company), but i certainly wouldn’t hold it against a smart, creative problem solver who makes a living programming.
i guess, though, that as a programmer who can evaluate other programmers, i’m not the target of a list like that. the list might be useful for the suit, as a very selective method which might weed out some good programmers but result it few false positives. otoh, you seem to state that you believe these things as well, which i think demonstrates a bit of close-mindedness.
To chime in on the “before college bit”…
Some of the best developers I’ve known had solid hardware backgrounds. I’ve known quite a few great people who earned EE/Physics degrees but fell in love with software. I couldn’t decide which route to take, so I earned earn seperate degrees in EE/CS, and then an M.S. CompE since I still couldn’t decide by graduation. I found the CS course work easier and I think the rigor of EE instilled a lot of very valuable skills. While I never use the EE knowledge, I view those experiences as having a bigger impact on my growth than the software ones.
I think the notion that good programmers start at 9 is just BS touted by those who did. I muddled with it at that age too, but it was microchips that really excited me. I’ve met far too many programmers, who otherwise meet many of your criteria, but who code very poorly since they never unlearned the bad habits that 12 year olds are known for.
Instead of the ego trip, you should broaden “hidden experiences” to truly be that. There are many valuable skills to learn that inspire beautiful code.
I wanted to post a comment but there was no comment form so I made one. ^^;
I’ve been programming since about 5 on the TRS-80 and for me most of this is true. I can’t seem to keep up with things as much as I would like because projects get in the way but I love jumping on new things.
I don’t know what to take away from this. Am I really a good programmer or not?
I think being a life-long learner is critical for anyone in an IT field (or any field for that matter).
Well, I try. I’m pretty sure I’m not the best on the planet but I try. :3
This made me feel much better about my future. I match most of the points that make a good programmer. I worry occasionally that I’m not a good enough developer (I find that I’m not as confident coding something when someone’s watching what I’m doing) but this made me feel better.
Oh… sorry… I guess the page had only half loaded twice in a row. Here I bothered to copy the form from my copy of Wordpress to hack together a way for me to post. XD
Boy do I feel silly :P
[…] Enlace al articulo completo. […]
[…] there are a variety of ways to identify a good programmer. Daniel of Inter-Sections has an essay on how to recognize a good programmer. Here is a summary. ?Positive […]
Pranav Swaroop
January 12th, 2008 at 9:11 am
Fine article and something Ive been thinking a lot about lately. A lot of projects at my workplace seem to end in a crisis(ask me- Im going to pull overnight bugcatching sessions over the weekend :-/). I cant help thinking that if we had five good programmers instead of twenty mediocre ones(no offence intended) we’d be doing a little better.
Passion. Thats a word I like.
Some of the comments here have been insightful.
This is really good article and I agree wit it! Thank you for summarizing all this into one detailed article.
Pranav Swaroop
January 12th, 2008 at 9:14 am
Oh, and Im one of those coding-since-I-was-twelve guys :)
Cant wait for next year so I can tell people Ive been coding half my life. Sounds kinda cool. Not quite ‘I was the college quarterback’ but Im not complaining ;)
“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.”
That’s hilarious. He doesn’t know how to use it yet he tells us we MUST use it in our business. Sorry but the comment by DR is right on the money as far as I’m concerned. Lets just hope that no hirers read this.
Until I was run over by a taxi during my first proper job, I had never programmed.
The only thing I agree with in your article is passion, but you could say that about any job - can you have a good doctor without passion, or a builder, or a carpet fitter?
The rest of it like cutting edge knowledge, or working on private projects in your own time is horseshit.
Purplemint
January 12th, 2008 at 9:27 am
Great list.
“I get more things done for the business using VB and our data warehouse in a month than our IT department that is supposed to be supporting us does in a year”
Could it be that your IT department is infested with people that just do their “day job”?
This seems the story of my life: I started with Basic when I was 7 years old and programming for me it’s not a just a job, but a way of life. Some say the army prepares you for the “adult” life, I think that programming also gives you some hint, teaching you how to …think.
On thing though: I think that knowing more technologies isn’t really a “must”: I specialized in Action Script and PHP and some minor knowledge of MySQL, xHTML and CSS. I would love to learn new things but working on client projects and personal ones leaves me no free time.
I’ve been a freelancer for the past 3 years and now I’m studying the possibility of opening my own studio.
I’ll use your suggestions on the job interviews and I’ll let you know how they work ;)
Andrei
[…] read more | digg story Explore posts in the same categories: Uncategorized […]
I’ve hired a number of programmer types, and I would disagree with your list. I think you’ve listed the kind of person who thinks they are a good programmer, but won’t necessarily perform well in seeing a real project through to completion. My two guidelines for hiring good programmers:
1) they understand the permanence and timing of objects; they can hold a large number of states of reality in their mind at once. You can’t train for this, either you have it or you don’t. Being enthusiastic about tech is worthless if you can’t picture your code actually running in your head.
2) They look for recursion wherever they can find it. The best programmers are always writing a compiler regardless of the task at hand. Paul Graham talks about why real programmers think in LISP - there you have it.
Now a “suit” may find my qualifications to be gibberish, but a truly good programmer will see themselves as if reflected in a crystal mirror.
As a current college student majoring in CS, I can’t help but find this article a bunch of BS. It’s quite a shame that according to this article I won’t ever be a “good programmer” for a few reasons which mostly narrow to not starting to seriously programming until college and lack of enthusiasm.
However, what really bothers me are points #1, 2, and little bit of #3. Being completely in love with programming that one must do it all times is not a good indicator, nor wanting to constantly tell the whole world about it either. I can be passionate about my hobby and let everybody know about all the new things I learned in terms of that hobby; however, that wont make me the best in that particular field.
Self teaching is a double edged weapon, sure learning new technologies is expected in this field. Yet one must be aware that simply learning new programming technologies without proper guidance might end up leading to disastrous results.
It was also mentioned that bad programmers would only try to get by what skills were learned in college; however, I must ask do you have the slightest idea what those skills are? What I learn in college is not how to program with java, C, c++ or whatever language you might think off. What I do learn is how to find a solution to a particular problem and apply that solution. That’s why the importance of learning how to produce algorithms to solve a problem, learning how to use data structures appropriately and writing readable easy to maintain code is much more important.
As for actual technical skills a programmer must have just look at the list posted by Adrian. If a programmer can use those then it’s just the trivial matter of learning the syntax of any new languages or technologies.
As for #3, what you must look in terms of intelligence in good problem solving skills. The other things mentioned are useless indicators.
Great list! You have experience
I forgot to mention, not decent programmer who knows anything about programming would ever recommend some sort of language or technology that they haven’t used before.
I loved your article. It’s too bad people commenting forgot that you were talking about interviewing and not talking about evaluating existing employees. I’ve interviewed dozens of potential employees and it’s hard (and people LIE).
I’d like to add a negative indicator: If during the interview the person talks about how they would like to eventually rise into management, drop them immediately. I have never met a good programmer who thought that going into management was upward movement in their career (this is a corollary to the guy talking about the programmer studying for their MBA while programming).
Also, I’d like to say that the programmer you describe would only be a great programmer for certain types of jobs. The people who were looking for “cogs” (yes PP I’m talking to you) were not looking for “great programmers” and the programmer you described is not going to enjoy working as a cog. The programmer you describe would be good in a startup, as a consultant, in a software R&D lab, in a game company, etc.
Reads MSDN and not blogs ;)
1) Passion: A carpenter working hard all day making furniture would want to go home and drive more nails? Probably not. Variety IS the spice of life. If you only want to do one thing all your waking hours… man, you’re obsessed. OCD, perhaps?
1A) Talking someone to sleep: May I quote Linus Torvalds: “Talk is cheap - show me the code!” Another old adage: “Empty vessels make the most noise!” Does that adequately convey my opinion of gasbags? I prefer people who can have a **conversation** - not deliver a half-hour monologue on their latest obsession.
2) Self-learning: I agree whole-heartedly with the heading on this point: people who have to be “lectured” to learn anything are a bloody waste of oxygen.
OTOH, if I had an employee junior to me who kept bouncing up and down insisting we use Microsoft’s latest OS (like Windows CeMeNT, a.k.a. Vista) or latest IDE or latest any bloody thing… I would begin an immediate hunt for a large hammer and very big nails. Jumping to the latest “bleeding-edge” tech before it has a chance to stabilize is just plain damn stupid! (Unless you’re contributing code/patches/bug reports, in which case you shouldn’t be attempting to deliver production code based on a flawed platform anyway.) Any programmer whose interests lie in DELIVERING the quality code he has committed to delivering should avoid unknown, untested and unproven new technologies like the plague. By all means avoid using the same hammer for all problems, but a good and conscientious programmer should recommend use of a technology which he KNOWS first-hand is capable of doing the job - not banking on the weasel-words of a bunch of sleazy marketing types who promise that the latest and greatest language or IDE will be able to platinum-plate your kitchen sink in under two hours. In my opinion, anyone who believes the orations of this class of skunks and puts his employer’s (or his) company’s future on the line by insisting on using the latest technology should be shot. It’s far more likely that he wants bragging rights (”first guy on the block to use C##++!!!”) or wants the new stuff on his CV because he’s planning to jump ship shortly. Immature, unethical, unprofessional, stupid! No amount of “passion” in a programmer will condone an abject failure to abide by the responsibilities for the pay packet one earns.
3) No arguments about intelligence…though, surprisingly, a huge number of not-so-smart people can, with decent training, churn out a respectable amount of decent code. That’s what all those large enterprises bank on, when they hire large teams of rather mediocre programmers.
4) As others have commented: you seem to be talking about people born “with a silver spoon in their mouths.” There are people from third-world countries - or people who just couldn’t afford computing equipment till prices dropped - who began programming late in their lives. You’re being pretty silly labelling people as bad programmers because their circumstances precluded their starting with programming at an early age. I know a programmer who began programming at the age of 26 - simply because that’s when he got his hands on his first PC. He’s still the person I go to for ideas when I’m stuck… and he didn’t do a single darn formal course on programming - learnt it all himself.
5) Variety of technologies: very good. Bleeding-edge tech - especially if the programmer blindly urges use of the same - very bad! See above… IMO, acquisition of bleeding-edge tech knowledge should be done on a programmer’s own time, not at the expense of fubarring an employer’s project and running the company into the ground.
6) Agree wholeheartedly.
You haven’t addressed the following as main points, though you have touched on them in others. Others have indicated these as major points, and if ever a programmer wants to work in a corporate environment, these are points that make the diff between survival or disaster…
Communication: give me a near-mediocre programmer who can EXPLAIN where TF he’s stuck and ask for help on one of various fora available… and understand the help, and get unstuck… rather than one who can churn out hundreds of lines of highly-optimized code per hour, but can’t explain worth a darn what he’s stuck on, when he gets stuck - and can’t comprehend online help, books, or Web resources. Give me someone who UNDERSTANDS clearly WTF he is supposed to deliver… and can deliver it as required. Someone who can communicate with team members and be a part of rocketing a start-up into the stratosphere, instead of a millstone around its neck.
Team spirit: Considering that a lot of programmers want to get paid for their work (enough to survive, at least), they incur the responsibility of delivering work product to their employers. Rarely, if ever, are these programmers tasked to work on a project alone; instead, they need to coordinate with others in a team, play nice, share code and solutions, insights, questions, overtime, testing, peer review… To make a programmer a good hire, he has to be able to work well in a team - has to have that team spirit - rather than being a maverick who puts out brilliant code that nobody understands or wants to touch, and which always has problems integrating into the main project because of the last great improvement the maverick thought of and implemented in his code.
Maintainability: I’m repeating something that’s been repeated ad nauseam over the years: given today’s high-horsepower CPUs and high-performance systems, saving 200 CPU cycles on an esoteric function isn’t really going to have users creaming their pants over the optimization. Instead, marginally less-optimized code that is, instead, READABLE and MAINTAINABLE by other programmers - THAT is the mark of the seasoned professional. Ask a bunch of decent programmers which they’d rather take over maintenance of - cryptic sleight-of-hand-ridden code that runs so fast the CPU clock steps backwards, or less efficient, but well-written and well-commented code that can actually be maintained when required… again, a question of maturity.
On the whole, while you have a couple of points I agree heartily with, quite a few seem to be the “best gunslinger in the Wild Ol’ West” kind of stuff - not really objective grounds for evaluation of programmers - and possibly easy for people to fake! OTOH, it’s much harder to fake maintainable code, team spirit, and communication skills - especially when you’re on probation for those very assets!
Ed.
Great read. Thanks.
Programmer
January 12th, 2008 at 11:09 am
Hi Daniel,
As you said, its not necessary all good programmers follow all those points. In my words, I believe a good programmer is one who focuses on the problem, analyses all the possible solutions and decides the best possible option. For all these to be efficient and effective, programmer should possess concentration, determination and of course passion. He should go flat out to resolve all the technical problems. Never give up attitude.
[…] guy has some very good points about recognizing a good programmer. If you are in a position where you need to hire people for a tech job, this is a good read! I […]
Unfortunately, this article comes across as naive and largely self-aggrandising. It’s a very narrow viewpoint and I think demonstrates the author’s own lack of experience in professional programming environments. He’s basically saying “anyone who isn’t almost exactly like me can’t possibly be as good or better”. Nonsense.
I actually fit nearly of the ‘criteria’ laid out here - programming since I was 7 (Spectrum BASIC!), outside projects, enthusiastic about new tech - but they’re all bogus - none of these make me a great programmer. What makes me useful and employable at this point in my life is that I have what I think is a good balance between raw tech knowledge, some 1337(!) coding chops, and hard experience in working with and learning from others. Very few programmers are islands when you’re doing it for a living and the ability to teamwork and know where your limits are is exactly as important as being able to find the right solution to software problems.
I’ve found that those who steep themselves in programming and nothing but programming for years and years burn out very quickly. Writing software at home for fun - nothing wrong with that and it can help when your day job is so full that you don’t get to play around with new stuff - but it’s not the be-all and end-all. Smart people don’t always need to put the time in - they just grok stuff quickly!
I like the distinction some commenters have made between ‘programmers’ and ’software engineers’. I’d never really thought of it as such but I regard myself in the latter camp (which is handy, because that’s what my job title says :D). I design and build software that produces results and performs well - both upwards to the customers and downwards within the teams who use and maintain it. I’ve gained the skills required for this only through hard work and experience over time, and knowing when I’ve hit my boundaries - not painting myself as a rock star programmer who is above anyone else with a different approach or way of life.
sasserstyl
January 12th, 2008 at 11:27 am
An interesting article. What fascinated me about the article and the responses was the profusion of comments like
“if they do/do not/are/are not X, then drop them immediately”.
In my experience the only hard and fast rule in existence is that you can never have such hard and fast rules when it comes to people.
Examples include “if he’s never used Lisp, end the interview”, or “if he’s never used a soldering iron, drop him”.
The truth? You *cannot* recognize a good programmer with any accuracy from a CV and a 2-hour interview. It’s not possible. Even if he displays all of the traits listed in this blog post.
Why? Because almost by definition, everything people say is a fiction, it’s their version of events, their reality.
In my reality, I have all the traits listed in this blog post.
But then again, in my reality, my horoscope is always uncannily right.
The only way to tilt the balance in your (as employer) favour is make the job attractive to high calibre candidates (i.e. great salary and benefits), so *they find you* (see Google).
That way, even if you do hire “a dud” (if there is such a thing), you won’t feel guilty about asking them to leave because the job genuinely isn’t right for them.
But the capitalistic pressure for companies to advertise jobs with hugely specific and high requirements and low-end salaries is very hard for them to resist.
It takes the more nuanced traits of forethought, medium to long term planning and experience for the employer to see that raising the salary by 10k will ensure that they save weeks on the project next year they haven’t even thought about yet.
And these nuanced traits are also pretty rare.
So they end-up with a mediocre hire, which (I suspect) they sub-consciously expected.
This is capitalist model - you get what you “pay” for.
Programming is a rather monotonous task, it requires both discipline and focus, the ability to get into a zen like state of mind
I’ve been programming since I was 12, and that’s three-fourths of my life. That doesn’t make me a good programmer. It just makes me an old programmer.
Totally right.
From my experience in recruiting, what you are pointing to is always verified.
What in the world is CV and why is there no (” “) explaining it?
Hey, I agree with the comments, I understand that most programmers/developers would have been coding from a young age, however, I didn’t have access to a computer at home until about 15 so I was always kind of behind =P
Recently, I’ve started to program intensively again, and I’ve been asking myself whether or not I’m a good programmer. I have a feeling that I am, but I don’t know how to test for this; I’ve tried to use arbitrary criteria, such as line count vs. development time, avg. number of bugs or errors / line of code, but I didn’t find that any of these indicators were helpful for that purpose.
The above list is excellent (and it describes me perfectly).
However, I’m pretty set on PHP/MySQL development, and while I enjoy learning new languages and using all sorts of technologies, I’ve become so comfortable with the LAMP stack that I can focus completely on the design and architecture and not the language. I think having one technology that you’re *really* good at, while having a broad range of interest in other technologies (and some non-tech as well), is the hallmark of not only a “good” programmer, but also a “successful” programmer, who has learned how to effectively leverage his passion to actually earn a good living, and have fun doing it.
I also agree with some of the comments above referring to the relationship between spoken language and programming. I’ve tried to get to the bottom of why I enjoy programming so much, and I realized that it’s not necessarily programming per se, but it’s actually the act of creating an abstraction and properly mapping it to a real-world object.
The mental process that is involved is similar for programming as it is for using natural language: in order to use natural language, we have to manifest a model of a real-world object in our minds and then find the most suitable abstraction that captures the relevant properties of the object, (but no more) and is flexible enough to allow interaction with other models. This step is similar to designing a software application.
We then quickly have to “serialize’ these mental models for a given interaction; this is similar to the actual coding, in software development.
We then “execute” our serialized model (by communicating), which is similar to running your code… you get the idea.
A well-designed model leads to elegant and high-quality semantics, which in turn lead to desired interaction with the outside world. This is something that is extremely rewarding, and I find that this effect is amplified when developing software, as opposed to simply using natural language.
[…] is an older post from last year November, but still relevant and on-topic, so I will share it here. The post analyzes the qualities of a good programmer, someone who has a real passion for the code and the technology and how it works… It’s not […]
great article!
I’ve been with computers since I was 9 (TRS-80 Model 1) and have always had a love and passion for computers and programming. While this is important, technical training and realworld experience are crucial!
One you forgot is working in a team enviornment. Programming isn’t usually a singular experience anymore–like it was in the ‘old days’.
Daniel, m’dear,
you’re talking about a good hacker here, not a good programmer. Here’s what makes a good software developer:
- Analytical skills and imagination
- Reliability and consistency
Technologies are ephemeral…
Interesting article.
But, starting programming at University is a downfall? I think that learning the trade in an academic fashion would prevent a lot of the bad habits that someone learning on their own at a young age would pick up.
How about a low self esteem? Because programmers have to realize their place in the totem pole, and in a lot of companies [with the great business idea] you’re at the bottom.
This is a great article and hits the spot. Some of these qualities also make someone good in any profession. Here are some corollaries:
1. The programmer realizes that the program is not about the programer: it’s about the project. People with people skills and good listeners are worth their weight in gold.
2. Love problem solving. Gen. Omar Bradley used to work out calculus problems to relax, and while it had nothing directly to do with warfare, it had everything to do with thinking and problem solving. The smartest programmer I ever knew was listening to some fellow physicists as they were rambling on about the issues involved in recognizing the difference between two and three dimensional objects, and so he went home and worked out a solution on his computer. It was a cool thing to do, but his solution (algorithm) came to be the foundation for not only 3-D gaming but for missile defense systems.
3. Can focus on a project. With all of the interesting things to do in programming, a lot of it is just grunt work, and it can be difficult to stay focused on the mundane task of programming. A truly great programmer–who has all of the other characteristics mentioned–needs to be on the front end of a project where the higher level issues are addressed and can envision the different relationships, design patterns, and maintainability of the project. Once that’s done, project pieces can often be put together by those who don’t mind following instructions to write classes, methods and algorithm that have been laid out in a pre-determined fashion. (These can be outsourced to the bright high school and college kids who are getting their feet wet.)
I have to say I’m glad I’m not the only one who started with BASIC on a Commodore 64… I’ve still got mine in working (and pretty much mint) condition. I started my first business when I was about 12 (going on 24 now) designing websites, had an article and great customers who loved my ethic and HTML coding on the computer in my bedroom. I didn’t dare venture into any type of scripting. Got into radio at 15 and quit doing websites. Then about 5 years ago picked up web design again and started learning PHP. 5 years later taught myself PHP, JavaScript, XML, CSS… etc.
I don’t program professionally… hell I’ve been writing code for the same CMS for 5 years and keep revising the code. I really hope sometime soon I’ll be able to do what I love being on-air and doing audio production while also making money coding.
I’d rather code PHP &JS than do anything else in my spare time.
[…] I’m not the kind of person to go to someone’s blog and try to start a flamewar, either.read more | digg […]
There are two very different types of programming tasks. Some are process oriented, and others are project oriented.
To maintain a production system, you want a process-oriented, nine-five programmer who will show up on time, write clean code and document his work.
But don’t tell him to design and develop your new state of the art product.
Other programmers are more project oriented. You give them something that interests them, and they’ll eat, sleep and breathe the project until it works.
But don’t ask them to keep adding the new feature and fix bugs. If it’s not new code, they lose interest.
One trick for a technologist is recognizing which type of person you are, and not accepting positions that put you in a job where you won’t be happy.
Unhappy workers are seldom good workers.
I’m not usre about
“Significant (and often numerous) personal side-projects over the years”
Maybe is a good programmer indicator but is not a good sign for an employer since those guys must of the time can’t focus on his current assignments at work, because of his personal projects.
I’m not sure about
“Significant (and often numerous) personal side-projects over the years”
Maybe is a good programmer indicator but is not a good sign for an employer since those guys must of the time can’t focus on his current assignments at work, because of his personal projects.
[…] found this post on digg and thought that I share almost all of this persons views of who is a good […]
“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.”
Please contact back with your handle and group affiliation ;)
Fantastic Article. Absolutely agree. However personally I don’t think its hard to recognise talent at all.
However a lot of interviewers do not value talent enough to try hard enough to look for them.
The kind of talent we talked about and would fit the mould of the attributes mentioned is 1 in a hundred or less.
To get good talent, we have to sift thru hundreds of CVs….of 100 CVs, only 10 would be good enough to be called up and only 1 or 2 will get the job. And to do this is really hard work! When we were expanding our unit, its almost a full time job! And don’t forget we still have to keep the project going! Managers burn out trying to find talent! It takes a lot of commitment and determination.
I’ve worked for companies who simply gave up after interviewing a few people they just employ whoever is available to fill the headcount. Obviously the whole place is filled with incompetence…..and the managers wonder why….
I agree with most of this post except for the University programming. Of all the list, this is the only one I can say I come close to failing due to starting one year before University. Still, I see people who cannot keep up with me who have programmed for years on end in their spare time (I would presume passion is in that spare time). As a whole it may be true but I would take what all of these mean carefully for potential employers.
[…] This?article?really resonated with me. ?I recently interviewed at a small software/hardware company. ?Less than two hours into the?interview?process the VP of Engineering made me a job offer - seriously, on the spot. ?Up until that point I hadn’t been asked a single?technical question. ?Nor was I was I able to sufficiently discern their level of expertise. […]
I generally agree with the post with one exception. In my early career, I found myself trying to grasp as many technologies as I could. I’m a Java programmer, but I would dive into VB (back when VB was still VB), ASP, Perl, C, C++, and whatever else would pop up Slashdot. Whilst learning these new things was obscenely fun, after a while I started noticing and interesting pattern. As I was having a blast lengthening the “Technologies” section of my resume, Java world (my bread and butter) wouldn’t stand still. It grew and morphed. J2EE spec 1.1 became 1.2. Things like Hibernate and Spring came about and JMS became popular. I did ofcourse look into all these, but my attitude towards it was not unlike a fat kid’s in a candy store running into a piece of fine swiss chocolate. It’s just another candy.
My point is, sometimes a large number of technologies is not a good thing. It shows lack of focus. To put it even more bluntly, to me it means the the guy (or girl) doesn’t know what he/she wants to do. But don’t take me the wrong way. Having just one technology (or just one technology stack) on the resume is bad. But producing a page long list of acronyms can be a good predictor of whether a developer (however competent and intelligent) will walk off the project as soon as things stop being fun.
On a completely different rant, I gotta say to whoever posted a reply about not being able to answer things from http://www.howcomputerworks.com.You gotta know this stuff, man! It’s the same as hiring a car mechanic who doesn’t understand the inner workings of an internal combustion engine.
I don’t normally reply to these kinds of things, but as I read this list I had to smirk. I have been using these exact bullet items when I interviewed prospective developers for the past 15 years, because they reflect my programming life. I won’t say I am a great programmer, because once I say that, there isn’t any more room to grow. There is always something new, or someone with more knowledge/talent/experience. They are the great ones that I will always aspire to be.
I recently asked to be re-focused back to programming so that I could recapture the fun, rather then do paper work and administrative hassles. Not that this makes any difference to anyone reading this, but it just feels good to be back to doing something I love doing. That to me makes a good programmer.
I agree with most of what you are saying. However, sometimes getting a *good* programmer that does not have passion can be a plus. Here is why….
Most programmers out there that have passion about their work go home and work on what they really want to. This can be a distraction while they are working at your organization.
I have had great programmers that could not focus, because all they could think about was the project they were working on when they get off work. Plus they work long hours in the night and come to work office.
The key to this is, make sure the side project they are working on is integrated into what they are doing at the office.
In contrast, I have had time puncher programmers who really didn’t care about programming. They did a good job, and you knew when they were programming they were just doing it at the office. The key with these people is you have to be the creative engine and keep them on track.
[…] Link How do you recognise good programmers if you’re a business guy? […]
[…] at inter-sections has written a nice guide to hiring good programmers. I think he’s right […]
Good article. What does CV mean?
stupid article.
[…] Inter-Sections ? Blog Archive ? How to recognise a good programmer (tags: business programming) […]
[…] Corfield links to a nice summary of how to recognize good programmers when you aren’t one. The article isn’t a magic bullet, but it does a nice job talking […]
[…] cygwin, delphi, history, opengl, Personal, programming, Python, Ubuntu, vb I just saw an article at Inter-Sections about how to spot a good programmer when recruiting a person. I can see some of […]
[…] Inter-Sections ? Blog Archive ? How to recognise a good programmer […]
[…] source: how to recognise a good programmer […]
[…] How to recognise a good programmer (tags: programming) […]
[…] found this essay on Slashdot yesterday: how to recognize a good programmer. Some of the comments were quite insightful, but many followed the following […]
[…] uitgebreider engelstalig artikel waardoor ik mijn punten opgeschreven heb: http://www.inter-sections.net/2007/11/13/how-to-recognise-a-good-programmer/? Stem of voeg toe aan […]
[…] Inter-Sections ? Blog Archive ? How to recognise a good programmer (citations) […]
[…] What Is A Good Programmer? […]
[…] about “How to recognise a good programmer“. Where Mr Daniel tries to sell the idea of good programmer = a guy who lives and love […]
[…] just read a great article on how to recognize a great programmer.. It is a worthy read for those interested in hiring […]
[…] January 13, 2008 at 7:15 pm Filed under Programming How to recognize a good programmer […]
[…] Published January 13, 2008 1 Recently Inter-Sections web site published an interesting article about how to detect a good programmer. Among all the things someone needs to sit and create… […]
[…] с английского. Оригинал находится на сайте […]
[…] found a pretty good article on the signs of a good programmer. I fit a lot of those, except maybe being in a variety of technologies. I pretty much stick to […]
[…] can find myself in all of the above You can read some more in-depth stuff over here. Posted in […]
[…] to Recognize a Good Programmer http://www.inter-sections.net/2007/11/13/how-to-recognise-a-good-programmer/Pretty interesting article on what makes a good […]
[…] Posted January 14, 2008 Via Slashdot, an article was brought to my attention which asks the question: “How do you recognise a good […]
[…] Inter-Sections ? Blog Archive ? How to recognise a good programmer (tags: career development) […]
[…] found an article this morning that was from a guy that is a programmer and a businessman. It is an interesting read […]
[…] aqui para ler o artigo […]
[…] How to recognise a good programmer […]
[…] Inter-Sections ? Blog Archive ? How to recognise a good programmer (tags: programming hiring career interview business jobs programmers development) […]
[…] 可幸的是,好的Programmer大多都還是有些大眾都可以分辨出的基本因數,網上有一篇Blog就做了一個不錯歸納,不家不彷比較一下。 […]
[…] un buen programador? Según este documento, las siguientes son las características que distinguen a un buen […]
[…] How to recognise a good programmer How do you recognise good programmers if you’re a business guy? […]
[…] A blog post that could be worth reading it before hiring some developers. […]
[…] Posted by damodar on January 16, 2008 How to recognize a good programmer […]
[…] на Inter-Sectionst. Доста е интересен и затова реших освен оригиналния линк към поста, да му направя кратко резюме. Още в началото се оспорва […]
[…] How to recognise a good programmer - Great discussion on recognising great developers. The problem would seem to be finding them! Most recruiters just pattern match on CVs which tends to favour the “career” developer. Topics: Links | Tags: apple, business, coding, computer, development, funny, jobs, Links, mac, management, movies, people, programmers, Programming, recruitment, ripoffbritain, tec, technology, tv | Comments RSS […]
[…] Inter-Sections ? Blog Archive ? How to recognise a good programmer Some interesting first-order-approximation criteria when recruiting programmers. I found myself nodding at a long list of stuff that I’d never thought to look for. (tags: recruitment) […]
[…] ha publicado un artículo: How to recognise a good programmer cuya traducción podemos encontrala (entre otras) en el siguiente post: Como reconocer a un buen […]
[…] How to recognise a good programmer lists criteria and non-criteria for - you guessed it - recognizing good programmers. His points would nail most of the good programmers that I have ever known. They really seem to boil down to passion. I certainly hold that: 1 - people like doing what they are good at, and 2 - people are good at doing what they like doing. There is some circular synergy there almost invariably makes both true. Of course, people can enjoy things they are absolutely no good at (evidence how well I play the bass guitar), but everyone seems to have at least some ability that they are both good at and enjoy doing. […]
[…] 从JavaEye的文章看到这篇How to recognise a good programmer,其中的观点我颇认同: 1.激情 — 写代码是你的日常生活,而非工作; 2.自学好学 — 不会等着公司给你培训; 3.聪明 — 好的程序员通常可能是你认识的人里最聪明的那个,而且出乎意料的,好的程序员可能不是我们通常想像的那样不善言辞; 4.不在纸面表现的”隐藏” 经验 — 好的程序员通常有自己的私人的一些研究、爱好、项目,而这些是他们不写在简历上 (通常觉得不值得写),但表现出来却可能恰恰是他的潜能、深度和后劲所在; 5.技术多样性、先锋性 — 在多种技术方向 (只知道java、Ant、j2ee、xml,只能算一个技术方向) 都有涉猎,而且对多种技术的长短有 “强烈”的个人意见/见解,喜好尝试新鲜技术; 6.证书说明不了问题 — MCSE、SCJP、红旗认证… 这些说明不了这个人是不是好的程序员,可以忽略不计。 […]
[…] $self […]
[…] 如何“识别”优秀的程序员 January 18th, 2008 | by ming | 如何“识别”优秀的程序员,Daniel总结了几条关键要素。他写道,“并不是和听起来那么容易。在这儿工作经验的作用是很有限的,因为伟大的程序员不一 定要‘正式’的工作经历来证明他们的伟大。许多的工作经历可能会被误导。”以下摘自每日阅读: 1.激情—写代码是你的日常生活,而非工作; 2.自学好学—不会等着公司给你培训; 3.聪明—好的程序员通常可能是你认识的人里最聪明的那个,而且出乎意料的,好的程序员可能不是我们通常想像的那样不善言辞; 4.不在纸面表现的"隐藏" 经验—好的程序员通常有自己的私人的一些研究、爱好、项目,而这些是他们不写在简历上 (通常觉得不值得写),但表现出来却可能恰恰是他的潜能、深度和后劲所在; 5.技术多样性、先锋性—在多种技术方向 (只知道java、Ant、j2ee、xml,只能算一个技术方向) 都有涉猎,而且对多种技术的长短有 “强烈”的个人意见/见解,喜好尝试新鲜技术; 6.证书说明不了问题—MCSE、SCJP、红旗认证… 这些说明不了这个人是不是好的程序员,可以忽略不计。 Share and Enjoy: These icons link to social bookmarking sites where readers can share and discover new web pages. […]
[…] 如何“识别”优秀的程序员 Posted By: webclerk Published in IT 18Jan 如何“识别”优秀的程序员,Daniel总结了几条关键要素。他写道,“并不是和听起来那么容易。在这儿工作经验的作用是很有限的,因为伟大的程序员不一 定要‘正式’的工作经历来证明他们的伟大。许多的工作经历可能会被误导。”以下摘自每日阅读: 1.激情—写代码是你的日常生活,而非工作; 2.自学好学—不会等着公司给你培训; 3.聪明—好的程序员通常可能是你认识的人里最聪明的那个,而且出乎意料的,好的程序员可能不是我们通常想像的那样不善言辞; 4.不在纸面表现的”隐藏” 经验—好的程序员通常有自己的私人的一些研究、爱好、项目,而这些是他们不写在简历上 (通常觉得不值得写),但表现出来却可能恰恰是他的潜能、深度和后劲所在; 5.技术多样性、先锋性—在多种技术方向 (只知道java、Ant、j2ee、xml,只能算一个技术方向) 都有涉猎,而且对多种技术的长短有 “强烈”的个人意见/见解,喜好尝试新鲜技术; 6.证书说明不了问题—MCSE、SCJP、红旗认证… 这些说明不了这个人是不是好的程序员,可以忽略不计。 […]
[…] bsqueda por el mejor programador (Leer tambin como ser mejor […]
[…] bsqueda por el mejor programador (Leer tambin como ser mejor […]
[…] Finalmente, outros dois links interessantes foram o do Overview sobre Eclipse RAP e o Screencast de demostra??o criado por Michael Coté e o artigo escrito por Daniel Tenner chamado Como reconhecer um bom programador. […]
[…] posted a link to a great article on how to recognize a good programmer. Anybody who is looking to hire programmers or technical people should read this article. […]
[…] 一月 22, 2008 於 12:42 上午 歸檔於 研究與資訊, 轉載 連結 […]
[…] How to recognise a good programmer ============================= http://www.inter-sections.net/2007/11/13/how-to-recognise-a-good-prog…[…]
About the author
Daniel Tenner is a strange mixture of writer, ex-consultant, technologist and small business owner, a jack of all trades, master of some, who enjoys sharing some of the lessons he's learnt along the way.
You can contact Daniel on Freenodeunder the nickname swombat.
Other Musings
Links
.
本文转自
http://www.inter-sections.net/2007/11/13/how-to-recognise-a-good-programmer/