Inflection Research

May 18, 2008

Interviewing Programmers (part 2)

Filed under: Architecture, Programming, Web Platform — Tags: , , , , , , , , , , — semanticzen @ 10:25 pm

In the last post I outlined our criteria for evaluating programmers and architects, and how surprisingly difficult it is to find good candidates. Since the telecom and .com bubble burst in 2000 it appears many top notch people are choosing non-IT career paths. Below I outline the base set of questions that we ask in an interview. We cater interviews individually for each candidate so we can best understand their ability. While we are trying to fill a specific position we have a large enough IT staff to modify positions around candidate’s talents.

Also, if you ask the same question over and over again recruiters pick up on that and prepare candidates for specific questions. So we only use the below list as a reference point. Most of the questions we ask are not on the list below, but they may be related. When listening to the candidate it is not good to be thinking of the next question. We alleviate this by having two architects in every face-to-face interview which is based more on problem solving / case study style questions than do you know / can you explain style questions. In the one-on-one phone screens we do this list is helpful as a reference point to sharpen our focus on listening.

As a company focused on building web applications using Microsoft’s .Net / SQL Server platform are questions of course are focused on those domain areas.

Why be an Architect or Programmer?

  1. Do you understand what the position is that you are interviewing for? Or what type of position are you looking for?
  2. What about this position do you find most appealing and what if anything concerns you?
  3. Right now what would be your ideal job?
  4. What are your strengths and weaknesses?

Communication

  1. When a co-worker is wrong about a work issue, what is the best way to discuss the issue with him or her?
  2. Describe a decision you made that was unpopular and how you handled implementing it?
  3. Tell me about a situation where you worked effectively under pressure?
  4. What makes someone a good programmer?

Technical Questions

  • We often ask the candidate what technology the feel most comfortable with and start with that technology or ask them to walk through a brief overview of their recent experience and begin with a technology the indicated they have used extensively
  • If the interviewee gets stuck on a question we often ask them how they would go about figuring this out (what steps would you take?).

All Programmers

  1. Describe the difference between a thread and a process? Process vs AppDomain?
  2. What is a Windows Service and how does its lifecycle differ from a “standard” EXE?
  3. How many processes can listen on a single TCP/IP port and why?

Component Development

COM

  1. What is the purpose of COM? Why was it needed and what problems did it solve?
  2. Describe the .Net architecture?
  3. What does regasm do? Difference between regsvr32?
  4. What is DCOM? How do you create a DCOM object in VB6? How do you create a DCOM object in .Net?
  5. Explain Object Context.
  6. What are types of compatibility are available in VB6?
  7. Does VB6 support multiple inheritance? What about .Net?

.Net Framework

  1. Explain the use of virtual, sealed, override, and abstract
  2. How does the garbage collector in the .NET CLR manage object lifetime? What is the difference between Finalize() and Dispose()?
  3. How does impersonation work?
  4. What is the difference between
    1. Delegates and events?
    2. Class and structure?
    3. Protected and internal
    4. Shadowing and override
    5. ArrayList and Hashtable
    6. Optimistic and pessimistic locking
  5. How do you enable and disable connection pooling?
  6. How do you implement Database Transaction Coordinator in .Net?
  7. Describe an example where you used
    1. A struct?
    2. Overloaded a constructor?
    3. Overloaded a method?

ASP.Net Development

High-level

  1. What ways can you get HTML content from a website at runtime?
  2. What happens when an ASPX page is requested from a browser? What about ASMX?
  3. How do you measure performance of an ASP.Net application?
  4. What code should be placed in the code behind? What should not?
  5. What different ways can you test an ASP.Net application?
  6. What are some of the best ways to optimize an ASP.Net application
  7. What is the MVC pattern?
  8. When should you use a web service and when should you use the GAC?
  9. Provide an example of a custom HttpHandler and a .Net implementation of an HttpHandler?
  10. Benefits and limitations of: Viewstate, Query Strings, Cookies, Hidden fields

Web Services & JavaScript

  1. In JavaScript how do you use xmlhttp posts?
  2. How do we do asynchronous processing using Ajax?
  3. What are the benefits and limitations of Ajax?
  4. How pass parameters to a web service from JavaScript?
  5. Explain what the Scriptmanager control does in Ajax?
  6. What is JSON? How does it compare to XML (advantages and disadvantages?)
  7. What is the difference between XML Web Services using ASMX and .NET Remoting using SOAP? What is the difference between ASMX and WCF?
  8. How do you expose a web service to 3rd party companies?
  9. What are the steps to consume a web service exposed over the internet by another company?
  10. How do you secure a web service?

