It's not a talent shortage, it's a hiring problem
fredandrandall.com
fredandrandall.com
1) Fail to realize that good programmers know about programming in general, and that this knowledge easily transfers from one language or technology to another. If you're looking for an X programmer with Y years experience in Z technology, then good luck with that!
2) Conduct your actual hiring process wrong, as described in this blog post. All these companies ask for "rock star" developers, yet when they actually get one to an interview, they spend all their time running them through one whiteboard exercise after another, instead of asking about all their amazing projects.
Unfortunately, I know I'm preaching the the choir here. I wish this kind of blog post could reach the eyes of HR people and/or hiring managers. Perhaps it could change some minds.
If you're having trouble hiring, it's probably because you're not paying enough. It turns out that talented people are worth paying a lot for.
Three months later, no offer. What was most interesting was how few interviews he received. He went with the cold resume drop approach. It's almost as if no one reads them at all.
He eventually just took a job with someone he knew from a company he worked with in the past. And in fairness he has several open door offers (I've told him that if he ever wants to work with me, just email me a start date).
But the fact that someone who I would actually describe as top 1% of devs I've worked with can't get a job without relying on his network is kind of scary. Imagine if you want to ever change from one sub-industry to another. And some of the companies he applied to are the same ones you'll hear complaining about the lack of qualified talent, yet they didn't even do a phone screen on someone who I am confident is a lot better than 90% of their current workforce.
I've always thought that the software industry is one of the few things you can get into without having a really good network (although it definitely helps).
Create a fictional rockstar resume(s). Not too over the top, but someone clearly a cut above the rest. And submit to various companies online. Report on which ones actually query back with interest.
A network of independent, apparently competent former co-workers who can vouch for you is difficult to fake. Failing that, the ability to bring it – to stand up in a room, armed with nothing but a whiteboard marker and a grin, and convince people that you're knowledgeable, wise, serious and energetic – is also difficult to fake, not to mention a really valuable skill.
This is just one of those unavoidable aspects of human psychology. Ignore it at your peril.
Lots of programmers seem to think networking is somehow beneath them. But it's the best way to sidestep most of the pitfalls everyone is amply describing here.
Isn't it expected and the way things have worked? Friends give friends who give you jobs. Applying blind is like the shotgun approach because the relationship between you and the candidate company is nonexistent and has no context. If you're a friend of Jack's from his previous company, you're already someone and you come from somewhere. Doesn't necessarily make sense, but that's how people are.
Further, exceptionally good programmers hang around with other exceptionally good programmers and in companies that have an eye for exceptionally good culture. Now, where's the link to your generic Big Co to which you send your application? Colleagues? Generally no. Management? I don't think so. Name of the exceptionally good company? Hardly unless one of the big global names. You get to keep the badges you're known for? Not really, because the field is different. Would you recognize a good CEO based on the small company he was working But the fact that someone who I would actually describe as top 1% of devs I've worked with can't get a job without relying on his network is kind of scary.
Isn't it expected and the way things have worked? Friends give friends who give you jobs. Applying blind is like the shotgun approach because the relationship between you and the candidate company is nonexistent and has no context. If you're a friend of Jack's from his previous company, you're already someone and you come from somewhere. Doesn't necessarily make sense, but that's how people are.
Further, exceptionally good programmers hang around with other exceptionally good programmers and in companies that have an eye for exceptionally good culture. Now, where's the link to your generic Big Co to which you send your application? Colleagues? Generally no. Management? I don't think so. Name of the exceptionally good company? Hardly unless one of the big global names. You get to keep the badges you're known for? Not really, because the field is different. Would you recognize a good CEO based on the small company he was working for? Even if the small company is the technical leader of designing pressure valves? And you're hiring him for the position of a CEO in a game company? He might be the rockstar CEO but you don't know the field.
My friend is a manager in a big consulting company. We talked and I suggested I probably wouldn't pass the hiring process of his company, eventhough I work for a lot more high-end technical company and would beat most of his employees technically. He was a bit stumbled but slowly realized it might be true. (And that he might not get into our company, despite his senior experience.) It's a whole different world there than where I am. ? Even if the small company is the technical leader of designing pressure valves? And you're hiring him for the position of a CEO in a game company? He might be the rockstar CEO but you don't know the field.
My friend is a manager in a big consulting company. We talked and I suggested I probably wouldn't pass the hiring process of his company, eventhough I work for a lot more high-end technical company and would beat most of his employees technically. He was a bit stumbled but slowly realized it might be true. (And that he might not get into our company, despite his senior experience.) It's a whole different world there than where I am.
I don't know, in my (albeit limited) experience this has worked every time. Once a year in a row for the past five in fact. A nicely worded cold email highlighting relevant experience with links to code samples usually gets an interview.
I am definitely not your 1% super-developer, I think I probably sit right in the middle of the bell curve.
Not to lower the value of networking though, do it. I've learned much from just talking to people and keeping in touch, and so far I've helped set up a couple of deals that went well.
A month later, I finally landed a gig. I had a few offers, but over the course of a month, I had more frustration with people I was interviewing. Three places I interviewed with weren't looking for a front-end guy, they were looking for a Javascript programmer (my goal wasn't to write JS 7 hours a day - sorry). Also, I had several instances where the company had no idea what they were looking for. One company said they wanted someone who did a lot of server sided Javascript (node.js and backbone.js) as well as being a great designer. Seriously? WTF?
I agree that most of the interviews I excelled at, was where I got up and showed the company the app I just helped build. As opposed the the "code quizzes" a lot of places now use. I actually stopped a guy in one interview who kept asking me basic CSS stuff and said, "Did you even look at the sites in my portfolio or my personal site I built?"
All in all, it was very frustrating and I felt like I really had to go way out my way to try and convince people of my skill level. At other times, I was trying to pry out of them what they were really looking for.
(This is especially true for folks who program Javascript in 2012. It's a field in enormous flux.)
In many fields, it's normal for interviewing to take months. They warned us grad students to expect to spend a minimum of three to six months looking for Ph.D.-level jobs, because you tend to be searching among a fairly small pool of employers who are looking for folks with specialized training very similar to yours.
I posit that all sides are broken -- yes -- the recruiters, the hiring companies, and YOU, the engineer/marketer/whatever you are.
I'm only going to address the one part that matters -- you.
Who cares how qualified you are? You think that entitles you to a job? Gimme a break!!! Do me a favor and put aside your naive and childish ideas about job entitlement...
The following is not prescriptive, but it works for me. The HUSTLE.
1. Skip the resumes and all formal methods of first contact. Scrape linkedin and other places to get an inside contact where you want to work.
2. Skip HR. They are only good for filing paperwork once you have a done deal.
3. Once you have a contact send a two line email asking for 15 minutes and a coffee. Be charming and funny. Don't sell yourself. Let your good looks and excellent hygiene speak for you.
4. Whatever your salary / hourly rate is, double it. Think perceived value.
5. Ask lots of questions.
Note -- this is nothing new. This is business as usual, and I love it. Networking is everything.
In case anyone here is wondering, yes -- I am a developer from time to time.
I don't feel entitled to work somewhere because I'm qualified. I feel that if I'm qualified and would be a good fit, that the company should want to hire me. The problem is that they often don't get a good picture of how qualified I am or how good of a fit I could be. That is the problem.
2. For cross-continental meetings, substitute coffee for phone call. Or serendipitously turn up at a conference, a panel, or in the executive wash room. This is all the easier with twitter and 4-square. Hustling is not stalking according to my attorney :-)
3. Companies don't hire you. People hire you. It is your job to get PEOPLE interested in you, and that does not come from a resume, qualifications, or any other credential. Those are incidentals and formalities "after the fact."
Shh..little secret..od you know how programmers skip FB or Google HR?
They submit a product to FB or Google that gets a buyout offer..
Smaller firms its much easier to skip HR..you just get a hld of the engineer manager
Will this hire go in front of clients or investors?
Believe me, it matters. However, I said that with a twinkle in my eye. I regret there is no <joke> or <sarcasm> tag
the concept of apprenticeship has been completely eradicated.
i work in a specialized area and had trouble finding candidates that matched my job profile. frustrating. but then i took a step back and looked at how I had gained those skills - through practice, through experience, not through formal education. so i started to look for good people, good learners, flexible minds. yes, there will be a ramp up time, but they also come with fresh perspectives. i can also directly influence their knowledge as i am their reference point.
and age is not a factor here, last guy i hired is 50+ - and i am 32.
I have a funny example of this "hiring problem." Shortly after I consulted for a established, public web company, they were hiring a FT person for the same thing (design-related). The dept I consulted for emailed me and asked me to submit a resume and said they'd make sure I floated to the top. What happened? I didn't get past the phone recruiter. I could tell she got hung up (no pun intended) on something on my resume and I got a rejection email from her shortly thereafter.
So as this post suggested, the company went the consulting route before-hand and we worked well with each other. Then a recruiter got in the middle and messed it all up.
It seems you would be in a prime position to get the job (if you, in fact, wanted it).
I told several companies "no thank you" after going through their interview processes, where the only thing they did was asking one whiteboard coding question after another. None of which had anything to do with the real-world domain of their business. The company that I ended up joining didn't ask any - their questions were no less technical, but they were experience-based, rather than quiz-based.
Its like, here are 5 dozen requirements for the position no human alive currently possesses, now let us talk about everything EXCEPT code.
I'd just say "you want to work for X doing Y using Z? Show us some code samples of what you have done in the past".
And I would hope it would not always be "show us code samples using this tech for what we are trying to do" because then I already wrote your back end for you, apparently. I have a good ~30k lines of code I have written in college for both courses and freelance, and it all seems to sit in a folder of stuff I have since nobody ever wants code samples.
There is the flip side, that people could copy paste someone elses work to try to claim as their own code to get a foot in the door. Dunno how to deal with that. Maybe just ask for some 1 day assignment. If you are a web company, have them build a simple table in django using some database. Or something just to show they know what you are talking about.
But the rapid fire graph search and various sorting implementation questions and how do you use insert X random algorithm in convoluted way Y to achieve random result Z drive me crazy.
They're in Michigan, so finding development talent is a little bit harder so I don't know why they're discouraging college students from applying by having pointless job requirements that don't actually matter.
From the opposite end of the spectrum, I'm always amazed at the jobs that slap on the computer science degree requirement. My small rural municipal government was recently looking for a web developer to work on their CMS. A CS degree was a requirement for the job, despite there being very little pure CS work to being with (it is your standard db-driven website).
I don't know, It struck me as odd. Why would this small government, in a low income area - average single income was $25K/year in a report a few years ago - restrict their search to people who are said to be in high demand and probably being courted by places like Google with interesting CS problems that they trained many years to work on? And as a taxpayer, why would I want to pay Google prices? It is a useful resource, but not $100K/year useful.
After several months they finally did find someone for the role. Though, I cannot say if they finally relaxed their CS requirement or not.
As someone who doesn't have a CS degree, I agree that it is frustrating to see hard requirements like this. But looking at it from the perspective of your "small rural municipal government", hiring developers is probably a pretty tough and scary endeavor. Lots of people hold themselves out as developers, and frankly, a lot of them are pretty bad at it.
How do you tell the bad ones from the competent ones? A CS degree at least gives you the guarantee that they at least had some training.
Now, I am sure it would be useful for a mechanic to understand all of the properties of the materials to manually derive the torque setting needed for a wheel bolt and all, but in reality, you just follow the book. The science behind the application is not particularly useful within this context.
Hiring is hard, but I think this goes back to the original submission: If all you look for is a physicist, you're going to miss the master mechanic. You might even end up with someone who has no interest in tearing down engines at all. Is that really the better member for your team?
Yes, culture fit is important as is someone who really likes to program and build. You get to that after you've established that the person can code.
I'm not talking about the google "how many jelly beans in a bus" thing either. I'm talking "what is an inner join", "what will this loop output". Basic. Stuff. 9 out of 10 can't do it. Until you establish that you can, the odds say you can not.
As someone hiring, someone about to put my money in your pocket in exchange for the skills you bring, I've got to be sure the ROI is there.
What I always here is that 90% can't write a for-loop or a basic regular expression, but look great on paper, and vice versa.
EDIT: Recruiters are probably too stupid (usually) to be able to either administer or evaluate such tests and so will always be more interested in the "crisper" resume which belongs to some MBA doofus.
As for 'crisper' resumes ... this guy was a Santa Cruz hippie at heart. He knew what was up in the tech industry. If you pick your recruiters for having some personality, it makes your hiring process go so much better too.
PS - This is about Operations hires, there are similar tricks applicable to Engineering hires.
That is like asking, how do you implement a reduce function in CouchDB? The answer is easy, and would only take a couple of minutes with Google to answer, but I bet even many top programmers could not answer that question off the top of their head.
If you are looking for someone who writes SQL queries all day long, maybe that is a good question. But if you are writing software that does complex visualizations, occasionally pulling some information from an SQL database, should a recite-from-memory knowledge of SQL really make or break the candidate? INNER JOIN syntax is something you can easily query Google for.
Another thing is that some candidates (or their recruiters?) "inflate" their resumes claiming expert knowledge for things that they heard about in passing or maybe did some trivial task with it. Asking such trivia knowledge allows to find it out very quickly - if one claims to be SQL expert with 5 years of experience and don't know what inner join is - he's probably lying. And this is a bad sign - to start relationship with a lie. I know some people like to do that (especially because of the keyword-match approach) but it's a huge turnoff to start an interview with a supposed expert in the field you need and find out the most work he did in the field was a toy project 10 years ago in college of which he remembers nothing and isn't even interested in doing that.
This is like saying if you can't write a controller in Ruby on Rails off the top of your head, you do not understand programming. SQL is a vendor-specific technology, and while it is related to relational databases, is not tied to the underlying theory. You can have a relational database that does not use SQL at all.
> if one claims to be SQL expert with 5 years of experience and don't know what inner join is - he's probably lying.
I agree with this. If you want to hire someone who understands the inner nuances of, say, MySQL then it may be a good question. This is quite a bit different to understanding relational databases though – one is theory, one is application.
Yes, you can have relational database that doesn't use SQL at all - how many of those are around and popular though? There are some, but not many. What are the chances that you worked with a lot RDBMS, yet never encountered SQL even at the basic level, and it is not immediately evident from your resume, which still says "SQL"? But OK, if that's the situation, you can say "you know, I worked with non-SQL relational databases, and let me tell you about this cool thing I've done that is way better than SQL JOIN can do" - and that might be fine too. Usually though the case is just that people inflate their resumes and think they won't be called out on it. It's very unpleasant because when you interview somebody whose resume looks good, you unconsciously plan that you'd get a great addition to your team - and then you discover he doesn't even know joins... Bummer.
BTW, inner join has nothing to do with MySQL inner nuances - it exists in virtually any SQL implementation out there AFAIK.
Google interviewers are strongly discouraged from asking questions like this.
Apologies.
I also would note that some candidates for our positions think "wow, all these guys know to ask are basic MySQL and PHP questions?", which makes me suspect other companies or the coder culture at large are asking the type of questions I derisively referred to.
Only if you don't fire them. Making hiring mistakes is Ok if you can correct those mistakes. As it stands hiring seems to be a high stakes game of win a job until the next round of layoffs.
When I first got into the industry you had:
---
* old fogey LISP programmers
* old fogey FORTRAN programmers
* old fogey COBOL programmers
* Assembly programmers
* C/Win programmers
* C/Unix programmers
* C/Mac programmers
* some people on the cutting edge looking at this new "C++ thing"
* everyone else
---
I mean, sure you had some specializations but nothing like what you see now. Now you have:
---
* young retro hipster LISP programmers
* JavaScript/Client-Side programmers
* JavaScript/Client-Side/jQuery gurus
* JavaScript node.js programmers
* Python programmers
* Python/Django programmers
* Ruby developers
* RoR developers
* Java/EE programmers
* Java-Android programmers
* Clojure programmers
* Scala programmers
* Perl programmers
* .NET/C#/Win32 programmers
* .NET/C#/Silverlight programmers
* .NET/C#/WP7 programmers
* Objective-C programmers
* C programmers
* Embedded C programmers
* C++ programmers
* Embedded C++ programmers
* Go programmers
* D programmers
* Game Industry programmers (usually C++, often treated as a wholly separate category)
* PHP programmers
* etc
* etc (this is maybe 10% of the list I could generate without getting into the really obscure stuff)
---
Of course a spectacular programmer can pick up a new language/platform quickly and is usually learning non-day-job related programming languages on his or her own time anyway, but I've still both experienced and heard anecdotally of many situations where spectacular programmers were passed over without a second glance because they didn't have "at least X years of KEYWORD-HEAVY-SPECIFIC-TECH". Viable commercial quality languages and platforms are diverging way beyond the ability of even the most passionate programmer to be regularly using all but a small minority of them.
They want to hire perfection, but are themselves imperfect.
I understand the appeal of hiring somebody who needs minimal training, but they may still not be the best pick. When it comes to a long-term position, it is better to hire the great developer who takes two weeks to get up to speed with some language or technology than it is to hire the mediocre developer who happens to have used Node.js or whatever.
When Java was young, I remember many tales of Java job advertisements demanding experience extending back before the language existed.
My impression is that the current insanity isn't so much the absurdity of the bureaucratic demands but the degree to which people take them seriously...
I need a developer with 10 years of professional
experience, and he needs to know Java.
HR hears: Developer with 10 years of Java experience
That, and we all know that sometimes the job listings are just there so that they can say that they tried to find other applicants, but the friend-of-a-friend is actually the 'best fit' for the job (i.e. those job applicants are designed to fail).The key to overcome that is to not give a fuck and just apply anyway. I applied to countless jobs right out of University that turned me down, but that didn't matter since more than one didn't. Nearly all of them expected more experience than I had, but again it is just meaningless HR talk.
FWIW I use programmer and developer (and coder, and...) interchangeably so that wasn't meant as a slight on Ruby programmers or to imply that they are somehow different from anyone else on the list.
The problem, however, is that if I am a software engineering team leader, there's no way I can talk (or have anybody from my team talk) to every candidate out there to see if they're good. I will have to use somebody to screen people, even before they get to the interview. So recruiters, etc. come in. And it's very easy for them to operate on the keyword basis and very hard for them to find out who's good and who's not. So they do what's easy, since otherwise they'd be out of business or seriously hurt their competitiveness.
* The fire storm over Deviant Art's 'we only hired 0.0000001% of people' blogpost/HN discussion.
* I went through the application process at a start-up where they were "really excited" about me after the first interview, but dropped me after the second because of a couple of stupid trivia questions. Trivia questions related to callable classes in Python, a feature that while interesting is (from what I can tell) little-used and extremely easy to pick up (took me 5 minutes of looking at the docs).
* I've seen groups within my own company pass up people with potential because they are 'too old to be junior developers.' (In this case, it was someone with development experience, though not too much, that was changing careers and who showed promise in his interview questions.)
* I know of particular people within my own company that are really smart, but also really harsh on interviewees. The tune seems to be along the lines of, "I'm a rockstar programmer, and if you're not too, then you're an idiot and I don't want to work with you."
* I know of places where it's generally admitted that current employees would not pass the interview process for the job that they do, even though no one thinks that they are inadequate for the position.
These are all examples of developers also doing a horrible job at hiring by finding arbitrary criteria to base their decisions on that have little to do with whether or not someone is a qualified candidate.
The traditional example is interviews for C coding jobs, where when developers interview, they gravitate towards standards-lawyering type interview questions. That at least has the advantage of being a fairly stable community, though; being a "C coder" has a certain set of cultural assumptions, and it might even be true that if you don't know certain trivia questions, it's a reliable litmus test for whether you're "really" a C specialist.
I am beginning to believe that the majority of people who consider themselves experts or experienced are really just novice or intermediate and don't realize how deep the rabbit hole goes.
I understand that it can be frustrating to feel like some non-technical person is blocking you from talking to someone that you can relate to and prove your value to. But it is just as frustrating once you get to someone technical that can understand you, only to find that that person is using equally arbitrary criterion to evaluate you.
I agree with your point, and posted that job ad in support of it: To disqualify someone because they are using C#/.NET is arbitrary and stupid, and apparently came from engineering.
And yet they are only equivalent in the same way human languages are: there is a shared core of ideas that are expressible in any language, and then there are things which are easier to express in some, and which cannot be expressed in some others.
The proliferation of computer languages seems to be strong evidence to the claim that programmers do NOT believe in the equivalence of languages. And perhaps pg is right, that we already have a winner, Lisp, and most people are just too blind to see it.
That said, the proliferation of language/framework-of-the-week projects is a serious drag on the industry. Its too easy right now to roll your own framework/JVM language/interpreter. The temptation is too great to manufacture a framework/JVM language/interpreter to solve your sort-of unique problem instead of adapting an existing one to your needs through modifications or extensions. In addition to clouding the buzzword pool, it hurts the position of existing languages because the energy that could have gone into improving language/framework X now goes into developing Y based on X instead.
Presumably if we could show this then the world's programmers could focus on porting old code into "Codesperanto" and everyone would be happy(er).
What was more bizarre, to me, was that most of the companies never bothered to look at my sample code or projects... and a few in fact said they didn't care what I had done (and proceeded to ask me edge-case algorithms stuff).
What was most off-putting, was the incredible amount of time involved in jumping through the hurdles. I only did this with a few companies, but after you add up: customize resume / cover letter + initial/hr screen + solve this screening coding problem + initial tech screen + anywhere up to 3 more tech screens + solve this more substantial take-home problem + onsite interviews... You're looking at a substantial amount of time.
Worse, it isn't a process they try to improve. They don't try alternative approaches nor do they refine their process through small iterations. They have a belief in what "good hiring" is, and they stick with it. They swear by their approach, all the while bemoaning how hard hiring is. They don't realize they are the problem because, anyone can hire...
I quit my job 6 months ago, and I've tested the water a few times since then. It's a joke.
In their semi-defense, they probably can do it at least as well as the vast majority of supposedly specialized technical recruitment firms, who are also largely a joke (yes, there are a few exceptions that prove the rule).
1. Talk to recruiter who is a non-tech person who doesn't really know what they are talking about and to whom you cannot really go in deep. This is the only casual conversation that you get to have about the company. (Assuming you don't know anyone there..)
2. Have phone screens which are that exactly: Ways for the company to give you a few puzzles and determine whether you based on whether you follow a certain process of solving them are actually good enough to join them. At the end of this, you are asked if you have any questions for them. In a big company, this person might not even ever work with the team that you are interviewing for. There is a good chance that after a grilling interview, you are tired and can't really have an actual conversation.
3. You have interviews at their office which again are designed to grill the candidate and don't offer any time for the candidate to get to know the people on a personal level.
I used to wish there was a way I could talk to an engineer in a company over coffee (and I am not talking about the whole lunch interview thing that a lot of companies do) and figure out what they actually do, what they want in a candidate and what sort of skill sets that they are looking for. Over the past few months, I have come to the realization that I am not sure many companies actually know the answer to that and all they are trying to do is to get the "best" without actually properly defining what that even means.
There is. You offer to buy them coffee.
In practice, this is actually how much of business (and that includes hiring) gets done.
The whole "Send resume, pass phone screen, do interview, get offer" thing is more the exception than the rule, especially for really desirable jobs.
I propose that Google is successful in spite of their vaunted hiring process, not because of it.
The end result was that we ended up having a harder time hiring, missed out on some good people, and hired some people we shouldn't have - all because we were hiring for Microsoft, not our organization.
Unfortunately, pretty much any high-profile, successful tech company will have its hiring methods replicated, even if they aren't a good fit for the company that is borrowing them. Hiring is one of the most important aspects of running a company - effectively outsourcing that responsibility via rote copying of another company's methods is a mistake.
The process does produce many false negatives, but that's much better than false positives. Hiring one bad employee can make many people miserable. Not hiring one good employee only makes one person unhappy. And they can interview again anyway.
This implies some others have to think about rephrasing or explaining more simply when speaking with you.
But a kinder interpretation is to note that there is a kind of threshold of intelligence which, if most everyone is across it, makes technical communication much easier. This fact mixed with (false?) humility to yield the mistake.
Haven't we all worked with that guy (or gal) who can't explain things as succinctly as the great, super-quick-witted double-800 SAT guy, but who has something different, a creative spark, a way of thinking outside the box? To assume that that character is simply a 'false negative' that an organization can do without, I think is very naive.
It comes down to risk and reward. Google has a proven business model; maybe they don't need that extra something that is worth the risk of a few non-performers. Or, as I suspect, that spark comes mostly from people who ended up at Google through acquisition, or the few who have reputations that allow them to bypass the traditional screening process, or they were just there at the beginning before the process was so ironclad. Or they got lucky and the interviewer liked them and gave them a bit of a pass.
TL; DR: Do you really only need an army of facile, confident test-takers who are good at making first impressions?
[Addendum: it occurs to me that if you are as large as Google, you can accept a process that only produces 0.1% (or less) creative geniuses (because lots of false negatives get rejected). You may even prefer to keep that number small but non-zero (a surfeit of true creative geniuses has its own problems). But is a ratio like 1:1000 the right number for a 20-person startup? I think the dynamics are much different at a small company. Let's remember, Google is not a startup, they are one of the largest companies in the world.]
It doesn't matter what you've accomplished if you don't remember what a red-black tree is you don't know how to program.
In the end when you want to hire, look at what they have done and ask them about that. In my opinion thats the only thing that counts. Solving quizes does not sound very important to me.
If someone can walk you through his thought process on his favourite project you can see if he/she is able to pick up the job you are offering.
I really like the idea about asking about their favorite project though. That would have helped out a lot for me in my interviews I think.
When I'm able to pull it off I've generally felt that I've left a better impression on my interviewer.
a) work-sample tests, if one can possibly be devised for a particular job,
and
b) general cognitive ability tests (IQ tests or IQ-like tests such as SAT scores).
Both work-sample tests and general cognitive ability tests have about the same predictive ability (predicting less than half of the variability in actual work performance, but predicting more than any other kind of hiring screen) as each other, and considerably more validity than many more common kinds of hiring procedures.
Expecting job-seekers to have
1) X years of work experience in Y technology,
2) a smooth manner in a face-to-face interview,
3) a degree in field Z from an elite university,
or any of many other hiring criteria are all less likely to identify job-seekers who will be successful on the job than a work-sample test. If the work at your workplace is so complicated and varied that it is difficult to design a representative work-sample test for job-seekers, test the job-seekers' general cognitive ability with one of the validated hiring tests used for that purpose. That can reduce the expense of your hiring process and improve its results.
To me, one of the big problems in the process is the lack of a feedback loop. Since recruiters and interviewers rarely give honest feedback (probably for good reason), it is hard for an applicant to know if they're applying to the right jobs or not. And faced with this lack of information that would otherwise allow you to be more effective and only apply to a few jobs that would be a good fit, the strategy becomes just spamming your resume everywhere until you get a response. On the company's end, this means that you have this extra mass of applications of wildly varying quality because no one has a clue what you're really looking for.
How could this feedback loop be improved? I'm not sure.
I come from a farming background. On the farm, when the work has to be done, it has to be done. The crop will wither away and be worthless if you spend any time waiting. That often means hiring people who are not skilled to get the job done.
On a grain farm, at least, good help are worth their weight in gold. I see some farms offering $50/hr. just to find talent. But in the absence of those good people, you still need someone to do the work. That often means settling on someone who is unskilled for, say, $10/hr. You just end up hoping the reduced pay will offset the additional costs of employing them.
The technology sector is different. The constraints on time are completely artificial. If a really good programmer isn't available today, the project can wait until he is available next month. Unlike other industries, here there is simply no reason to hire the less skilled programmer, even at a reduced salary.
Programming is a losing profession, and if you're in it you should get out while you still can. Get into sales, marketing, and/or management instead.
Source? Extraordinary claims require extraordinary evidence (or at least some.) There is plenty of evidence that counters your claim. (To start with, craigslist.org/sof has 90 listings on Friday while in 2004 I remember when it had like 8.)
As a developer looking for work, I am curious what you are looking for in your future employees. Looking at your profile and comment history gives me no hints.
Perhaps you have enough people to weed through that you don't want to post here and get a few more, but I know that I am not the only developer on HN that is looking for work. I'm also certain that other people would also appreciate knowing where to look for employers who have "crazy number of openings".
Thanks,
To echo what others have said : are you sure you're not raising the bar to imaginary and unrealistic heights? You wouldn't be the first would-be employer to sigh woefully just because you couldn't find a mythical wizard-rockstar hybrid.
It seems its a lot harder when I'm trying to relocate. Me thinks it really is about who you know.
Yes, but unfortunately settling this item is not as simple asking "Can you do the job?". Oddly enough all the candidates say "Yes".
The 'but one' was more interesting. Moved to a new state, drove over to the University incubator, knocked on doors and chatted with people. Nobody turned me away. Two were interested, but one was moving to Detroit (no thanks!) so I took the other one. Worked out pretty good for a couple of years. Total time 'interview to job' - 1 day.
e.g. Does the team practice TDD? Do they focus on unit tests or integration tests? How is work assigned? Does the team prototype ideas or discuss them in the abstract? If someone says something you think is wrong in a meeting, do you confront them publicly or privately? 12-hour days? Do you pick tools that are cutting edge or proven? Duct tape together two open source libs for one feature or write your own? And of course, the classic: Is it better to a) ship early with known non-critical bugs, b) ship on time with no known bugs, but inadequate testing, or c) when all/most stakeholders feel confident the project is bug-free?
These questions aren't nearly as binary as I've presented them (and there are many more). If you and your potential new team don't agree on these issues that's a poor cultural fit. Like a poor technical fit, it doesn't necessarily mean you shouldn't be hired, but it does merit significant consideration.
a) Making the candidate interested - I want them to be really interested in being hired, to ensure he will give his best shot (this is much easier when hiring with a specific spot in mind, which is not always the case);
b) Using a coding test that the candidate can do remotely at the time most convenient for him (http://www.codility.com/ currently - they are really good for this) as a first filter. This establishes basic programming skills, and allows me to...
c) Call the candidate for an in-person conversation and spend much more time discussing higher level questions, validating problem solving skills, and understanding the candidate past history. Unless it is remote position, in which case this will be a phone screening - notice I say an phone and not some kind of crappy can-barely-hear with-echo-or-lag-or-some-other-crap VOIP solution.
Finally, keeping this in mind has helped a lot: http://news.ycombinator.com/item?id=3690544
> Companies shouldn’t be turning qualified candidates.
> I feel like there are so many reasons to hire me
> I didn’t get to talk about the iPhone app I built.
Stop right there. You are not generalizing. You are talking out of your ass. I am always shocked when I run across people my age who are so arrogant. No matter how qualified you think you are, there will always be problems tougher than you have faced, hw architectures more delicate and complex than you have dealt with, and people who can blow your mind in ways that you cannot imagine. When you eventually acknowledge this, you should be grateful for the opportunity to learn what you can every day and that someone is paying you to do it. Fast forward 10 or 20 years and then we can start talking about value.
When you spend an entire interview doing college computer science quiz type questions, and none of it on process, code review, coding style, development philosophy, approach to testing, etc.... you end up selecting for people who are good test-takers, but may not be any good at writing maintainable code. Or debugging. Or troubleshooting production issues. etc... etc...
At my current place of employment, one of the engineering managers was complaining that an interviewee bombed a graph algorithm question. I asked, "Where -- if anywhere -- in our codebase do we use any graph algorithms?" Answer: "We don't." At all. Yet knowing graph algorithms is apparently a requirement for working here, which means that at minimum, I am unqualified to do my job. Sigh.
I'd much rather candidates spent time understanding memory implications of different types of java/jvm data structures, or know how to diagnose and fix memory pressure, or have experimented with design patterns to reduce memory requirements, etc. But nobody asks me. If you know off the top of your head that in the hotspot jvm an Integer is 4x as big as an int and that a Double is 24 bytes, and can figure out the rough size (8.5KB!!!) of a 100 entry TreeMap<Double, Double>, and know what compressed oops does and why it works, you'll almost certainly get a "please hire" vote from me.
edit: note that knowing a bunch about jvm memory use isn't a requirement, but knowing it will impress me. It probably also means you've been burned by jvm memory use before and that's why you know this stuff.
Personally I'd rather have a coder who understands the concepts behind these things, even if they don't necessarily know the answer right then, than one who is simply able to rattle off definitions by heart. In the example you gave, I agree that it's valuable to know that an Integer is significantly bigger than an int, and that a Double is bigger, and that your TreeMap<Double, Double> might be bigger than you expect, even if they didn't know the exact sizes of any of those things - but I guess I'd want them to be able to take a stab at working them out.
What is so offensive about JVM memory management? Out of interest what is better in that regard?
One of the problems is that nearly everything is an object so you end up with a lot of pointers which takes up additional space. Garbage collection isn't free either.
In this case it would have made sense to go with C++ and allocated as much as possible on the stack. It is cheaper memory wise (because you don't have to keep whatever malloc requires around and because they are removed as soon as you are done with it) and it gives better performance too.
For what you can't allocate on the stack, you a smart pointer.
There are of course pitfalls here -- smart pointers (via reference counting) can be slower than garbage collection and they have trouble dealing with cycles. You may also have to take special care if they are shared across threads.
Using C++ makes the assumption that the developer can manage memory a lot better than the JVM. Especially when said developer(s) are developing high level business or web applications for example. And do you really expect developers to spend time writing code that manages memory as opposed to shipping functionality.
I don't know if you have used Java, although I get the impression that you've written C++ programs. You shouldn't be so hasty in pinning your colours to the mast so aggressively over a language. As many people on HN have pointed out it's not the language, but what you do with it that counts.
In months of sporadic interviewing, I don't recall being asked a single question relevant to Windows development, engineering strategies, how I comment my checkins, or any of a million other things which seem much more vital to me. Every interview centered on puzzles and algorithms. Every job listing was for Windows/C++ with various platform-specific technology requirements that I fit.
Personally, I think a lot of employers just like to have perpetual job openings. It makes the company look good. Also, I think that a very, very large percentage of the "screening" is really just to provide justification to the subconscious decision that was made within moments. There's a reason that Silicon Valley is almost entirely white, male, and under 40, and it has nothing to do with technical aptitude.
Ouch....That's a very damning statement. I'm not in a position to comment on the truth of it - all I can say is that I hope you're wrong.
That's far from the case.
Bigger companies don't look like this. They look more like big companies all over.
Also, I think it might be pretty much the same thing: Indian workers might be given a pass because they're "cheap" (i.e. decision made based on instant impression and personal biases). That shouldn't be happening, H1-B's and minorities should earn the same as locals, but it seems common knowledge that it's true.
I lived in Oakland for five years, among a considerable number of black people. San Francisco, just a few miles away, has a sizable (but shrinking) black population. How many blacks do you suppose I worked with in tech? (It's two, if you're wondering, and one came to the company from D.C.)
Local demographic isn't very well correlated with professional employment, particularly in tech.
So if you are going to say the valley has a race problem, then one of the following things is probably true 1) You only see black and white 2) You work / have worked in some nasty institutions 3) You want to point out that there is a bias against African Americans.
I hope you were referring to #3
Your Silicon Valley must be very different from one I had the opportunity to observe.