37

I must do a quick assessment of dozens of fresh students very quickly. I have 30 minutes meeting with each of them (in two or three days). I want to use most of the time to discuss non technical aspects. So I plan to use 10 minutes for technical questions. The same questions for all of them.

They are all hired already (they are students), what I need to know is the average level in order to prepare a training.

Ideally, the difficulty must be progressive in order to set a level for each. Level I will average, and I'll do an average on each question too.

If you had only 10 minutes and 10 questions to ask to a candidate, what would be your top 10 ?

13
  • 6
    More context on the job? IS this a system admin position or a programmer position and if programming low or high level? Any specific languages or technology in your shop? These would all dictate my list of questions.
    – Chris
    Nov 4, 2010 at 11:27
  • 4
    What kind of training? Programming? General IT?
    – Adam Lear
    Nov 4, 2010 at 13:31
  • 3
    I'd reverse that and spend 10 minutes on personal stuff and 20 minutes on technical stuff.
    – Kyralessa
    Nov 4, 2010 at 13:40
  • 1
    I know, that's what most people would do. But I believe in different approaches.
    – user2567
    Nov 4, 2010 at 13:44
  • 3
    10 minutes for candidate is too little
    – Zzz
    Nov 4, 2010 at 15:41

19 Answers 19

56
+500

Three questions, elaborating on the end of Eric Lippert's answer here:

Question 1:

On a scale of 1 - 10, where do you rate yourself in (name the skill here)? They answer [n], a number between 1 and 10.

Question 2:

What could you learn from someone at level [n+1] ?

Question 3:

What could someone at level [n-1] learn from you?

The most important factor in your decision is to determine where a student (realistically) places themselves, and those three questions will help you to determine that quickly. It also helps identify people that might be compromised by the Dunning-Kruger effect (on either end), but that is another topic.

If anyone can find the reference to this method on SO and edit this post to include a link, I would really appreciate it.

Anyway, that should fall well under ten minutes.

4
  • 5
    Wow! Quite unusual metric. I've never thought of myself in that way. Thanks! Nov 22, 2010 at 10:06
  • Obviously the candidate answers 10 to avoid the second question.
    – user4595
    Dec 21, 2011 at 10:52
  • 4
    @WTP The ten is a lie.
    – Tim Post
    Dec 21, 2011 at 11:02
  • 1
    This is superb. If an employer asked me this, I could explain more about myself in just a few minutes than I normally get the chance in a 1 hour interview. Dec 21, 2011 at 21:17
28
  1. What is a class?
  2. What is a static method?
  3. What is inheritance?
  4. What is polymorphism?
  5. What is a primary key?
  6. What is a foreign key?
  7. What is the difference between HTTP GET and HTTP POST?
  8. What is a web service?
  9. Name some data structures.
  10. What is the purpose of an Object/Relational Mapper?

Feel free to suggest replacements, this list has much room for improvement.

11
  • 1
    static methods are in many languages besides C++, not that it's relevant here. I actually find it's a hard concepts for many students to grasp - and asking them if they grasp it, or asking for a definition, is a poor way to find out if they do or not. Nov 4, 2010 at 13:54
  • 3
    Keep in mind the question specified ten questions in ten minutes. If it had been ten questions in thirty minutes, I would want to raise the difficulty level, and ask more meaningful open-ended questions. Nov 4, 2010 at 16:41
  • 3
    I really like questions 1-8 in your list, although I might replace question 9 or 10 with "Why are interfaces important" and/or "Why is an abstract class important?" (in that order)
    – Nicole
    Nov 19, 2010 at 22:30
  • 8
    What's with all the OO questions?
    – Recursion
    Nov 19, 2010 at 22:38
  • 3
    Eh, these are all language feature questions. I'm not so convinced they're important, against more theory-bound things. Nov 21, 2010 at 23:31
