Tuesday, December 17, 2013

Machine gun programmers and sniper programmers

Based on my experience in working with various teams using different technologies and working on either projects or products, in maintenance or new development I have started classifying software developers into two categories.
  1. Machine Gun Programmer
  2. Sniper Programmers

Machine Gun Programmer

Typically when you give such programmer a problem to solve (e.g. fix a bug or add new feature). Typically he/she jump into debugger and randomly start changing some variables. Or he will start googling for answer and cut/paste the code from '' or and see if that fixes the problem (mostly without understanding the code or the answer).  Essentially he/she is firing lot of bullets on 'target' hoping that one will hit the target. 

Many times he/she will spend hours working on some trivial problem because he has not understood the program flow and hence cannot analyze the root cause. So he tries lot of small small code changes. Somewhere one change hits and changes the programs behavior and in turn apparently fixes the bug. However mostly likely it will introduce another bug in the system. My friend Anirudha Raste calls it 'programming by coincidence'. 

Such programmers usually end up fixing one bug and introducing two more.

Sniper Programmers

On other hand Sniper programmers behave differently when given a problem. He/She will analyze the program flow, understand root cause, may go to white board and draw the flow. You may see him staring somewhere while he is mentally analyzing the problem. If he googles the problem, he spend time understanding each answer and validating if it is really a possible answer for his problem. Then he may change few lines and that will fix the bug permanently. 

Problem is Majority developers that I have interacted with fall into 'machine gun programmer' category. 

Sniper programmers are few and far between. If you have some sniper programmers, make sure that these gems stay in your team. Try to propagate and encourage the 'sniper programmer' attitude.

Remember you don't need much training to use Machine Gun so practically anyone can become a 'machine gun programmer'. However, every army have separate 'sniper schools' and sniper training programs. 

Becoming 'Sniper programmer' is difficult task. It requires constant learning and update. It is also most rewarding. 

Is your company really identifying the 'sniper programmers' and educating/training them ? or just depending on lot of 'machine gun programmer's ?  Answer to this question may determine the future of your company.



Valentin Heinitz said...

I wonder why the military language is spreading so fast across IT people? Probably because the entire IT-industry is pushed mainly by war-industry? I had to do this conclusion writing my MBA thesis and having to cite the sources. It was pretty shocking to learn, that most gurus I admired were involved in making weapons, bombs, etc and spread death and misery across the globe. So why do you want to be a part of it?

Nitin Bhide said...

Valentin, you question made me think. I definitely don't want to be part of violence, making weapons etc. However, I do admire the kind of concentration and focus required to be a 'good marksmen'. In Indian Mythology, there is a story of Arjuna.