Screening C# Candidates: Let’s Play 20 Questions!

Over the past year I was involved in the process of interviewing candidates for both mid and senior level developer positions.  We would bring them in for a face-to-face interview, sometimes with multiple interviewers, only to find out they were unable to answer the most basic technical questions concerning C# and .NET.  I’m of the persuasion that every .NET developer should understand basic concepts, such as C# language syntax, inheritance, generics, memory management, threading, etc. Without such an understanding, a developer can end up writing apps that are shot-through with problems that make the code difficult to debug and maintain.

Furthermore, I’m looking for a developer with a thirst for knowledge.  The technical landscape is constantly shifting, and developers need to come up to speed quickly if they are going to be able to leverage latest enhancements to the platform.  In addition, the breadth of the technical spectrum is mind-boggling, and a developer needs the capacity to absorb vast quantities of knowledge from various parts of the framework.  For example, someone might be called upon to build a WPF app retrieving data from a WCF service that queries a SQL database using Entity Framework with Ninject for dependency injection and MOQ for unit testing.  If a developer has a grasp of the fundamentals of C# and .NET, it tells me they are motivated to dig deeper to understand how things work under the covers, and take the time to acquire technical expertise both through reading and hands-on coding.

In a face-to-face interview, I can take time to ask probing questions and get a fairly good feel for a candidate’s technical prowess.  However, there needs to be a process to screen out candidates who lack even the most basic understanding of .NET fundamentals.  This is the purpose of the technical phone screen.  It should take no more than 15 minutes to conduct, and ideally it can be administered by a non-technical person, such as a project manager or technical recruiter.  For this purpose I have composed a list of 20 Questions, each of which has a one or two word answer.  Here is the list of questions without answers, which you can use to quiz yourself (see the end of the post for the answers).

C# Phone Screen Questions (without Answers)

1. What kind of type is a string?
2. What kind of type is a double?
3. What keyword defines a custom value type?
4. Can a class have more than one direct base class?
5. What keyword makes a member visible to inherited classes?
6. What keyword makes a class visible only within its assembly?
7. What keyword allows a method to be overridden?
8. What keyword requires a method to be overridden?
9. What keyword prevents a class from being used as a base class?
10. What keyword returns true if a cast will succeed?
11. What keyword returns null if a cast will not succeed?
12. What keyword ensures code execution even if an exception occurs?
13. What keyword calls IDisposable.Dispose?
14. What keyword constrains a generic type argument to derive from a particular class?
15. What two keywords used together return IEnumerable<T>?
16. What keyword would you use to define an inline variable in a LINQ query?
17. What keyword brings an extension method into scope?
18. What keyword do you add to a delegate to force subscribers to use += or –=?
19. What method do you call on a delegate to run it on a background thread?
20. What keyword provides thread synchronization?

The nice thing about this approach is that is should not take just a few minutes to administer, it can be given by anyone regardless of technical background, and the answers are fairly cut and dried.  Of course, the questions are not meant to be exhaustive and are only scratching the surface of CLR and C# fundamentals.  Just because someone can answer them does not mean they have a firm grasp of the .NET type system, garbage collection mechanics, JIT compilation issues, or multi-threading synchronization techniques.  Neither do the questions touch on any of the “pillars” of the .NET Framework API, such as data access (Entity Framework), web services (WCF), or presentation platforms (WPF, SL, ASP.NET MVC).  Nor do they attempt to ascertain logical or critical thinking ability. The only way to test for those things is to perform an in-depth technical interview performed by a senior technical specialist.  This is not to say that a mid-level developer will know all there is to know. What you are really looking for is not raw knowledge per se, but the capacity to absorb and integrate technical knowledge and the desire to know how things work.  If a person has ever bothered to read a book or technical article or taken a training course, their answers will set them apart from the crowd of folks who don’t make time for ongoing professional development.

