Interviewing for the anxious programmer
aneccodeal.blogspot.com
aneccodeal.blogspot.com
I don't get full blown panic attacks, but I get extremely stressed out as well during tech interviews. I think I'm a pretty good coder/computer scientist - I've released tons of open source stuff, spoken at conferences, solved many Project Euler challenges, published papers, taught people how to code, etc - but my success rate is still abysmally slow in interviews because of that.
For me, it's a mix of the stress of feeling judged, having to "impress" someone in a very short timeframe solving a problem they know perfectly and that I have never seen before, the fact that I am naturally introverted and shy, etc.
A friend of mine who works at a large tech company in Seattle told me he took Xanax before his interviews. Another friend working for a big tech company in the valley told me he'd chug a couple beers before his. Yet another friend working for a fairly large "startup" in SF recommended that I smoke a joint before my interviews.
Our industry is weird.
for me for example it's similar things others consider impressive, i consider so trivial that when i was asked that question the last time. i just looked at them and said i dunno. there was a name for this that i can't remember, but it had something to do with underselling yourself.
another problem i noticed is that i think a bunch of problem solution, and scalability pairs in my head after getting asked an interview question. the guy who's looking at me doesn't know what's going on in my head the only thing he sees is some dude staring in the room. i heard that this is actually very common.
a friend of mine at facebook advised me to actually speak out what i'm thinking, as i try to solve the problem, but to me it almost seemed like i would insult the guy by saying a solution i know only works in certain corner cases.
in summary it's very rare that people don't get a really good impression of me after having worked with me. but exactly that is the problem. in open source you can work with anyone, but in the job world you might never even get the chance to.
The point of the interview isn't about reaching a solution, but showing you can think and reason about the problem. You want to identify those corner cases, and reason about ways to fix your solution. Someone who can do that is a better candidate than the know-it-all who doesn't have those skills.
I wish it was kosher to say this, "now if you will please excuse me and leave the room for 10 mins, then we can discuss, and hope you dont mind me taking your questions while I pace". Many have trouble with coding on the whiteboard, thats a lesser problem than these.
That being said, I've only been high for personal programming projects, I wouldn't be likely to smoke before an interview.
If I smoke any amount I just zone out and get paranoid, while I have friends who get high and do their discrete math homework.
So things I do to help out with that. I try not to give quick or trickly puzzles as questions. I try not to make it adversarial (like "I am testing you") I try to make it collaborative "let's solve this problem". Often that is an actual problem being solved or solved in the past. No digging holes with 5 worker vs 4 workers (we are not a utilities company) or, no geometry of manhole covers (we don't maintain our own sewer system here, someone else does). I try to give hints or switch topics and talk about something else, not everyone is knowledgeable in all areas.
Not sure of those above would be helpful but would you or anyone else here want to advise an interviewer as to what would help? How would you interview yourself or what would you do to make it easier and less painful?
2. Request code samples. A lot of companies ask for Github links but don't bother to take the time to review and discuss the candidate's code.
3. Ask for examples of work product (public facing if possible), and ask detailed questions about them. This is a great filter. A candidate should be excited to talk about his work and should be able to go into technical depth about what was involved.
4. Provide a practical programming task before the interview. This should reflect the type of work that the candidate will actually perform as an employee. Let the candidate complete the task when and where they like. Don't provide a task that would require more than 1-3 hours of the candidate's time as estimated by how long you think the task should take. Set the expectation with the candidate that you'll be reviewing the deliverable before he comes in for the interview and that you'll be discussing it with him when he comes in.
5. Ask practical technical questions. If the candidate is going to be asked to work on an app with a MySQL database, you don't need to ask many questions about basic stuff (like joins, foreign keys etc.) to get a sense of whether they are a poser. Focus on high level concepts, not on questions that pressure the candidate to make a decision on the spot that would be contemplated in a less intense environment in the real world.
If you cannot weed out unqualified candidates doing the above it suggests that you require a demonstration of competencies that will never realistically be obtained reliably in 1 or 3 interviews. If this is your situation you should consider requiring a trial or contract-to-hire arrangement.
I always do something like this and it just turns into a spiral of anxiety. It's like my brain shuts off and wants to panic
There is a classic anecdote about the manager who handled a large stack of resumes by randomly throwing half into the garbage, and remarking "I don't hire unlucky people"[1]. I can't find the original source, and it's probably not true, but it is closer to what they are doing than actually evaluating people for a job.
Those personality traits can't really be unlearned, but I think it helps if you go in with a nothing-to-lose attitude and explain as much as you can - maybe something you say will connect with the interviewer.
I think the other problem here is something I blogged about before: programming is (for me) a tacit skill (http://doxsey.net/blog/tacit-knowledge). I have no idea how I do it and I can't really explain it in the abstract. It'll look real rough in the start (like I have no idea what I'm doing), but 3 days later I'll probably have a solution.
In other words, I can probably do the job, but I can't really prove it in the interview.
There's definitely value in asking a candidate questions face to face as there are times when problems need to be discussed, but clearly there's a non-trivial segment of the programmer population that has trouble performing under this type of atypical situation.
Why not also have a sort of "written test" portion of an interview where the candidate doesn't have to stress out about performing in front of people they don't know? It would certainly help reduce the flagging of false negatives.
EDIT: by "written test" I mean something like a test where the questions are on a piece of paper or text file, and the interviewee just answers it on there, without another human sitting there and staring at them. The interviewee can always be asked to explain his/her answers afterwards.
My advice (not that you asked for it, but I feel strongly that you should consider it): seek help from a qualified professional, like a psychologist. You don't deserve to suffer like this and it is not something that you should be trying to solve on your own. You may not believe that someone like this could help you, but consider how much better you would feel if they did.
This is not to tar the professionals with some kind of pseudo-Scientology crackpottery; they exist somewhere in the n-dimensional space of competence, authority, ability, &c. as everybody else; but that there can be dissonance between the treater and the treated is not a reason to give up on the whole idea.
this is both ridiculous and, unfortunately, true. If it is a concern for you, you can ask that your therapist not take notes, then there is nothing physical to subpoena.
The point of whiteboard exercises isn't to see how pretty your writing is or to make you stumble on brainteasers. It's to see how you think. The real key is to think out loud as you go through the problem. How are you approaching it? Have you seen a similar problem before? Can you find an easier version of the problem and try to get some intuition (ex 2d vs 3d)? What do you do when you get stuck? Asking questions to clarify things is usually encouraged. If you're nervous I'd recommend practice with thinking out loud while you solve problems. There are plenty of books full of interview level problems. Grab one and work through them while saying everything you think. Once you're used to that do more with a friend pretending to be an interviewer. If you find yourself getting stuck a lot I'd recommend reading How to Solve It by Polya.
Sometimes you'll be asked to write code on a whiteboard. This is really unnatural. The interviewers also know that it's really unnatural. Unlike gcc whiteboard compiler is very forgiving. Usually people are looking for a couple of key things. Have you handled all of the corner cases? What about invalid inputs? Do you use reasonable variable names? Is your algorithm horribly inefficient?
There probably are companies that give brainteasers type questions too much weight. They heard places like Google and Facebook use them so they will too. I'd treat this as a red flag and not want to work there.
Unfortunately, there aren't a lot of better options for interviewing. Any problems given have to be relatively trivial due to time constraints. I've had interviews where you sit and write a test or code at the start and the next step goes over your answers. The problem with this is that you have to leave the candidate doing nothing for 30-60 minutes while someone goes over what they wrote. Tests you do on your own also have limited value. They're mostly useful as a low pass filter. They weed out the really bad candidates but can't tell you much more than that.
Speaking as someone who has suffered in a similar way and subsequently gone on to interview developers myself, may I state: interview / test conditions will invalidate everything that you think you can discover about a candidate.
Live coding tests, logic problems, whiteboard exercises; all of those things will definitely rule out some genuinely great candidates. In an industry where jobs seem to outnumber competent applicants, I genuinely think softer, subtler interviews represent a much better approach.
If you have a reasonable amount of experience and a track record of actually delivering working software that people use in the real world you don't need to subject yourself to this nonsense. Sure refusing these types of interviews means you won't be considered for certain jobs at certain companies but do you really want to work for a company that is so foolish as to run candidates through a series of standardized tests and ask them to do a bunch of tasks under a microscope that are completely unrelated to the job you'd be performing? A lot of the companies that employ these ridiculous interview tactics are staffed by people who have deluded themselves into believing that their lightly used web app requires elite programmers.
There are plenty of good opportunities for half decent devs at companies not staffed by people who want you to spend 8 hours whiteboarding algorithms but won't take time out of their day to read your resume, review your code samples and ask you relevant questions about your experience.
Maybe I was lucky earlier in my career but now that I have been in the industry long enough and have a big enough collection of work I can reference I am comfortable avoiding companies that basically make the assumption that every candidate is either incompetent or lying about their experience. I mean if you can't sit down with me and engage in a real dialog that establishes I know what I say I know that's on you, not me.
I think take home tasks are fine so long as they don't require more than a few hours and are clearly relevant to the job. If you can't come up with a task that mirrors the type of thing I'm going to be doing on a daily basis and ask me to do something inane it tells me you're lazy or not focused on what's important.
That is entirely reasonable and a lot of employers do this. So why bother with the ones who want you to demonstrate whiteboard chops that don't have any relevance to the daily work you'd be doing?
Remember... the interview isn't just for the employer. It's your only opportunity to determine if you're interested in working for the company. If the interview is a one way street and doesn't give you the opportunity to learn anything meaningful about the work you're really going to be doing, how would you feel good about joining the company even if you ace their inane whiteboarding exercises?
If I was that guy, I'd try more general health solutions like exercise, bicycle, going for a walk regulary. Fresh air.