Heeft een Software Engineer iets aan “talenkennis”?

donderdag 2 november 2017

Uiteraard, hoor ik je zeggen: een Software Engineer houdt zich bezig met het ontwikkelen van programma’s, en dat doe je nu eenmaal met een programmeertaal. Kennis van een of meer talen is dus essentieel.

De volgende vraag luidt dan natuurlijk: welke taal (of talen) zouden Software Engineers tenminste moeten beheersen om hun vak goed uit te kunnen oefenen?

Het antwoord op die vraag is wat minder makkelijk te geven; of beter gezegd: het verandert in de loop van de tijd.

Van COBOL naar Python

Als programmeur in de jaren ’60 en ’70 van de vorige eeuw kon je niet zonder COBOL; in de decennia erna werd je toch wel geacht om kennis te hebben van C; sinds de eeuwwisseling is Java een van de belangrijkste talen; en op dit moment moet je eigenlijk wel iets afweten van Python… (Of was het Swift?)

Hogeschoolprogrammeren

Voordat ik medio 2017 in dienst trad bij Valori Software Improvement, was ik werkzaam als Hogeschooldocent Software Engineering aan de Haagse Hogeschool; ik gaf daar onder andere les in Java.

Is dat dan de beste of belangrijkste programmeertaal van dit moment? Niet speciaal; maar zoals iedereen die een beetje kan programmeren wel weet, volstaat kennis van de ene procedurele taal meestal om snel ook een andere, soortgelijke programmeertaal te leren. Wie Java kent, zal bijvoorbeeld over het algemeen weinig moeite hebben met de taal C# van Microsoft.

Bouwen op een stevig fundament

Om goed te leren programmeren, moet je vooral wat fundamentele zaken snappen: variabelen, sequentie, iteratie en selectie; de details van een specifieke programmeertaal zijn van minder belang…

Of toch niet? Sommige programmeertalen voegen wel degelijk iets “nieuws” toe ten opzichte van hun voorgangers, en om optimaal gebruik te maken van zo’n taal, moet je die nieuwe elementen toch wel goed in de vingers krijgen. Ik heb Java-code onder ogen gekregen die net zo goed geschreven had kunnen zijn in C (om niet te zeggen: in assembler), omdat er geen enkel gebruik werd gemaakt van object oriëntatie.

Aanvullende vaardigheden

Dat is dan uiteraard geen “tekortkoming” van Java, maar komt doordat de programmeur kennelijk onvoldoende kennis had van andere belangrijke vaardigheden die een moderne Software Engineer zou moeten bezitten: Object Oriented Design en Object Oriented Programming.

Het goede nieuws is, dat de HHS en andere hogescholen tegenwoordig uitgebreid ingaan op de principes van object georiënteerd ontwerpen en programmeren.

Minder positief is, dat er wel degelijk belangrijke skills zijn waar weinig of geen tijd voor is in het curriculum: het vervaardigen van kwalitatief hoogstaande, goed onderhoudbaresoftware, bijvoorbeeld, en het schrijven van veilige programmatuur.

Een goede tool is het halve werk

Bij Valori Software Improvement doen we regelmatig onderzoek naar de kwaliteit en de onderhoudbaarheid van grote systemen, met behulp van open source software als SonarQube, maar ook met onze eigen proprietary tool set (“Alchemist”).

Daarbij komen we vrijwel altijd zaken tegen die (aanzienlijk) verbeterd kunnen worden, en die verbeteringen komen dan de leesbaarheid van de code, de onderhoudbaarheid van de programmatuur en uiteindelijk ook de stabiliteit van het gehele onderliggende systeem ten goede.

Het wordt complex…

Je kunt je afvragen waarom de programmeurs die “problemen” überhaupt in hun code hebben laten ontstaan.

Voor een deel heeft dat te maken met de “organische groei” van software. Een routine die in eerste instantie goed leesbaar is, kan in de loop van de tijd steeds complexer worden als er nieuwe condities, uitzonderingen en uitzonderingen op die uitzonderingen aan worden toegevoegd. In zo’n geval is het raadzaam om de code te refactoren, maar daar is in de praktijk niet altijd tijd voor. Het implementeren van nieuwe functionaliteit krijgt meestal voorrang.

Voor een ander deel is echter simpelweg sprake van een gebrek aan kennis: in veel opleidingen zijn, zoals ik al schreef, de onderhoudbaarheid en veiligheid van software helaas een ondergeschoven kindje.

Dat is jammer, want met aandacht voor een relatief klein aantal punten zijn veel problemen te voorkomen –je software wordt er beter onderhoudbaar en stabieler door, en hackers krijgen minder kans om in te breken in je systeem. Dat scheelt individuele bedrijven, maar ook de samenleving als geheel, een hoop ellende.

Kwaliteit moet!

Ik pleit daarom voor meer aandacht voor softwarekwaliteit in het algemeen, en onderhoudbaarheid en beveiliging in het bijzonder, in het programma van onze ICT-opleidingen.