torsdag 16. desember 2010 Julekalender
Dagens luke handler om en av de mest kjente programmerings-ikonene fra 60-/70-tallet. Han har sagt og ment mye, men passer budskapet hans for den moderne, smidige utvikleren? Les videre for å finne svaret…
Edsger W. Dijkstra var en nederlandsk informatiker som har bidratt stort til faget vårt. Han er blant annet kjent for sin korteste sti-algoritme, også kalt Dijkstra’s algoritme, omvendt polsk notasjon og Shunting yard algoritmen, multiprogrammeringssystemet “THE”, Banker’s algoritmen, og bruken av semaforer for å koordinere prosesser og programmer.
Mange av hans meninger har blitt allmenne oppfatninger blant programmerere. Han brukte f.eks. uttrykket “two or more, use a for”, som betyr at man bør bruke en loop når man prosesserer mer enn ett element av en datastruktur. Han var også den første til å hevde at programmering er en så grunnleggende kompleks aktivitet at programmererne må bruke alle abstraksjoner mulig for å håndtere den på en god måte. Han utdypet dette med å si at programmering (han brukte uttrykket “computer science”) ikke har mer med datamaskiner å gjøre enn astronomi har å gjøre med teleskoper.
For en mer nyansert diskusjon om abstraksjoner anbefaler jeg podcastet This Developers Life 1.0.6, hvor Rob Conery og Scott Hanselmann intervjuer erfarne folk (som Ward Cunningham) om hvor mange lag med abstraksjoner man bør forstå som utvikler.
Selv om Edsger hadde programmert mye maskinkode på 50-tallet, så var han kjent for å misslike GOTO-operatoren. I 1969 skrev han en artikkel han kalte “A Case against the GO TO Statement”, som var et stort steg bort fra bruken av GOTO, og istedet en aksept av strukturert programmering.
Han var også en motstander av å undervise i BASIC, et språk som typisk brukte mye GOTO:
“…the teaching of BASIC should be rated as a criminal offence: it mutilates the mind beyond recovery.”
Han snakket like nedsettende om APL, Fortran og COBOL. Han var derimot en stor fan av ALGOL 60, og var med på teamet som implementerte den første kompilatoren for det språket. Dijkstra og kollegaen Jaap Zonneveld ble enige om å ikke barbere seg før prosjektet var fullført. Kan dette være kilden til at utviklere av programmeringsspråk nesten alltid har langt skjegg?
“Program testing can be used to show the presence of bugs, but never to show their absence!”
Fra 70-tallet og utover var Dijkstra først og fremst interessert i formell verifikasjon. Han mente man først skal definere en matematisk spesifikasjon av hva programmet skal gjøre, og så bruke matematiske transformasjoner på spesifikasjonen til den kan eksekveres som kode.
Dette passer ikke nødvendigvis så godt med min oppfattelse av effektiv og smidig utvikling – det høres mer ut som Big Design Up Front. Men vi må huske at BDUF ikke er det motsatte No Design Up Front. Dijkstra var ingen tulling, og vi kan nok lære mye av ham selv om vi ikke sluker alt.
For eksempel fokuserte Dijkstras veldig sterkt på enkelhet, noe som også er et av de viktigste prinsippene i smidig. Her er noen fantastiske sitat som viser at han ikke bare var en idealist, men også tenkte som en pragmatisk programmerer – og at de to faktisk går hånd i hånd:
“Simplicity is prerequisite for reliability.”
“The competent programmer is fully aware of the strictly limited size of his own skull; therefore he approaches the programming task in full humility, and among other things he avoids clever tricks like the plague.”
“How do we convince people that in programming simplicity and clarity —in short: what mathematicians call "elegance"— are not a dispensable luxury, but a crucial matter that decides between success and failure?”
“Simplicity is a great virtue but it requires hard work to achieve it and education to appreciate it. And to make matters worse: complexity sells better.”
Så vil jeg bare avslutte med et sitat om hvordan Dijkstra ville bli husket:
“..if 10 years from now, when you are doing something quick and dirty, you suddenly visualize that I am looking over your shoulders and say to yourself "Dijkstra would not have liked this", well, that would be enough immortality for me.”