20
  1. Explain pointers!
  2. What are closures?
  3. Which languages do you use in your spare time and why?
  4. Talk a little about transactions!
  5. What's the difference between an interpreter and a JIT?
  6. Explain the basics of a compiler.
  7. What happens on memory level when you do recursion (and what's different when you have TCO)
  8. What are the important concepts of OO Programming (and why are they important)?
  9. What new stuff are you looking into at home and why is it interesting?
  10. Explain the difference between a process and a thread.
12
  • 20
    I don't think most of these are good questions for people completely new to .net (or programming) - and even if they know the answers that's 1 minute per question...
    – FinnNk
    Nov 4, 2010 at 13:42
  • 9
    I agree these questions seem more like "how geeky are you" questions rather than "what do you know/have learned" questions for students.
    – hyprsleepy
    Nov 4, 2010 at 15:46
  • 5
    I would fail terribly at this test, largely because I've never studied CS or used C. So this might help determine who has paid attention in class, and who programs for fun, but I don't know whether it will be helpful in the OP's context. Nov 4, 2010 at 16:45
  • 3
    Most people would get most of these wrong.
    – Recursion
    Nov 19, 2010 at 22:38
  • 4
    Good questions, but some can't be answered in one minute.
    – zvrba
    Nov 20, 2010 at 7:25
16

My experience of students I'd pretty much start from scratch - I've found what people learn at University and what is useful are two pretty separate sets.

But as you have the chance to speak to them it would be silly not to take it.

My assumption is that there is little commonality in their background so I'm avoiding language specific questions. The one exception I've made to this is an assumption that they've done something on the web but this question could be subbed for something equivalent if they're embedded specialists or whatever.

You've asked for them to be progressive which I've sort of tried to do but if my assumption about no commonality is correct right / wrong questions are relatively tricky and a lot of their competence will come from how good their answers to more general questions are.

Anyway...

1) What languages and technologies have you been exposed to? How many of these (and which ones) have you spent more than 50 hours actually programming (that is not including lectures, lab time and so on but including projects and assignments where you were coding solo).

2) Describe the most complex program you've ever written. What made it complex?

3) What were you taught at university (relating to programming) that you really don't think you understand properly? If you think that you understood everything (check their grades at this point) then talk about an application or an element of an application that you've seen that you wouldn't know how to code and how you might start thinking about it.

4) What are the basic tenets of Object Oriented Programming?

5) Tell me as much about relational databases as you can in 1 minute

6) For a web application describe a method for maintaining information about the user between pages. What advantages and disadvantages exist for the mechanism you've described.

7) Pick an piece of commonly used functionality within computing and explain to be very briefly how it works at a programmatic level (e.g. encryption, compression). Also explain how you had to use that functionality you'd implement it (here I'd be looking for the fact that although you may know how something works, it's probably better to grab a library for it).

EDIT: Restructured and added a couple of extra questions to make it more progressive as originally asked.

4
  • 6
    I like this list, I would add another question: What were you taught at university that you can't see any practical real world use for? That could give some useful indications of how they think.
    – glenatron
    Nov 4, 2010 at 14:20
  • 2
    If they're any good then the 10 minutes are up after question 2 :-) Nov 22, 2010 at 13:41
  • When you ask about the "tenets" of OOP, do you mean to suggest that that OOP is a religion?
    – compman
    Dec 21, 2011 at 22:22
  • @compman - Clearly not. tenet can apply to a religion but isn't exclusive to that context and can also apply to any organisation, movement or profession. Dec 22, 2011 at 8:58
8

If these are students and you are looking to be able gauge where they are in their studies then there really shouldn't be any trick questions or questions that will make them think to hard. My advice would be to just focus on the basics - there is no much point in asking them to explain how reflection works if they still aren't fully up to speed on objects and inheritance.

Here are some sample questions that could be used and you could maybe start with something from the core knowledge category and then move around on the basis of how they answer the questions, kind of like how adaptive testing works.

Fundamentals

  1. What are some basic program flow control commands?
  2. What are some basic logical operations?
  3. What is the difference between while and for loops?

Core

  1. Briefly explain object oriented programming.
  2. Briefly explain the concept of inheritance.
  3. Briefly explain how databases operate.
  4. What is the enum keyword used for and when would you use it?

Advanced

  1. What can you tell me about C# generics or C++ templates?
  2. What can you tell me about operator overloading?
  3. What's the difference between a class and a struct?
  4. What can you tell me about reflection in .NET?
6

Without an answer to my comment above, these are things that come to mind generally speaking but I am not sure I would consider these technical.

  • What type of version control have you used?
  • Are you familiar with software development methodologies such as agile, waterfall, tdd?
  • What is the purpose of documentation in software?
  • Difference between statically and dynamically typed languages?
