Thursday, January 26, 2006

10 commandments for Software Programmer

It's always hard to start a column where you present your thoughts. My personal belief from 10 years of programming has been to create a model for programming process which is sustainable and delivers the best results in any circumstance. Here are the 10 commandments that a software programmer I feel should believe in to be really successful.

1. Thou shalt not work for more than 50 hours a week


Most programming community who claim themselves to be hackers can sneer at me for my this commandment. The reality is coding is more formally like a conversion of one's thought to a logical representation. And serious logical activity needs level of mental energy which beyond 50 hours is not going to be productive in anyone's work and life balance. The concept of working 50 hours a week is a post industrialization concept, from the time man has started doing lesser physical activity and more rigorous mental activity.

2. Thou shalt at least read one book on programming a month

I have talked to numerous programmers even myself have done the same blunder. While discussing with some of them on encryption whenever I asked this question which encryption scheme they used most of them came up with some self justified shifts and xor combinations to create encryption routines. Some of them vehemently claimed that their encryptions are the best as no one really can crack their encryption concepts. As most of us who have read books on encryption would know conceptually unless proven mathematically most encryption algorithms cannot stand the brute force attack given the power of computation today. I do not under-estimate the potential of the fellow programmers who developed their algorithms for encryption, but they could have done better by reading some text written around the same field. To be able to read you need to spend more time away from a computer anyways.

3. Thou shalt copy code but give full credit to the author or the intellectual property


In todays times where operating systems, compilers, system software is almost becoming free like air and water, there is little scope of being a prude trying to develop your own algorithm for every little thing out there. Great software is about 90% perspiration and 10% invention. Today's competitive software environment has made this 90% easily attainable with many open source components. However, to know what exists in the market one has to keep one's eyes open.

4. Thou shalt love thy QA team

Of course it's true to certain extent the QA teams have a greater density of female species in most organizations than the Dev teams which are mostly filled with nerdy looking male. But that is not my topic of discussion here. The reason I thought it's important to mention is the best friend is who can critic you for free on any mistakes you have done in your lives. Your QA can find your mistakes when you cannot even imagine when they exist and much before some customer of yours gets back to you and makes you sit for the whole night fixing bugs.

5. Thou shalt talk of what you have done


One thing programmers are seen most of the places they are lost in their own little world and not communicating enough to the community at large. Everybody out there is doing his own little thing. The interesting thing in a programming community is to generate a critical level of noise. Posting on forums and maintaining blogs and communicating ideas are means of bringing out the thoughts. This thoughts may add up to a new school of programming. Think of extreme programming can it be a programming concept had it been implemented just within a corporate firewall.

6. Thou shalt not claim yourself as an inventor


One difficult trap that programmers get into is they start comparing themselves into developing novelty in everything they do. Most programming is not research. There are some research elements there but day-by-day they are becoming application of research. That does not mean that a programmer should not be part of a scientific community doing computer science research. The claim here is for day-to-day programmers who tend to think every problem as a research problem and start losing track completely the movement of technology. If you look back today most large companies and sticking on to their old legacy and claiming that they are the best when lots of innovative products have come up by using standard frameworks available.

7. Thou shalt know how much of a task you can deliver

It's very important for a programmer to know and predict how much she can deliver. This should not be an after thought but should be in pre-thought process. Start with estimating based on the problem you think you are trying to solve. Once you estimate reasonably give twice of the estimated time that you can solve the problem in maximally. Once you know that maximum limit in the middle of the project or sometime re-estimate and slowly you will see you will be estimating better. One problem we all programmers feel is we are doing research and involved in inventions. There is some amount of uncertainty in every software process. Most programmers love the uncertainty and but if you make every parameter in a software process uncertain you will have exactly 50% chance of being successful.

8. Thou shalt love pen and paper

In the e-age as programmers tend to type in everything on the computers as they sit and start programming. However, the art of programming is in thinking through the program and not typing it down with lots of mistakes due to cramming on the screen. The best engineering designers spend their time on drawing boards and not on the engineering sites. Software should be a blue print and once the blue print is designed; coding is like building that design on a computer screen.

9. Thou shalt add physical activity to life

Most software programmers end up being couch potatoes. Excellent physical activity record and school and once they get into software they tend to like their pizzas, coke and computer too much. This is not beneficial to anybody in the long run. Continuous built up of stress in the fingers and brains gets to significant mental and physical ailments to a person.

10. Thou shalt compete with no one but yourself


In a competitive environment as software is there is always going to be a whizkid who can out perform you in mental capabilities and there is no value add competing with him in the long run. Decide your focus and your aim in life and where you would like your career to move at just do that right. A whizkid will be there let him move with their own sweet pace there is no need to lose your peace on their abilities. Try to improve little by little for yourself and you will definitely see yourself much ahead of what you thought you are capable of.