Testing Programming Ability

In an excellent article, Irman has brought out the idea that measuring programming knowledge is different from measuring programming ability. Most programmers’ interview questions are questions that test programming knowledge only. The problem is that measuring programming ability is not easy. Since programming is mainly a mental work, when we try to measure the programming ability of a developer we are trying to measure one of his mental abilities which is difficult.

One of my job responsibilities is interviewing new developers and evaluating them technically. I have thought of the idea of testing the programming ability and I have found that asking controversial answerless questions is a good way of measuring a developer’s mentality and attitude.

For example when I interview a developer who says that he had worked on multiple database management systems, I ask him which one he thinks the best one. Of course this is a point that has no general agreement, and the ideal answer is to ask: better for which application? Or Better from which point of comparison (price, cross platform support, performance, etc). The way a developer answers such questions is a good indicator to his experience and the way he thinks as a developer. Once I got an answer form one developer that DBMS X is better than Y because the interface of the management application of X is better than the interface of the management application of Y!

Another point to ask about is performance problems. I generally ask this question: “We had built a web application that does bla bla bla, and when publishing the application, we found that its performance is bad when the load is heavy. Where could be the problem that is causing this bad performance?”

Of course the answer is to profile the application in some sort or another to know where is the problem exactly or to think of testing some parts in the application before the other based on some data or facts, but most low level developers give single clue less answers such as: “There could be someone who opened a connection to the database and didn’t close it, or we should not use joins in the SQL queries” or any similar answer.

Anyone who answers these answerless questions in the “good way” – I am not saying the right way because there is no right answer- is most probably a good developer. The problem is that very few people answer these questions in the good way.

Another point is asking about the details. Most low level developers just write code without knowing what is going behind. For example, I found that most low level .NET developers don’t know when an object is candidate for deleting by the garbage collector. He just writes code and his mission ends when the code works, without bothering much with the details behind. I am not talking here about very low level details, just slightly knowing what is going behind. Till now I hadn’t interviewed a developer who knows what the term generational garbage collection means. If I found him it would be a memorable day for me!

I know that in the software industry more than half the developers are less than average- the normal distribution curve doesn’t apply in this field unfortunately- but here in Egypt the situation is much worse than what is in America or Europe. In some way or another you are obliged to accept low level developers to put them in limited specified roles or get novice good minded developers who could be good developers with time and mentoring from senior ones, which is more difficult.

Also having a test period before signing the contract is an excellent back door to escape from a bad developer. You cannot be 100% sure that a developer is good or bad based on the interview only. Also some things are still immeasurable such as interaction with team members and moral qualities, and the only way to measure them is in the work field.

Comments

Leave a Reply




© 2010 Software Thoughts. Theme by WordPress Themes and Linux Web Hosting