Friday, November 18, 2011

Hiring a Super Programmer?

When it comes to programming, I noticed most of the super programmers share similar attitude and thought process. I started identifying similarities whenever I took interviews.

After meeting 3000+  potential candidates (thanks to all my previous companies choosing me as interviewer), I dared to have a quick points to spot a 'Super Programmer' from the pool of programmers.

When I shared these points with my colleagues, they found it useful during their interviews.

Please note

  • These points are strictly valid for 'Rock Star Programmers' only. If you apply these observations to a good programmer, you may loose him. 
  • I always don't follow these points very strictly in interviews as there will be many other aspects to consider, However these can just be used as indicative pointers if you feel good. 

So here it goes,
  • They may be little nervous in the beginning. When you ask them about their interesting project, their eyes glow and for a moment they just forget where they are and completely immerse in explaining the problem, how much they were amazed, their explorations and implementations.
  • They have habit of knowing all latest happenings in their interested technical area. That means they are closely following beta and release candidates as well.
  • They read lot of blog posts, tech articles and most of the time own a technical blog. They have good bunch of posts on technical articles or pointers in their blog.
  • Even if they don't know the answer, they logically think and almost get through the problem. Their hands don't shiver when writing code. No matter even if the syntax is wrong.
  • They always try to generalize the approach and try to make it reusable.
  • They are fanatic about browsing the project code-base and finding out what is best in it. If something is badly designed or written, it disturbs them and try to revamp/fix it if permitted. They will be proactive in doing it (provided such an opportunity is given).
  • They have earned good reputation points in technical forums. That is more important than having bunch of certifications.
  • Their resume contains bunch of memory profiling, performance profiling, code review tools and many popular open source frameworks used (like Caliburn..etc) in their project and few of those is introduced in their company projects because of them.
  • Ask which piece of code in their previous projects liked a lot and which was not. It indirectly tells us their level of understanding about technology.
  • Observe your conversation with them. As you know, the developers conversation context is bit different. Are they catching it quickly? your such conversation should go with them smoothly. For example, I usually ask what version of Dotnet you are using and many reply, its 2010 or 2008! First point, They are best Visual Studio.Net IDE users than Dotnet programmers. Second, they are not understanding the context. I have asked the version of Dotnet framework not the IDE. If you are explaining too many things during the discussion, then there is a problem.
  • When you give them a paper and pen and ask to write a program, check how much space they waste. 2 things to notice,
  1. If they fill A4 sheet page to write 2 small programs (reverse a string and looping through ArrayList having different type of objects) maintaining bigger inline space, then they can't think more on efficient usage of computing resources also. Even if they think, it may be their simple programming habit but not something coming out from geeky mind. This is more inspired from 'you will work the way you really are'.
  2. With minimum inline spacing, even if they fill A4 sheet writing lot of code (without striking unused ones) then, they are dangerous programmers. They can explain the logic on the same day it is written and anytime in future you need to pray for God to know about the hidden logic.
  3. Why there should be a 3rd point when I said only 2.
  • Ask them very basic questions (If you have to implement AJAX response/request what objects do you use in Javascript) and see how detailed and thoughtful answer they give. Whats more interesting is how deep they delve and present different aspects of it.
  • They have either contributed to one of open source projects (on CodePlex, SourceForge,gitHub..etc) or have hosted their own.
  • They have published some articles on technical article sites (like CodeProject...etc)
  • Majority of their posts on twitter or facebook speaks about their serious technical explorations than 'I ate this', 'been here..' or sharing funny cat videos.
  • They have list of achievements in the resume and may not be a certified professional. 
No matter even if candidate don't stand true for all above points. Most of the time we believe our senses and take the decision (and that is usually proved right.)

Well, this is my list. Do you have some quick points? Feel free to share here.

Thanks for reading!


vikas hebbar said...

The blogs and help given are nice.Keep posting.All the best

Pavan Gayakwad | SrushtiSoft said...

Thanks Vikas. Glad that you enjoyed reading.

Prateek Dilip @IITG said...

Great strategy to differentiate between programmers, moreover this I am glad to see that someone is there who cares about all other parameters as well to be a rockstar programmers. Loved this part of first point it is so real :

"When you ask them about their interesting project, their eyes glow and for a moment they just forget where they are and completely immerse in explaining the problem, how much they were amazed, their explorations and implementations"