The Programming Interview Experiment
sourcegraph.com
sourcegraph.com
In the described workflow, the candidate must spend several hours before talking to anyone in depth at a company. This scenario would simply not work for me. I will not spend hours of my time for a company that I potentially might not want to work for.
Or worse, go through a normal 5-6hr interview loop doing random questions on the whiteboard?
I think their approach is much more flexible and approachable. The overall time commitment is the same either way.
I have a much better understanding a company after the question portion of a half hour phone screen than I can get from searching the web for information about a company.
You want code challenges? Check out my GitHub account and pull some of my repos and check my code. THEN call me if you still want to interview me. I'm at a point now where I've amassed enough code samples (apps, games, plugins, etc) that you should be able to determine if my coding skills are up to what you're looking for.
That said, some concerns:
Leading with the source graph challenge seems a bit much. My experience has been that it’s necessary to have at least some filter for the unwashed masses before requiring that much work of someone. At my last company, we had a 30-minute non-technical talk with a founder (later replaced by our well-trained recruiter/office-manager). This helped filter out the people who weren’t what we were looking for at a really high level (e.g., an ops engineer applying for a dev role, a really junior person applying when all we have room for right now is a senior one, a dev who only knows pascal, etc) before making them invest the time required for an in-depth take-home test.
Also, what’s with the 24-hour limit? It seems too long to prevent cheating, but short enough to be annoying. For similar challenges, I’ve given people as long as they want (up to a few weeks), but asked for a blow-by-blow writeup of how it went and how long it took them. We may have gotten some liars, but we never had someone arrive on-site who claimed it took them 2 hours when, based on their skill, it probably took them much longer. People seemed reasonably honest about it, and the convenience seemed to be appreciated.
Asking to see source code for a significant project is tricky. I know good developers who wouldn’t have any code to show for that because everything significant they do they got paid for, and can’t in god conscience show to someone else. For example, I worked pretty long hours at my first job and built some interesting stuff, but I didn’t have much time for side-projects because of it. A friend of mine works normal hours now, but does contracting on the side. Plenty of good code, but nothing he could show to someone else. That said, asking to see some source is very high-signal, so it may be worth the tradeoff of only selecting people with significant free side projects.
That said, it’s still a way better process than teasers and whiteboard algorithms. If I were looking for a job, I’d definitely apply. :)
I have a feeling that an unwashed boson wouldn't be able to complete the challenge at all.
Or the dev that only knows pascal - if they can pass the challenge using pascal then I'd think they could easily learn whatever coding language your team uses. Learning a language is easier than learning coding.
That's what I like about coding, and about these blind challenges - it's purely skill based. If they want to apply and can pass the test, they they're worth talking to. If the wrong people are applying (and passing) then your job description and challenge are wrong and need to be calibrated.
However, when I referenced the hypothetical ops guy, I was referring more to a misalignment of goals: someone looking for a job where they’d be doing more devops stuff vs our need for a dedicated developer.
Regarding the hypothetical pascal developer, it really depends on your need. I’ve been in the position to hire bright people who can learn our tool set on the job, and that’s great. I’ve also been in the position where we can’t afford a month or two while a new dev learns our language an framework before they become productive. When in the latter position, it makes sense to weed people you’re not interested in out early.
I would love it if a well-written job description would prevent unqualified people from applying, but my experience has been that it just doesn’t. That’s why some people use fizz buzz (http://www.codinghorror.com/blog/2007/02/why-cant-programmer...). That’s why we used a short phone screen.
If someone were looking for a devops-oriented job, why would they be applying for your non-devops-oriented position?
I was highlighting that line because I think it indicates a subtle bias towards people based on background and assumes people are not making reasoned decisions about what they are applying to. I understand that there are tons of unqualified resume blasters out there, but I figure nearly all of them will either ignore the take-home or submit such schlock that it will be easy to automatically reject them.
Seriously?? What actual company do you know that would allow its IP to walk out the door? And possibly to a competitor?
Additionally, projects are usually the work of a team, and are heavily iterated upon. "your contribution" is usually hundreds of little changes building upon other changes, not "this is the application I wrote".
We would never ask to see proprietary source code. Hopefully, a candidate would have a side project or open source work they're willing to share. If not, we'd definitely work around this. For team projects, we'd ask them to describe their contribution. So far, this hasn't been a big problem, but we're still iterating and making the process better!
All of these individuals can code, no question. However, they are impediments to accomplishing the business goals that my teams are tasked with solving.
I find it interesting that everyone I know who has been terminated or laid off has been done so for reasons not related to technical ability, however technical ability is the majority of what's interviewed for.
I think it is much more important to hire people who can work with others and deliver the value desired, but yet this is not what most employers interview for. In my opinion, if I can get a credible recommendation that a candidate is technically competent, then I don't think spending an extra minute on technical questions is important. I would rather be sure they they are competent in all other aspects of the role.
I think that some companies become so intensely focused on hiring the best candidate that they sometimes lose touch with the fact that the candidates are human too. Interviewees are rational and trying to find a job that has a best fit. By taking the time to give them a project to work on, it allows them to get a taste while demonstrating that you have respect for them.
My favorite interview was where a company gave me a sample data set, and basically said "Do anything with this in python". I ultimately didn't get that job (not enough experience), but I remember that company and the guy who I went over my creation with, and now respect them more than the dozen other companies who made me feel like I was on a conveyor belt.
I've done a bunch of programming tests, without progressing to the interview stage after doing them, and now I usually refuse.
While I do think that there is plenty wrong with traditional programmer interviews and that new approaches are needed, it isn't really a scalable solution on the candidate's side to spend hours to days on challenges for individual companies if everyone is asking for one. It becomes sort of like everyone wanting their own app store, or their own always-running polling service running on a desktop or mobile or whatever. If there are just a couple of people doing that, no big deal, but once more than a couple of entities start doing it, the system falls apart. If you're Google, Apple, Github, or some other prestige employer you can probably get away with this system even despite the scalability issue; otherwise good luck with it.
As a practical compromise, companies should be willing to waive the specific challenge if the candidate already has their own existing shareable source code they can point to, thus allowing a candidate to reuse the same example as a portfolio piece with multiple companies.
However, few companies are likely to do this since the same basic ego problem that breaks traditional programmer interviews comes into play ("Well we do things very different here, we're very special, so we must make the candidate jump through hoops X, Y and Z").
If you give a programming assignment, then you should at least have the decency to give an on-site interview to everyone who gives a solution that compiles and runs and gives the correct answer. That's why I usually refuse to do them now.
Not only am I spending a couple hours on someone I never met, the conversion rate is so low that I'm convinced it's a waste of time.
Also it's insulting. You're asking me to waste a couple hours of time for the privilege of maybe getting a chance to talk to you? When "maybe" turns out to be "almost never", I've really soured on the pre-interview programming test.
I think work samples are a wonderful way to screen candidates (really, the best way) but to presume that all qualified candidates will have an additional sample of code (to the scale of a "significant project," even) available upfront for you without requiring an additional commitment seems disingenuous.
You end up applying an implicit filter for "developers who feel confident and comfortable contributing to OSS and/or possess copious free time for a personal project," which probably isn't really what you were trying to select for and tends to unfairly filter out certain types of candidate.
I just wish you had more information about your company online (Angellist/Crunchbase etc). I think few people would be willing to put in 3-4 hours on a coding challenge unless they had a good idea about your funding, size etc.
I might have got a coding challenge from you a few weeks back but skipped it because I didn't have enough information. Ah well.. might do it this weekend.
Hope this helps!
I ask about runtime at every interview (part of "coding, data structures, and algorithms"). It is most definitely not a trivial concept - how do I define the correct solution to a problem when there are multiple approaches?
The requirements for a correct solution (even simple coding problems) include style, correctness, performance, and scalability.
>The second thing is the strong focus on topics taken from >classroom algorithms and the lack of concern about >practical programming ability. A candidate might somehow >remember that the way to implement an optimal string >suffix matching function is to use a suffix tree, but >where is the question that gauges the ability to create, >test, and deploy a complete application in a reasonable >amount of time? Which skill is more important to you?
Design, data structures, development methodologies, etc, they knew it all. But ask them to code a simple method (find the intersection of two lists) and they take an hour to deliver a barely-working, sub-standard solution.
Trust but verify.
I really wonder if those places ever find people that can do this. I never get offers from the places that ask this. I always get offers from the ones that have a similar process to the one in the article. I don't think I've ever even met someone who could answer these questions on-the-spot, with a marker on a whiteboard.
That's a horrible interview question. If you know the trick (saw the question before), it's easy. If you don't know the trick, it isn't reasonable to expect someone to figure it out in 5-15 minutes.
That's a brainteaser question disguised as an algorithms question.
The best part is the environment is shared between you and your candidate, so you can both see the code being written and execute, live.
Legally, the candidate will have the copyright to any code he writes unless there is a "work done for hire" agreement in place.
You "design" code.