A few days ago I had a programming interview (the first in a long time!), and I didn't like the way it went. Let me explain.
My first programming interview (2006) was in a small company where I thought I could work with smart and fun people. To get this job, I had to take a 1 month course about a particular development methodology (PSP/TSP), while solving some programming/mathematical problems. Each week we were evaluated on our (perceived) programming skills, and at the end of the month we were given either an offer or a farewell and goodnight.
They made me an offer, but they also told me that since I had barely made the cut, they would pay me less money compared to other newcomers. I didn't care, I just wanted to develop great software...
A year passed and management told me that I was in charge of evaluating the programming skills of newcomers, and all because some key people had praised my programming skills during the time I worked with them in that same company. Irony?, I don't think so. I just believe that it's really difficult to know whether somebody is a good developer or not before you hire them. The only way to know for sure if someone is a good fit is to develop an application with them side-by-syde and then decide whether or not you respect them as a colleague.
Almost ten years have passed, and, sadly, (at least in some companies) things haven't changed...it's 2015, we should know better than asking trivia questions and brainteasers to evaluate somebody's programming skills!.
There are better ways to do it...for example, you can analyze the code of a potential hire and then ask him to explain why he designed it that way. Or maybe how he would solve a particular problem, while staying at a high level of abstraction. And this, I believe to be key!.
Programming languages come and go. It doesn't matter if you memorize an API, chances are it will change. What matters is that you have an idea of how to solve a problem, and then look for the tools that let you implement that idea in an optimal way.
It's only worse when the person interviewing you makes mistakes (like saying you have to extend the Iterator interface to iterate a simple array in Java (?!?!)), and only admits his error once he's Googled the problem! (or to be fair, probably looked at the documentation). But that same person goes crazy when you claim that it's not important to know the particular package and name of a class in Java because you can always look it up in the API (or a simple Google search)...double standards anyone?.
What have I learned after spending all this time in the programming trenches?. Rather than evaluating people on what they know (or remember), do it on what they can develop...in the end, that's all that matters, that's what you're gonna need!:.
I recommend getting your heart trampled on to anyone,
I recommend walking around naked in your living room.