Events

  1. What are events? Do they have return types?
  2. How do you connect multiple events to a single event handler in ASP.NET web pages?
  3. How do you determine which web server control raised an event?
  4. How do you dynamically bind event handlers at run-time in ASP.NET web pages?

SQL Server Development

  1. Explain normalization? What type of normalization is best for what type of application?
  2. What is fill factor?
  3. What are the different transaction levels?
  4. What are the different types of locks? What is lock escalation? What are some of the locking hints?
  5. How do you determine when to add or remove a non-clustered index?
  6. How do you optimize a stored procedure?
  7. When have you used a temporary table in a stored procedure?
  8. If I execute an insert statement on a table with a trigger on it and the trigger fails, what happens to my insert statement?
  9. Provide an example of when you would decide to write a user defined function in T-SQL?
  10. Describe a good time to use a WHILE loop.
  11. Describe a good level of normalization in a transactional database.
    1. We are looking for an explanation, not an answer like “3rd normal form” and clarify the question if necessary
  12. Can you describe a time when you needed to use a transaction?

Other

Here we let the candidate pick from the below choices and ask a few questions in that domain.

  1. SQL Reporting Services
  2. BizTalk
  3. SharePoint
  4. LDAP or Active Directory
  5. Windows Script Host & PowerShell

Architecture

  1. What new technology have you learned or used recently that allowed you to solve problems easier or differently?
  2. Good architecture is necessary to give programs enough structure to be able to grow large without collapsing into a puddle of confusion. What are some of the key tenets of application design?
  3. Describe {interviewer selects from choices below} architecture, when is it useful, and why? Or have the candidate critique one of these types of architecture.
    1. Event Driven
    2. Object Oriented
    3. Services Oriented
  4. What is the difference between SOA and OO?
  5. What are the most important aspects of object oriented programming?
  6. What technology are you most interested in?
    1. What are you doing with it?
    2. What problems will it help better solve
  7. What is scaffolding
  8. What is object-relational mapping
  9. What code should not be placed inside an object?
  10. What is the difference between a framework, an application, a platform, , and a service?
  11. What is UML? What are advantages of using UML?
    1. How many types of diagrams are there in UML?
    2. What is the sequence of UML diagrams in a project?
    3. Give a brief explanation of all the Elements in activity diagrams?
    4. Describe the various components in a sequence diagram?
    5. Explain the different elements of a Use Case?
  12. Why are design patterns useful? What are the three categories of design patterns?

Case Study Questions

TBD, we typically craft these shortly before the interview; often based on recent challenges we have solved

  1. It isn’t necessarily critical that they find the optimal solution, it is critical that they
    1. Show good listening skills
    2. Ask good follow-up questions
    3. Demonstrate good problem solving skills

Problem Solving

  1. Describe one of the most difficult problems you have had to solve and how you solved it?
    1. Looking back how would you handle it now?
  2. What steps do perform when learning a new technology? What was the last technology you learned (and why)?
  3. Determine if is a quick thinker –> ask a couple off the wall questions

Motivation

  1. What are you going to do over the next 6 months to make yourself a better programmer?
    1. Is their answer quantifiable / measurable?
    2. Some example answers: read good code (find how?), read books, follow blog(s), contribute to open source project, etc
  2. Give an example of a goal you reached and tell me how you achieved it?
  3. What is it that most motivates you?
  4. What accomplishment are you most proud of?
  5. Why did you leave your last job?
  6. What are you looking for at this point in your career and why?
  7. Where do you see yourself in five years?

May 17, 2008

Interviewing Programmers & Architects

Filed under: Programming, Web Platform — Tags: , , , — semanticzen @ 9:21 pm

Over the last three years I have been responsible for hiring technical people for part or all of our company. Due to turnover and new positions we are almost always hiring. I’m consistently amazed at the poor quality of candidates in the marketplace. We use technical recruiters and don’t interview most of the candidates the recruiters submit. Yet we still only make an offer to less than 10% of the candidates we interview; fortunately the vast majority of candidates accept the offer.

