Onze computers en smartphones worden al jaren steeds sneller, beter, groter, krachtiger, noem het maar op. De goedkoopste smartphone vandaag de dag heeft méér rekenkracht dan mijn peperdure iMac van tien jaar geleden.
En op onbegrijpelijke wijze creëren we hierdoor al jaren juist méér problemen voor onszelf.
Laat mij het probleem illustreren middels een anekdote.
Ik heb een vijf jaar oude smartphone die toentertijd de goedkoopste was die ik kon vinden. In al die jaren heb ik vele websites en spellen geprogrammeerd die ik moest uittesten op deze smartphone, en dat ging al die jaren helemaal prima. Als er vertraging of hapering was, dan was het altijd mijn eigen schuld en had ik een fout in mijn code.
Jammer genoeg gaan apparaten over tijd kapot en ben ik inmiddels toe aan een nieuwe smartphone. Toen ik online ging zoeken naar de goedkoopste smartphones, vond ik overal ongeveer dezelfde “waarschuwing” of “minpunten”:
Deze telefoon is echt alleen geschikt voor bellen/berichten sturen. Andere apps of spelletjes zullen haperen.
Deze telefoon is relatief zwak. Lekker door social media scrollen zit er niet bij, want dat gaat stroef.
Ik was verbijsterd. Waren we achteruit gegaan qua technologie? Wat was er gebeurd? Dus ik bekeek de specificaties en zag tot mijn grote verbazing dat deze smartphones op alle vlakken minstens twee tot vier keer beter waren dan mijn huidige smartphone.
Wat was hier aan de hand?
Wat maakt een apparaat snel?
Er zijn veel onderdelen die de snelheid en rekenkracht van een apparaat bepalen. Ik wil dit artikel niet technisch maken, maar het helpt wel om een vaag idee te hebben wat meespeelt:
- Werkgeheugen: dit gebruikt je computer om informatie op te slaan terwijl je het gebruikt, zoals een app die openstaat of een spel dat een hele wereld in het geheugen moet houden. Meer = beter.
- Processor: dit is de rekenkamer van een apparaat. Hoe meer “cycles” deze kan doen per seconde, hoe meer hij kan uitrekenen.
- Aantal processoren: je kunt natuurlijk meerdere rekenkamers hebben die tegelijkertijd werken.
- Grafische kaart: je rekenkamer kan alleen maar rekenen. Een apart stukje wordt gebruikt om dingen daadwerkelijk op het scherm te tekenen. Als een app (of spel) teveel zware visuele effecten wil gebruiken, gaat deze haperen, niet de rekenkamer.
Mijn oude smartphone had 1GB werkgeheugen, de nieuwere minstens 2GB. Mijn oude smartphone had twee processoren, die nieuwere minstens vier.
Ter vergelijking: die iMac van tien jaar geleden, mijn allereerste computer, had 2GB werkgeheugen en twee processoren. Een hele computer waarmee ik jarenlang alles heb gedaan (spellen spelen, films editen, 3D animatie, alles), had minder capaciteit dan die goedkoopste smartphone.
Een andere vergelijking: de vorige generatie spelcomputers, met de Xbox 360 en de PlayStation 3, had minder dan 1GB werkgeheugen. Een hele spelcomputer! Gemaakt om supersnel te zijn! Wij hebben thuis een Xbox staan die ongeveer zo oud is als mijn iMac en die nog steeds alle spellen die we ervoor hebben/kopen zonder problemen afspeelt.
Oftewel, die waarschuwing bij de smartphones is volstrekt belachelijk. De huidige smartphones zouden geen problemen moeten hebben met 99% van de dingen die je wilt doen. Ze zijn van binnen sterk genoeg voor hele zware apps en spellen, zelfs de allergoedkoopste.
Dus waarom staat die waarschuwing er dan toch? Waarom zullen veel mensen zich hierin herkennen, omdat hun eigen mobiel ook soms hapert, of ineens opnieuw opstart, of iets zwaardere spellen niet aankan? Waarom zie ik om mij heen mensen al een nieuwe mobiel kopen na minder dan 1-2 jaar, met uitspraken als: “ja mijn mobiel begon toch te langzaam te worden eigenlijk”?
Omdat programmeurs lui zijn geworden.
Opmerking: als je dit leest en een beetje verstand hebt van computers, weet je dat dit een grote versimpeling is en dat er veel andere factoren zijn. De reden dat de Xbox 360 alle spellen prima aankan, is omdat het speciaal daarvoor is gemaakt, wat onder andere betekent dat het een slechte rekenkamer heeft maar een hele goede grafische kaart. Er zijn veel nuances die ik uit dit verhaal laat.
Het Nieuwe Software
Oké, misschien is het onnodig gemeen om alle programmeurs lui te noemen, maar het is wel de beste (zeer beknopte) opsomming van het probleem. (Bovendien ben ik zelf een programmeur natuurlijk.)
Niet zo lang geleden waren onze computers helemaal niet zo snel. Het is voor velen haast onmogelijk een wereld voor te stellen zonder smartphones of eentje waarbij elke computer een grote kast bijgeleverd kreeg.
Als je in die tijd een programma of spel wilde maken, moest je heel erg oppassen. Je had maar zo weinig ruimte, zo weinig rekenkracht, dat je heel creatief en slim moest zijn bij het vinden van oplossingen.
De allereerste programma’s leverden zelfs hun eigen besturingssysteem mee, in plaats van dat ze automatisch werkten op de huidige systemen (Windows/OS X/Linux). Waarom? Omdat Windows te veel ruimte en rekenkracht vroeg. Door zelf een systeem te schrijven, kon deze precies hun specifieke programma zo vlekkeloos mogelijk uitvoeren.
Nu lijkt dat een belachelijk idee. Waarom het wiel opnieuw uitvinden? Waarom helemaal zelf iets programmeren als tientallen anderen dat al voor je hebben gedaan? Waarom leren hoe een computer van binnen werkt als je ook een spel kan maken zonder één regel te programmeren!
Omdat onze apparatuur almaar beter wordt, zijn alle restricties verdwenen. Je programma kan ongelofelijk langzaam zijn, tientallen grote fouten bevatten, en véél meer ruimte opnemen dan nodig … maar wat maakt het uit? Binnen een paar seconden kan het opnieuw zijn opgestart. De meeste computers hebben 500GB geheugen, wat maakt het uit als ons programma daar een paar gigabyte van inneemt?
Nou, datzelfde probleem zal voor iedereen herkenbaar zijn: het geheugen van je computer/smartphone is vol. Ik hoor er regelmatig mensen over klagen en moet zelf ook elk half jaar even mijn laptop uitruimen.
Heb je er ooit bij stilgestaan hoe dat kan? Hoe het kan dat elk jaar apparaten wéér meer geheugen krijgen en dat we toch steeds een vol geheugen hebben?
Dat bedoel ik met de luiheid van programmeurs.
Iets wat ik ook wel “het nieuwe software” noem, want iedereen gaat er in mee, en dat is helemaal niet zo gek.
Hoe meer apparaten groeien, hoe sneller ze worden, hoe minder reden programmeurs hebben om iets goeds te maken. En dat leidt tot software die tien keer groter is dan nodig. Dat leidt tot Word die een halve minuut doet over opstarten en een simpel document laden_. (_Het is een tekstverwerker! Zelfs een baksteen van dertig jaar geleden kan binnen een seconde tekst verwerken!) Dat leidt tot telefoons die zonder aankondiging crashen of uit zichzelf opnieuw opstarten. Dat leidt tot computers (van zo’n beetje alle merken) die problemen hebben met basisfunctionaliteit zoals ontwaken uit slaapstand.
Waarom restricties nodig zijn
Het is een bekend feit in de creatieve wereld dat restricties heilig zijn. Als je restricties weghaalt, haal je creativiteit en intelligentie weg.
Als ik tegen jou zeg “je moet een aap tekenen en je hebt alleen deze twee kleuren”, dan moet je hard nadenken en nieuwe dingen proberen, en ik weet zeker dat je uiteindelijk met een slimme en creatieve tekening komt. Als ik zeg “teken een aap”, kan je desnoods een plaatje opzoeken op Google en die in drie seconden overtekenen. (En als ik zeg “teken iets” wordt het alleen maar erger.)
Als ik zeg “je moet een spel maken dat óók moet werken op alle apparaten van hoogstens vijf jaar oud”, kan je niet lui zijn. Je moet (tot op zekere hoogte) begrijpen hoe computers werken en hoe je code sneller en flexibeler maakt. Je moet slim zijn over wat je wel en niet toevoegt, om het spel zo klein en simpel mogelijk te houden. En uiteindelijk, voor al die extra moeite, leidt dat tot een product dat véél beter is. Iets wat je binnen drie seconden kan installeren (want het is zo klein), iets wat niet crasht, iets wat altijd werkt (zelfs als je computer ondertussen besluit een update te installeren, zoals Windows maar al te graag doet).
Dit is de eerste reden waarom deze luiheid moet veranderen: het zorgt voor slechtere software (die vaker crasht, meer ruimte inneemt, etc.)
Als gevolg daarvan moeten consumenten nu meer geld betalen, langer wachten, en vaker een nieuw apparaat kopen. Het is geld- en tijdverspilling, plus een flinke dosis frustratie, alleen maar omdat programmeurs niet meer gedwongen zijn om extra moeite te doen.
Maar er zijn meer redenen, die misschien ietwat vergezocht lijken, maar die ik nog belangrijker vind.
Het Leftpad Incident
Wat doe je als je lui bent? Je zoekt andere mensen die het werk al hebben gedaan, en gebruikt hun code. (Vaak heet dit een “library” of “package” die je kunt toevoegen aan je project.)
Dit is, op zichzelf, helemaal niet slecht. Het scheelt mensen werk en zorgt ervoor dat je programma’s makkelijk kunt opbouwen uit verschillende “modules”.
Het probleem is alleen dat de meeste programmeurs een soort “library of libraries” met zich meesleuren. Over de jaren hebben ze misschien wel honderden kleine referenties verzameld, en met elk nieuw project kopiëren ze die allemaal mee.
Onnodig natuurlijk. Kost ruimte, kost rekenkracht, kost moeite. Het overgrote deel ervan zal je niet gebruiken (of niet echt nodig hebben).
Maar het wordt nog gevaarlijker: wat als één van die libraries veranderd? Of offline wordt gehaald? Of een fout bevat?
Een voorbeeld hiervan is het “leftpad incident”.
Honderden (grote) websites gebruikten een library genaamd “leftpad”. Dit was een piepklein stukje code (tientallen regels) met maar één functie: “gegeven een stuk tekst A, plak witruimte vóór A totdat het precies lengte X heeft”.
(Waarom is dit nodig? Bijvoorbeeld, soms verwacht je applicatie altijd een stuk tekst van lengte 10. Dus als je tekst slechts 6 karakters heeft, stop je lege ruimte ervoor om het tot lengte 10 te krijgen.)
Vanwege een technisch foutje ergens werd deze library een paar uur offline gehaald. Wat denk je? Al die websites crashten en waren urenlang onbereikbaar! Terwijl die ontwikkelaars waarschijnlijk lekker lagen te slapen of te ontspannen ergens, was hun hele website een halve dag uit de lucht.
Het is gevaarlijk om elk project te laten leunen op tientallen of honderden andere kleine onderdelen.
Het is al helemaal onnodig als het zulke kleine functionaliteit bevat. Elke programmeur kan die “leftpad” functie schrijven: het is dikwijls een simpele oefening bij een introductiecursus. Hetzelfde geldt voor de meeste onderdelen: als je ze echt nodig hebt, kan je ze in een half uur zelf schrijven. (En meestal nog beter ook, want die “leftpad” library werkte niet eens in 100% van de gevallen.)
Dit is de tweede reden waarom deze luiheid slecht is: je weet niet eens hoe jouw eigen product werkt (want het is slechts een samenstelling van producten van anderen) en het kan zomaar crashen/onveilig zijn/onbereikbaar zijn zonder dat je het door hebt. En zonder dat je het kunt oplossen, want jij weet dus niet precies wat de functionaliteit was.
Opmerking: zoals ik al zei, natuurlijk is het onnodig om het wiel opnieuw uit te vinden. Ik gebruik zelf ook voor mijn spellen een iets simpelere “game engine”, in plaats van dat ik helemaal zelf leer hoe je precies met de chips binnenin een computer communiceert. Bijna al mijn websites gebruiken dezelfde basis als vrijwel alle websites (een standaard Apache server), daarbovenop heb ik de rest helemaal zelf gebouwd.
Het probleem is alleen dat de lat veel hoger moet liggen. Je moet alleen code van iemand anders hanteren als je grofweg weet wat het doet en hoe het werkt, maar het gewoon onnodig is om het zelf opnieuw op te schrijven. En alleen als je zeker weet dat je het gebruikt: je moet niet iets toevoegen met het idee “misschien heb ik het wel nodig” of “tja, kan nooit kwaad”.
Als dit nog niet overtuigend genoeg was, komen we nu bij de derde reden, die nog vele malen ambitieuzer is.
Technologie werkt niet zoals je denkt
Veel mensen denken over technologie als een stijgende lijn. Met het verloop van tijd worden apparaten automatisch sneller, en beter, en vinden we nieuwe dingen uit.
Dat is natuurlijk niet waar.
Technologie verbetert alleen als mensen moeite doen om het te verbeteren. Als niemand onderzoek doet naar nieuwe dingen, als niemand experimenteert, zal vooruitgang stilstaan. Sterker nog, als iets dermate wordt genegeerd, zal het in verval raken. We verliezen kennis en uitvindingen, want er is niemand meer die het begrijpt of kan uitleggen aan anderen.
Denk maar aan alle dingen die wij “opnieuw” hebben moeten ontdekken, terwijl eeuwenoude volken (zoals de Grieken/Romeinen) het allang wisten. Die kennis is verloren gegaan omdat de mensen die het gebruikten of onderwezen verdwenen.
Tegenwoordig is het steeds normaler dat iemand zichzelf “website ontwikkelaar” noemt, of zelfs in deze functie werkt bij een groot bedrijf, die niet kan programmeren. Helemaal niet.
Ze gebruiken programma’s waarbij ze alles kunnen doen door knopjes in te drukken, dingen te slepen, een paar dingen met elkaar te verbinden, en soortgelijke operaties.
Op diezelfde manier zijn er steeds meer “game engines” (programma’s met hulpmiddelen om spellen te maken) die stoer doen over dat je geen code hoeft te kennen. Ze hebben duizenden modules gemaakt die je in elkaar kunt schakelen, zoals “karakter loopt”, “karakter springt”, en “standaard menuknopje”.
Als deze trend doorzet, hebben we dadelijk een wereld die compleet leunt op computers, en slechts een handjevol mensen die daadwerkelijk weten wat dat betekent.
En als deze groep mensen zo klein wordt, of zelfs verdwijnt, zal onze opgebouwde kennis over programmeren en technologie verdwijnen. Niemand weet daadwerkelijk hoe een computer werkt. Ze weten alleen hoe ze op knopjes kunnen drukken om specifieke dingen te bereiken. Ze weten alleen dat iemand anders ooit iets heeft gemaakt wat alle computers gaande houdt, en hoe ze daarmee moeten omgaan.
Dat vind ik gevaarlijk.
Zoals ik al zei: dit klinkt vergezocht, maar als dit doorgaat, als de maatschappij honderden jaren deze richting opgaat, komt er een punt waarop de kennis verloren gaat. Computers werken nou eenmaal op een bepaalde manier … maar niemand weet hoe.
Dat is hoe computers de wereld overnemen: doordat we het zelf uit handen geven.
Hoe lossen we dit op?
Dit artikel werd zo lang, dat ik hiervoor een apart artikel heb geschreven.
Deze is hier te vinden: Over omgaan met technologie.
Ik hoop dat dit artikel duidelijk heeft gemaakt dat technologie niet automatisch verbetert en dat luiheid van programmeurs een écht probleem is. Dat computers wel degelijk steeds sneller en beter worden, maar als de kwaliteit van de programma’s die erop draaien nóg sneller achteruit gaat, heeft dat dus geen zin.
Mocht je dit lezen als programmeur: hopelijk deel je de filosofie en probeer je jouw methodes te veranderen. Voor ideeën daarvoor, lees het artikel dat ik net linkte.
Mocht je dit lezen als consument: accepteer het niet langer! Zelfs de goedkoopste computers en smartphones moeten jarenlang alles aankunnen (wat de gemiddelde persoon zou willen doen op dat apparaat). Als dat niet lukt, is dat vrijwel zeker de schuld van slecht en lui ontwikkelde software.