Kijk eens naar de twee woorden computer en wetenschap. De gaven van het eerste woord aan de wereld zijn enorm en variëren van de levensreddende alomtegenwoordigheid van elektronische medische dossiers tot de mogelijkheid om op elk moment van de dag een virtueel bargevecht aan te gaan op Twitter. Het tweede woord, wetenschap, staat voor een intellectuele beweging die grote vooruitgang heeft gebracht, zoals het poliovaccin, een paar reizen naar de maan en te veel andere om op te noemen. Dus waarom schiet de combinatie van de twee woorden in informatica zo tekort, vooral als we onze programmeerteams willen versterken?
Het is niet dat het vakgebied niets heeft opgeleverd. Er zijn petabytes aan LaTeX-bestanden vol briljante ideeën, zoals nieuwe programmeertalen, slimme zoekalgoritmen, algoritmen voor machinevisie en een gazillion notions in between. Veel van deze ideeën zijn prachtig.
Het probleem is dat weinigen van ons er echt veel van nodig hebben. Een vriend bekende dat hij een ontwikkelteam heeft zien opbloeien door afgestudeerden van de CS-opleiding over te slaan en alleen natuurkundigen, accountants of iemand met een andere wiskundige achtergrond aan te nemen. Deze nieuwe werknemers zijn praktischer en meer gericht op het leveren van de machines, wat zo’n beetje is wat bijna alle bedrijven willen doen.
Het is niet zo dat CS-diploma’s slecht zijn; het is alleen zo dat ze niet zullen spreken over de problemen die de meesten van ons moeten oplossen.
Theorie leidt af en verwart
Veel computerwetenschappers zijn wiskundigen in hart en nieren en de discipline is doordrongen van een op theorema’s geobsedeerde mentaliteit. Een theoreticus vertelde me dat alle wiskundige bewijzen eigenlijk gewoon programma’s zijn en vice versa, althans in zijn gedachten. Hij is niet zozeer geïnteresseerd in het leveren van code die het werk doet, als wel in het bewijzen dat zijn code correct is.
Het komt zelden voor dat een CS-er afstudeert zonder een gezonde dosis NP-completie en Turing-machines te krijgen, twee prachtige theoriegebieden die leuk zouden zijn als ze geen slechte instincten zouden opwekken. Een bioloog vroeg me een probleem op te lossen in het matchen van DNA-sequenties en ik kwam bij hem terug met de bewering dat het NP-compleet was, een klasse van problemen die erg lang kunnen duren om op te lossen. Het kon hem niet schelen. Hij moest het toch oplossen. En het blijkt dat de meeste NP-complete problemen meestal vrij gemakkelijk op te lossen zijn. Er zijn slechts een paar pathologische gevallen die onze algoritmen in de war sturen. Maar theoretici zijn geobsedeerd door de dunne set die de eenvoudige algoritmen in de war sturen, ook al worden ze in het dagelijks leven zelden waargenomen.
Hetzelfde probleem doet zich voor met Turing machines. Plichtsgetrouwe CS-studenten leren nihilistische resultaten als de Stelling van Rice, die aantoont dat we computeralgoritmen eigenlijk helemaal niet kunnen analyseren. Maar Turing machines zijn een vrij slecht model voor hoe onze gewone machines werken en het is vaak heel gemakkelijk om software te maken die slimme dingen doet met onze code. Elke CS-academicus die deze theoretische resultaten niet met een flinke korrel zout neemt, loopt het risico op te geven wanneer een perfect bruikbaar antwoord binnen handbereik ligt.
Academische talen worden zelden gebruikt
Het hoeft ons niet te verbazen dat de academie snobisme en een liefde voor geheimzinnige oplossingen kweekt. Dat gebeurt op elk gebied. Toen ik een MIT-afgestudeerde vroeg wat zijn favoriete taal was, vertelde hij me trots dat hij zeker wist dat ik geen idee had wat het was. Pas na een beetje aandringen gaf hij toe en vertelde hij me dat het CLU was. Hij had gelijk.
Er zijn veel goede ideeën van mensen die geobsedeerd zijn door talen, maar soms eindigen deze ideeën in het creëren van rommel en verwarring. Als één teamlid van een vreemde functie houdt en die in de code base begint op te nemen, zal iedereen het moeten leren. Als iedereen hetzelfde doet, is de tijd om op snelheid te komen wreed.
Dit is de reden waarom Google koos voor de lage weg toen het Go bouwde. De makers stonden erop dat de taal weinig constructen zou hebben en eenvoudig te leren zou zijn in de kortst mogelijke tijd. Deze eenvoud hielp iedereen, omdat iedereen deze kern heel goed kende.
Veel CS-professoren zijn wiskundigen, geen programmeurs
Een van de vieze geheimen van de meeste informatica-afdelingen is dat de meeste professoren geen computers kunnen programmeren. Hun echte werk is het geven van lezingen en het regelen van subsidies. Ze hebben verstand van spreadsheets en subsidievoorstellen, niet van onderzoek doen. Dit is waarom God hen graduaatstudenten gaf. De laatste keer dat veel van hen een computer programmeerden was toen ze zelf nog op school zaten. Sindsdien is er bitrot en spinrag ingetreden en de compilers op hun machines starten waarschijnlijk niet meer.
Vele verplichte onderwerpen worden zelden gebruikt
Gegevensstructuren zijn vaak het hoofdonderwerp voor het tweede vak dat studenten in de informatica volgen. Het is jammer dat weinigen van ons nog veel gegevensstructuren gebruiken. We stoppen dingen in object-hashtabellen of duwen ze in een database die het denkwerk voor ons doet. Het is nog steeds nuttig voor iedereen om een beetje na te denken over de algoritmische complexiteit, maar slechts weinigen hoeven zich zorgen te maken over B-bomen of zelfs gelinkte lijsten. Niet alleen dat, maar velen van ons hebben zich gerealiseerd dat we beter af zijn met het vertrouwen op een standaard bibliotheek dan met het zelf rommelen met datastructuren. Het is te gemakkelijk om fouten te maken. Veel organisaties verbieden het gebruik van eigen datastructuren met reden.
Er zijn tal van andere voorbeelden van onderwerpen in het klassieke curriculum die gewoon niet meer zo belangrijk zijn. Compilers zijn complex en essentieel, maar de enige mensen die ze schrijven zijn studenten die gedwongen worden om speelgoedversies te maken in een semesterlange cursus. Zelfs Apple heeft open source tools gebruikt bij het maken van de compiler voor Swift.
Mathematische modellen brengen ons op het verkeerde pad
Iedereen die databasetheorie heeft geleerd, heeft de slimheid van Boyce-Codd Normal Form ontdekt, de manier waarop we een uitgebreide datastructuur opsplitsen in kleine tabellen. Het is allemaal heel elegant en efficiënt – totdat je een eeuwigheid wacht op een antwoord op je SQL query vol met JOIN commando’s.
De meeste ontwikkelteams leren al snel hun databases te “denormaliseren” om de performance te verbeteren. Met andere woorden, ze halen alle slimmigheidjes weg en stoppen de gegevens in één grote tabel. Het is een beetje lelijk en verspillend, maar het is vaak schreeuwend snel. En wat betreft de overdaad, schijfruimte is goedkoop.
Als ze hun opleiding eenmaal in praktijk brengen, zijn veel ontwikkelaars een paar jaar bezig met het afleren van alle wiskundige spitsvondigheden uit hun CS-cursussen.
Instituten kweken arrogantie
We denken allemaal dat we gelijk hebben, maar de aard van academische graden is er nu eenmaal op gericht afgestudeerden het vermogen te geven hun superioriteit met gezag te betogen. Dat mag dan soms waar zijn, maar zelfs op de beste dagen is het moeilijk om te weten wat echt juist is, vooral in een snel veranderend vakgebied.
Een persoon met wie ik heb gewerkt, was dol op de “coderingsstandaarden” die hij naar de afdeling bracht en hield van elke gelegenheid om de standaarden aan te halen tijdens de code review. Deze standaarden kwamen neer op pietluttige meningen over waar witruimte moest worden geplaatst, maar toen hij er eenmaal met academische precisie over begon te spreken, begon hij ze als knuppels te hanteren tijdens code reviews. Hij bekeurde code met afwijkende witruimte met de onheilspellende bewering dat de code niet aan de normen voldeed. En zo zaten we allemaal vast aan het tellen van spaties, zodat alles aan een quasi-academische standaard voldeed.
Vele moderne vaardigheden worden genegeerd
Vele moderne vaardigheden komen in veel afdelingen gewoon niet aan bod. Als je Node.js, React, game design of cloud computation wilt begrijpen, zul je daar in het gemiddelde curriculum maar weinig van terugvinden. De vakkenlijst van een gemiddelde school concentreert zich op de fundamenten – dat wil zeggen, diepe concepten zoals race conditions die deel zullen uitmaken van computergebruik lang nadat woorden als Node.js of React zijn vergeten. Dat is een nobel doel, maar 99 procent van wat de meeste programmeurs doen is worstelen met de eigenaardigheden van het huidige buzzword du jour.
Het is heel gebruikelijk dat afdelingen informatica diepe denkers voortbrengen die enkele van de fundamentele uitdagingen begrijpen zonder enige oppervlakkige kennis van de details die de dag van de gemiddelde werknemer domineren. Daarom vinden bedrijven het net zo de moeite waard om iemand van een natuurkundig lab aan te nemen die net Python heeft gebruikt om wat datastromen van een instrument te masseren. Zij kunnen de oppervlakkige details net zo gemakkelijk leren als het CS-genie.
De academische voorhoede laat lang op zich wachten
Machine-leren en kunstmatige intelligentie zijn helemaal in en velen haasten zich om ermee te experimenteren. Maar ze worden al tientallen jaren bestudeerd door de CS-afdelingen. Heeft het zin om alle ideeën die vandaag de dag uit de scholen komen te onderzoeken – of geduldig te wachten tot ze eindelijk klaar zijn voor algemeen gebruik?
Tenure kan zelfgenoegzaamheid in de hand werken
Er zitten veel prachtige redenen achter het instituut tenure en de meeste professoren die er bescherming van genieten, verdienen alle voordelen voor hun bijdragen van toen. Het probleem is dat in snel veranderende vakgebieden de studenten van vandaag weinig behoefte hebben aan de inzichten van zelfs maar een decennium of zo geleden. Toch garandeert een vaste aanstelling dat veel professoren tien, twintig of zelfs dertig jaar verder zullen zijn dan de tijd dat zij de grootste inzichten hadden.
En dan zijn er nog de afleidingen die de professoren kunnen afleiden. Een genie met een vaste aanstelling lijkt eindeloos te bloggen over de verschillende pokertoernooien en de bad beats die hem naar huis hebben gestuurd. Een ander heeft geïnvesteerd in een minor league honkbalteam en schept op over het rondhangen met de balspelers en het shaggen van ballen terwijl ze slagtraining volgen.
Intellectualisme levert zelden resultaten op
Toen ik een tenured faculteitslid vertelde dat een van mijn studenten een baan had gevonden dankzij een paar colleges over Angular en React, glimlachte hij en zei: “Het laatste wat ik wil doen is dit veranderen in een handelsschool.”
Dat is prima, maar er zijn er niet zo veel die het kunnen verantwoorden om bijna een half miljoen dollar uit te geven aan de vraag of polynomiale of exponentiële engelen kunnen dansen op de kop van een speld. De traditie van de vrije kunsten is een prachtig iets, maar het moedigt een minachting voor praktische kennis aan. Het gaat allemaal over een aantal diepe, eeuwige waarheden. Maar als je bedrijf volgende week iets moet verzenden binnen de deadline, heeft niemand tijd om te navelstaren en zich te verwonderen over eeuwige waarheden.