A few days ago I was asked to inaugurate the Jigyasa Techfest at IMCC and I chose that occasion to revisit some of the quotes by an eminent computer scientist Edsgar Dijkstra. I decided to take help of another eminent person, but from the arena of probability and randomness, Nassim Nicholas Taleb (NNT), to highlight one of the quotes by Dijkstra. I decided to begin the presentation with a poll based on a thought experiment by NNT.
Say, you are a cancer specialist. You have the the investigation report which shows no trace of cancer. Now, is it evidence of absence of cancer or is it absence of evidence of cancer? The show of hands in the auditorium indicated that the opinion was evenly divided.
The answer is: it is the absence of evidence of cancer. As there is always a finite probability that the investigation report may miss something, it just can’t be evidence of absence. All we can say is there is absence of evidence.
“Program testing can be used to show the presence of bugs, but never to show their absence”
Get it? When you find bugs, that’s obvious. But if you don’t find bugs, it means exactly that and nothing more – you did not find bugs – period. You can’t vouch that the program is bug free just because you didn’t find any bugs.
Edsgar Dijkstra has some pretty entertaining quotes to his credit – more about those later in this blog. Right now let’s see some that relate to computer science, design and learning.
“Computer science is no more about computers than astronomy is about telescopes”
Will you call surgery “knife science”? No! Isn’t the term Computer Science a misnomer then? Think.
“Simplicity is prerequisite for reliability”
How does one craft a good design? After asking this question, I stunned the audience with the answer: KISS! As you know, it’s an acronym for Keep It Simple, Stupid! So, when in doubt, always choose simple over complex. The problems we face are surely complex, but it is a well accepted principle that you can’t fight complexity with complexity. Simplicity is the right weapon.
“Perfecting oneself is as much unlearning as it is learning”
My programming mother tongue was FORTRAN. Later,the teacher who taught us Pascal warned us that unless we unlearn our FORTRAN ways, we won’t be able to exploit Pascal fully. Otherwise, he said, we would join the tribe of programmers who code in FORTRAN in any language! With so many new languages and programming techniques coming our way, it is absolutely critical that we develop the ability of unlearning old ways to meaningfully embrace the new new things.
As promised, let me quote three of the more famous, and entertaining, utterances of Dijkstra that amuse me no end.
“It is practically impossible to teach good programming to students that have had a prior exposure to BASIC: as potential programmers they are mentally mutilated beyond hope of regeneration.”
“The use of COBOL cripples the mind; its teaching should, therefore, be regarded as a criminal offense.”
“The use of anthropomorphic terminology when dealing with computing systems is a symptom of professional immaturity”
Hmm. Think hard about the last one.
Postscript: I found another gem, that generated a great dialog when I posted it on Facebook.
“Besides a mathematical inclination, an exceptionally good mastery of one’s native tongue is the most vital asset of a competent programmer.”
Read this paper if you want to know how do we tell truths that might hurt.