If you’re reading this blog post and want to know where to begin, my first suggestion would be to run, not walk, to nearest bookseller or online bookstore and pick up Jeffrey Richter’s CLR via C#, which is presently in its third edition.  My short list for the books on various .NET API’s is Programming Entity Framework by Julie Lerman, Programming WCF Services by Juval Lowy, Essential WPF by Chris Anderson, Silverlight 4 in Action by Pete Brown, and Pro ASP.NET MVC by Steve Sanderson.

Best of luck on your career development!

C# Phone Screen Questions (with Answers):

1. What kind of type is a string?
    > reference
2. What kind of type is a double?
    > value
3. What keyword defines a custom value type?
    > struct
4. Can a class have more than one direct base class?
    > no
5. What keyword makes a member visible to inherited classes?
    > protected
6. What keyword makes a class visible only within its assembly?
    > internal
7. What keyword allows a method to be overridden?
    > virtual
8. What keyword requires a method to be overridden?
    > abstract
9. What keyword prevents a class from being used as a base class?
    > sealed
10. What keyword returns true if a cast will succeed?
    > is
11. What keyword returns null if a cast will not succeed?
    > as
12. What keyword ensures code execution even if an exception occurs?
    > finally
13. What keyword calls IDisposable.Dispose?
    > using
14. What keyword constrains a generic type argument to derive from a particular class?
    > where
15. What two keywords used together return IEnumerable<T>?
    > yield return
16. What keyword would you use to define an inline variable in a LINQ query?
    > let
17. What keyword brings an extension method into scope?
    > using
18. What keyword do you add to a delegate to force subscribers to use += or –=?
    > event
19. What method do you call on a delegate to run it on a background thread?
    > BeginInvoke
20. What keyword provides thread synchronization?
    > lock

About Tony Sneed

Sr. Software Solutions Architect, Hilti Global Application Software
This entry was posted in Technical and tagged . Bookmark the permalink.

