The competent programmer

The competent programmer is fully aware of the limited size of his own skull. He therefore approaches his task with full humility, and avoids clever tricks like the plague.

Edsger W. Dijkstra


Debugging a non-existent bug

I visited one of my clients last week, to find a tester of one of their products waiting with a critical bug report. The product homepage was giving rise to a warning `This site is potentially harmful to your computer. ...' I tried, and did not receive such a message. He walked away perplexed.

Five minutes later, he called saying that this `bug' was reproducible, but only in his machine. I asked him which browser he was using. ``IE 6," he responded. I asked him to check using Firefox, and report back.

He called right back. His voice sounded even more perplexed. ``Not reproducible using Firefox, sir," he said feebly.

``Yes, there is a bug," I retorted, ``not in your product, but in your browser!"



The process of maturation takes so long that when it does complete:
  1. it is easy to overlook the total effort, since the effort spent at each juncture is little, and
  2. it is easy to overlook its impact, since the learning appears `natural'.


Four stages of learning

Acquiring a skill has, according to Indian tradition, four stages: adheeti, bOdha, aacharaNa and prachaaram.
  1. adheeti (అధీతి) involves studying the subject with due attention.
  2. bOdha (బోధ) involves distilling what is studied into the essential knowledge of the subject.
  3. aacharaNa (ఆచరణ) is putting the knowledge to practice.
  4. prachaaram (ప్రచారం) involves passing that practical knowledge to others.