first_page

Random Ten Questions for C# Programmers

Buy this book at Amazon.com!This list comes from a favor to a friend of mine as she polishes her professional recruiting tools. The rapid pace of Microsoft’s development tooling is difficult to match for one actually in the Microsoft game so surely those on the outside recruiting in could use some help.

  1. Ask the candidate about how they keep up with ‘the rapid pace of Microsoft’s development tooling.’ You want to hear stuff like Channel9.msdn.com, full duplex printing of Web-based information and anything Carl Franklin can digitize. A response that resembles something like, “I don’t have time”—especially from a person that is not married suggests a genuine lack of interest or an abusive work environment.
  2. Here is a question with an answer I am likely to forget in six months: What are some of the differences between a TransactionScope transaction and a DbTransaction? You should stuff like TransactionScope is newer than the DbTransaction definition or TransactionScope is distributed while DbTransaction is confined to a single, supporting database server. This question is a compliment to the previous question because it determines whether a seasoned .NET developer is keeping up with (at least!) the .NET 2.0 timeframe. The candidate should get some credit for bringing Juval Lowy in this context.
  3. When you want to be really “mean,” ask for the difference between Windows Presentation Foundation and Silverlight. I’m not even sure of the details in a great answer to this question. My answer would be that Silverlight is smaller than WPF and that Silverlight is meant to be a cross-platform affair (runs on the Macintosh). Another satisfactory way to approach this is to say that WPF is the sequel to Windows Forms while Silverlight is the Microsoft answer to Adobe Flash.
  4. After putting on so much pressure, you can ease back and ask something relatively easy like this: is a using block the equivalent of try{ } finally{ } or try{ } catch{ } finally{ }? The answer is try{ } finally{ }. The strong candidate should go on and say that the Dispose() method is called on the resource within the finally block. Note to self: the IDisposable.Dispose Method “Performs application-defined tasks associated with freeing, releasing, or resetting unmanaged resources.” So the reason why this has no equivalent in Java is because Java has no predefined “unmanaged resources” since it lacks the monopolistic power of the Windows OS.
  5. Speaking of Java, ask for the names of the .NET equivalent of Java classics like Hibernate, log4J, JUnit, Spring and Ant. These are: NHibernate, log4Net, NUnit, Spring.NET and NAnt, respectively.
  6. Buy this book at Amazon.com!This one is supposed to be superficial: What does LINQ stand for? The answer is Language Integrated Query. This is part of .NET 3.5.
  7. Now let’s get a little rough again. Ask the candidate when Nullable types appeared in the .NET Framework. Did it appear in .NET 1.1, 2.0, 3.0 or 3.5? The answer is 2.0. The sharp, C# candidate might suggest that Nullable types was a small step toward making general purpose programming languages more “compatible” with databases—namely its concept of null (or in .NET speak, DbNull.Value).
  8. This one is supposed to be easy: what does SOA stand for? I’m not even going to answer that one. Then you might jab about loose coupling—what is that and why is it useful? This should lead into a discussion about Web Services, Dependency Injection and/or even the name Martin Fowler. This is an opportunity for the candidate to show business-level communication skills.
  9. Based on the answer of the previous question, this question may not be necessary: What does TDD stand for? Another one would be: What is it agile development? I really don’t care about answering these questions until I actually see this stuff work in my work-a-day life… my apologies…
  10. And finally a historical question: Who his the principle architect of the C# language? The answer is Anders Hejlsberg.
  11. Bonus question: What do generics in C# turn into variables? The answer to this poorly worded question is types or data types.

Comments

Ed, 2007-09-01 12:06:39

It would be very unlikely that I would even consider someone that can answer those questions. If they did, I will tell them I'm very impressed and ask them to leave the premise as soon as possible.

BTW, what exactly is a C# programmer? They create C# stuff or something? The word 'programmer' is a word I really hope no one add to their job title nowadays either.

From my personal experience, I prefer people with knowledge of software design patterns and good practices. If they simply know object-orientated design, understand business requirements, scope, how to implement error handling and unit testing into their practice, that person is what the real-world truly want to talk to. They can learn C#, LINQ and anything out there.

I believe businesses want to retain technology resources that can deliver their business requirements, not tell them the hot technology Microsoft throws out as beta to see if it sticks among the development community.

To me, a C# programmer is nothing but a $45K/year Joe Coder that these big consulting would work 60-70 weeks with no overtime. Those jobs can be simply performed by resources in Europe or Asia very cheaply for $4/hour, especially when a .NET architect can simply use the Class Designer in Visual Studio or Visio 2007 to build the complete solution framework themselves.

Well, I think it would be bonus for a 'programmer' to say Anders Hejlsberg name, especially when one was doing Java years before C# and .NET came around.

rasx(), 2007-09-04 15:11:19

These questions look for pre-.NET Microsoft programmers who are likely to 'know' VB.NET but claim to 'know' C#. In this case, a 'C# programmer' is a person who actually has some less-than-superficial familiarity with C#---not expert but less than superficial.

rasx()