Innoveer je huidige werkwijze

Sherlock Holmes had er geen boodschap aan toen Dr. Watson hem erop wees, dat er negen planeten in ons zonnestelsel zweven. Hij had zijn handen vol aan het oplossen van het mysterie, waar hij op dat moment aan werkte. “Dat is precies wat we met programmeren meer zouden moeten doen”, stelt Jessica Kerr, de Amerikaanse developer en topspreker op het gebied van software engineering en testing. “We moeten ons meer focussen op het probleem dat we moeten oplossen en ons niet laten afleiden door zaken daarbuiten.”

Jessica Kerr schuift op een zonnige dinsdagochtend aan in een koffiebarretje aan de Utrechtse gracht. Gisteren heeft ze een presentatie gehouden bij Ordina over de voordelen van functionele programmeerprincipes in object georiënteerd programmeren. Jessitron, zoals ze zichzelf noemt, glimlacht als ze aan de reacties denkt. “Er kwam na afloop iemand naar me toe, die zei dat hij ineens door had welke kant hij uit moest met een probleem in Swift waar hij al tijden mee zat. Daar word ik erg blij van.” Tijdens de borrel na afloop van de presentatie bleek één van de mensen in de groep een agrarische achtergrond te hebben. Nu werkt Kerr bij het Amerikaanse bedrijf Monsanto, dat ter discussie staat om zijn genetisch gemodificeerde zaden en gentechnologie. De borrel had pijnlijk kunnen worden, maar juist door de verschillende zienswijzen en het op een respectvolle manier van mening kunnen verschillen, werd het een interessante discussie. “Daar hou ik van. We kunnen meer van elkaar leren dan we vermoeden”, zegt Kerr.

"Ik word er ontzettend enthousiast van dat ik programmeur ben"

Leren tijdens borstvoeding

En leren is een van de dingen, die ze het liefste doet. Zelf leren en haar kennis aan anderen overbrengen. Zo probeert ze in haar werk altijd meer te leren dan strikt noodzakelijk is. “De moeite die ik daarin steek, betaalt zich altijd terug, vaak al binnen een week. Als ik onderweg ben, heb ik alle tijd in de trein of het vliegtuig om dingen uit te zoeken. Zo wilde ik onlangs meer weten over coreOS, dus begin ik op Wikipedia en volg ik net zo lang alle links, die ik tegenkom, totdat ik het begrijp. Daardoor word ik beter in mijn werk. We geven onszelf te weinig tijd om zaken uit te zoeken en onderwerpen uit te diepen. Maar het is juist ontzettend waardevol om even niet te typen en tijd te nemen om te lezen. Zo heb ik ontzettend veel programmeerboeken kunnen lezen toen ik nog borstvoeding gaf”, lacht ze. Kerr heeft twee dochters van 7 en 10 jaar, die momenteel met haar ouders op vakantie in Texas zijn. “Daardoor kan ik nu een grote trip maken door Europa, van conferentie naar conferentie”, legt ze uit. “Ook conferenties zijn een geweldige manier om in korte tijd veel te leren.” Ze is net op de PolyConf in Polen geweest en dinsdagmiddag reist ze door naar Berlijn. Haar dochters wil ze graag leren programmeren, maar vooralsnog hebben zij daar minder aandacht voor. “Ze zijn wel zo slim, dat als ik druk ben en ze mijn aandacht willen, ze zeggen: ‘Mama, wil je Scratch met me doen?’ Dan weten ze dat ik alles laat vallen en met ze aan de slag ga. Scratch is bij ons thuis the magic word.”

 

Functionele taal is sneller

Kerr is goed in presenteren, schrijven en doceren. “Waarom zou ik anderen niet in 45 minuten leren wat mij tien uur gekost heeft? Iedereen kan op zo’n manier bijdragen, bijvoorbeeld door te bloggen. Dat doe ik heel bewust, want als ik het opschrijf, leer ik het zelf beter én kunnen anderen ervan leren.” Zo reist ze de wereld over met haar presentatie over functionele principes in object georiënteerd programmeren, één van haar stokpaardjes. “Dan komen we weer terug bij Sherlock Holmes. Je hoeft helemaal niet van programmeertaal te veranderen om dingen op een nieuwe, innovatieve manier te doen. Ik heb zes principes uit functioneel programmeren genomen, die heel goed zijn te gebruiken bij object georiënteerd programmeren. Een functionele programmeertaal is sneller. Als ik de ideeën van functioneel programmeren eerder in mijn loopbaan had geweten en had begrepen hoe dingen werkten, dan had ik de tijd, die ik nodig had om toenmalige softwareoplossingen te bouwen, kunnen halveren.” Gevraagd naar haar eigen favoriete programmeertaal, begint ze te glimlachen. “Dit is voor Java Magazine, hè? Dan durf ik het bijna niet te zeggen, maar Closure en Scala zijn mijn favorieten. Op dit moment werk ik veel in Closure. Die taal heeft richtlijnen om je in de juiste richting te duwen, maar biedt je ook de flexibiliteit om je eigen stijl te behouden. Mijn favoriet is schema, dat is handig voor het experimenteren met verschillende stijlen. Dat doe ik vaak ’s avonds, dan schrijf ik een test en kijk ik of ik het zoveel mogelijk in gangbaar Engels kan schrijven, functies kan definiëren en ik het daarna executable kan maken. Dat is heel goed te doen in Closure, zonder macro’s te gebruiken. De syntax is simpel genoeg, zodat het op deze manier werkt. Dat spreekt me aan.”

