Ik zie ze regelmatig voorbijkomen: aanvragen voor een full-stack developer. Met de stack (stapel) bedoelen we alle programmeertalen, protocollen en middleware om een volwassen internetapplicatie te bouwen en onderhouden. Een full-stack ontwikkelaar is een digitale duizendpoot die ze allemaal voldoende beheerst. Ooit noemde ik mijzelf ook zo, en in 2001 hoefde dat geen opschepperij te zijn. De destijds populaire LAMP stack (Linux, Apache, MySQL en Perl) was nog redelijk behapbaar.
Perl is langzamerhand uit die vertrouwde gereedschapskist verdwenen, maar Linux en MySQL blijven dominant en gaan met de tijd mee. Helaas is de stack van toen nu een torenflat geworden. Begrijpelijk, want sites moeten veel meer kunnen en met meer systemen samenwerken. Smartphone had je nog niet. Je schreef voor één platform: de browser – al woedde er wel een gekmakende strijd der standaarden tussen Netscape en Explorer. Met Internet steeds meer een eerste levensbehoefte wordt cybercriminaliteit als verdienmodel steeds aantrekkelijker. Ook daar moet je tegen bewapend zijn.
Het speelveld is zo complex geworden dat disciplines die eerst makkelijk binnen het takenpakket van één persoon vielen inmiddels een volwaardige dagtaak zijn met dito kwalificaties. Beheertaken waar je vroeger langharige systeembeheerders met loodzware sleutelbossen voor had landen nu op ons bordje in de naam van DevOps (you built it, you own it). Maar beheer in de Cloud anno 2021 doe je er niet zomaar even bij.
Dit brengt me bij het begrip T-shaping, de visuele metafoor om de balans te verduidelijken tussen specialistische kennis op één vlak versus de brede maar minder diepe kennis van aanverwante disciplines. Ik noem ze maar even de spies en de dwarsligger van de letter T – in de typografie heten ze vast anders; ik houd me aanbevolen voor correcties. De spies is de core business van je vakgebied. Daar houd je de ontwikkelingen bij en fungeer je als vraagbaak voor de rest. Omdat ons brein nu eenmaal beperkt is stoppen we alles wat niet tot je parate kennis kan horen in de dwarsligger. In die zaken moet je je beperkingen kennen en weten wie je waarover kunt aanklampen voor hulp.
Van elkaar weten wie waarvan het meeste verstand heeft: dat maakt een succesvol softwareteam. De full stack is een pakket aanverwante, complementaire disciplines geworden die niet meer binnen de specialisatie van één persoon vallen. UX/UI, frontend (meestal JavaScript), ontwerp, coderen, testen en deployment: je hebt ze allemaal nodig voor een volwassen product, maar geen enkel individu kan overal expert in zijn.
Nog even over dat klassieke systeembeheer. We hebben nu CI/CD servers en Helm charts om software uit te rollen waar je ‘vroegah’ handmatig een folder via FTP overhengelde. De benodigde voorkennis om een en ander op te zetten is wel een orde van grootte complexer geworden. Wie expert wil worden in de nitty gritty van wat de grote jongens Google Cloud, Amazon AWS en Microsoft Azure aanbieden aan clouddiensten kan zich onmogelijk in alle drie bekwamen. Dat is geen zinnige investering. Een klant of werkgever heeft zijn diensten immers niet bij AWS én Google én Azure ondergebracht. Dit is ook typisch het soort kennis dan snel veroudert als je het niet bijhoudt, net zoals de Unix commandline uit je spiergeheugen verdwijnt. En dan zijn shellcommando’s nog stabieler dan het Oude Testament, vergeleken met Cloud API’s van de grote drie.
Het is een unieke uitdaging binnen de IT: die noodgedwongen specialisatie dankzij het uitdijen van het ecosysteem in combinatie met de krankzinnig korte levenscyclus van veel concurrerende technieken. Echte innovatie binnen hardware en software zijn relatief zeldzaam. Maar we zijn wel gek op nieuwe dingen, en daarom overdrijven we het concurrentievoordeel. Het gros van nieuwe talen of frameworks biedt meer van hetzelfde; anders, en hooguit een klein beetje beter. Na aftrek van de kosten voor herbouw en opleiding vallen de voordelen tegen. Verstandige CTO’s weten dat, en daarom laten Java en C# zich niet zomaar van hun troon stoten.
Elke training, elke aanlokkelijke verrijking van je carrière heeft een opportunity cost. Kiezen voor A betekent afzien van de potentiële winst van B. Om je serieus in een van die kroonpretendenten te verdiepen die het niet gaan halen is als zakelijke overweging riskant – tenzij je het gewoon leuk vindt. Als Javaan hoef je geen C# in je dwarsligger. Het is geen complementair ecosysteem aan Java, maar een volwaardig alternatief. Kotlin, en met name Scala leren kan ik wel van harte aanbevelen: ook als deze mededingers geen grote deuk in Java’s marktaandeel slaan maakt het je wel een betere Java programmeur.
Ik pleit voor just in time learning voor alles wat de moeite waard is om in je dwarsligger te hebben. Tot een jaar geleden werkte ik aan een grootschalige applicatie in Scala. Nu even niet meer. Van alle coole nieuwe features in versie 3 ben ik vluchtig op de hoogte. Komt er een nieuw interessant Scala project voorbij, dan moet ik snel mijn kennis oppoetsen, maar dat komt wel goed. Vergeleken met Chinees leren schrijven is elke programmeertaal een peulenschil.