De titel klinkt een beetje als click-bait, want we hebben wel degelijk meer developers nodig, ook bij TRES: link.
Ik kom op dit onderwerp door een paar oorzaken. Zo las ik op teletekst het bericht dat er een gratis programmeerschool in Amsterdam komt, intiatief van TomTom oprichter Corinne Vigreux. Deze is voor iedereen toegankelijk, heeft de naam Codam en "moet de komende jaren honderden programmeurs opleiden". Dat klinkt als: hier gaan een aantal doorgewinterde programmeurs stevige lessen geven om goed geschoolde programmeurs op de arbeidsmarkt te brengen. Kudo's. Maar dan lees je verder: je hoeft geen vooropleiding te hebben, om toegelaten te worden moet je wel een selectiemaand doorlopen, waarbij "de basis" aan bod komt. Er zijn geen leraren, het idee is dat iedereen elkaar helpt.
Dat laatste zorgt voor opstaand nekhaar. Stel je voor dat gezegd zou worden: we hebben te weinig handen aan de operatietafels, we zetten een school voor chirurgen op, er zijn geen leraren, het is de bedoeling dat iedereen elkaar helpt. Dan ligt ik toch liever op de operatietafel bij de chirurg die er voor geleerd heeft dan bij de chirurg die zegt: volgens mijn medestudenten zou ik hier een incisie moeten plaatsen. Ja, ik weet het ook niet hoor....
Een week later hoor ik een podcast van Scott Hanselman terug die op 28 februari 2007 opgenomen is (link). Het gaat over het aannemen van personeel. Hoe beoordeel je of die persoon binnen het bedrijf past? Of beter gezegd, binnen het team? Iemand kan afgestudeerd zijn, maar heeft hij/zij de skills om het werk te doen waar deze persoon op aangenomen gaat worden? Nu wordt bij sommige van deze interviews de vraag gesteld om een stukje code uit te werken wat aan een aantal voorwaarden moet voldoen. Het FizzBuzz-probleem is iets wat output geeft (ik zou een console-applicatie maken), wat aan de volgende voorwaarden moet voldoen:
- print de nummers 1 tot en met 100
- bij elk nummer wat deelbaar is door 3 moet je Fizz printen
- bij elk nummer wat deelbaar is door 5 moet je Buzz printen
- bij elk nummer wat zowel door 3 als 5 deelbaar is moet je FizzBuzz printen
Appeltje, eitje, als ik dit hoor/lees denk ik "dit zou een opdracht van het eerste jaar Hogere Informatica kunnen zijn". Maar schijnbaar is er een grote groep die het niet lukt om hier een oplossing voor te maken, die klapt meteen dicht als ze dit te horen krijgen.
Als je dit niet lukt als beginnend programmeur, ok. Maar als je afgestudeerd bent en dit niet kunt, dan heb je volgens mij het verkeerde beroep gekozen. Vervolgens werden op Internet allemaal oplossingen gegeven door de fanatieke hardcore-programmeurs, maar daar gaat het hier niet om. Want als iemand het niet wist en het op basis van zo'n uitwerking "wel weet", dan kun je of goed Googelen, of een trucje nadoen, maar heb niet zelf het inzicht hoe je een dergelijk probleem gaat oplossen.
Ben je beginnend programmeur en begint het je te duizelen als je zo'n soort specificatie voor je neus krijgt? Gewoon rustig blijven! Niet meteen je hersenen in overdrive laten ratelen, maar gewoon bij het begin beginnen. Maak eerst maar eens een loopje om die nummers 1 tot en met 100 te printen. Dan kun je die afstrepen. Dan voeg je in die loop toe dat als je tellertje deelbaar is door 3 je "Fizz" gaat printen. Deelbaar door 3 geeft aan dat als je een getal deelt door 3, je niets overhoudt. Dus 3 gedeeld door 3 is 1, 3 - (1 * 3) =0. 6 gedeeld door 3 is 2, 6 - (2 * 3) = 0. Die 0 die overblijft, dat noem je de modulus, het getal wat overblijft na delen. Dus je teller "modulo" 3 is 0. Per programmeertaal is het teken voor modulo verschillend. In Visual Basic is dat Mod, in C# is dat het procent-teken (%). Vervolgens voeg je dat ook toe voor de 5, alleen print je dan "Buzz".
Als je geen line-breaks hebt toegevoegd, zul je zien dat je nu al automatisch FizzBuzz zult printen. Dus je hoeft niet nog een derde controle (modulo 3 en modulo 5 = 0) toe te voegen. Of misschien juist wel, want deze "probleem-omschrijving" is beknopt en voor meerdere interpretatie vatbaar. Want als het getal door 3 en 5 te printen is, print je dan alleen "FizzBuzz", of print je eerst "Fizz", daarna "Buzz" en moet je ook nog een keer "FizzBuzz" printen? Ik printte dus alleen FizzBuzz. Maar dan kun je ook vragen moet je ook bij het getal wat deelbaar is door 3 en/of 5 het getal zelf nog printen, of laat je dat en print je alleen Fizz en/of Buzz? Ik print alle getallen, dus vervang die dan weer niet.
Als je developer bent moet je niet bang zijn dat er wel eens een ingewikkeld probleem op je pad kan komen. Door gestructureerd het vraagstuk aan te pakken zul je tot een oplossing komen. Behalve dat je goed moet lezen moet je ook aanvullende vragen durven stellen en niet denken "het zal zo wel bedoeld zijn". En vooral ook zelf blijven nadenken. Niet de mogelijkheid afvangen dat een getal door nul gedeeld kan worden (en dus een exceptie oplevert) omdat het niet in de specificatie stond is geen excuus. Documenteer wat je doet. We kunnen wel leuk scrummen en briefjes over het bord schuiven, maar als er een nieuwe klant achter de knoppen gaat zitten en gaat vragen "hoe werkt dit?", dan is het fijn dat tijdens het bouwen al een document opgesteld hebt waarin staat hoe het werkt. Zelf ben ik nu ook meer bezig met testprojecten. Het is op zich een kleine moeite om die toe te voegen in Visual Studio, als er dan in je project verwijzingen naar webservices zitten, kun je in dat testproject snel controleren of het nog werkt en ook "snel" de data aanpassen om te controleren of dat impact heeft.
Een aantal beginnend programmeurs heeft bij ons stage gelopen / afstudeeropdracht uitgevoerd op de afdeling service en daar een aantal mooie opdrachten mogen uitvoeren. Jeffrey die volledig zelfstandig een mooie SSL-applicatie gemaakt heeft. Terwijl door de shutdown in Amerika een aantal websites hun slotje verloren (en dus niet meer secure of bereikbaar waren), zou dat bij ons geen problemen moeten opleveren omdat dit een geautomatiseerd proces geworden is. Jan Julius die aan de slag gegaan is met een applicatie om geautomatiseerd websites aan te maken, inclusief de MSSQL-database, ActiveDirectory-zaken, FTP-users en wat al niet meer. En dan dit jaar Jeroen die aan een interne website gebouwd heeft die door een andere stagiair was opgeleverd, maar zonder documentatie lag te verstoffen, de boel gerefactord heeft, de boel succesvol heeft kunnen opleveren.
We hebben dus niet meer programmeurs nodig, maar meer programmeurs die vaardig, slim en communicatief vaardig zijn. Misschien dat er dan ook nog eens berichten in de media komen dat een bepaald IT-project bij de overheid voor de verandering wél eens gelukt is, want na al die berichten over kostenoverschrijdingen en het stoppen van projecten omdat het niet afgerond kan worden, dat is toch best wel triest.