We build web applications to manage the operations of transportation and logistics companies. While there are challenges the solutions we build are far from rocket science. Most of these applications are simple CRUD (create, read, update, delete) apps where the general premise of the application is a search box (or initial report to drill down from) a resultant grid to view and/or update; and potentially the ability to drill down to more granular levels where the CRUD pattern is repeated.

Most of the people we hire are ASP.Net and SQL Server programmers. Most of the candidates cannot explain how to read the value from a simple text box after the page has been posted back without using view state. Many say it cannot be done; to which I usually respond “How did web apps work before .Net was created?”…at that point I typically get a lengthy silence. Stated another way I use various questions to ensure the candidate understand the request/response, stateless nature of web applications and most candidates don’t understand this paradigm.

The basics seem to be lost on most programmers (or the ones looking for jobs). Many programmers just know how to drag and drop controls onto an ASPX page in Visual Studio and how to set the properties of those controls. The problem is when issues arise, optimization is required, or unique features are requested these programmers are of little usefulness. The problem doesn’t seem isolated to web programmers as many database programmers, with years of experience, cannot explain the difference between a clustered and non-clustered index.

Most candidates show little intellectual curiosity which is especially demonstrated when we ask basic problem solving or case study questions. Now I realize my company is no Google and doesn’t get many Google quality candidates, but the knowledge and expertise candidates’ exhibit has not improved in five years. If anything it appears to have generally declined. This is surprising considering web development innovation has stabilized after rapid progress until roughly 2002 – 2003. While browsers and networks have improved the major web application technologies and architectures (such as AJAX, JSON, CSS, REST, SOA, etc) have existed for over five years. Since 2002 -2003 much of the progress appears to be on the infrastructure side, but that is another discussion.

Interviewing and finding good people is always difficult, but it in the IT world it is as difficult as it has ever been. Below I’ve outlined the criteria we use to evaluate candidates. It is evenly split between straightforward technical abilities and behavior/aptitude skills. While interviewing will always be subjective it is good to quantify the process as much as possible.

Criteria

Ability (0-5)

Comments

Interviewed By

SQL Server

  

Understands DML and query optimization, how SQL Server physically stores the data, how to perform database design and data modeling

{Interviewers Name}

Web Development

  

Primarily covers understanding of the .Net Framework and object oriented design, also include: ADO, COM+, etc

  
Component Development

  

Primarily covers understanding of the web paradigm specifically ASP.Net and web technologies like: JavaScript, sessions, cookies, HTTP, XML, web services, IIS, DHTML, etc

  
Problem Solving

  

Can apply one’s knowledge to efficiently solve problems and when needed can broaden knowledge by quickly learn needed technical and non-technical information. Given a high level problem can this person find an optimal solution?

Candidate Name

Attitude

  

Displays strong desire to learn, motivation to take the initiative to learn what is need to solve problems, demonstrates a great work ethic and good team work

{Candidate Name}

Communication

  

Is a good listener engaging in feedback and asking follow-up questions as needed. Can clearly communicate ideas to technical and non-technical people

  

Other

  

This is an optional field to add comments or add “bonus” points for a unique ability or experience that this candidate offers

Interview Type

Interview Result

0.0

 

Phone /

Face-to-Face

Suggested Project Type

{Comments about what type of project and/or team this candidate would be a good fit for}

 

We rate a candidate’s ability on a scale of 0 to 5; with 5 being the best. For junior level candidates we are looking for someone with good problem solving, attitude and communication skills and minimal technical skills. Mid-Level and senior candidates must also possess a certain level of technical skills. Our conclusion of a candidate’s experience level is based on the ratings we assign to each category.  Only a senior programmer is required to have a specified level of understanding of the three technology domains we identify. 

Our opinion is that a certain level of the softer skills (problem solving, attitude, and communication) is required at every level.  The main difference between junior-level and mid-level is technical experience.  The main difference between mid-level and senior-level is technical experience and problem solving ability.

Ultimately we look for a person with the required aptitude who has a good attitude. If someone has built a strong expertise in one area (such as ASP.Net or T-SQL) than they will be able to build expertise in the other technologies we use. I’ve discussed the problem of finding good technical people with friends in other companies and they appear to be having the same problem. I wonder how widespread an issue this is and how much it will affect IT organizations structure in the near future.

Blog at WordPress.com.