Design by Guesswork
Over at Aftermarket Pipes Tim Lesher has a nice explanation of some strange behaviour of Windows Notepad. However, I disagree with him when he says "we can't even blame Notepad: it's a limitation of Windows itself". The documentation for the IsTextUnicode Windows API call is quite explicit that the call makes an informed guess and might give a wrong answer. The mistake made by the designers of Notepad was to hide from the user the fact that a guess was being made. Lesher approvingly quotes Tim Peters' "In the face of ambiguity, refuse the temptation to guess", to which I would add "but if you have to then don't hide the fact from the user".
This all reminds me of the following story reported by Edsger Dijkstra in EWD 466(pdf) :
... Niklaus [Wirth] told a terrible story about CDC software. With 10 six-bit characters (from an alphabet of 63) packed into one word, CDC used the 64th configuration to indicate "end of line"; when for compatibility reasons a 64th character had to be added, they invented the following convention for indicating the end of a line: two successive colons on positions 10k+8 and 10k+9 --a fixed position in the word!-- is interpreted as "end of line". The argument was clearly that colons hardly ever occur, let alone two successive ones! Tony [Hoare] was severely shocked: "How can one build reliable programs on top of a system with consciously built-in unreliability?" I shared his horror; he suggested that at the next International Conference on Software Reliability a speaker should just mention the above dirty trick and then let the audience think about its consequences for the rest of his time slice! ...
Reader Comments