Seperate what to do from when to stop

Meer hobbyisten nodig

Er zijn maar weinig vrouwelijke programmeurs, realiseert Kerr zich. Dat is één van de redenen dat ze opvalt binnen het wereldje. “Ik heb geluk, mijn persoonlijkheid is zo dat ik goed met mannen overweg kan. Dat kan niet iedereen, maar er zouden wel meer vrouwen bij mogen in deze wereld. En dan geen extreem competente vrouwen, maar juist de gewone, gemiddelde dame. Alleen dan is een sneeuwbaleffect mogelijk, omdat er realistische rolmodellen komen en iedereen het normaal gaat vinden dat vrouwen ook programmeren.” Dat hoeven niet allemaal professionele programmeurs te zijn. Kerr breekt eveneens een lans voor meer hobbyprogrammeurs. “Er zijn tig dingen die je met programmeren kunt doen. Denk aan Raspberry Pi’s, games zoals Minecraft en het maken van muziek. Dat heeft niets te maken met professionele softwareprogrammeurs, maar hoe meer mensen dat kunnen, hoe meer we dat als cultuur als handige skill weten te waarderen. Er zijn al ontzettend veel mensen, die hun werk simpeler maken door het te automatiseren. Een vriend van mij werkt op een financiële afdeling en automatiseert daar rapporten. Daardoor wordt zijn werk makkelijker en betrouwbaarder. Maar dit soort mensen weten niets over versiebeheer en ze weten niets over distributie, want ze bouwen geen software. Ze programmeren om hun werk en dat van hun team eenvoudiger te maken. Daar moeten er meer van komen, want als professionele software developers gaan we nog weleens te ver. Wij willen namelijk altijd overal software voor bouwen, maar veel mensen willen helemaal geen software. Die willen gewoon een oplossing voor hun problemen.”


Functionele principes voor object georiënteerde ontwikkeling

  1. Data in, Data out
    “Binnen een functie zouden we alleen moeten letten op de parameters die binnenkomen en er moet niets meer gebeuren dan dat er een waarde wordt teruggegeven. Waarom willen we dat? Omdat het je code beter testbaar maakt. Maar belangrijker, het is eenvoudiger te begrijpen.”
  2. Specific typing
    “De reden dat we specifiek willen zijn als het om types gaat, is een Chinees gezegde: ‘The beginning of wisdom is to begin to call things by the right names’. Als we dezelfde woorden met dezelfde betekenis gebruiken vanuit de business tot aan de ontwikkelaars, kunnen we ervoor zorgen dat de compiler checkt of we dingen op de juiste manier doen.”
  3. Verbs are people too
    “In Java bestaan er alleen naamwoorden. Ieder werkwoord moet worden vergezeld door een naamwoord, dat is niet eerlijk. Teveel naamwoorden. Één van de belangrijkste mechanismes van functioneel programmeren, die ervoor zorgen dat je over minder zaken na hoeft te denken, is de mogelijkheid om zowel naamwoorden als werkwoorden te gebruiken.”
  4. Immutability
    “Functionele programmeurs zijn gek op onveranderlijkheid. Ik ben verwend, omdat ik weet waar mijn data is ontstaan en het daarna niet wijzigt. In Java is dit ontzettend moeilijk. Standaard onveranderlijkheid is een toevallige complexiteit, want doordat het standaard aan staat, geeft het je meer vrijheid dan je daadwerkelijk nodig hebt. Het is beter om die vrijheid preciezer te specificeren.”
  5. Declarative style
    “Dit principe stelt: ‘zeg wat je doet, niet hoe je het doet’. Als een ontwikkelaar een declarative style gebruikt, krijgt hij de vrijheid om de code sneller te maken. Hij geeft de library-bouwers, de compilers en virtual machines de vrijheid om te optimaliseren, omdat hij geen stap-voor-stap instructies geeft hoe ze het moeten doen, maar alleen laat weten wat ze moeten doen.”
  6. Lazy evaluation
    “Lazy evaluation stelt dat we een evaluatie kunnen uitstellen tot het laatste moment. Als we niet meer proberen te controleren wanneer dingen gebeuren, kunnen we ons druk maken om wat er gebeurt en wat er daarvoor en daarna moet gebeuren. Dat zorgt voor een scheiding tussen wat we doen en wanneer we moeten stoppen.”

 

Presentatie

Bekijk de presentatie van Jessitron over functionele principes in object georiënteerd programmeren op www.youtube.com/watch?v=GpXsQ-NIKXY