Thursday, July 4, 2013

Lessons learnt as a Programmer

When stuck, question your assumptions.

Do not keep for later details which with a little thought, you can do now. Not only does it give a clearer picture and take things off your mind, you may forget later.

Take active interest in your work to make it more enjoyable. Effect: time flies !

Abstract. Form a big picture. Then break things up and tackle one part at a time.

Force yourself to do things you don't wish to. Be less moody.

Throw enough effort at a problem (especially a devious bug) and it will get solved. If it doesn't get solved after a long period of intense effort, sleep on it. Take a step back and look at it from a different angle. Or get a fresh pair of eyes on it (Ask for help)

Understand the module you are working with. Don't try quick fixes without understanding how the whole thing works. Little knowledge is dangerous.

Logical root causing is better than blind experimenting. But targeted experimenting is sometimes required to aid in root causing

If you are changing two variables while testing even if you're sure that one of them won't affect the outcome, keep that one thing in mind if the outcome differs from expected

Don't do more than that which is required. If the extra stuff is required for completeness, then push it to phase 2.

Treat every hurdle as
1. An interesting puzzle to be solved.
2. An opportunity to learn more about the software.

Don't get distracted by side tasks. Complete your main task. Then pick up side work, if you have time.

Say no to extra work if it doesn't fit into the schedule. If something goes in, Something has to go out.

Take time to plan. Plan well. Have concrete targets for each day. If you have a 12 day project, divide it up into work for each day. Don't think you can make up for a slip the next day.

Understand that performing well at work is like doing well in studies. The confidence you get from doing that will help you take risks, grow, learn more, be satisfied with yourself and believe in your own capabilities.