Geekstuff
“Why does software suck?”
Update: I translated this article into English.
Wat is er toch zo ingewikkeld, complex, onmenselijk aan software dat het haast niemand lukt het Gewoon Goed te krijgen. Bewijzen voor het feit dat software zuigt zijn er legio: virussen, spyware, bugs, crashes, updates, upgrades, versies, digibeten en onmogelijk te bedienen apparaten. Op de één of andere manier krijgen wij programmeurs het maar niet voor elkaar.
“To Err Is Human”
De vraag is gaan rondwaren in mijn hoofd. En zoals dat vaker gaat (in mijn hoofd) ben ik gaan zoeken naar oorzaken. Wat is er inherent moeilijk of ingewikkeld aan software, of het maken ervan? Ik ben er nog niet helemaal uit, maar wel redelijk op weg. Bovendien ben ik gestuit op het boek, “The Design of Everyday Things” van Donald A. Norman, waar ik ben aangeland bij hoofdstuk 5: “To Err is Human”. En dat zou wel eens de kern kunnen zijn van het hele verhaal.
Computers (of in en bredere zin, technologie) vergissen zich niet. En mede daardoor kunnen ze er erg slecht tegen als iemand zich vergist in de interactie met een apparaat. Maar mensen, die vergissen zich wel. En vaak ook. In het schrijven van dit stukje heb ik meerdere malen de backspace en delete knop gebruikt, ik heb zitten klooien om die link hierboven goed te krijgen en minstens één zin heb ik in zijn geheel herschreven. En dat is nog maar in 15 regels.
Langzaam ben ik van mening geworden, dat mensen stomweg niet de hersenen hebben om Goede Software te schrijven, zoals we huizen kunnen bouwen, muziek kunnen maken of poëzie kunnen schrijven. De grondbeginselen van software zijn zodanig mathematisch en ver verwijderd van het normaal gebruik van de menselijke hersenen, dat het schier onmogelijk is foutloze software te schrijven. Ja, er zijn ‘oplossingen’ met mooie namen als ‘managed code’, maar die lossen de problemen slechts op de onderste laag op. Ze zorgen ervoor dat je niet meer de voor de hand liggende fouten (verkeerd memory management, stack corruption, etc) maakt, maar het conceptuele ingewikkelde van software is er niet mee opgelost. Wat is dat conceptuele ingewikkelde dan wel?
“Hello World!”
Iedereen die programmeert, ken het bovenstaand zinnetje. Velen zullen ook het volgende citaat kennen (wellicht niet, want Google gaf weinig sjoege erover):
“Every program more complex than ‘Hello World!’ has bugs”
Die fouten zijn terug te voeren naar een aantal basisproblemen in mens-computer interactie:
- computers accepteren geen vaagheden, fouten of gokken. Het is het ene of het andere, ertussenin kan niet, tenzij als zodanig geprogrammeerd of geëngineerd (wat ons recursief terug voert naar basisprobleem 1),
- menselijke hersenen werken erg slecht in een omgeving waarin alles exact vastgelegd moet worden,
- de wereld is complex en samen met 1 en 2 levert dat onoverkomelijke problemen op.
En dan zijn er nog zijproblemen die het er niet eenvoudiger op maken:
- computersoftware wordt geschreven door schrijvers van computersoftware, niet door haar gebruikers,
- om de één of andere reden, moeten er steeds meer opties bijkomen (waarschijnlijk om de gebruikers te blijven laten betalen voor de fouten die programmeurs maken),
- het vak van programmeur is betrekkelijk jong, een jaar of dertig, veertig hooguit; er moet nog een hoop ontwikkeling plaatsvinden voor we er zijn, als we er al komen.
Van die laatste drie zijn mogelijke oplossingen te bedenken: beter testen, betere specificaties maken, etc. Dit zijn geen onoverkomelijke of structurele problemen. Die eerste drie, daar ligt het probleem. Daar wil ik dan ook verder op in gaan.