Unfortunately, we'll reject most software developer job applications.
supercoders.com.au
supercoders.com.au
Imagine if "What is an interface?" was the first question you were asked. That's so vague it's almost philosophical.
Finally, I'm really glad I've done enough Java programming to remember the answers to these questions. Apparently, if my work history had been a little different, I'd be unemployable.
Back in the day, I was told in an interview: "While they were a Java shop, this interview is about general programming concepts."
The first question they asked was "What is an interface?".
I'm not quite sure what they're trying to filter for, but when one uses language-specific trivia as a starting point for an interview, it's going to filter out a lot of people that many companies claim they're so desperate to hire.
There is something wrong in recruitment process through agents.
Hence, you're seeing a somewhat skewed version of the developer population.
Completely undeserved IMO, so I thought I'd let you know (you don't have contact details in your profile).
This ranks pretty high on the least useful knowledge that you could probe for in a developer. The only reason it's even remotely successful is probably because there's a general correlation between experienced coders and coders who know these subjects well. But it's nowhere near a perfect correlation, you can be certain of that. It will eliminate people with talent and select for people who know trivia but lack talent.
Imagine it like this, you spend several weeks and thousands of dollars courting potential candidates for the love of your life. And on your ultimate date you ask them what their favorite band is and move on or forward based on their answer. Reality is a lot more complicated than that.
Try this test at your work. Identify your developer coworkers who you look up to, and come up with equivalent topics for their coding platform of choice then randomly ask them about them. For example, drop by and say something like "hey, I always forget, could you explain abstract classes to me?" Or something like that. I'd be curious what the results were.
1. Whenever you open a position, you get a ton of applicants that simply aren't qualified, and the faster you get rid of them the better.
2. A majority of programming jobs use Java, C# or C++, which all have 4 or 5 of these keywords with similar meaning.
This is a quick and easy filter. Of course, any quick and easy filter is going to have a false negative rate, and it's fair to protest that. Fundamentally, hiring programmers by their programming language competencies is also a very poor idea. But there are a lot of places that simply need a bunch of competent cogs and I don't think it's worth getting too worked up over the unintended negative consequences of their poor decisions. They want a ton of cogs, this is a great way to get a ton of cogs. You're not a cog and neither am I. I don't think either of us would want one of these "supercoder" jobs anyway.
I think the intent of that article is to use those questions as a 0-pass filter. You don't hire based on getting them right, but you damn sure don't let them pass to the next phase if they get them wrong. Like FizzBuzz.
If so, you probably just weeded out a huge percentage of Java programmers.
Altough I like that answer you gave and this sort of "detailed" questions (I don't think the article had that in mind tough), primarily because if you can answer it I would guess that you know Java enough to be usefull without needing any furhter questions. Someone reading trough a textbook might read that but won't remember it unless he knows the implications, and if he knows that he knows Java. And if you don't know it that cool too, there are other questions like this that demonstrate actual expirience with the language/tools vs. shallow textbook trivia.
Sounds like a good start ;)
That's not the point, it means different things to different programming languages, which means there is more than one correct answer unless you get more specific.
Further, it's virtually irrelevant to Python programmers since the OO model there is "we're all consenting adults".
Have what down? You haven't even stated a well-formed question.
I've also gotten rejected for either:
(A) Not having enough experience in their language of choice, despite apparently knowing both.
(B) Not knowing the "answer" to the question.
You assume too much about the typical recruiting process.
tl;dr this is why I work at a startup now.
Answers there would look something like this:
Explain public.
N/A
Explain private.
N/A
Explain protected.
N/A
What is an abstract class?
N/A
What is an interface?
Ah, we get to something shared... A list of functions that can be applied to an instance of a type without raising an error.
The times I've used Perl, Python, Javascript, and Common Lisp all do not relate to public/private/protected/abstract base class. They have simply not been required to do the job, and I'm unsure whether they even carry the concepts with them without building an extension into the language. I'm fairly sure a MOP could use it if you really wanted.
So while this test might be great for C++/Java/C# hiring... I don't even bother asking these questions when I'm on a Python/Bash/Perl hiring team. They don't relate.
The questions aren't interesting. They can be Googled, and I would be brutally tempted to think better of someone if they stalled and I heard keys being whacked as they found the answers on Wikipedia or StackOverflow.
But, you know, maybe OO teams need their OO FizzBuzz. I can totally appreciate that, and wish SuperCoders all the best :-)
I would guess if there was some magic set of indicators that shows if someone is a good coder or not... we would have worked that out by now. It turns out there isn't... look at code.
If you aren't able to read code and evaluate someone by their code, you shouldn't be hiring software developers. How did we end up in a position where people that understand code, hire people that don't understand code (recruiters) to hire people that can code.... what am I missing here.
I imagine it's all about what you can sell - about generating convincing appearances cheaply, rather than proving true things at length.
You can consider it a shortcoming on my part or reality for most programmers, but I don't tend to memorize names of concepts, I just know how to use them. i.e. I may be using inheritance or polymorphism in my code, but my brain does not every time thinks about what these terms mean and am I applying them as they are defined. I have been programming for years and OOP has become second nature to me; I know how to apply OOP, but have long forgotten most of the terms.
In my view, when interviewing, the questions should be practical problem so it tests user's ability to program a solution, not about being able to churn out the definition. Example: If you want to test someone's OOP expertise, give the person a list of classes and ask them to create a UML or how they would structure their classes. Example 2: Give them a problem like, create 2 classes: Animal and Dog. All animals have a name and a dog can bark. Test to see if the programmer would extend Animal class from Dog class, or maybe he decides to make an Abstract class out of Animal class.
The only downside of these questions is that you would need to have interviews who are competent in the OOP concepts themselves. Continuing to ask dictionary questions is a cop-out solution to not having technical interviewers and it is easier for someone to check if interviewee is able to mention some of the keywords that are in the definition you found on wikipedia.
Unfortunately, you will continue to reject most developer job applications and miss out on lot of great candidates.
http://agp.hx0.ru/oop/quarks.pdf has a handy table summarizing 40 years of OO research that predates Java by decades.
Even if you were dumbing yourself down because you were talking to a recruiter, it should be possible to explain those concepts in a way that a non-technical person could understand, especially a non-technical person who has a stock answer in front of them to check keywords off on.
This industry shocks me sometimes, it's akin to accountants claiming that no-one needs to understand economics as they're personally really good at counting US dollar bills and that's all they do all day at their job, so why would anyone need to understand all that fancy theory stuff or be able to explain it to anyone else.
Perhaps they are looking for some kind of job, and because they know how to type, that must mean they can code. Since coding is just typing, right? (how many of us had bosses at one time that thought this!)
If you can't answer those 5 questions, then I would wager you've never actually written an OO program, you've never attended a single undergrad COSI course, or you don't speak English.
The bottom 99.5% of chronically unemployed tech hopefuls is a very different group than the bottom 99.5% of software developers.