4
  • 5
    "Why is spaghetti coding style useful?" -- the ultimate one
    – mlvljr
    Nov 4, 2010 at 11:41
  • Haha is this in order to try and trick them?
    – billy.bob
    Nov 4, 2010 at 11:53
  • @m.edmondson Now please give an example of a case when it is inevitable to break abstraction ;)
    – mlvljr
    Nov 4, 2010 at 20:15
  • Hmm I don't believe there is any case where thats inevitable ;-)
    – billy.bob
    Nov 5, 2010 at 16:57
4

I realize you are trying to build the training based on what they don't know, and that you plan to have several "buckets" of training for different groups of students. Since you have only ten minutes alloted, why not make a list of things you are thinking of including in the training, and ask those specific questions. So you plan to teach them C#. Ask if they know it well. Ask if they've used any more recent features (LINQ, nullable types, generics, ...). If there's database content in your training, ask some questions about that. In the end you may see that one of the topics you had planned is unnecessary, because they all know it, and some other topics are needed by everyone, and so on. That's more practical than trying to come up with questions that are not related to either what you're able to train them on (context switch time on linux?) or not related to the work you intend to have them do after they're trained.

1
  • +1 - This is what I wanted to say. Just ask them what they need to be included in a training made for them.
    – mouviciel
    Dec 21, 2011 at 9:10
4

Ask them the FizzBuzz question

Did they know how to code it? What language did they use? Why did they code it the way they did? Did they use Recursion? Loops? Other Methods/Functions? Pointers?

