27 May 2010

Development or Maintenance, What should a fresher choose?

The late Wg Cdr R Raghavan (RR) and I co-founded Ergo Electronics in 1989 and then in 2000, along with some others, co-founded Acme Technologies. He was also my friend and boss. I learnt a lot from him. He will crop up frequently in this blog.

RR had also co-founded Ergo Software Systems in 1986. That was with another person.

He was held in great respect by all software engineers for his software skills. He could quickly diagnose problems in the code, suggest better data structures and module organizations, understand convoluted code and show how it could be simplified. Yet he always maintained that he had written just 4 programs - that too in COBOL! None of the engineers (all working in C) believed him.

After many years of listening to this I asked one of the engineers, "Why do you not ask him how many programs he has read?" The answer: He had lost count. But it is safe to assume it was in the tens of thousands.

RR was one of the founders of the Indian Air Force's computer center. He remained there for about a decade. It was there that he got to read the code for the ICL computer's operating system and other system programs - most in assembly language. He also got to read the application programs written by application developers and learn through their mistakes.

So what should a fresher choose? To me it is a no-brainer. Maintenance - because that is where the greatest opportunity to learn about structure (both good and bad) of programs and data. To learn what make code difficult to maintain. (That is important as any code that is useful will spend most of its life cycle in the maintenance phase. I highly recommend reading Software Exorcism: A Handbook for Debugging and Optimizing Legacy Code.)

As the saying goes, "Those who do not learn from history, are condemned to repeat it." So too for software engineers who do not learn from others mistakes.

No comments: