As usual, these are just my uninformed opinions and I could easily be wrong about anything. Please enlighten me if I am. Also I must apologize in advance for my sardonic tone, or not.
This subject has probably been beaten to death, but hopefully this is a perfect enough storm to shed some light on how out of touch our hiring process is in the programming world. This is not a self-pity post, but I nonetheless reserve the right to take pleasure in moaning about my problems. I am really trying to raise awareness of a specific problem. (Plug: for those not already aware, yes I am still searching for a job*).
I have failed every technical interview I’ve ever taken. Objectively speaking, most other people consider me to be a “fairly good” programmer. In spite of what other people think, I legitimately believe that I am a totally average programmer and anyone could be me if they put the time and effort that I did into becoming me (friendly advice: don’t). I am not gifted. Nonetheless people see value in what I do. My current work has generated 50+ direct job offers, but once I try to take one up at a big company** they put me through the usual resume-grinder.
I have to give some background because odds are you are reading this and have no idea who I am. If I sound like I am bragging, I probably am. But re-read the bold statement above just in case.
If you are curious what other programmers think of me, read through the comments on my website, Twitter feeds (1) (2), Youtube channel, Hacker News posts (exercise for the reader: dig through posts to find comments), or just ask around and chances are you might bump into one of the half-million people who have accidentally clicked on a link pertaining to me***. I have been programming for over 20 years, and if you count all the double-time I have put in, I have been programming for over 30 years. I have worked in many fields, from web to mobile to compilers to GPU-related things, and even in areas that are not wholly programming-related like digital art, 3D modeling, and design. I single-handedly built some of those most complex 3D engines ever put together by a single person (more than once), worked with voxels 5 years before Minecraft existed, and VR 2 years before Oculus launched their Kickstarter campaign. I have a cult following of 1–20 people. I also once worked as a gardener?
And yet, I still cannot make it through your typical interview process at Big Company XYZ, even for a junior position. Knowing that people fresh out of college are getting a job I can’t is the healthy dose of humility everyone has been waiting for since the last paragraph. I would happily accept that maybe I’m just not that great of a candidate if my inflated sense of self worth and other people were not telling me otherwise.
My theory is that everyone sucks at these interviews, but some people put in the required month or two of prep work and studying. My second theory is that if you took someone who passed, and asked them to do a similar style of interview 3 years later (with new problems and no prep time) they would likely fail. Go ahead and tell me that I’m lazy because I don’t want to invest the time to excel in these interviews, I won’t disagree.
In my last interview, I did not even make it past HR to the technical portion. I won’t name companies as it is not my goal to single out anyone. My resume bullet points did not match up with the position bullet points, even though I’m fairly certain the position would have been easy. The recruiter seemed to have no idea how to value my work over the past three years (this is literally what they said on the phone, bonus points for that?). That is problem number one with the recruiting process, but not one I will talk about right now.
Encountering this problem, I came across a (YC) company I was very excited about: TripleByte (lest you think this is a plug, read on). They basically skip the HR run-around, take care of the technical interview portion and find companies for you based on your results.
Which is pretty awesome, except that, as noted, I suck at technical interviews (nonetheless, I applaud that the company is trying to improve the process, and look forward to future improvements). I made it through the first portion of their tests (the site claims that I “passed”) but at the end they have an hour-long programming problem that I messed up on. In the end, it shares many of the same flaws that most technical interviews have.
Google will provide you with plenty of results as to why technical interviews are “bad.” But here is the heart of it:
There is no test one can do within the span of an hour that will accurately test their ability to deliver real-world results.
Real-world programming takes days to years, and has margin for error (the average deadline is apparently exceeded by 2x to 3x the time estimate). And we Google stuff all the time. I have never encountered a real-world programming problem that I could not complete within a reasonable amount of time.
I have seen and worked with every variety of person on the programming spectrum, from “horrible” to “brilliant.” There is talk of a 10x programmer, but in reality I think its more like a 2x programmer. A 2x programmer is 10 times better than a 0.2 programmer, and 0.2 programmers are very common. I would claim that, on average, anybody who has been programming for 10 years (professionally) on non-trivial problems is probably at least a 1x programmer. When talking multiples, delivery time is not the only factor; you must also consider code readability, performance, bugs, and any technical debt the programmer might be incurring.
Above all, you must consider the programmer as more than just a blunt tool to perform your tasks. The most valuable task they will perform is innovating on some new product or feature that will increase the value of your company. No timed test or algorithm quiz will reveal this.
Additionally, a programmer might be able to ace an algorithm quiz, but they have never put together a large project in their life. Writing, organizing, and maintaining a large code base (particularly with other people) is a very important skill that no quiz can determine.
For a 1x programmer, unfamiliar territory is something they are used to, and it should be expected that they are ready to learn on the job, not necessarily know everything beforehand. Sometimes ramp-up times are not trivial. In particular, I would say that when you get into really low-level stuff, ramp-up time can be quite high for the unfamiliar. But generally, a 1x programmer can ramp-up on the required tasks within a month or two. And for the right programmer, that ramp-up time is a one-off cost that is entirely worth it. Every job I have ever started began with me ramping up in unfamiliar territory, and I have yet to fail a job.
So the question always boils down to one thing: how do you determine who the qualified programmers are? It is not necessarily easy, because it ultimately takes time to understand what a person has worked on, why it is important, and how it stands out.
There is a hidden currency here that (to my knowledge) we are not cashing in on.
That currency is respect. Programmers respect each other. If you are doing anything that is at all worthwhile, other programmers know about it (and probably use it themselves). Measuring respect is not a new thing. Sites like Klout do it, and many people consider your Twitter follower count to have a similar value, although people having been gaming that system for a long time. Github activity is also another good indicator, but then there are weirdos like me who work privately and never use it. There is also content (like technical blogs) that Github does not account for.
I do not have a magical solution, but I envision that it would be possible for people to express how much they valued another person’s work, and weight that respect based on how respected the person giving it is (with moderation, to avoid gaming the system). Of course, this could apply to any field, not just programming. Alternately, a week-long programming assignment will reveal much more about a candidate’s real-world abilities than a 1 hour interview (and yes, I’d rather spend a week doing such an assignment than a month memorizing algorithms and data structures and prepping for quizzes).
The bottom line is, if you care about your company you are going to want the best people. And I guarantee technical interviews are not the way to find these people. What you will find is people who are good at taking quizzes, which is nothing like real work. The cost of properly screening candidates is probably dwarfed by the value that good candidates add. This might mean companies should hire real engineers whose sole task is to screen their candidates, or rely on a third party for such a service. Again, I do not have all of the solutions, but I would hope that we continue thinking about some.
*: To those who have already offered I am still working through processing many of the requests and evaluating offers.
**: Why do I want to work at a big company? Well, I am still evaluating all offers at this point but it really boils down to money/stability/benefits, and the fact that I am hesitant to put my family through the startup gauntlet again.
***: I was even once spotted and identified by a random person in public, which technically makes me an F-list celebrity.