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 ?

  • 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 04 '10 at 11:27
  • It's not a job, it's a training. To define the content of the training, I need to know the average level. –  Nov 04 '10 at 11:48
  • 4
    What kind of training? Programming? General IT? – Adam Lear Nov 04 '10 at 13:31
  • 100% programming –  Nov 04 '10 at 13:32
  • And what do you want them to be able to program at the end? C? Java? Ruby? SQL? – Jon Hopkins Nov 04 '10 at 13:34
  • Microsoft Technologies (C#.NET) –  Nov 04 '10 at 13:35
  • 3
    I'd reverse that and spend 10 minutes on personal stuff and 20 minutes on technical stuff. – Kyralessa Nov 04 '10 at 13:40
  • 1
    I know, that's what most people would do. But I believe in different approaches. –  Nov 04 '10 at 13:44
  • @Pierre: If this is for technical training you need to focus on technical aspects of your group. – Chris Nov 04 '10 at 13:50
  • I know you think I should, but I have a different view on that. I explained my point of view about the subject is many of my answers on this site ;) –  Nov 04 '10 at 13:52
  • 3
    10 minutes for candidate is too little – Zzz Nov 04 '10 at 15:41
  • igor, I'll tell you that next week (when I'll conduct that test interview). Till that day, I thank you for your contribution. –  Nov 04 '10 at 17:51
  • Tested. 10 minutes is more than enought. –  Nov 21 '10 at 23:31

19 Answers19

56

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.

Tim Post
  • 18,757
  • 2
  • 57
  • 101
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.

Eric Wilson
  • 12,071
  • 9
  • 50
  • 77
  • To low level for students. Just naming data structures doesn't mean the understand them. Why ask about primary and foreign key? If you know what a foreign key is how can you not know about the primary key. Why ask about static method the are only used in C++ like languages and not general. – nickik Nov 04 '10 at 13:14
  • 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. – Kate Gregory Nov 04 '10 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. – Eric Wilson Nov 04 '10 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 '10 at 22:30
  • 8
    What's with all the OO questions? – Recursion Nov 19 '10 at 22:38
  • 3
    Eh, these are all language feature questions. I'm not so convinced they're important, against more theory-bound things. – Andres Jaan Tack Nov 21 '10 at 23:31
  • I'm not convinced either. I made the list in five minutes. Someone should write something way better to get the 300 pts. – Eric Wilson Nov 22 '10 at 01:37
  • The person asking these questions is hiring for a Java, Ruby, or Python web development shop. The person *asking* theses question almost certainly has a rather narrow view of what's important in computer science, and would likely not understand what what his interviewee was talking about if the interviewee explained how generics/templates/higher-kinded types was also a form of polymorphism. – Ken Bloom Nov 22 '10 at 02:26
  • @Ken I didn't realize the interview was for a computer scientist, I had imagined it was for a programming position. You are actually correct, if I were the interviewer. I don't know beans about computer science, as I'm a self-trained programmer. I didn't think that my first ten questions to come to mind would gain so much credibility or attract so much criticism. I'm tempted to just delete them so that the nay-sayers would stop commenting on my lunch-time doodles. – Eric Wilson Nov 22 '10 at 19:27
  • @FarmBoy: there are naysayers on *everyone's* questions. I think there are different sets of questions one would ask depending on the job in question, and the questions tell a lot about the questioner. – Ken Bloom Nov 22 '10 at 22:32
  • No « What is a monad ? » – deadalnix Dec 21 '11 at 22:24
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.
nickik
  • 494
  • 2
  • 7
  • 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 04 '10 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 04 '10 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. – Eric Wilson Nov 04 '10 at 16:45
  • 3
    Most people would get most of these wrong. – Recursion Nov 19 '10 at 22:38
  • 4
    Good questions, but some can't be answered in one minute. – zvrba Nov 20 '10 at 07:25
  • @Recursion Yes, but we're not looking for "most people"— We're looking for the very best. – Andres Jaan Tack Nov 21 '10 at 23:29
  • @FinnNk You've got a point about the time restriction. This would be a good list to select from, though, for a ten-minute job fair interview. – Andres Jaan Tack Nov 21 '10 at 23:33
  • These are good questions. Each one is a *basic* question in a programming paradigm that's popular today. The trick here is that this interview tests *breadth* of knowledge of several different programming languages (basic knowledge of C/C++, Java and something functional should cover all the bases). I don't know that I'd ask these all in an interview for the same job. In particular, the discussion of transactions seems a little bit out of place compared to the other questions. – Ken Bloom Nov 22 '10 at 02:23
  • All of these seem reasonably related to different aspects C#, except for pointers. (That should be made slightly more general, and you can ask about "pointers or references".) #3 and #9 shouldn't be on the list of technical questions, becuase they probably fall into the list of personal questions that were already asked. – Ken Bloom Nov 22 '10 at 02:50
  • Is #9 for namedropping IKEA products? – otto Dec 21 '11 at 11:16
  • @EricWilson Of those 10 questions, the only ones I was taught through a CS course were pointers, recursion, OO and processes / threads (which were barely covered). The rest I know from tinkering around and forums / blogs. – Rob Dec 21 '11 at 22:40
  • @Rob Good for you. I guess it depends what you tinker with. – Eric Wilson Dec 22 '11 at 00:07
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.

Jon Hopkins
  • 22,734
  • 11
  • 90
  • 137
  • 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 04 '10 at 14:20
  • 2
    If they're any good then the 10 minutes are up after question 2 :-) – Sean Patrick Floyd Nov 22 '10 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 '11 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. – Jon Hopkins Dec 22 '11 at 08: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?
rjzii
  • 11,274
  • 6
  • 46
  • 71
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?
Chris
  • 5,663
  • 3
  • 28
  • 39
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.

Kate Gregory
  • 17,465
  • 2
  • 50
  • 84
  • +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 '11 at 09: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

Rachel
  • 23,979
  • 16
  • 91
  • 159
  • 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. –  Nov 04 '10 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. – Scott Whitlock Nov 21 '10 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... –  Nov 21 '10 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) {
    ...
}
Macneil
  • 8,223
  • 4
  • 34
  • 68
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.

Michael Shaw
  • 9,915
  • 1
  • 23
  • 36
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.

Dan Rosenstark
  • 2,344
  • 1
  • 20
  • 20
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

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,

Karl Bielefeldt
  • 146,727
  • 38
  • 279
  • 479
PresleyDias
  • 364
  • 2
  • 11
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
FinnNk
  • 5,799
  • 3
  • 28
  • 32
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?
user7876
  • 539
  • 1
  • 3
  • 7
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
Bruce Alderson
  • 974
  • 5
  • 9
  • 1
    I rarely read programming books cover-to-cover. They make better reference and clarification material. – Andres Jaan Tack Nov 21 '10 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). – Bruce Alderson Nov 22 '10 at 05: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. – NimChimpsky Dec 21 '11 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. – Bruce Alderson Dec 21 '11 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?
Barry Brown
  • 4,095
  • 4
  • 25
  • 27
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.
zvrba
  • 3,470
  • 2
  • 23
  • 22
  • 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. – Bryan Harrington Nov 20 '10 at 09: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 '10 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 '10 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. – Dan Rosenstark Nov 22 '10 at 00: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 '10 at 02: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?)
Kavet Kerek
  • 1,141
  • 8
  • 13