Het belang van software in de wereld van vandaag valt niet te ontkennen. Het lijkt overal te zijn: in je computer en in je telefoon, maar ook in je auto en in je koelkast.
Met al deze software zou het je vergeven kunnen worden als je zou denken dat het ontwikkelen van software gemakkelijk is en in zekere zin is dat ook zo: de toetredingsdrempel is zo laag dat zelfs kinderen kunnen leren coderen en er zijn overal startende softwarebedrijven.
In dit artikel wil ik echter duidelijk maken dat, ondanks de ogenschijnlijke eenvoud, het ontwikkelen van software moeilijk is.
In het bijzonder het ontwikkelen van robuuste software van industriële kwaliteit is moeilijk.
Waarom zou ik beweren dat softwareontwikkeling moeilijk is?
Misschien is het verrassend dat de kosten voor het onderhouden van een applicatie die van de oorspronkelijke ontwikkeling overschaduwen.
In zekere zin zijn applicaties net puppies: zelfs als je ze gratis krijgt, zijn ze nooit echt gratis.
Interessant genoeg komt het grootste deel van die kosten van engineering-uren, die moeilijk te voorspellen zijn en in de kosten doorberekend kunnen worden, wat de reden is waarom softwareprojecten meestal geplaagd worden door enorme kostenoverschrijdingen (ironisch genoeg is dit goed gedocumenteerd in de literatuur, maar wordt het over het algemeen genegeerd bij het nemen van beslissingen). De reden waarom engineering bij softwareontwikkeling moeilijk te voorspellen is, is omdat het moeilijk is om te doen!
Waarom is softwareontwikkeling moeilijk?
Een eenvoudige analogie: software ontwikkelen is net als wetten schrijven: je moet duidelijke, ondubbelzinnige beschrijvingen geven van de manier waarop de onderdelen van je systeem op elkaar moeten reageren. Doe je dat niet, dan zal je applicatie vrolijk op hol slaan (omdat het niet stopt om te vragen of dat is wat je bedoelt). Fouten vallen meestal op als een zere duim.
Bovendien zijn fouten gemakkelijk te maken. Dit komt omdat er een enorm aantal aspecten zijn waar je je bewust van moet zijn en beslissingen over moet nemen, zelfs voor de meest schijnbaar triviale taken. Een voorbeeld: het tonen van een datum en tijd aan een gebruiker kan de volgende vragen oproepen:
- Toont u deze in de tijdzone van de gebruiker (geschikt om de ETA van uw taxi weer te geven) of in een andere tijdzone (geschikt om de aankomsttijd van uw vlucht weer te geven)?
- Welke datumnotatie is geschikt? Europeanen zullen meestal 18/02/2019 gebruiken, terwijl Amerikanen 02/18/2019 gebruiken;
- Hoe laat is het over een uur? Als het uur verandert door de zomertijd, kan het twee uur of helemaal geen verschil zijn.
Als softwareontwikkeling zo moeilijk is, wat is dan de oplossing?
Uitstekende, ervaren software-ingenieurs.
Net zoals kwaliteitsvoedsel gemaakt wordt van kwaliteitsingrediënten, wordt uitstekende software gemaakt door uitstekende ingenieurs. Wat definieert een uitstekende ingenieur dan? Meer dan de ruwe technische vaardigheid, is het het begrip van wanneer en hoe die technische vaardigheid toe te passen.
Een goede software engineer zal het systeem bouwen dat u hem/haar vraagt te bouwen, maar een uitstekende zal zich afvragen waarom u het überhaupt moet bouwen en hoe het zou moeten werken. Vervolgens, als het echt nodig is, zal hij het bouwen (en uitvoeren) op een manier die de voordelen voor uw bedrijf maximaliseert en tegelijkertijd kosteneffectief is.
De reden waarom ik ervaring apart vermeld, is dat talent alleen, hoewel belangrijk, niet genoeg is. In die zin is het ontwikkelen van software als het spelen van een sport of een instrument: je kunt alleen echt leren door te doen, door het werk te "voelen", door fouten te maken en ze te herstellen. Bovendien is de "kaart" van dingen die je moet weten bij softwareontwikkeling enorm, veel delen moeten nog worden verkend en deze verkenning kost tijd.
Concluderend: onderschat de volgende keer dat je een probleem moet oplossen de moeilijkheidsgraad niet:
- alternatieve (niet-software) oplossingen te overwegen;
- eenvoudigere softwareoplossingen overwegen;
- vraag advies aan een betrouwbare software-engineer.
João Cabrita
Polarising Adviseur
Leuke blog. Ik ben het eens met de punten die je in het artikel hebt genoemd. Ik zou willen zeggen dat alles voor- en nadelen heeft. Software ontwikkelen is een nette taak, maar het eindresultaat is vruchtbaar.
Hoi Ronnie! Je hebt helemaal gelijk, in het artikel staat precies hetzelfde. Bedankt voor het volgen van onze blogartikelen, blijf meedoen!