Interviewing / candidate qualifying tips
-
The other suggestions are good... You do want to see a sample of their code, if possible... But that only tests how well they can program in THAT LANGUAGE, not how well they program in general... I'm no expert in this (And I'm dreading the day when I'll be put in your shoes), but I'd care less about their actual code and more about their general knowledge... I like the old "What's the difference" questions, like: - What's the difference between a quick sort and a bubble sort? - Between a class and a structure? - Between passing parameters by reference or by value? - Between an array and a list? - Between an interface and an abstract class? I think anyone who can answer those, and sound like they actually understand the subject matter (As opposed to just quoting books), would probably be at least somewhat competent. One I've always wanted to throw in... "What runs faster? C# or VB.NET, and why?"
Proud to have finally moved to the A-Ark. Which one are you in? Author of Guardians of Xen (Sci-Fi/Fantasy novel)
Ian Shlasko wrote:
- What's the difference between a quick sort and a bubble sort?
The former is quick, for large values of n in O(n), but mall n insertion sorts may even actually compete with bubble sorts.
Ian Shlasko wrote:
Between a class and a structure?
No contest.
Ian Shlasko wrote:
- Between passing parameters by reference or by value?
You have to use the 'ref' suffix for some? :laugh:
Ian Shlasko wrote:
- Between an array and a list?
A list can be written on average paper.
Ian Shlasko wrote:
One I've always wanted to throw in... "What runs faster? C# or VB.NET, and why?"
Because VB.NET has filtered exceptions?
-
Evil interview questions (which I have been asked, and personally, don't care much for, but it's not so much the rightness of the answer than how the interviewee answers): What are the most popular design patterns? Name 5 and explain what they accomplish. Describe basic blocking and synchronization methods and their support in .NET What's the difference between Thread.Abort and Thread.Interrupt? What are the methods in the Object class? What are the constraints one can apply to a generic class? What's the difference between identity and equivalence, and how do you check for both, and why? What's Inversion of Control? What's the Composite Application Block (or Spring.NET or similar)? What's the difference between a delegate and an event? Write some LINQ to parse this XML block to extract all the company names (make up some XML beforehand) What's the difference between const and read-only? What's a value type, what's a reference type, and what can you say about both? What's boxing? (No, not Boxing Day) When does boxing occur implicitly? What is finalization? When do you use IDispose? What is the Finalization Queue? How does finalization work? What's the difference between an abstract class and an interface? When do you use one vs. the other? How does the "using" keyword work? What is proper way of catching exceptions (I love these philosophical questions)? What is an attribute? What attributes have you used, and why? What is the difference between overloading and overriding? Enjoy! And that doesn't even cover ASP.NET!!! Marc
I'm not overthinking the problem, I just felt like I needed a small, unimportant, uninteresting rant! - Martin Hart Turner
I have realized, all these questions are useless when it comes to hiring someone. I trained my 4 year daughter to answer some of these questions. My aim was to have her in a phone interview and pass it. But I never did it. :)
-
The other suggestions are good... You do want to see a sample of their code, if possible... But that only tests how well they can program in THAT LANGUAGE, not how well they program in general... I'm no expert in this (And I'm dreading the day when I'll be put in your shoes), but I'd care less about their actual code and more about their general knowledge... I like the old "What's the difference" questions, like: - What's the difference between a quick sort and a bubble sort? - Between a class and a structure? - Between passing parameters by reference or by value? - Between an array and a list? - Between an interface and an abstract class? I think anyone who can answer those, and sound like they actually understand the subject matter (As opposed to just quoting books), would probably be at least somewhat competent. One I've always wanted to throw in... "What runs faster? C# or VB.NET, and why?"
Proud to have finally moved to the A-Ark. Which one are you in? Author of Guardians of Xen (Sci-Fi/Fantasy novel)
Problem is I can answer almost every one of those fairly easily and I still can't actually code past simple forms. Understanding the concept and grasping the manner to use them is different. I can tell you why using datasets to represent customers is bad compared to making them objects and using that to keep track of them. But actually coding this stuff is beyond my skills right now. Least you didn't suggest asking what a delegate is...
-
Ian Shlasko wrote:
at least somewhat competent
Even students can answer those questions, but I haven't met one of them who knew what
x&(x-1)
is useful for - in fact most of them didn't even know what "that funny &" does. They can't actually program, they just write code. (but there are exceptions to that rule, as always)I have learnt this trick before, and I know what the "&" operator does, but I would be pissed of with someone failing me for forgetting today. I think ++ is much more important. When does it happen in C#? don't answer, just think or learn.
-
Where do you work? :cool:
Small shop that you need a background check, they did not want to waste it. :laugh:
-
My company has decided that after 4 years of me doing 100% of the IT work, we need another developer. This person will work directly under my supervision and be tasked with maintaining a C# distributed WinForms app as well as some ASP.NET work. We've hired a headhunter to pre-qualify candidates and set up phone & in-person interviews. And this is the point where my inexperience with hiring really comes to light. I'm getting a little better at the face-to-face and phone interviews, but I'm still not sure how to qualify a person skill-wise. It seems like right now all I'm doing is saying things like "Do you know C#? Have you use SQL Server?" And naturally the candidate tells me that yes, they have. Can anyone give me some tips on how to gauge just HOW experienced or skilled someone might be in the areas that I require? I've asked for code samples, but some candidates can't provide that as it is most likely property of their previous employer. And I'm not sure that 1 class file will really give me a good reference point as to their skill level when taken out of the context of a project as a whole. I've also considered giving a small test, but I'm not too sure how long or difficult I should make it. Suggestions or comments from those that have experience with hiring and interviewing would be most appreciated at this point.
I work primarily in C++ and one very good method to weed people out is talking about multi-threading. My team lead and came up with a one question interview: how would you make two processes on the same computer communicate with each other? While there are many answers for this, there is one vastly superior to the rest and the question is how long they take to arrive at it, if at all. The biggest problem I've run into are developers who claim a more central role at a previous employer than they really had. For example, they may claim they helped design something, when their help consisted of one suggestion if that. To get around this, just talk about details and then verify them with his previous manager--doesn't matter if the potential employee listed them as a reference or not. In fact, if they didn't list their manager but insisted they got along with him or her, that's a huge warning sign that something is wrong. (It's important to verify that relationship; I've had a managers that lied to me and misrepresented my work to upper management.)
-
Do you really have to go through the recruiters? I bet you could ask around and find someone who is looking for job *and* is recommended by someone you trust.
Not al; recruiters are snakes. Just like people pay us to do our job, people pay then as well.
-
kryzchek wrote:
In my area there is a surprising lack of developers based on the current demand.
Interesting. Anyway, this is unfortunate. The only certain way to hire a good employee is to find a former co-worker that you know is good and is looking for job. Finding a good developer by interviewing random people is pretty much a matter of luck: all you can do is filter candidates based on their technical skills.
I have won several permanent and freelance jobs without even a CV, never mind an interview, but ever once I have got through interview has been as much part of the recruiter as mine.
-
Problem is I can answer almost every one of those fairly easily and I still can't actually code past simple forms. Understanding the concept and grasping the manner to use them is different. I can tell you why using datasets to represent customers is bad compared to making them objects and using that to keep track of them. But actually coding this stuff is beyond my skills right now. Least you didn't suggest asking what a delegate is...
Why are datasets bad for numbers? BTW, EF seeks to what you say.
-
Evil interview questions (which I have been asked, and personally, don't care much for, but it's not so much the rightness of the answer than how the interviewee answers): What are the most popular design patterns? Name 5 and explain what they accomplish. Describe basic blocking and synchronization methods and their support in .NET What's the difference between Thread.Abort and Thread.Interrupt? What are the methods in the Object class? What are the constraints one can apply to a generic class? What's the difference between identity and equivalence, and how do you check for both, and why? What's Inversion of Control? What's the Composite Application Block (or Spring.NET or similar)? What's the difference between a delegate and an event? Write some LINQ to parse this XML block to extract all the company names (make up some XML beforehand) What's the difference between const and read-only? What's a value type, what's a reference type, and what can you say about both? What's boxing? (No, not Boxing Day) When does boxing occur implicitly? What is finalization? When do you use IDispose? What is the Finalization Queue? How does finalization work? What's the difference between an abstract class and an interface? When do you use one vs. the other? How does the "using" keyword work? What is proper way of catching exceptions (I love these philosophical questions)? What is an attribute? What attributes have you used, and why? What is the difference between overloading and overriding? Enjoy! And that doesn't even cover ASP.NET!!! Marc
I'm not overthinking the problem, I just felt like I needed a small, unimportant, uninteresting rant! - Martin Hart Turner
I agree with Rama. For me, it's more important that I discern how well the candidate will fit into the development framework rather than how well they answer abstract programming questions. Of course competency is important - but I don't want a programmer who is going to go "rouge" when given an assignment. Just my opinion.
-
kryzchek wrote:
They may not own a laptop
They're not serious about being a programmer. Don't hire them.
kryzchek wrote:
Their development work may belong to their previous employer, so it's proprietary, private or not even in their personal possession (say that 3 times, fast).
Not a valid assumption. I have a laptop, and I have a development environment on it that includes all of my tools and whatever source code *of mine* I might be working on. That's what I meant by "development environment". Providing a code sample without being able to show that it actually works and that I know what it does is a waste of everyone's time. I took my laptop to every job interview with several of my codeproject articles ready to demonstrate, as well as some of the web sites I've built. Nobody wanted to see them, but I was ready if they did.
.45 ACP - because shooting twice is just silly
-----
"Why don't you tie a kerosene-soaked rag around your ankles so the ants won't climb up and eat your candy ass..." - Dale Earnhardt, 1997
-----
"The staggering layers of obscenity in your statement make it a work of art on so many levels." - J. Jystad, 2001John Simmons / outlaw programmer wrote:
They're not serious about being a programmer. Don't hire them.
I do not own a laptop because I just cannot work on such a crammed keyboard and monitor (No, not even for a short while. Thanks for asking. I've managed for so long without it). I think that it's a personal preference. There may also be those programmers who are serious, but don't have the money to buy a laptop. All those laptops that I've ever purchased and used were given to me by my employer. But I pester them continuously and give it back to them. Emails will be checked on the phone while on travel.
“Follow your bliss.” – Joseph Campbell
-
We tend to start off with a logic test (it's a programming test, but it's not specific to a language). We then move on to ask some fairly specific OO, .NET and SQL questions, to which there generally is a specific answer. We then move onto some questions asking them to talk through solving a problem. We use designing a chess game from an OO point of view, and designing a database schema for a car rental company, and simply keep asking more probing questions about their answer until we feel we've guided them to a good solution. If they don't seem to get it, drop it. You'll know if they seem to know what they're talking about. For instance people who can design database will get what you want from them straight away. People who are book-learnt will waffle about normalisation, but never really get there. We decided we'd rather hire someone who's very logical than someone who can quote MSDN. For us, there's been a direct correlation between book learners and poor scores on logic tests. The last guy we hired simply admitted he didn't know the answers to a few of the more tricky questions, rocked the logic test, and within 2 months was writing some fantastic code; he made a real contribution. He also had a social life outside work that wasn't programming. The others who could quote MSDN just wanted to program when they got home. I don't want to work with people who don't have other things to talk about when you're having a beer after work.
Oi, my normalisation skills were learned from a book; the seminal "Information and Data Modelling", buy one of the relational gurus.
-
I agree with Rama. For me, it's more important that I discern how well the candidate will fit into the development framework rather than how well they answer abstract programming questions. Of course competency is important - but I don't want a programmer who is going to go "rouge" when given an assignment. Just my opinion.
Don Burton wrote:
Of course competency is important - but I don't want a programmer who is going to go "rouge" when given an assignment.
Better not hire me! ;) BTW, I totally agree with you. And actually, my standing policy at this point is that I don't do phone interviews. If that means I don't get the job, tough sh*t, they're the ones losing out, imHo. My articles and experience should speak for themselves, and as you said, what's important is how will we can all work together. Marc
I'm not overthinking the problem, I just felt like I needed a small, unimportant, uninteresting rant! - Martin Hart Turner
-
-
I have realized, all these questions are useless when it comes to hiring someone. I trained my 4 year daughter to answer some of these questions. My aim was to have her in a phone interview and pass it. But I never did it. :)
-
Why are datasets bad for numbers? BTW, EF seeks to what you say.
Anytime you change something on the customer you have the program use C# code to figure out which dataset needs to be told to change info, then it sends the info to an SQL server, which then changes the info using code in the dataset, which is then sent to the program, which then sends the changes to the actual data on the SQL server and that newly upsated dataset sends the info to the form to update what it says... We think retarded monkeys with typewriters could have done a better job.
-
I have won several permanent and freelance jobs without even a CV, never mind an interview, but ever once I have got through interview has been as much part of the recruiter as mine.
-
My company has decided that after 4 years of me doing 100% of the IT work, we need another developer. This person will work directly under my supervision and be tasked with maintaining a C# distributed WinForms app as well as some ASP.NET work. We've hired a headhunter to pre-qualify candidates and set up phone & in-person interviews. And this is the point where my inexperience with hiring really comes to light. I'm getting a little better at the face-to-face and phone interviews, but I'm still not sure how to qualify a person skill-wise. It seems like right now all I'm doing is saying things like "Do you know C#? Have you use SQL Server?" And naturally the candidate tells me that yes, they have. Can anyone give me some tips on how to gauge just HOW experienced or skilled someone might be in the areas that I require? I've asked for code samples, but some candidates can't provide that as it is most likely property of their previous employer. And I'm not sure that 1 class file will really give me a good reference point as to their skill level when taken out of the context of a project as a whole. I've also considered giving a small test, but I'm not too sure how long or difficult I should make it. Suggestions or comments from those that have experience with hiring and interviewing would be most appreciated at this point.
Tip #1: Don't waste your money with worthless recruiting / head-hunter firms. Place an ad on Dice and you will get the exact same resume list head-hunters will give you. Tip #2: A code test is a good pre-screening tool. Best to require it use data you publish from a webservice you control. You would be surprised at how many ".NET Developers" cannot access a web service. Give a dead-line for submission. Tip #3: You get what you pay for. If you have a low budget hire college grad with no experience, professors letter of reference, a C or B average, and a degree in Computer Science and train him or her (who am I kidding, him). Don't get the A average people, some just work hard to pass but can't code and the rest will drop you like a bad habit when a good gig comes around. Tip #4: Low ball the candidate, price-wise, if they accept it they are desperate and you don't want them :p
Need custom software developed? I do custom programming based primarily on MS tools with an emphasis on C# development and consulting. A man said to the universe: "Sir I exist!" "However," replied the universe, "The fact has not created in me A sense of obligation." --Stephen Crane
-
Not al; recruiters are snakes. Just like people pay us to do our job, people pay then as well.
Brady Kelly wrote:
Not al; recruiters are snakes.
Not saying they are. It is just that it is very hard to judge someone's abilities unless you worked with them for a while, and recruiters can't help with that at all.
-
Don Burton wrote:
Of course competency is important - but I don't want a programmer who is going to go "rouge" when given an assignment.
Better not hire me! ;) BTW, I totally agree with you. And actually, my standing policy at this point is that I don't do phone interviews. If that means I don't get the job, tough sh*t, they're the ones losing out, imHo. My articles and experience should speak for themselves, and as you said, what's important is how will we can all work together. Marc
I'm not overthinking the problem, I just felt like I needed a small, unimportant, uninteresting rant! - Martin Hart Turner
Marc, your're the guy we google when we want the defintive answer on a technical question!