Wrong answer: "None." End of interview. Have a nice life.
Most common answer: "I don't know."
Followup question: "So how could you find out?"
When I first asked myself this question (shortly after reading Writing Solid Code) my solution was to create a "programmer's diary." This was a background program that I could pop up with a hot key. It opened up an edit window into which I could paste or type information. It date/time stamped the entry then appended it to a sequential file and disappeared.
To use it, I'd select/copy code containing an error, pop open the edit box and paste it, then annotate it to explain the error. I did not do any further analysis in-line. Instead I went back to whatever I was doing -- fixing the problem or running more tests or whatever...
After capturing data for about a month, I analyzed the file. I categorized the types of errors into classes like:
- uninitialized or improperly initialized variable;
- sense of a condition is backwards;
- failure to release resource when returning from a function;
- difficult to use, difficult to understand, or easy to break feature of the language (think "goto" although I'd already stopped using those.)
Then for each class of mistakes I asked myself:
- What can I change can I make to my coding style or work habits to prevent this type of error?
- What can I change can I make to detect this type of error sooner?
- What type of test would detect this type of error?
In some cases this resulted in changes in my coding style. For some cases I added new types of tests to my set of tools. In others, just the increased awareness of my error-of-choice was enough to help me avoid the error.
I continued to use the diary for a couple of months afterwards, and yes, there was a noticable reduction in the types of errors I had specifically targeted. Without benefit of statistical analysis, I also think there was a significant overall reduction in uncaught-by-the-compiler errors.
The downside of all of this is when I get into an argument (oops, I mean a reasoned discussion) about programming style issues I tend to be dogmatic about my style. That's because I think it's based on emperical evidence rather than aesthetics or arbitrary preferences. This would be a lot more valid if I had used the diary recently. My emperical evidence is from sometime before 1995 -- and of course it is specific to one programmer. Programming has advanced considerably since then -- in particular exceptions and patterns like RAII have changed the way I program. I wonder if it's time to fire up the old diary program.
No comments:
Post a Comment