You could also use the question as a base for other questions (i.e. Why did/didn't you use Recursion? How would you write this using pointers?)

It doesn't encompass everything, but it might give you an idea of their coding skills

3
  • 1
    Oh yes, I promised someone in the community that I will ask that question. Will be the last question, and I'll share results with everybody.
    – user2567
    Nov 4, 2010 at 17:52
  • 1
    @Pierre 303: I used to ask people to write a function that would validate a postal code. I assure you it was just as enlightening as FizzBuzz. Nov 21, 2010 at 22:40
  • 1
    You give me the opportunity to give some results I got from asking that question. On 6 or 7 interviews, no one was able to answer it. Most of them were fresh students, but one got 8 years of experience! So I'm a bit confused...
    – user2567
    Nov 21, 2010 at 22:53
4

Ten questions:

  1. Show a for loop that sums the values of an array. Ask then what the piece of code does. [Can they read a basic loop?]

  2. Ask them to write a for loop that prints out the numbers 1 through 10, separated by commas. [In addition to "can they do this?" you can judge how repetitive their code is.]

  3. Show a piece of code with two references, a and b, pointing to two different objects with an integer field x set to, say, 7 and 5. Then reassign: a = b;, b.z = 9;, and then ask for the value of a.z. [Do they understand references?]

  4. Show two nested for loops (using indexes i and j), accumulating values from some expression. In the innermost loop, have two computations: double x = Math.pow(2.0, i) and double y = x * j. Ask them to make the code more efficient. [Do they know about simple loop dependence?]

  5. Ask them what is wrong in code sample A. (See below.) [Can they think logically?]

  6. Ask them what is wrong in code sample B. (See below.) [Also on logical thinking.]

  7. Ask them to invert this condition: (s != null && s.Length != 0) without using !. [Do they know DeMorgan's Law?]

  8. Show a piece of code similar to the old Lint advertisements in magazines: Ask them to find the bug. For example, overloading equals instead of overriding it. [Are they good language lawyers? These kind of questions mostly test for experience: have you seen this one before?]

  9. Can they describe how to perform a binary search through a sorted array?

  10. Can they describe how a sorting method might be implemented?

These may seem "too short," but I believe for assessing students you might find the ten minutes is pretty tight. You really do want to see them do some coding. (It sounds like you'll do FizzBuzz, based on one comment.)

If you can assume a stronger student, then you will also want to ask some of the classics, such as recursion, reversing a linked-list, and maybe an advanced wild card like explaining an XOR-list, or what intuitions they might have for why sorting a set of numbers makes it easier to compress than unsorted.

Code Sample A:

if (m != null)
    a = m;
else
    a = null;

Code Sample B:

if (x != 0 || x != 1) {
    ...
}
3

Surely you are going about this the wrong way. Identify the groupings that you want to place each student into

e.g.

No previous programming experience
Familiar with procedural constructs like variables, loops, branching
familiar with basic object orientated constructs like classes, interfaces, events, inheritance
familiar with using Generics/Templates
familiar with creating Generics/Templates

and so on. When you have identified the suitable groupings which will depend on the course material, working out what questions to ask will be trivial.

3

The students are already hired and you want to set up a training program, so part of the deal is to figure out how fast they can learn (and/or what they know: who cares which?). Why not pick some easy, medium and hard questions and give them to them beforehand. Why ambush them with questions they might not know, if they can be easily learned (by some)?

You will see, contrary to what most people imagine, that many of the students will not do very well even with the questions in hand. This way, you'll learn about your students, their knowledge, and their ability to learn.

2

Create 5 simple flowchart constructs and a separate list of answers. Ask them to match the picture with the phrase.

Draw the following:

  1. If Construct
  2. If Else Construct
  3. Do While Loop
  4. Do Until loop
  5. Case Statement Construct

Ask them to explain the difference between 1 and 2.
Ask them to explain the difference between 3 and 4.
Ask them for an example of when a Case Statement Construct would be applicable.

1

I'm not sure that it'd be possible to do this in 10 questions in 10 minutes. Maybe give them 5 minutes to tell you what they know about .net. Then have a prepared list of maybe 20 topics and pick 2 or 3 from things that they've mentioned and 2 or 3 from things that they haven't.

For example you could begin:

Tell me briefly (you have 5 minutes) how you would produce a simple C# project in Visual Studio from creating it to running it.

Then after that:

OK, tell me a little more on the following. It's going to be quick-fire, 1 minute per answer, so don't try to be too detailed I just want a feel for what you're familiar with.

Then ask 5 questions for so from the followin:

  • Explain what a class is.
  • What's the difference between an abstract class and an interface?
  • Briefly explain how garbage collection works in .Net

    ....

  • How do you debug something if you have a problem?

  • Yadda-yadda - I'm sure you'll be able to pick a long list to pick from the other answers
1

I believe in "self assessment"! If you explain to the person the exact situation he will find himself, for example: "you will have to code SQL ... with database of 100+ tables and 500K+ records, which have to run under 4 seconds...". And if you ask him: "Do you think you can make it?" - you will get a correct answer.

I will spent 5 questions on the expectations of the students and 5 more technical:

  1. What do you expect from this training?
  2. What is your level (this should be domain specific)?
  3. What do you want to see/learn during this training (point out 3 most important points)?
  4. If we do exercises, what would you see more useful for you? (workshop, multiple-choice)?
  5. What do you expect from the teacher?

Than you can go with some technical questions like (this should be according to the topic). for OOP for example:

  1. What is encapsulation?
  2. What is interface?
  3. Polymorphism?
  4. Sub-typing?
  5. Dynamic binding?
1

I'm looking for problem solving, a strong learning habit, professional development, and wide knowledge of approaches.

  1. Can I see your portfolio?
  2. What are the last 3 technical books you've read? Why?
  3. Which programming text changed the way you think the most? Why?
  4. How would you define a chicken as an object? How does it relate to other birds? How about mammals and animals?
  5. Can you explain any one of (REST, Polymorphism, relational algebra, parser design, MVC) in layman's terms?
  6. What is the most interesting (or best) piece of software you've built yourself?
  7. Can you describe the languages you are proficient in from favourite to least favourite? What frustrates you about your least favourite languages?

I expect developers to:

  • Be resourceful and quick
  • Grasp basic concepts properly
  • Yearn to grok advanced concepts
  • Track success and failure (learning from it)
  • Learn constantly, thoughtfully
  • Communicate complex issues simply
  • Show balance and logic when discussing commonly dogmatic issues
4
  • 1
    I rarely read programming books cover-to-cover. They make better reference and clarification material. Nov 21, 2010 at 23:49
  • You're right: there are some texts you can't read cover to cover (reference material), but there are a number of incredible volumes that will change how you think. For example: Tufte's Visual Explanations, or The Paradox of Choice, or Programming Language Pragmatics (or anything by Hofstadter). Nov 22, 2010 at 5:13
  • "there are a number of incredible volumes that will change how you think" which is not restricted to technical/programming books. Also, I have no portfolio, all my jobs have been secure systems, I'd be screwed. Dec 21, 2011 at 14:07
  • Contribute some time to an open project or non-profit. It's important to see real work before hiring someone (you'll end up showing your real work eventually). A portfolio is as important as a well tended CV. Dec 21, 2011 at 22:02
1

Bloom's Taxonomy is useful here. You want to hit a variety of knowledge levels, ranging from rote memorization to analytical. This gives you a chance to find out where their skill level lies. Since the OP was looking for questions to ask students, the list below doesn't suppose any more knowledge than a 3rd or 4th year student would (I hope) possess.

Conceptual

  1. What is a stack underflow?
  2. What's the difference between an object and a class?
  3. What's the difference between a function and a method?
  4. Identify some of the strengths and weaknesses of Quicksort and Insertion Sort.
  5. Describe how a program you wrote would display all the values being stored in a binary tree.

Practical

  1. Have you used a version control system? In what ways does it allow team members to more effectively collaborate?
  2. Your compiler says "unidentified symbol." What does that mean?
  3. What is a "segmentation violation"?
  4. Name some data structures provided by the (insert language here) syntax or standard library.
  5. How would you find and display all the email addresses in 10,000 files?
1

Since they are already hired,for quick assessment i think one should (along with programming questions), one should ask them about

  1. What is the system configuration you have worked on (PC hardware configuration).
  2. Did you try testing your code(project if worked on during college) on different OS.
  3. Do you prefer coding in windows or Linux (if they have worked on OS's other then windows)
  4. coding is faster/slower/better depends on systems? (higher systems=feel good factor for coding as slow systems take ling to compile and all)
  5. Also if ask if they know at least to format a drive or install the OS in case it crash/cannot boot insteasd of relying on the IT guy for help(this is to know if they can handle some OS situation properly)

These questions are just to find out their awareness about the system they use while programming,

0

Start from the lowest levels of the software stack and up.

  1. What is BIOS?
  2. What is the role of the operating system?
  3. What is multi-tasking? What is dynamic linking?
  4. Describe how source code is transformed to a working program for the student's language of choice (example answer for C: preprocessor -> compiler -> a bunch of object files -> linker -> executable)
  5. What is a cache? Estimate relative access times to L1 cache, L2 cache, RAM, rotational disk (i.e., not SSD).
  6. Enumerate data structures that you could implement without looking up details in the literature.
  7. What is the most complex program you wrote? What made it complex?
  8. Explain recursion on an example of own choice.
  9. Why do programs crash?
  10. Explain what is a critical section and give an example where it would be used.
5
  • 4
    Most of these questions appear to have come from a book on operating system and honestly have little to do with programming. Quite honestly, you don't need to know any of this for MOST programming jobs if any.
    – Nayrb
    Nov 20, 2010 at 9:51
  • 1
    A bit exaggerated, but: If you don't know what the OS's role is, it is pointless to talk about security and access rights, either on the OS-level or database level. If you don't know about compilation process, you can't debug your build process from A to Z. If you don't know about cache latencies, you'll end up with code that pushes everything in a DBMS where a flat-file would have sufficed. If you don't know about mutexes, you don't know anything about parallel programming. The rest should have obvious link to programming.
    – zvrba
    Nov 20, 2010 at 11:19
  • 1
    (And if you don't know what BIOS is, you most probably don't know anything about programming PC hardware.)
    – zvrba
    Nov 20, 2010 at 11:22
  • 4
    Start with a basic understanding of electricity. Scratch that: start with atomic physics. THEN work your way up to the BIOS. Nov 22, 2010 at 0:38
  • While these are very important and basic questions, and every programmer should know the answers, I feel that the first half of the list will be a waste of your time, as it's things PC techs also need to know. They won't give you a good idea as to whether the person you're hiring knows anything about programming.
    – Ken Bloom
    Nov 22, 2010 at 2:43
0
  1. Is a string mutable or immutable?
  2. What is the difference between a class and a static class?
  3. What is a pointer?
  4. Describe Complexity.
  5. What is the difference between an Array and a Linked List.
  6. What is the difference between Merge Sort and Quick Sort?
  7. Given a spreadsheet with columns Name, Address, Zip code, and Phone number describe how you would convert the spreadsheet to a normalized database.
  8. Describe the differences between asynchronous and synchronous methods and the ways they need to be handled.
  9. How would you pass information from a server-side application to a web-application?
  10. What is your preferred language? What are some reasons you would use that language over X? (ie. why would you want to use Java over C# and what are some of the fundamental differences?)