February 7, 2008
I recently received an email from Andrew Stuart of the Australian firm Flat Rate Recruitment. Andrew related their technical phone screen process, which is apparently quite similar to the one outlined in Getting the Interview Phone Screen Right. I'm glad to hear it works. A proper phone screen is critical. I completely agree with Andrew: you should be 95% certain that a candidate would be a great hire before they ever set foot in an interview room. Anything less is a colossal waste of everyone's time.
But there's one aspect of the recruiting process that often goes awry, even with a great phone screen in place. Andrew presented an excellent anecdote in his email that explains it better than I can:
I had a client building an advanced security application. I sent them person after person and they kept knocking them back. The reason was almost always because the person "didn't have enough low level coding experience." The people I sent had done things like design and develop operating systems, advanced memory managers and other highly sophisticated applications. But my client wasn't interested. They required previous hands on low level coding experience in a particular discipline. Eventually I got an application from a very bright software engineer who almost single-handedly wrote a classic computer emulator, but had little or no low level coding experience in the particular discipline they required.
I told the client, "I have a great guy here who has no experience doing low level coding and I think you should hire him." They were extremely skeptical. I pushed hard to get an interview. "Look, this guy is a superb software engineer who doesn't have low level coding experience in the particular discipline you require now, but if you employ him, within 3-6 months you will have a superb software engineer who does have the low level coding experience you're looking for."
They interviewed him and gave him the job. Within a matter of weeks it was clear he was the smartest programmer in the company. He quickly mastered their low level coding and his learning went well beyond that of the other coders in the company. Every time I talk to that client he raves on about this employee, who is now the technical backbone of the company. That company no longer focuses its recruitment on candidates that exactly match previous experience with the required technologies. Instead they focus on finding and employing the smartest and most passionate engineers.
This toxic, counterproductive years of experience myth has permeated the software industry for as long as I can remember. Imagine how many brilliant software engineers companies are missing out on because they are completely obsessed with finding people who match-- exactly and to the letter-- some highly specific laundry list of skills.
Somehow, they've forgetten that what software developers do best is learn. Employers should be loooking for passionate, driven, flexible self-educators who have a proven ability to code in whatever language -- and serving them up interesting projects they can engage with.
It's been shown time and time again that there is no correlation between years of experience and skill in programming. After about six to twelve months working in any particular technology stack, you either get it or you don't. No matter how many years of "experience" another programmer has under their belt, there's about even odds that they have no idea what they're doing. This is why working programmers quickly learn to view their peers with a degree of world-weary skepticism. Perhaps it's the only rational response when the disconnect between experience and skill is so pervasive in the field of software engineering.
With that in mind, do you really want to work for a company that still doggedly pursues the years of experience myth in their hiring practices? Unlikely.
Which leads me to my point: Requiring X years of experience on platform Y in your job posting is, well, ignorant. As long as applicants have 6 months to a year of experience, consider it a moot point for comparison. Focus on other things instead that'll make much more of a difference. Platform experience is merely a baseline, not a differentiator of real importance.
In turn that means you as an applicant can use requirements like "3-5 years doing this technology" as a gauge of how clued-in the company hiring is. The higher their requirements for years of service in a given technology, the more likely that they're looking for all the wrong things in their applicants, and thus likely that the rest of the team will be stooges picked for the wrong reasons.
I'm not saying experience doesn't matter in software development. It does. But consider the entire range of a developer's experience, and realize that time invested does not automatically equal skill. Otherwise, you may be rejecting superb software engineers simply because they lack "(n) years of experience" in your narrow little technological niche-- and that's a damn shame.
Posted by Jeff Atwood
You're so right that a smart programmer with 10 years experience will outshine a smart programmer with only 1 year. But, I'd prefer to hire a smart programmer with a single year of experience than a lousy programmer with 10 years.
I've been interviewing programmers for the last couple of weeks (I'd like to thank Jeff for running this story and the one about telephone interviews — talk about excellent timing). The HR department slapped 5 years experienced required on the ad. We rejected over 90% of the applicants based on their CVs alone. Telephone interviews got rid of another 5%. So far I haven't come across one I'd like to hire. I'm beginning to wonder whether all the smart programmers with over 5 years experience aren't all happy where they are (either that or there are very few smart programmers). I persuaded the HR department to re-advertise the role without the 5 year requirement. I know we'll get a load of CVs, most of which will be rubbish, but I'm hoping we'll find some young smart programmer who hasn't found his dream job yet.
I really agree with you....and the same thing happened in our company a guy with 6 month experience is much better than the oldest employee of our company
It is kind of seniority over talent, a whole philosophy on it's own.
Or the paradox of the good plumber: he works faster, thus get less paid. Translate to programmer learning faster, thus having less experience.
I have seen very extreme cases of this, where it was required to have a combined 20 years of experience (in radically different areas), but be no more old than 25.
For one job with a somewhat pointless years of specific experience requirement, I was able to get the hiring manager to like me, give me a phone interview and everything. Then I talked to the lead developer who just asked specifically how many years experience with that particular tech. I told him (this information was available on the resume) and then he responded, "I'm sorry to waste your time, we need someone with more experience with this particular technology." It was for a Junior position, too. In this case the HR person was actually much more reasonable than the lead developer.
I was upset at first, but then realized that I probably didn't want to work for a guy that short-sighted anyways.
Experience matters, up to a point.
Different kinds of experience matter differently. People seem to improve when they've used platforms, for about a year or so. Beyond that, they might improve in other ways.
It takes more than a year or so to learn coding and data structures and algorithms and algorithm-analysis and business problem analysis.
Learning to get along productively with different types of people takes a bit longer. Marketers, difficult bosses, engineers in other disciplines, business customers, and so on.
Learning how to present software to non-software people takes a while too. People seem to improve over a period of decades. But the non-software people are also becoming more sophisticated over that time scale.
The experience of going to a good school matters too. Nothing replaces the basic math and the study of the basic algorithms. People don't seem to learn much in the way of new programming paradigms outside of school. Look at the adoption of object-oriented and now functional programming. Courses, at least, are the way to go.
Learning about the application space can be done in school but you can be trained in finance and end up working on embedded systems or web apps. And the other way around. So application space learning has to be on the job and is often per-company. HP does things differently than IBM, which is different from Microsoft, Google, etc.
There is, however, no cure for stupidity.
Completely agree. Whenever I have been asked the experience question regarding a technology I don't know in an interview I have always answered roughly the same.
For example, "Although I don't have knowledge of that particular language/technology at the moment, I have experience in many languages/technologies and the ability to learn. If that skill is essential on day one of the new job, I will use my notice period ensure that I have at least a rudimentary level of knowledge by the time my new position begins."
If the company doesn't like this answer and would refuse the position because I don't have three years of the particular skill then I probably wouldn't like working there anyway.
I believe Jeff is pretty much right on the money. I'd like to add a little bit more though. Nobody is saying years of experience isn't helpful. Every programmer needs to go through the pain of learning multi-threading correctly. That 1 college course that touched the topic briefly clearly isn't enough. Only years of experience will get you that. However, years of experience is secondary to "smart" and "gets things done" (http://www.amazon.com/Smart-Gets-Things-Done-Technical/dp/1590598385). An experienced dodo that's a waste of space is a costly mistake.
Moreover, that programmer out there that's smart, gets things done, and is experienced isn't available for you to hire. He or she already is working at a great company (or owns their own) and doesn't want to leave. You're only hope is a hefty signing bonus or a disgusting amount of stock options to lure them over.
Saying "experience don't matter when hiring" sounds to me a lot like "experience is next to worthless" or "coders don't learn anything on the job".
I am the first to remind people that the actual number of years of experience doesn't really matter (we've all met many useless programmers with several years of experience).
However, it is also true that even the most brilliant people learn and gain much from professional experience, and usually not much use for serious work unless (until) they have it.
Note that experience does not always equate specific skills. Simply working as a professional programmer for a year or two teaches MANY lessons beyond a specific skill like TCP/IP: how to estimate work, how to do engineering tradeoffs, how to work in a team, designing and implementing code so that you can maintain it two years after the fact, writing robust and error aware code. Even serious hobbyist programmers are usually missing those skills, simply because they never had to learn them.
Also, some skills are not so easily acquired. For others, we simply don't have the time for the new employee to pick up. For example, if we are working on embedded systems under a tight schedule, I don't have the time to wait for the new Java guy to grok pointers. Our new employee needs to know C well enough, and we also expect him/her to be able to deal with new platforms almost by themselves. We don't have time to babysit them.
These are not the kind of skills that people "pick up" in 3 to 6 months (and even if they did, it's still too much), they take a year or two to develop.
And of course, there are the various fields of knowledge: signal or image processing, scientific computing, speech compression, etc.
So yeah, when we look for candidates, we look over previous work experience. We will (and have done so) accept candidates without prior professional work experience, but even then they normally have some years of experience as hobbyist programmers.
I think that the simplest thing to say about this is that 'years' isn't the right unit of measurement for 'experience.' If somebody told you that they got hit by a car, you wouldn't ask "How long?" You would ask questions that aimed to discover the person's memories of the components of that experience, that person's synthesis of the components of that experience within a wider context of just the experience itself, and finally the changes that the experience brought about within the person that would affect the way that they would approach other situations in future.
Comparing a 'smart programmer with 1 year of experience' to a 'smart programmer with 10 years of experience' is just silly. I've been playing guitar for 10 years longer than I've been programming, but I'm a lot better programmer than I am a guitar player.
"analysis of congitive development shows it takes ten years to truly master a discipline"
"it takes 15 years to master any kind of fundamental craft"
is completely unsourced nonsense that substitutes research-y sounding words for research.
Smart, fast learning people are no substitute for real experience.
adds the adjective 'real' to destroy any meaning in the sentence. Reality isn't measured in years. If the reality you're talking about is extent of retained facts, depth of synthesis of known facts, and effective modification of strategies based on those facts, this is something done better by "smart, fast-learning people" by definition.
Agreed, however: Good programmers get better at programming every year. Average programmers get better at their niche every year.
" ... there's about even odds that they have no idea what they're doing."
Among the things interesting (to me, anyway) about this quote is its implicit self-loathing: half of all developers are clueless? Seems an extreme charge. What other professions judge themselves so harshly?
But the answer to that is fairly obvious: the social sciences. Talk to any economist, psychologist, sociologist, educational theorist, political scientist, etc., and they'll quite willingly let you know that most of their colleagues are idiots and charletans.
And so it is with programmers--methodological wars, competing theories and schools, and endless oscillations between true-believer enthusiasm and the dark night of disillusion and self-hatred. Perhaps programming is a social science, rather than a type of engineering. It does feel that way.
But more to the immediate point: hiring requirements specify x years of experience because (1) they don't want to pay for that 6-12 month learning period, and (2) hanging on to a position longer than that gives some hope that you did indeed 'get it'. HR is not swinging for the fences in creating job requirements, they're just trying to avoid striking out. It's about risk aversion, not excellence.
And in a field that rates itself as 50% incompetent, doesn't that seem a sensible approach?
I agree with the post wholeheartedly. I first experienced the disconnect when I became an MFC developer back in 2000. Previously I had only worked on C and Unix. I took some time to learn C++ and then MFC before applying for new work. I had about 4 years of industry experience under my belt at that point, doing projects. I had 0 years of project experience with C++ and MFC. After looking for several months I found a place that was willing to hire me as a junior MFC developer. I had some things to learn still, but after a few months I was basically as good as most of the other developers there. After several months my project manager became very impressed with me. She noticed that I was able to handle client meetings well, that I had good communication skills, and that I anticipated problems before they happened. But of course, I thought to myself. I had experience with these things from the 4 years I spent at my previous job. People also noticed my work ethic, that I put in my hours, and got substantive things accomplished. No one really said it, but I got the sense that I should've been hired on at a higher rank than I was. In fact rumor had it that I was up for a promotion, but then the bottom fell out of the IT market in 2001, and I and most of the people I knew were out of a job. Oh well.
Since then I haven't thought well of the "X years of Y" mentality that most employers have. I wish they'd get a clue that they're not even using the right criteria.
My own sense of why this mentality persists is that business schools, and society in general, still think in terms of the Industrial Age. Companies act like they're hiring electricians, or plumbers. Each time a new language comes out they think it's a whole new system, and therefor they have to find people who know it. What they're missing is that a new language is just a new set of rules, often with the same basic architectural assumptions as several other languages. Today it's more important to learn about APIs--a kind of "architecture inside of architecture"--than languages. The APIs are what take the longest to learn.
Years of experience are not a myth. They matter a lot.
This blog is a joke and i really do not thank you for giving such advices to conduct an interview.
IT interviews are some of the most boring in the market due to geek questions like these.
It is a real torture for the candidate.
Do you really need to ask a candidate to write 15 methods to do these and that, and ask him to learn by heart what is this collection or these one ...
Jesus Christ ...
We, programmers, are paid to code and to learn.
When we have a problem, we do some research and some learning, then we code.
This is very very true...most of my experience is very basic, using design templates and drag and drop developer tools for websites and simple programs, but my near perfect GRE score has allowed me to pretty much solve any problem I've encounteered thus far, and I taught MIT and Stanford prospects for 2 years and did not find them particularly gifted, but they will be the ones hired, and, it is wonderful, since I am happily off to solving puzzles and enjoying gadgets and tech. :O)
i agree in terms of technical skill... however, inter-personal skill may take longer to build up. both sets of skills should be considered when hiring a candidate imo.
The following would be jokes, except that they are true stories from the '70s.
MIT student comes back from winter vacation. Roommate asks, "Did you get the summer programming job you were going to interview for?"
No. They asked me if I knew COBOL. I said no, so they said they couldn't give me the job. Do you think maybe they don't have any Language Reference manuals?
(Source: the roommate.)
A guy interviews as a systems programmer at a small mainframe shop. They ask him how he learned IBM's DOS/VS and CICS at his previous job. He said, "From the IBM manuals."
They didn't hire him. Because the manuals were so hard to understand, they figured he was lying, so they didn't want him. Alternatively, if was telling the truth and had successfully learned from the manuals and been successful, he couldn't be normal, so they didn't hire him.
(source: one of the interviewers)
I structure my interviews to find people who are capable, not necessarily qualified. BlackWasp is the guy I'm looking for, he's capable of picking up the necessary technology although not qualified today to use it.
Agree when applied to programming languages, or technologies.
But not necessarily about full fields.
It will be more difficult for a Java programmer to do low level TCP/IP coding.
And there are fields where experience cannot be replaced. Years of experience in security, or internationalization, or working close to the machine, are impossible to replace. That experience transfers easily to other platforms, or programming languages.
Kind of orthogonal things, and one should not confuse them.
Now I don't feel alone anymore, Oh my Gosh! I had been going to interviews the last couple of month, with people that really I can call morons , I have 10 years experience at PowerBuilder, Sybase, Informix, etc, but because I emigrated from my country, I have to start over here in America, and the place where I live (Orlando) doesn't have to much market for PB.. so my husband that is a senior .net developer push me to jump to this side of the pond, and now here I am doing .net with c#, and all these people interviewing me, telling me... oh no.... you are so light, oh no.. we are looking for X more years of experience...etc,
it looks like I wouldn't move easily from where I am right now..., I feel SO FRUSTATED, because without to want raise my ego, damn I'm good in what I do...
:( Just waiting for some smart manager to hire me...right?
In most programming positions you're going to need some time to learn their particular requirements and the software that you'll be working with. For most competant programmers, it's not a big leap to pick up the language while doing this.
On the other hand, as someone has mentioned previously, you still need experience in certain realms before you're really qualified to do some jobs. You might not do very well with user interfaces if you've never worked on them before (say you wrote low level TCP/IP code through most of your programming career...). You might need some database experience before working on an application that is heavily data-driven.
Of course, you don't need the guy with 10 years experience with IIS and MS SQL Server using C# if you can get the person with 15 years experience using Apache, Oracle, and Java. You might have to hope they can spin their head 180 degrees to get it all into their head, but if they're competant they should be able to do it.
Then there's the one-trick ponies and the people that will complain the whole time that while C# is "like" Java, it's "not" Java, and that feature XYZ should work like it does in software ZYX.
Sadly, this is is so true.
This is pretty much why, I have had lots of problems getting a job. They don't look at your qualifications. Or your capability to learn to do a job.
They don't realize we had to learn how to program, if they give us a chance...
"Experience doesn't matter, it's your willingness/ability to learn that counts"
Phooey! What ultra liberal feel-good planet are some of you?
Experience counts for a lot. If, after almost 10 years at this gig, you're trying to tell me I'm likely no better as when I graduated? I think I'll go kill myself now.
Notably, if you're an idiot then you're just an experienced idiot. Having x years may not positively correlate to being an y times better programmer, but "toxic, counterproductive years of experience myth"? Drama queen.
"It's been shown time and time again"
Really? I wouldn't call your data conclusive. Your assertion of experience not predicting skill doesn't appear to be very scientific. You quote your own previous posts which refer to programming contests and students reporting how long they took to write software. I don't think either of these data sets relate well to the general corporate programming world that we live in. Students accurately reporting time spent? Read the freakonomics blog some more and how people lie on surveys.
"10 years of experience is 10 x 1 years of experience"
You could say the same of surgeons. Pilots. Policemen. Yeah experience is crap. The corollary is 20 different jobs in 10 years. That person sounds like they're always moving on to the next big thing and they never actually learn enough to be useful. I'd prescribe ritalin for their ADD since they can't focus for longer than ... ooh look at the shiny thing.
There are lots of problems with hiring and skill metrics, candidate assessment, skill perception, and the forms discrimination can take, but in a comment to a lame blog post I'm not going to bother.
This blog has become the Enquirer. Big headlines. Wild assertions. Bait-and-switch. Red herrings. No proof. I remember when there was serious content, but now it's making TDWTF look positively academic. At least they don't take themselves so seriously.
PS some good replies in there. At least some of you get it.
Maybe you should change your assertion to: What *good* software developers do best is learn, and if you want to be good and stay good, you must keep learning.
"Opinions are like a**holes .. everyone's got 'em"
Spot on! My best ever hire (and I was hiring based on Joel Spolsky's philosophy of smart people who get things done) was a fresh out of school graduate.
She blew me away with her passion and understanding although she had no commercial experience. Within 3 months I had decided to promote her to senior developer alongside a guy with 10 years experience. It made no difference, she got it, and she loved web development. Could easily have been a software engineer technically speaking but had the passion for front end stuff.
The only reason I am where I am today is because someone took a chance on me way back. I passionately believe that is where the best people come from, so when its right, I'll take my chances with no experience.
One situation where experience in specific skill matters is when hiring contractors. When you are being charged by the hour, you don't want a contractor to be learning on your dime.
I agree Jeff, I have years of experience and guess what, it means practically nothing when going on a new gig.
I've done consulting, tech support, sales support, architecture, DBA, software engineering, you name it , I've probably done it but each and every experience is different.
The only thing that the 'years of experience' has done for me is allowed me to understand how to get through the problem in a sort of similar way. And I'm not talking about coding, that’s the easy part.
No, the hard part is understanding your customers business, needs and how you can contribute most effectively.
And don't let me get into office politics, that's the hardest part of all and unfortunately, the one that makes or breaks both you and your project most of the time.
I could go on and on but what experience has taught me is that I can more readily assert which projects I want to take on and which ones I don't and most of time it has nothing to do with the technical challenge and everything to do with the 'politics'…
totally agree with Melvin. Consulting is the only way to show your skill. Full time should be spelled "fool time" judging by the number of automatons who "can learn quickly" and still remain "overall great guys."
I cannot think of a single human endevour worth pursuing where the ability to learn and adapt separates masters from automatons. IT is no different.
Companies that insist on some skillset they cannot find anywhere deserve the people who can fake their way through interviews.
as engineers you have to figure out what will keep your passion for tech alive. true engineers will figure it out whether it's open-source contribution if your in a large company without many exciting new tech coming your way. whatever it takes!! I don't care if your 23 or 63, if the fire to learn and keep learning is intact, that's the value-added commodity that your either born with or not. i've been in software engineering for 9 years, this will be my 10th, and electronics professionally prior to that for 15 years. i have a family; wife and two little kids, etc, plenty of reasons to say i don't have time for tech after 5 pm, but who i've always been keeps that fire for tech alive into the wee hours of the night every day. I keep learning; I'm having more fun with Silverlight after this post at now 10 PM to get up and do it again tomorrow at 6 AM.
point: regardless of experience, your value as an engineer will only be a result of time and passion your put into it. will you remember every nuance of everything you touch? NO! well, better stated, you shouldn't because then you set yourself up for something becoming a religion; I'm a JAVA programmer, I'm a C/C++/C#/PHP/RUBY/Iron Ruby,,, programmer. isn't part of the best software solution in using the right tool for the job? an employer or perspective employer should reach past the noise of experience or non experience and discover how much fire this person has for just tech and we engineers need to be able to demonstrate or convey it by whatever means even if it's knowing you just applied an elegant design pattern to a very troublesome piece of procedural legacy code, use it, convey it, build upon it and be proud of it..
Let's get real here. It is completely true that we can not stare at the years of experience in Java, C or any single discipline and then make any definite conclusions how good the guys is.
The rule of the thumb is that it takes about 10 years for people to be the best they can be in their job. Some people are better than others, and some people are masters. They are separated by their natural talent, hard work, discipline and enthusiasm, but it still takes 10 years for them to be the best they can be.
So do not overlook experience, but you still want that fire and enthusiasm a notch more.
While I can agree with "you either get it or you don't" premise, your argument that experience does not matter simply does not hold and it is measured in cold hard cash. Since the dawn of a clueless, semi-literate (and often outsourced) automaton, I have been making my consulting dollars primarily based on productivity. Productivity itself is directly correlated to experience. I can work faster, better and with fewer bugs than your average coder who learned his craft at some IT roadhouse.
Maybe you should rename your blog as "blogging horror" because coding IS all about productivity and there is no productivity without learning and experience.
Who would want a job that hinges on low-level IP skills anyway? Did they slash the rate for that guy because low level IP wasn't on his resume? If I am dealing with an irate client, I will find another client and move on. If you cannot do that (or do not feel comfortable doing it), IT consulting isn't for you.
Or are we talking about die-trying IT full time job with low-level IP kung fu here? I don't know about you, but I'd rather be doing some cooler stuff than bother with HR fantasies.
I might be wrong but in the UK you can no longer ask for x amount of years any more as it is seen as discriminating.
I think that you are wrong. In the UK you can't discriminate based on their age. You can justify hiring somebody based on what experience and qualifications they have - hence is perfectly valid to choose candidate x over candidate y based on how many years of experience they have in a particular field.
Great discussion! A couple of points:
a) It's illegal to discriminate against candidates based on age. However, it's perfectly legal to "require" a certain number of years of "experience" for a given position. read into that what you may, but often companies are looking for a more stable candidate, believing that older == more dependable. this too, is a myth, but ... getting onto b)
b) managers, aka pointy hairs, have a penchant for seeking out candidates that are pleasant to be around, emotionally and fiscally stable, and have enough skill to at least fake it well enough to make them look good. call me a liar but you know it's true. the last thing most hiring managers want is to be embarrassed about a new hire. this is important to zone in on as an applicant. If you are a person of skill and integrity, it's easy to get your boss' job with no need to slander or to otherwise make them look bad. They will do it for you, eventually. Welcome to corporate america.
As a young person, remember that getting thru the door is the key. Your worth will play out eventually and become obvious to the ones that matter within a company. What you need as a young applicant is to create an environment of opportunity to attain that phase. Here are some simple tips:
* Appear mature: neither HR or hiring managers want high-maintenance employees. Your conduct and method of self-expression should support an impression that you will be reliable, dependable, and ... pleasant to interact with.
* Don't let your personality outshine your skill: i am a self-professed weirdo myself. but there are limits: you're interviewing to work in a professional capacity first. aspects of your own social integration within the environment are a key item for long-term success, but that comes with time. if i catered to every eccentricity in my personality i would be homeless. i keep a lid on it to survive, and to maintain an air of professionalism. drink the cool-aid, it's not that bad.
* Engage the hiring manager as much as possible about the problems they're wrestling with right now, and work towards convincing them that you are able to provide solutions to those problems. This will trump YOE -slash- acronym hell on any resume or job ad. If the hiring manager thinks that you can immediately apply yourself to a problem they're trying to solve, you'll be a leg up on the competition.
* Don't take the "years of experience" phrase too literally. In fact, if you think it's bogus - ignore it. I have for nearly 15 years now, and I'm batting over .500 for being hired while technically under-qualified by the YOE metric. Focus on your strengths in your resume and hope for the best.
To sum up: in my professional opinion, YOE is used primarily as a social filter and a way to discourage younger applicants who might need a bit of investment to become productive. This is horribly short-term thinking, and the companies that employ that attitude will die off as they deserve hiring only the pleasant ones. Let them. Move on and keep your eye on the prize of finding a company that's worth your time.
of course, I am a pointy hair amongst gods in this thread. caveats of circular logic, misguided assumptions, outright lies and grammatical mistakes all apply. if you're in seattle looking for a gig feel free to drop me a note :)
Speaking to the idea that saying "I don't know but I could buy a book and get up to speed" is a good approach: Be careful with this. I have had people say that in such an offhand way that they come off as insulting.
While I'm sure they were trying to show that they are fast learners, I have had someone say that they could be up to speed over a weekend.
It came off to all the people in the room as if they were oversimplifying the work that we do and many were insulted.
Learning is an important skill but experience in programming is important too. An experienced programmer can solve, say 100 common problems in no time but an unexperienced programmer, since he hasn't seen the problem before he needs time to fix it. I agree that a skilled programmer will solve the problem, but it will take time. But years of experience should not be seen as years of work experience. Specially off the work experience is more important as it is mostly for learning.
Two points directed toward two different replies. They're back in the comment history a bit, so forgive the need to scroll back.
@Louis - Developers are looking at specs and reference manuals all the time. You are confusing analysis/synthesis with knowledge. A programmer who never reaches for an reference manual or specification is a programmer who is in a knowledge steady-state. And I sincerely doubt they truly have the entirety of a platform memorized at the same time (I know of no one who does this). Admittedly, I forget useful modules and even obscure syntax of the languages I work with, requiring a trip back to the specs from time to time. But common syntax doesn't take long to pick up unless you approach learning each language as a vacuum. In that case, it might well take more than 6 months, as they will probably treat even the different parts of each language as a complete vacuum as well. So likely that the people you claim to want will only work with a subset of the language and never continuously seek out new and better ways to do things. It shows they wouldn't *thinking* about what they are doing; they'll just be regurgitating code the same way an English student might regurgitate Shakespeare without understanding any of the metaphorical meaning.
@Bill - Peter Norvig does not disagree with him. What Jeff is arguing about here is about forcing years of experience with particular technologies, languages, etc. You'll note in Norvig's article he recommends learning at least a half a dozen programming languages. You can't do that by focussing 95% of your time on one of them. But that's exactly what the YOE requirement lays down. It doesn't take long for someone to develop enough knowledge in most languages/frameworks/etc; if it did, what the hell use are they? What takes a long time is taking the knowledge from a particular framework or language, and analyzing it in the context of what other things you know. This is why both Norvig and ESR push for you to learn new languages. Each language will teach you new things about all the languages you use. They expand your theoretical understanding, which you can apply to any framework or language you might work on. At the end of proverbial 10 year journey, you'll probably know a dozen languages, and several frameworks for each; but the theory you've gained, the higher level understanding is what truly brings improvement.
I remember looking for jobs right after Java came out (circa 1995).
One opening was for people with 3-5 years of Java programming.
It is only partially true. No doubt good programming knowlege is required. Experience plays a vital role right from programming to delivery of the systems. let me redefine the role of software engineers. Software engineers not only do coding but interacts with team and customer, identify functional issues, think broadly about the functionally or visualize (not logical thinking). You can be a good programmer but experience teaches you to be an effective and cautious programmer.A Web or client server developer will not be effective in doing Embedding programming or algorithmic programming and vice versa. I know many guys who are good at raw programming but sucks at UI design and other things. You need to figure what customer needs and understand the customer are all essential parts of a software engineer. Experience teaches you such things. If you do not learn the customer needs inspite of having sound programming base we are as good as mud. Programming knowledge is important. This is the scenario.
Say i want to hire a programmer there are two candidates
1.who has less experience but has good programming skills say 7 out of 10.
2. who has more experience but he has 5 out of 10. i will take the second guy but if his scale is less than 5 then i will go for first one.
I know some people who are good at a specific language they will do wonders with that language but you cannot expect the same thing from other languages. People are different we cannot really conclude that a good programmer is better than experienced programmer and vice versa. On the contrary both are equally important. To me nothing goes waste if we really learn either from programming or other skills. But one thing is agreed we need to have a decent logic to become a better programmer.
Now, try to explain all this to recruiters-who-use-grep, there are plenty of them all over the world.
Recruiters-who-use-grep are ridiculed for good reason by Joel on Software, see his post about "JavaSchools".
I completely agree with this article. I'm glad to say I'm a large exception to this. I'm a programmer (mostly web stuff) for a large corporation, currently have less than a year of experience, only a high school degree (working on Associate's), and was congratulated by my boss just today for the work I did on my last project. The only reason he wants me working towards a degree is because the customer won't like seeing somebody on a project without a degree, and he even seemed to disagree with the idea that the customer would discriminate on something such as degrees or years of experience.
Reminds when I was looking for web work in 1997 -- frequently encountering ads for positions requiring "5 years experience" with CGI or HTML. I guess they all wanted Tim Berners-Lee. (The punchline was the usual requirement of "BS in Computer Science" ... because marking up HTML is so programmatically demanding?)
More likely: these were non-software shops (like power utilities or magazine publishers) who had HR guidelines for all hires ... said guidelines (vintage 1988) probably had listings like "Information Systems Developer III" which was the best job description the HR drones could find for the job ... and the guidelines specified "Bachelor's degree (Computer Science) and 5 years experience with relevant technologies" ... thus the ads
No hire 'cause they don't want you in "The Club!" It's exclusive, and where everybody's supposed to be a demi-god, or a cup-bearer! Can you play by those rules, and master the secret handshake at time of interview? HR has its marching orders. Gotta' look at your small hiring problem in context. Big Picture is whole economy that's "trickle-down!" And so-called "job market" reflects exactly that circumstance. "Gatekeepers" - and by their peculiar psychology - are the key players. Can't change small hiring problem without repainting Big Picture, and with different subject matter, also. This isn't even "thinking outside the box". To solve entrenched "hiring problem", and in any industry necessary to decouple hugely co-dependent demi-gods from their always enabling cup-bearers. Certainly it can be done. Possibly at level of "physician heal thy self" and, however, which is idealistic. There must be "new rules", therefore, and where there is agreed on "overhaul" of entire economy, as regards the way everything "doesn't work". So your small IT hiring problems are non-unique, and you must see a greater need before you can fix those. All respondants who offer their anecdotes, and constructive criticisms, on this blog are half-way there, in my opinion. Draw your own conclusions about all the others.
So, what's a new programmer supposed to do? According to:
"In the 2006-'07 academic year, only 8,021 students graduated with computer science degrees from these schools -- the lowest number of graduates this decade."
The same site also has articles talking about how hot the market is for new programmers. Yet, my son, a recent computer science graduate, is having a devil of a time finding entry-level jobs to even APPLY for. Everyone wants years of experience. Where do 10,000 (on average) newly hatched programmers GET those years of experience?
We're down in Nowheresville, FL. But, as an example, lets take a look at entry-level jobs in Washington state (I hear there's a software shop or two up there :) ). According to
there are 31 entry-level "Computer and Mathematical" jobs in all of Washington state (going back about 9 months). Granted, that site is just WA's "joint venture of organizations dedicated to addressing Washington State's employment needs." But, where else should the new computer science graduate look for non-local jobs?
Bit late to the party but still wanted to relate something I saw a few years ago. I was looking for a job in the US since I had a girlfriend there at that time. This was back in 2004. I found a posting requiring a Java programmer with 10-12 years of experience with Java. I wrote a mail to them recommending they contact James Gosling for the job, since he would be practically the only person qualified for the job. I never heard back.
I might be wrong but in the UK you can no longer ask for x amount of years any more as it is seen as discriminating.
Of course, it depends entirely on your requirements. Imran had a post about this recently:
I think the point is that when you ask for years experience it should be seen to indicate a certain ability level amongst the general developer population. i.e. if you want a junior programmer who perhaps doesn't know many languages/to a great depth then maybe 1 year is appropriate. If you want a language specialist then 10 years might be appropriate. The real key thing is to not filter out applicants only because they don't have the exact number of years. A good developer with 2 years experience might be as good/knowledgeable as an average developer with 10 years. If you don't apply any baseline ability filter then surely you spend your days going through thousands of CVs.
Joel Spolsky's been saying this for a while: smart and gets things done.
I've interviewed a lot of tech people over the years and haven't gone wrong with this maxim very often:
10 Years of Experience in [technology]
is more often than not:
The same 1 Year of Experience in [technology] 10 times over.
Holds true whether you're a software developer, systems administrator, or a sanitation engineer. Experience means very, very little here.
Me? I've got 20 years in this industry. Maybe only a few of them I'd consider "repeats". Otherwise, every year I've learned something new, mastered a new technology, or did something completely different. When I say I've got 20 years, I mean it. I have a *lot* on my resume, and everything on there I'm prepared to give a 30 minute in-depth lecture on.
I wish my candidates could.
* If you put down TCP/IP on a resume, you'd sure the hell had better know how to describe a 3-way handshake and discuss -- in depth -- some techniques to avoid a SYN flood.
* Saying you understand SQL is the best way of getting me to ask you to design a table to describe a hierarchical structure or give a talk on concurrency.
* Woe if you put down something as generic as "Unix". Really? Unix? Tell me about the structure of an i-node, how fork() works, or how making system calls affect scheduling on the architecture of your choice.
* Oh? You really meant "NFS, but it's been a while." Fine. Then let's discuss file-locking strategies under NFS version 2 or 3, your choice.
* Both Java and C#? I love exception handling. Which method do you prefer, when and why? Your response had better indicate that you /really/ understand them, and that you've wrestled with both of them. Hate one or the other, love them both, you'd better have an opinion.
I don't care about language syntax (you can always look that up) or the classes you've taken (for $300 I can buy a bachelor's degree, meh). Demonstrate some understanding.
You really, very seriously, need to get a "format for print"
or "print" button. A blog without one is half-assed at best.
Dude, this blog does have a format for print option. It's available from the "Print" option under the File menu.
Oh wait, haven't you heard of CSS?
Great article... couldn't agree any more.
You definately hit the nail on the head and it is kinda funny, because I use to hear the you don't have the Real life experience when I was orginally looking for a job after college until I was hired to a consultanting company. What I think is so extremely funny and why I feel the years of experience should not be a factor in hiring/recruiting is, because recently we hired a developer who had 10+ years of experience with the language that I do virtually all of my code work in. The developer in question was let go within 2 months, because he was not able to do even the simplest tasks correctly. Unfortunately this developer would work great as a code monkey, but is unable to work as a developer.
experience ...hmm, do you want to know where's the difference between experienced developer and rookie?
rookie will give you faster code, rookie will give you code prepared for majority of future demands right now, may be rookie is even faster then experienced guy
...but experinced guy will give you simple code, more LOC, slower execution BUT code which is easy to understand and easy to maintain.
In other words, from rookie you've got super dooper code but and only guy whis is effectively able to maintain this code is your one and only rookie ... but he won't do that because it's not challenging, it's boring and first major new feature reqeust will ruin all the magic. From expereinced guy you have a code which is simple, everyone can maintain that code easily, anyone can add new features easily ... and the code is based on "what was wrong last time I did it" experience (that's all the magic of the experienced guy ... and that's what I call The Experience) ... and as a bonus usually you have 100 times more accurate time estimations from experienced guy.
That's basically the whole story.
I want an experienced guy working with 2-3 rookies ... it's like family, children need parents.
So again I have to almost completely disagree with your article (as I did with your interview process ideas), sorry jeff