45 Responses to Screening C# Candidates: Let’s Play 20 Questions!

  1. Pingback: Screening C# Candidates: Let’s Play 20 Questions! | Web | Syngu

  2. areshankar says:

    Question 17, Did you mean ‘this’ as the answer? Or is there more to ‘using’? Thanks!

    • Tony Sneed says:

      The “this” keyword is needed in front of the first parameter in order to a static method to function as an extension method. But the “using” directive is used to bring a set of extension methods into scope. The syntax is the same as a namespace import, but the effect is that extension methods can then be invoked as though they are instance methods.

      • areshankar says:

        ah..my bad…as I quickly skimmed the question!
        nice compilation and an enticing detour while checking out Simple MVVM 🙂

      • Bharath.TL says:

        My self is Bharath. in this week i cleared 3 rounds of interview with oracle .it was aptitude ,technical HR and also the HR.I cleared all the rounds but they told me to prepare for the telephonic round of interview on monday or tuesday.i had given interview on dotnet platform .So can any one of you help me what they can ask. and how i have to give answer .?

      • Nissim Levy says:

        It is not clear from the question that you are referring simply to using the namespace where the extension method was defined. Even though I know I need to use the namespace if I want to execute the extension method I created, I still got this question wrong.

        The problem with this type of question is that the wording of the question is ambiguous.

      • Tony Sneed says:

        To answer the question correctly, you need to know what “bring into scope” means. That could be tricky for people who do not speak English as their primary language. So you could substitute this question with: What keyword is used to define an extension method? (answer: this). Remember, this is just an initial screening test designed to be administered by a non-technical interviewer, and that 50% (10 out of 20) is considered a passing score, which simply means that the candidate would be qualified for a more in-depth technical interview administered by an experienced software developer.

  3. Rory says:

    For my telephone Interviews I would usually ask
    1: Ten C# .Net basic questions.
    2: Five Design Pattern basic style questions
    3: Unit testing basics.
    No longer than 25 mins.
    I put more weight on the latter two, as anyone can remember key words etc.

    • Tony Sneed says:

      The 15 minute phone screen is designed to be administered by a non-technical person, such as a recruiter, and is just to screen out candidates whose resumes are something in between embellishment and fabrication. Once a person passes it, I would then conduct a 30 minute technical interview, usually over the phone, in which I would ask about specific areas, such as WCF and Silverlight, or design patterns and unit testing. During the technical phone interview I can usually probe deeper to see if a candidate has an understanding of the fundamentals, like the difference between reference and value types and explore areas such threading and memory management.

      I used to skip the 15 minute phone screen and just do the phone technical interview, but I found myself wasting a lot of time on people who lacked a basic understanding of .NET and C# fundamentals. The phone screen is not meant to take the place of a 30 minute technical interview, but instead it helps ensure that time spent doing the interview is not squandered on someone who is trying to fake their way into a job for which they are not qualified.

      The 15 minute phone screen should do a decent job of filtering out those types of people because the answers, while brief, should be somewhat difficult to guess, unless you’ve made some effort to learn the fundamentals. That usually requires taking a class or reading a book, and doing some coding to verify what you’ve learned. Too often people try to make it in software development by taking short-cuts and relying on search engines to find code they can copy and paste. But someone who loves to code, and has the desire to know how it all works under the covers, will make the effort to dig deeper. That’s the kind of person I want to hire and work with.

  4. dundane says:

    Honestly I think these are bad questions. Not horrible but bad. And here is why.

    1 there is more than one way to skin the proverbial cat and some of these questions have different answers which are equally valid.

    2 These questions don’t go in to how someone thinks. It’s like asking what year some event happened in history you really don’t get how they would use that information to make an informed decision.

    3 In addition your questions are very jargon filled. You don’t need to know your specific definitions for a term to know when to use a specific key word. What you have accomplished is simply finding out if they happened to have read the same book you got your definition from it gives you absolutely no sense of if they know how to practically apply those terms and key words.

    These questions also really are full of trivialities. Many of these keywords the average programmer quite simply doesn’t use on a daily basis and when they do use them they often have to refresh their memory on specific syntax when they do use them.

    Finally questions like how many classes can you inherit from are just worthless questions. You explained that your main concern was to keep people from making poor design decisions and then ask a question based off of something that is quite literally impossible to implement.

    • Tony Sneed says:

      Hello and thank you for your thoughtful response. This is admittedly one of my more controversial blog posts, so a negative appraisal isn’t entirely unexpected. The main thing to keep in mind is that the phone screen questions are not intended to be the only or final questions, but just the first step in a three-part interview process, followed by an optional 30 minute technical phone interview and a 45-60 minute in-person interview. The purpose of the initial phone screen is simply to filter out blatantly unqualified candidates, but its purpose is not to judge someone’s technical ability or critical thinking. Its purpose is simply to see if they’ve ever picked up a C# book or taken the time to learn some fundamental terms that every C# developer worth his or her salt should know. Yes, it’s a word-game of sorts, but it’s supposed to be administered by a non-technical person, such as a recruiter from HR. The reason why it’s necessary is that people exaggerate — even lie — on their resumes. Why spend 30 minutes of a senior developer’s time with someone like that? It was after having wasted a great deal of time on these kinds of people that I finally resorted to having a recruiter ask some admittedly trivial questions. Are they “bad”? Perhaps yes, but unfortunately, they’re necessary to screen out pretenders with dressed up resumes.

      Let me take on your points one-by-one.

      1. Most of the questions ask for a specific C# keyword, so there’s only one correct answer. Which question(s) are you referring to that could have more than one answer?

      2. These questions are not intended to determine how a person thinks, only whether or not they are familiar with C# terminology. Evaluating a person’s thinking ability should take place in a subsequent interview with a senior developer.

      3. Again, the purpose of the question is not to determine how they would use the term in question, only whether or not they are familiar with the term. We C# developers have our own jargon and terminology, just like medical doctors have their own jargon. But if you are part of the profession, you need to know the jargon. It’s not a matter of reading a particular book – these are from the C# spec.

      4. If you are not using these terms (protected, virtual, internal, abstract, sealed, using, finally, event, lock, etc) on a daily basis, then in my opinion you would not make a good hire. They are pretty important terms in the C# lexicon and you’d better know what they mean.

      5. It’s a fairly important principle that .NET does not support multiple inheritance. Other programming environments, such as native C++, do support multiple inheritance, so this is not impossible to implement. Is it a fair question? Maybe not entirely. While I would not fail someone if they do not answer a few of the questions correctly, they should be able to answer most of them.

      Cheers,
      Tony

      • Max says:

        I completely understand your desire to filter out those who doesnt understand the basics.
        But…
        1. On your question #4 – I would say “No but can on interfaces” – so your non-tecnical recruiter will filter me out. Do you realize that?
        2. I am a developer with 15+ years solid MS background (10+ years C++ plus lately c#/asp/sql/wpf/xml/etc…), but in my positions in the last 5 years was exposed to c# only on occasional projects. I’ve read books and went through several online trainings as I am looking for a .Net position.
        Despite that – I never use “using” for example. And have never met any explanations that it would invoke the Dispose. So did I read wrong books/took wrong trainings? 🙂
        And, I avoid using extentions, as I read MS does not recommend to use them plus I don’t see any use of them in my current work.
        As a result I don’t know much about them and most likely – will fail on these questions.
        Hovewer you should realise that I can get many things done faster than people who will answer these questions – just because experience, skills and set of technologies I know.

        so I think relying on these questions is not a best idea.
        At the same time I believe you realize all this and you are OK to leave aside some people who might be a good fit for your hirings.
        Frankly, too bad: with a bunch of technologies and limited possibilities to learn them – people like me often facing a situation of being cut off with similar questions when we’ve done a job that is required for the position and can successfully do it for you.

        Regards.

      • Ünsal says:

        @Max: Source: “https://msdn.microsoft.com/en-us/library/yh598w02.aspx”
        – ” The using statement calls the Dispose method on the object in the correct way, and (when you use it as shown earlier) it also causes the object itself to go out of scope as soon as Dispose is called”
        – “The using statement ensures that Dispose is called even if an exception occurs while you are calling methods on the object.”
        The article is same since Visual Studio 2008, and fairly describes the same thing with VS 2005, so yep, it was there when your post was made in 2013.

        Unfortunately, the answer for your “So did I read wrong books/took wrong trainings?” is “yes”.

        Regards.

      • Tony Sneed says:

        @Ünsal: Thanks for chiming in!

        @Max: The “using” construct in C# has been around since C# v1, circa 2001, and it’s extremely important for preventing memory leaks and proper resource disposal. Take, for example, opening a file with StreamReader. Without the “using” block (or closing the reader in a try/finally, which is what using does), then a file lock would not be released, and no one else would be able to alter the file.

        The other thing I’ll mention is extension methods. These form the basis for LINQ (language integrated query) in C#, and they are used extensively for adding functionality to classes that may not be designed with extensibility in mind. For example, I can add a Reverse extension method to the string class, even though it’s sealed.

        The bottom line is that every .NET developer should read Jeffrey Richter’s book, CLR via C#, or something similar, not just to learn about C# keywords and syntax, but to get the “big picture” and learn what they mean at a deeper level.

  5. korolei says:

    I’d agree with dundane that those questions just bad. They would give you candidates with good memory, but not necessary good analytical skills. I have over 10 years of consulting, but wouldn’t able to answer half of the questions over the phone. Although I’m using all of the keywords in my code and have good understanding where to use it. It’s just not on the tip of my tongue.
    So my point, you’re not saving time by delegating those questions to non-technical person. You’re still getting the same proportion of good and not so good candidates, in best case scenario.

    • Tony Sneed says:

      @ korolei, If you can answer about half the questions, then congratulations you passed! I wouldn’t require someone to be able to answer all of them, but if you can’t answer at least 50% then what it shows is that you are not familiar with some key C# terms that every developer worth his or her salt should know. How can you write decent software without knowing about virtual, protected, abstract, finally and using? If you are not familiar with the pillars of object-oriented programming and how they are implemented in C#, then you may be able to sling code, but you’re not the kind of developer I would want working for or with me.

      While that may sound harsh, I have undergone the rather painful experience of working with what I call the “search engine” developer. They may be smart and able to think analytically, but they lack a basic understanding of C# terminology and fundamental constructs. That’s not too bad, if they are willing to go out and learn these things, but it’s disastrous when they think there’s no need to learn them and can get by with copying and pasting code snippets from online samples and blog posts. The result is code that shot-through with problems that result from taking too many shortcuts.

      After reading your comment, I did a little experiment. I’m currently working on a consulting project with two other developers who I would consider to be competent. I rattled off the 20 questions, and they were able to answer about 90% correctly. What that tells me is that generally people who complain about the questions are the ones who don’t know the answers and — more importantly — don’t have the desire to learn what they need to know to answer them. It is precisely this kind of developer that the questions are designed to screen out.

      For those reading this post who do have the desire to learn from it, there is a place you can go to do so. I have posted an online C# tutorial, written by an instructor for DevelopMentor, that has lessons, exercises and quizzes on C# fundamentals. Check it out here: http://www.tonysneed.com/csharp/tutorial/coursebook.htm. Enjoy.

      Tony

      • Max says:

        > If you can answer about half the questions, then congratulations you passed! I

        heh..
        sorry, Tony, I should’ve read this first before submeetting my post above 🙂
        If that’s the guideline your non-tech uses – then it’s more or less decent test.

      • Tony Sneed says:

        Yes, because these are somewhat arcane technical questions on C# syntax, I would expect the average C# developer to answer about half of them correctly, which would then warrant a follow-up interview, either by phone or in person, with the candidate by an actual developer, who can more accurately probe the candidate on their knowledge of the .NET Framework API, their code-writing skills, and on their critical thinking ability.

        For developers like yourself who are looking for a .NET position, I would highly recommend reading the book, CLR via C# by Jeffrey Richter, which is in its third edition. There you’ll find a great explanation of keywords such as “is”, “as” and “using”, with examples of where and why to use them. (By the way, “using” is important for cleaning up non-managed resources, such as file handles or database connections, in a deterministic fashion.)

        With a little reading and research on C# syntax and usage, you’ll be in a much stronger position for your job search and distinguish yourself from the crowd of job seekers who cannot or will not spend time learning the fundamentals of C# and .NET. It’s very tempting for developers to copy and paste code from blogs without understanding how things work under the covers, but that strategy can backfire when poorly written code introduces memory leaks or performance issues. Clearly, there is much more to software development than basic C# syntax, but lacking a firm grasp of concepts such as inheritance, memory management, and threading, can lead to serious problems writing code that is clean, concise and maintainable. It’s not the only thing that is important, but it’s a good foundation to build on. All the best!

  6. Rachel Brown says:

    Great help, thanks Tony!

  7. likeu2000 says:

    I can see what sort of knowledge you wanted to check, but just the way you ask is a bit “unusual”, I would fail quite few not because I don’t know what they are, just simply they way you ask.
    i.e What keyword calls IDisposable.Dispose?
    I know “using” will dispose the object after finish, but the way you ask is a bit miss leading, if instead you ask what can you do to ensure a disposal of a object would make more sense.

  8. Marios Koumides says:

    I don’t see anything wrong with these questions. I have a list of questions I ask in interviews which are very similar to these ones.

  9. jeanfor says:

    What you need to ask are basic question on object oriented development, or for example why you should use stringbuilder or what is garbage collection, reflection…… Like some have said here, I would just fail the test because when I use C# I am not trying to answer a syntax question. This is just the way our brains are wired. You will probably hire a guy who has crammed some questions but who is not able to really solve a problem. I think phone interviews are just plain stupid and a waste of time. Better give the candidate a 100 multiple choice questions, like the questions that are given when taking the Microsoft exams.

    • Tony Sneed says:

      @jeanfor: You’re misunderstanding the questions if you think they’re about C# syntax. You’re also misunderstanding the nature of the screening test itself. As I’ve said in response to other comments, they are just the first step in a multi-step process and are intended to be administered by a non-technical person. If you can answer just half the questions, then you’ve passed by showing a minimal knowledge of some important terms. They are not intended to evaluate your qualifications as a programmer, only to weed out people who claim a knowledge of .NET which they do not indeed possess. The questions pertain, not to syntax, but to concepts of the .NET Framework, such as the type system (value vs reference), inheritance, type casting, exception handling, resource management, generics, delegates and threading. If as a candidate you are familiar with less than half of these terms, then it tells me your knowledge of .NET is superficial. If you are unfamiliar with important terminology, then how can you be familiar with the underlying concepts, and how can you be able to communicate with others programmers?

      There are plenty of programmers out there who know C# and can program using it, but who are ignorant of the fundamentals of the .NET Framework. These are what I like to call “search engine” developers, who know enough to copy and paste something from a blog post and make it compile and run, but who lack enough knowledge of the basics to write code that is going to be easy to maintain and extend. Before you can sing in an opera, you need to know your do re mi’s. And before you can write elegant and efficient code, you have to know the basics. While these questions are in themselves insufficient to determine if you are a good programmer, they can serve to weed out ones who are lacking basic knowledge of .NET fundamentals. And those are the ones I’m not interested in wasting time on with a face-to-face interview.

      • jeanfor says:

        Your questions seem all to be related to what is the keyword…. if this is not a syntax question then what is it? I think the problem about all those phone interviews is that there is no standard. In the same subject I remember that our company had hired a guy who had the MS certifications and could answers those type of questions and he was a terrible software developer. I am of those who think that you hire a brain first somebody who can solve problems and has a creative mind…. ask about GAC, CLR…..

      • Tony Sneed says:

        Again, you’re not understanding the screening question for what they are: screening questions. The decision to hire is not based on these questions. They are only a means of eliminating applicants who lack basic knowledge of .NET terminology and concepts. If they are unable to answer these kinds of questions, it shows they do not have enough familiarity with fundamental .NET terms. (C# syntax goes far beyond just a few keywords.) But if they can answer, it does not make them a good hire. They would have to pass a more thorough in-person interview by an experienced programmer. The reason why this type of screening is needed is so that the time of the interviewer is not wasted on applicants who lack basic knowledge. It’s possible a person could pass the screening questions, but then fail an in-depth interview.

  10. Pingback: Jon D Jones, Director Digital Prompt | Development : Some Great Resources For C# Job Interview Preparation

  11. wizzard says:

    This is why I am developing on my own…because problems can’t be solved if you know that the string is reference or double is a value, problems are solved if you can think…
    When I was at the collage, there was some guys that didn’t know the difference between CPU and HD, but they have learned what keyword is for what, they can answer your questions easily…and they do everything by the book, and if it’s not in the book, they can’t solve the simplest things. And on the other hand, some excellent developers can’t answer your questions…so, I must say, u reject some really quality people, with that kind of questions.

    • Tony Sneed says:

      Since writing this post, I’ve had the chance to reflect more on what I am looking for in a team member. The most important thing is to demonstrate that a person has the drive, ability and resourcefulness to learn what a developer should know. A passing score for the screening questions is 50%, or 10 our of 20. A person does now have to know the answer to all the questions, but must simply demonstrate that they have acquired a minimum of knowledge about object oriented programming in C#. That means they will have had to go beyond Internet searches in their quest for that knowledge, for example, by reading some articles or books. The book I recommend to obtain this knowledge is CLR via C# by Jeffrey Richter of Wintellect, which you can find in PDF format. I also have an online C# tutorial with the answers to all these questions.

      Again, the point of this is not to quiz someone for arbitrary knowledge. And it is not intended to test for problem-solving ability. That is the purpose of the in-person interview to follow, provided the candidate demonstrates a basic knowledge of C# syntax. The only reason for the screening questions is to weed out people applying for a position as a C# developer who have not bothered to learn the basics of C# syntax. If you don’t know what virtual and override mean, or the difference between value and reference types, then that shows your knowledge of C# is superficial at best, or at worst, your code would have bugs that you would not know how to solve. I would not necessarily reject such a candidate outright, but I would then suggest they go off and read a good C# book (there are many) or tutorial, then return and try again. There is always the possibility to reinvent oneself, but there needs to be an underlying desire to learn and not be content to take shortcuts in the pursuit of knowledge.

    • Alex says:

      Couldn’t agree more. This type of recruiters are looking for people with academic skills. I went to school 15 years ago, I don’t remember this stuff. And I’ve been pretty successful so far. Funny thing is that I just got an interview with somebody like these guys, I googled the questions, got the answers and aced the interview.

  12. Kiran says:

    ’Im of the persuasion that every .NET developer should understand basic concepts, such as C# language syntax, inheritance, generics, memory management, threading, ” Visual studio giving a intellisense . So why do we “by heart” the syntax . People should know the basic “Concept” of .NET as you mentioned .Butmeasuring a candidates knowledge by checking his syntax knowledge is NOT too much GOOD. I have seen many interviewer asking such kind of Syntax part.. I don’t agree that part.

    Thanks

  13. Patrick says:

    If anybody is interested in some kind of automation of the screening process, I would suggest C# test from Tests4Geeks. They have very nice questions about OOP.
    I am not saying you should use it instead of live interview, but it could be good initial filter.

  14. firemystdl says:

    Great list of questions Tony! Here’s a few more I think you should consider adding to your list too:
    http://cc.davelozinski.com/general/tricky-csharp-and-sql-interview-questions

    _

  15. The verbiage of your questions read like dry MSDN documentation material. In many cases merely rewording your questions could do a lot to making them more conceptual and less syntax obsessive. For example the USING question, I would approach that by asking somebody “If you wanted to be sure an object or resource was freed up, how would you do it” and the ideal answer is “call dispose after you’re done, or wrap it in a using”. If they only answer one of the two parts, ask if there’s another way.

    Would I pass your test? Have I been a senior developer at multiple companies and even perform tech screening for programmers before they go on interviews, absolutely. I believe asking concepts is more important than syntax fundamentals. It’s like asking why one would use | vs || in an IF statement, it’s a horrible approach and flirts with minutia knowledge. I could pick apart every question but I see others have taken their punch at it. They’re bad questions, some of them are horrible. Sorry not sorry.

  16. chimako27 says:

    You realize answering memorisable questions doesn’t test anything but someone’s memory? But I will admit if memory is what you’re looking for, then this is a valid (lazy) way to interview.

  17. Cesar Zamora says:

    I not entirely agree with this phone screen system to hire a programmer that is not indicative of knowledge that is indicative of good memory (The school system teach you to study to pass a test and not to understand what you study to put into practice. These phone interviews is just another school test). I been in the two sides of the coin. I have been a programmer a good one I may said…and since 15 years I own a software company so I hire developers all the time. Let me tell you something about hiring developers… good ones!. I really do not care too much about the knowledge of the language that a programmer has or how much experience they may have that is minimum requirement for me, what’s important is that you have a proper training and know how to code or at least work 6 months before. Let me put it this way ANYONE can code, ANYONE can learn how to program ANYONE can learn about Database and programming languages that it is not difficult at all. What is really really important is that the programmer has an ANALYTICAL and LOGICAL mind set a common sense to solve problems using the programming tools. A person that can work independently as good as in a team environment, a person that has a never ending desire to improve his own skills and challenge others to do the same, a person who get along with other peers, capable to criticize other projects and accept the critic of other ones. For me 80% is what I described and 20% Code. You can not find what I describe in a simple phone screen and nether in an interview you find that working at least 30 days with the programmer hand to hand.
    Phone Interview is a waste of time, several of the employees that I had in the past have mention that to me what they doing when they were looking for a job. This is what they did: they visit several web sites about the topics of interview, collect the question and memorize the answers…BINGO!

  18. Cesar Zamora says:

    Also I found this on your replays: I am not agree at all on you comment below:
    “Too often people try to make it in software development by taking short-cuts and relying on search engines to find code they can copy and paste”
    These people are the smartest why? because the way of thinking… they do not think like you or me these are the best and more effective programmers of today. They do not waste time on memorize concepts to recited like parrots. They read books, magazines, blogs, videos to lean and apply what they learn, they are hands on. They are more effective because they think like this… Why I am going to waist my time, the companies time in creating a software search procedure by my own, for example, if I can find thousands of it over the internet, download the best fit my needs modified test it and get over it and go to the next challenge……..
    It seems o me that are hiring people the way it was hiring in the Industrial age… we are not longer in the industrial age we are in the Information age and those rules of interview people does not apply anymore…

  19. Cesar Zamora says:

    Why phone interview are a waste of time and inefficient and unproductive? In this times working in a project requires at least knowledge of 3 to 7 programming languages, frameworks and other sorts. If you know something about programmers is that we are not too good about memorizing concepts to recited to people. Our minds are busy learning techniques or find out how to solve a problem, once we solve the problem we forget about it and go to solve the next one. Now multiply that for 3 to 7 languages, and sometimes the solution requires to learn a new language (No concepts).
    Why it is a waste of time? You have the work history of the programmer, that is enough. If he/she code before what is the point of the phone interview… just a waist of time for the employer and future employee.
    Why it is inefficient? Concept does not make a programmer, hands on code and resolving problems does. If a programmer know how to code must probable knows frameworks, databases, and so on and so far.
    Why they are unproductive? Does not help to hire the right guy for your team. Besides knowledge you want to hire a person whom it is responsible, respect other people works, give and receive criticism, well educated, nice person whom get along with must of the team, some one who you can relay on, fishing on time his task, help to improve the software conditions, help to analyze software and promote new software tendencies.

    If you want to know if the programmer know to code in certain language just see his resume if he has done a project in C# then why you ask questions about C#. It is more important and productive to know how he use C# to solve the most challenging problem in the past project for example.

  20. smith5646 says:

    Just in case someone is still monitoring this blog…

    I am a programmer/consultant with 30+ years of experience in many different programming languages. I have coded in C# for the past 5-10 years for my own projects (I am currently working on a piece of software that I hope to eventually sell). During the coding of these miscellaneous projects, I learned a lot of the functionality but not terminology. Unfortunately, I missed most of the above questions, some because I did not understand the question (example is #12, i know what finally does, I just didn’t realize he was asking about a try catch block) and some because i have never used it (example is #9, I have never needed to create a sealed class).

    I have read most of the above comments and saw where people didn’t like the wording, etc. but I have to ask if these questions are really things that the everyday C# programmer uses or are they more of an exception? Do everyday programmers create sealed classes?

    I enjoy using C# and I would like to transition my career into C# development. Is there somewhere that I can truly assess my skill level without getting tripped up over terminology so I know what level to apply for?

  21. Hello,
    Try to Post .NET Topics(C#,ASP.NET MVC, ASP.NET, SQL SERVER, ADO.NET) and Topic Wise Qtns for freshers it is helpful for all the followers.
    Especially for freshers.
    also post exception handling article in depth.
    Regards,

  22. shubham saxena says:

    Sir, I have some c# questions which are troubling me. Please can you help me out?

  23. Micah Epps says:

    Tony. I get it. I’ve been interviewing for a senior C# position for the past couple of weeks. I started off too easy on the technical and ended up wasting my team’s time with in-person interviews. Then I went full swing to a 110 question “screen” questions which took 90 minutes to administer just to see a score of 60%. A lot of resumes are written to impress sales and C-suite types but not the development team- and I hate to rule them out just because their resume-writing skills are lacking… PS I scored 18 on your quiz 🙂

Leave a comment

This site uses Akismet to reduce spam. Learn how your comment data is processed.