Over deze aflevering
Deze aflevering hebben we Wander Hillen te gast. Wander mogen we wel omschrijven als een Haskell liefhebber.
Delen
// Gasten
Wat je leert#
- •Wat functioneel programmeren praktisch inhoudt
- •Hoe je database bottlenecks identificeert en oplost
- •Waarom gemengde teams beter presteren dan homogene
- •Hoe je systemen schaalbaar ontwerpt voor groei
- •Wat monads zijn en wanneer je ze gebruikt
Transcript
Welkom bij aflevering 13 van CodeKlets.
We zijn vandaag met z'n tweeën, Bernard en ik.
Hallo Bernard.
Hallo.
Weer online.
En dat gaat voorlopig niet veranderen.
Dat gaan we misschien nog wel tien keer herhalen.
Maar het is het nieuwe normaal, zoals ze dat zo mooi zeggen.
Maar het is wat het is.
Het wendt op zich ook wel een beetje.
Dan moet ik wel zeggen, we hadden wat opstartproblemen.
Dus dat wendt weer niet.
Maar goed, om te beginnen ook nog steeds bedankt Salves voor het mogelijk maken van het opnemen
via Zencaster.
Zij sponsoren ons voor dat kleine deel, dus daar zijn we blij mee.
En ik wil beginnen met wat huishoudelijke zaken voor CodeKlets.
Dat is eigenlijk een beetje aandachtvragen.
We zijn nu sinds een week of drie, denk ik, begonnen met een nieuwsbrief.
Het begint aardig te lopen.
Ik zou zeggen, check hem uit.
Je kunt hem via codeklets.nl, kun je je daar op subscriben.
En ja, het is gewoon een nieuwsbrief waar we gewoon wat nieuwtjes over software ontwikkelingen.
Ja, die zetten we daarin.
Dan hoef je zelf niet over alleen te googlen.
Dat doen we dan voor je.
De leukste artikelen kouden we voor.
Maar ook conferenties, podcasts en dat soort zaken.
Dus dat is eigenlijk stiekem een tip.
Wij van WC1 tippen.
Ja, dan is al een tijdje, zeg maar, het doel.
Kijk, een podcast maken, dit klinkt een beetje raar.
Maar dat kost natuurlijk ook stiekem ook wel wat geld.
Dus je host de boel en wat tools die je gebruikt.
En het is niet zo in Nederland dat je zomaar heel erg rijk wordt voor het podcast.
Dat is ook volgens mij nooit de bedoeling geweest van CodeKlets.
Maar je hebt altijd wel zoiets van, oké, nou, die aantal kosten zou wel fijn zijn als we die gedecht kunnen zien worden.
Een van de modellen is om dan via bijvoorbeeld een Patreon een petje af voor vrienden van de show.
Zodat de luisteraars eventueel zouden kunnen steunen.
Nou, ik vind niet dat we daarover moeten gaan betelen, want dat vind ik wel een beetje raar.
Maar we zitten erover na te denken om die mogelijkheid aan te bieden.
Zodat mensen gewoon vrijblijvend eventueel de show kunnen, of de show, de podcast kunnen steunen.
Nou, we gaan even kijken hoe dat loopt.
Misschien heeft helemaal niemand zin erin en misschien wel.
We zien wel en we moeten nog even nadenken welke vorm, want er zijn verschillende manieren om dat te doen.
Ze hebben allemaal een voordeel en een nadeel, maar goed, even kijken wat het beste bij ons past.
Mooi is dat ik op de achtergrond mijn kat hoor zeuren wat die wil schijnen.
Die hoor ik ook.
Ik vind het ook altijd heel erg vervelend als mensen in een podcast gaan vragen om steun en elke week weer.
Maar ik snap het heel goed.
Je wilt, ja, het is niet erg om kosten te maken, want het is hartstikke leuk om te doen.
Maar je wilt niet dat je er arm van wordt.
Nou, dat gaat ook niet gebeuren.
Maar ja, ik denk als mensen überhaupt, als ik geld geef aan een podcast, dan is het meer een blijk van waardering.
En dan denk ik niet aan de kosten die ze maken.
Nee, oh zo. Ja, dat klopt.
Dat is misschien ook wel een ding, want ik steun één podcast zelf.
En dat was meer van ja, goed, ik vind het wel leuk.
En ja, het is niet een steunbetaaling, vind ik een beetje raar, maar gewoon.
Duimpje omhoog.
Ja, precies een duimpje omhoog.
Ja, precies wat je zegt.
En dat is wel fijn.
Ja, nou, ze zijn er in een podcast land zijn er stiekem best wel wat ontwikkeling in de laatste tijd.
Iedereen roept natuurlijk podcasts hebben de toekomst en dat zal misschien ook wel zo zijn.
Het was denk ik wel echt wel populairder, want je merkt ook dat in de gewone media steeds meer verwezen wordt naar podcasts.
Dus dat is op zich heel positief.
Wat ik een beetje argwaan bij heb, is dat er een aantal grote partijen zoals Spotify, nu inmiddels ook Sony, Apple,
dat ze ook gewoon een soort van exclusieve contenten gaan maken, dat er een soort van platform specifieke content gaat komen.
Nou goed, dat is nu helemaal zo, daar gaan wij echt niks tegen doen.
Daar kun je gewoon iets van vinden. Maar goed, daar gaat het me nou niet eens om, want podcast is een heel simpel iets.
Het is gewoon een RSS feed in XML met verwijzing naar een audiofaal, meer is het eigenlijk niet.
Nou zo zijn ze begonnen, en er is ook een index ooit door Adam Curry, die kennen we misschien in Nederland wel.
En zijn vriend Dave Weiner, die hebben samen zijn ze dat idee begonnen, en ze hebben ook een index gemaakt,
zodat je daar via die index makkelijk allerlei verschillende podcasts kon vinden.
Nou die index is uiteindelijk door Apple gekocht, ook allemaal nog niet spannend, want in principe deed Apple er nooit heel gekke dingen mee.
Maar dat was en is nog steeds wel de de facto index, zeg maar, die dus eigenlijk de meeste podcast applicatie gebruiken om een podcast te vinden.
Nou Spotify doet dat wel een beetje anders, die proberen dat allemaal op hun eigen platform te krijgen, wat ik vanuit hun begrijp.
Maar inmiddels is Adam Curry ook bezig met het podcast 2.0, dus dan krijg je een nieuw formaat, wat extensies op het RSS-formaat.
Zodat je ook bijvoorbeeld betalingen kunt doen. Dat is wel interessant, dat is niet per se voor ons, maar ik vind het wel interessant.
Dan kun je zeggen, oké, gedurende het luisteren stort je, zeg maar, stream je geld.
Dus dan zijn het bitcoins of lightning en dan is het wel, ja, dat is wel interessant.
Maar dan kun je zien aan de hand van hoeveel geld mensen geven aan een bepaalde aflevering.
Ja, zover komen ze dan in de aflevering of wat vinden ze wel of niet leuk.
En daar ontstaat wel een interessante dynamiek.
Dus daar ben ik stiekem wel een beetje nieuwsgierig naar voor wat er gaat gebeuren.
Ik geloof niet dat wij op korte termijn dat gaan inzetten, maar het is wel interessant om dat een beetje in de gaten te houden en wat daar gaat gebeuren.
Nou goed, dat is even een beetje een side note en wat ontwikkeling in podcastland.
Ik wil er zelf nogal wat dieper in duiken, want mensen die zijn er nog wat mee bezig.
Dus even kijken of we daar überhaupt iets mee moeten.
Maar ook ook de techniek vind ik nog wel interessant, gewoon als nieuwsgierig developer.
Dat is het podcast, de website.
De website hebben we, ja, die is inmiddels een tijdje, de vernieuwde website zit inmiddels een tijdje in de lucht.
Nou, ik vind het op zich oké, functioneel.
Hij is nog wel wat kaal en daar kan nog wel wat, ja, misschien nog wel een likje verf overheen hier en daar.
Nou goed, ik ben niet Mr. Designer, dus het was even even in elkaar gooien zodat de functionele tijd er is.
Maar er ontwreekt ook nog wat content, we kregen van iemand te horen van hey,
jullie hebben geen colofon, about us, zeg maar, pagina.
Dus die moet er eigenlijk nog wel komen, zodat ze ook meer of meer weten van hey, we zijn, dus dat is misschien ook wel handig.
Ja, dat is het, de website heb ik eigenlijk niet te melden.
Qua huishoudelijke, huishoudelijke mededelingen.
Maar laat het maar eens even hebben over de gast, want we hebben dit keer een gast die ervaring heeft met een onderwerp waar ik echt eigenlijk gewoon helemaal geen kaas van heb gegeten.
Of ik heb het een beetje omzeld of verdrongen, ik weet het niet.
Dat is één onderwerp, ander onderwerp weet ik niet, daar hebben we allemaal wel wat kaas van gegeten, dus daar ben ik ook wel in geïnteresseerd.
Maar goed, de gast van vandaag is Wander Hille.
Ja, hallo.
Ik neem aan dat je poggermeren leuk vindt, want het zou weer gek zijn als je niet zou zeggen nee.
Ja, nee, ik voel helemaal schildig natuurlijk, nee, ik vind het echt leuk en ik doe het ook al best wel lang.
Ik heb een pauze gehad, waar ik een beetje heb gezonderd, heb ik vanavond een electrical engineering gedaan.
Oh, cool.
Maar nee, mijn eerste, ja, het ging al heel vroeg mis bij mij, want op mijn zesde kreeg ik boek Windows voor kinderen van Addo Stuur.
Ik weet niet of jullie daar nog uit die generatie komen.
En dan met Sinterklaas later het boek meer Windows voor kinderen.
En eigenlijk het jaar daarna ging het pas helemaal mis, want ik kreeg programmeren voor kinderen op mijn zevende verjaardag.
En dat was met Superlogo.
Ja, met Turtles, dus kan je heel mooi tekeningen maken op het scherm.
En ik had een vliegtuig dat kwam dan van de linker kant van het scherm, kwam naar binnen, maak dan een salto waarbij je ook nog allemaal vormen tekenen.
Vloog weer weg, maar dat vond ik helemaal.
Eindelijk was het meteen verkocht en is eigenlijk nummer goed gekomen.
Nou ja, dat is wel grappig.
Logo ben ik echt vergeten.
Ja, Superlogo noem jij het?
Ja, er zullen misschien varianten van zijn.
Ja, zo heet die taal.
Het kwam heel goed op het scherm als je het op startte.
Maar ja, dat was ook helemaal in het Nederlands vertaald was deze vorm, dat was voor kinderen.
Dus in plaats van dat je functies defineert met Def of Define of Learn of wat dan ook, dan was het zeg maar leer salto en dan zo lang.
Je had zo lang missen en als statement en aan het eind begon.
Was het niet end of zo'n curly bracket slijten, maar dat was ook einde en het was helemaal vertaald in het Nederlands.
Dus het was voor mij, als zeven, sprak ik nog niet zo goed Engels natuurlijk, dus dat was hartstikke mooi.
Ik ken logo alleen, niet de Nederlandstalige variant, maar dat heeft vroeger ooit vast wel eens in zo'n blad gestaan.
Daar moet je het maar aan denken.
Het grappige is dat het heet logo, maar het staat altijd zo'n turtletje in toch?
Ja, het heeft daar ook weer tekenen op het scherm, dus je kan de pen down en dan kun je zeg maar vooruit 100, rechts 90.
Ja, en roteren en dan een beetje en dan.
Dat leg je dan vier keer en dan betekent die een vierkantje.
Ja, dat is leuk.
Dat is heel visueel, je krijgt meteen feedback over wat je het eigenlijk kan doen.
Eigenlijk is dat wel heel goed ja, want dat zei, volgens mij verliezen ook, dat het soms.
Ik kan me niet heel goed herinneren hoe dat zat met foutmeldingen of zo,
maar dat dat in een programmeertal, dat een foutmelding die wij gewoon inmiddels gewoon denken.
Ja, dat is normaal zakt van de wereld, maar die schrikt natuurlijk mensen heel erg af.
En niet iets heel fijn om te lezen.
Fatal error, ja.
Ja, precies.
Staat ook een beetje onduidelijk vaak zo van ja, x not defined.
Ja, maar wat dan waar niet?
En nu dan ja.
Wat voor manier niet?
Dus dat schrikt mensen gewoon af.
Dus en terwijl bij de logo was dat best.
Ja, maar goed, ik kan me niet herinneren.
Dat was heel toegankelijk, zo moet ik het zeggen.
Ja.
Ja, dat was heel goed om mij te leren.
Maar dat ben je er wel zo goed bij geweest.
Ja, dat is even kijken.
Ja, daarna op de middelbare school niet zo heel veel meegedaan.
Ik had ook een lerares informatica en die was eigenlijk lerares Frans en het schat
van de mensen heel erg ter west, maar dat ging gewoon niet zo lekker.
Ik heb gestudeerd, gestudeerd bij de marine wapentechniek op het Kim, dus de officiersacademie.
Ik heb daarna ook een jaar of of negen nog bij de marine gewerkt.
En daar heb ik wel allerlei dingen gedaan, maar naar allerlei missies geweest.
Maar ik heb ook bijvoorbeeld zat ik dat heet dan zo mooi de kennispool en daar zat
ik dan bij ontwikkeling van nieuwe nieuwe radars en Defensie die betaalt heel veel geld aan
TNO elk jaar om nieuwe onderzoek te doen naar nieuwe nieuwe dingen.
En daar worden ook officieren van Defensie bij gezet om gewoon even te kijken of ze
of ze dat wel goed doen.
Oké, daar heb ik dan op onderzoeksniveau niet zoveel af te zeggen.
Maar het is wel de bedoeling dat je weet waar je het over hebt en waar zij het over hebben.
Dus als ze zeggen van nou, we hebben nou 10 miljoen extra nodig om te gaan doen,
dat je kan zeggen van volgens mij hebben de Franse onderzoek naar gedaan en kan je niet gewoon hun resultaten gebruiken.
Ja, precies.
Dus dat bestond misschien voornamelijk uit literatuur, onderzoek of vergelijken of?
Ja, literatuur, onderzoek, maar ook ja, je bent gewoon veel in contact met die mensen
en ook met je counterparts van andere Nafarlanden om te overleggen waar je het over hebt.
Want een marine radar, dat is eigenlijk voor heel veel landen toch een beetje hetzelfde.
Ja, en het doet ongeveer hetzelfde, zit in ongeveer dezelfde omgeving, moet hij werken.
Hij heeft ongeveer dezelfde veilen, want als Nafarlanden zijn er gewoon een paar verwachte dingen waar je naar wil kijken.
Dat zijn Russische gewestvliegen en Chinese friketen en dat is het wel, zeg maar.
Dus als je dat dan met z'n allen kan doen, het zijn ook dingen dat je bijvoorbeeld met de Engels overlegt
van nou jullie doen dit stuk en wij doen dat stuk en aan het einde gaan we dat uitwisselen.
Dus leuke banen, radar zijn leuke dingen.
Ja, maar geen programmeerwerk?
Nee, dat moest ik aan de TNO's overlaten.
Dus op een gegeven moment heb ik ook weer weggegaan bij de marine omdat ik me toch weer dichter bij de techniek wilde houden.
Dan dat waar mijn carrière daar naartoe ging.
Dus nou heb ik je steeds verder weggekomen van de techniek.
Maar van jammer, dat vind ik wel heel leuk.
Ja, en wat gebeurde er toen?
Even kijken, nou dat was in 2015 ofzo.
Toen ben ik op een gegeven moment weggegaan bij de marine.
Ben ik aan het werk gegaan bij Oeutransfer, een avalisering start-up in Nederland, gewoon in Amsterdam.
En ook hoe dat gebeurde was eigenlijk heel leuk, want ik ging weg bij de marine.
Dus er is heel veel van embedded systems en de vermogensversterkers, allemaal heel low level.
En ik had zoiets, als ik aan de slag wil bij een hippe start-up, dan zal ik toch op z'n mis beter moeten weten hoe zo'n H2P-request werkt.
Want de web is helemaal hip.
Dus ik dacht, ik ga voor mezelf een website maken.
Dus de allereerste probeers dat je was uit de H2P-pagina of de HTML-pagina, dat ging eigenlijk goed.
Dus toen dacht ik, dat is leuk, maar dit was wel echt gewoon hello world, maar dan voor de web-pagina.
Wat is mijn volgende project?
Dus ik keek een beetje omheen en toen dacht ik, weet je dat Utransfer?
Vaals uploaden, downloaden, dat is toch wel een beetje een opgelost probleem, zou je zeggen.
Dus dit is een mooi tussenprojectje.
Het is niet zo groot en moeilijk als Facebook klonen, maar het is ook niet helemaal een basis ding.
Dus ik dacht, nou, dan ga ik dat proberen zelf te maken.
En zo gezegd, zo gedaan, dus vol goede moed ging ik aan de slag en ik was daar een week of zo mee bezig.
Ik had een paar weken vrij.
En wat er toen gebeurde was dat een vriend van mij, die zei van, hey Wanner, op de lokale Ruby Meetup,
daar gaat iemand van Utransfer die heeft gesproken en die heeft zijn prestatie online gezet.
Van, is dat niet leuk om naar te kijken?
Dus ik dacht, nou ja, dat zou leuk zijn.
En dat was een jongen die heet Julik, die werkte samen met Arno, die hier ook op podcast is geweest.
En mij hebben we veel samen gewerkt.
En die zei van, dit zijn allemaal interessante problemen, want inderdaad files up en download is niet zo'n probleem.
Maar als je er miljoen tegelijkertijd up en download in Utransfer doet,
dan wordt het al een stuk lastiger natuurlijk.
En wat, hij had een aantal van die problemen die daar waren en zei van, deze die hebben we opgelost en deze die zijn nog steeds lastig.
En ik keek zo naar die, mijn prestatie, dat is zo lastig toch niet?
Dus ik zou tip, tip, tip op mijn eigen klantje, had ik dat een soort van semi opgelost.
En ik stuur een mailtje van, waarom doen jullie het niet zo eigenlijk?
Want dat moet toch te doen zijn.
En zei van, ja, kreeg ik een mailtje terug? Ja, dat is wel zo.
Maar wat ik niet in de prestatie heb gezegd, is dat er ook nog deze en deze en deze constraint zijn.
En dus ik heb zo een beetje heen en weer gemailed, leuke gesprek gehad.
En ja, dat is toen een beetje uitgefizzeld, maar toen ze een paar maanden later vacature hadden,
kreeg die van zich van vier kanten tegelijkertijd opgestuurd.
Ja, long story short, daar heb ik ook drie maanden gewerkt, of drie jaar gewerkt, moet ik zeggen.
Ja, en daar ben ik nu net een half jaartje weg.
En daar zijn we nu.
Even iets in mijn wervel in het wind.
Ja, dat is wel een interessante carrière.
Ik zag dat je nu zeg maar een tijd, je bent nu een half jaar.
Doe je eventjes niks? Of hoe zeg je, een sabbatical heb je genomen?
Ja, ik ben een beetje een sabbatical aan het houden.
Ik werk wat aan alpe-source dingen die ik leuk vind.
Ik ben in tussentijd getrouwd en daar wou ik ook de tijd voor nemen.
Ja, en langzamer zeker ben ik een beetje aan het freelancen.
Er zijn mensen die mij geld willen geven om mooie dingen voor me te maken.
Dus dat kan ook geen kwaad.
Altijd mooi, ja.
Oké, cool.
Goed, het eerste onderwerp, want ik gaf het een beetje een introductie al aan.
Ik heb ooit misschien een paar regels geschreven.
Trouwens, ik kan het wel moeilijk doen, maar het is Haskell.
Het is een beetje een interessant taal.
Het is bijna...
Ja, goed, voor mij is het een beetje ver van mijn bed.
Het wordt een beetje meaty.
Heel veel mensen zijn er super enthousiast over.
Ik kent niet heel veel mensen die Haskell programmeren.
Maar de mensen die het programmeren, die hebben zoiets van,
ja, je moet echt eens een keer naar kijken, want het is heel mooi en tof.
Oké, nou, het valt wel, want ja, ik heb geen tijd.
Dus ik doe er even niks mee.
Dus ik heb het altijd een beetje opzeld of zo.
Ik heb er nooit echt een reden voor gehad om er echt helemaal in te duiken.
Maar ja, jij programmeert ook in Haskell, heb ik begrepen.
Of heb je geprogrammeerd in Haskell?
Beide.
Ik heb het gedaan vroeger en ik doe het nog steeds.
Met veel plezier ook.
Een van de dingen wat ik net zei dat ik aan open source een bijdrage ben,
is de compiler van Haskell.
Dus wat een beetje de oorsprong is van die taal is,
in de jaren 70, 80 waren er een heleboel kleinere taaltjes.
Elke universiteit had zijn eigen dialect.
Op een gegeven moment zijn ze bij elkaar gaan zitten.
En hebben gezegd, wat zijn nou de beste elementen van elk dialect?
En dat heb je samengevoegd tot één oertaal en dat is Haskell geworden.
En wat ik daar zo leuk aan vind, is het past heel goed bij...
Kijk, wat ik zei, bij mijn studie bij de marine heb ik heel veel wiskunde gehad,
heel veel elektronica.
En de manier waarop je dat uitdrukt, de vergelijking waarin je dat opschrijft,
dat gaat op een gegeven moment ook een beetje beïnvloeden over hoe je denkt.
Dus vaak als ik een programma zie, dan kijk ik niet zozeer naar de structuur ofzo.
Waar ik voornamelijk naar kijk, is hoe stroomt de code, zeg maar.
Ik weet niet, ik vind het heel lastig om dit in woorden te noemen.
Ja precies, je hebt de data, die gaat hierheen, die wordt veranderd in iets anders.
Die wordt misschien samengevoegd.
En uiteindelijk komt daar een resultaat uit.
En Haskell past gewoon heel goed bij die manier van denken over je programma.
En dat bevalt mij heel erg.
Wat overigens niet wil zeggen dat ik graag alles in Haskell zou willen doen.
Maar wat zijn dan volgens jou een beetje de eigenschappen van Haskell
die het jou mogelijk maken om op die manier na te denken?
Nou, het is eigenlijk met elke vorm van functioneel programmeren.
Daar is het heel erg op gericht.
En je beschrijft niet wat je wil dat de computer doet.
Je beschrijft wat je wil dat die voor je berekent.
Dus als je zegt, ja, doe is een voorbeeld.
Ik wil graag de sum van al deze getallen.
Dan maakt het me helemaal niet uit of je daar ondertussen een extra variabele...
Dus je wil de sum van een lijstwachtel.
Dan maakt het me helemaal niet uit of je een extra variabele aanmaakt
en ze daar allemaal bij optelt.
Of dat die ze allemaal in parallel bij elkaar optelt in blokken van 2 en dan van 4 en dan van 8.
Of dat die nog andere dingen doet, dat vind ik eigenlijk niet zo belangrijk.
Ik wil dat die computer dat voor mij bepaalt.
Ik wil alleen kunnen zeggen, nou, wat ik wil hier is de sum van al die getallen.
Juist die focus op wat je eigenlijk wil bereiken in plaats van hoe je het wilt bereiken.
Dat is iets wat ik in veel andere programmeertalen van minder zie.
Het is ook een beetje gegeven.
Kijk, bijvoorbeeld als ik een website maak, dan doe ik dat veel liever in Ruby.
Want een backend, een API ofzo, dat laat zich veel beter uitdrukken.
En nu ga je iets ophalen uit de database.
En om deze 500 redenen kan je allemaal HTTP errorcodes genereren of exceptions maken.
En dat soort hele branchy dingen, dat is Haskell iets minder fijn in.
Maar als je een wiskundige berekening wilt uitdrukken,
dan doe je dat veel liever in Haskell dan in Ruby.
Omdat die taal die is daar gewoon meer op gericht.
Oké, en heb je het ook op je werken gebruikt?
En wat voor soort problemen had je dan mee te maken?
Nou, één ding wat ik heb gemaakt, dat was op een gegeven moment hadden we een soort van...
Nou, moet je dat zeggen.
We hadden een microservice die dan hashes moest opzoeken in een grote lijst.
Een soort blacklist met hashes.
Maar dat waren niet gewoon normale hashes zoals je in een HashMap stopt.
Maar dat waren zogeheten contextual hashes.
En dat kwam uit.
Dat was een hele ingewikkelde vectorberekening.
144 dimensionale vectors.
En dan moest je daar een soort van multidimensionale bol om heen tekenen.
Als er andere punten in die bol zaten dan was het een match.
Dat was typisch zoiets wat je dus in tekst niet zo heel goed kan uitleggen.
In Ruby zou dat ook...
Het is een beetje een gedoe. In Haskell is het een one-liner.
En je hebt daar ook mooie tree-based algoritmes voor.
Waar dus een heleboel onderzoekers in Haskell al heel veel tijd in hebben gestopt.
En waar de Ruby-gemeenschap meestal wat minder enthousiast over wordt.
Omdat die zich meer richt op normale web-dingen.
Oké, cool dat het zo makkelijk is.
Ik heb ooit iets met Haskell gedaan omdat ik iets meer van wilde weten.
En ik merkte zelf dat, nadat ik dingen in Haskell had geprobeerd,
dat je een aantal leerpunten ook meeneemt naar de Ruby-omgeving.
Vastregels als no-side-effects, die vond ik heel lekker.
En daar lette ik naderhand toch meer op.
Heb jij dat ook? Of zijn er meer van dat soort dingen?
Ja, dat is heel erg.
Er zijn inderdaad no-side-effects, immutability is er zo eentje.
Type classes zoals je ziet in Rust bijvoorbeeld.
Dat is er ook eentje die ik echt heb geleerd.
En Haskell eigenlijk nooit meer niet zie.
Zelfs als ik in een andere taal aan het programmeren ben.
En dat helpt me ook wel om sommige dingen te analyseren.
Ik had een tijdje geleden een junior die ik mocht mentoren.
En ik vroeg hem wat voor ding komt er uit deze functie?
Wat returnt die?
En zegt hij, ja, dat is een getal.
Wat voor getal dan?
Hij had nog niet een heel goed model in zijn hoofd van
wat voor type dingen er uit die functie kwamen.
In dit geval was het dan of een float of een nil.
En omdat hij dat niet zo goed in zijn hoofd had,
was het ook heel lastig om die functie in te bouwen in de rest van het programma.
Omdat hij ook niet in zijn hoofd had wat de rest van het programma verwacht.
Want als die verwacht of een float of een nil of een string,
dan is het al heel iets anders dan wat er uit die functie kan komen.
En zo krijg je steeds meer verwarring omdat dat niet duidelijk is.
Wat ik ook leuk vind is dat het helemaal niet nodig is om overal Haskell te schrijven.
Sommige mensen beschuldigen me weleens van ja,
want jij wilt gewoon eigenlijk alleen maar Haskell schrijven in elke baan.
En dat is helemaal niet waar.
Ik wil graag de goede delen van Haskell, die zou ik graag willen overnemen.
En het mooie is dat dat al gebeurt.
Dus Ruby is met alle blocks en proxen en lanta's die je daar tegenkomt,
heeft al superveel functionele programmerdingen.
En in heel veel talen zie je dat steeds meer terugkomen.
En wat ik mooi vind is dat, en dat komt ook uit die oorsprong waar ik het al over had,
dat het komt als een soort van onderzoektal.
Het is ook heel makkelijk uit te breiden door onderzoekers.
En je ziet dat er gewoon een heleboel rare experimenten in zitten.
Sommigen waren een heel groot succes, sommigen niet.
Dat kan gebeuren. Maar het is een onderzoektal.
Dus het is prima dat daar dingen niet lukken.
En je ziet dat heel veel functies in moderne programmaatalen,
dat die min of meer direct zijn overgenomen van Haskell,
omdat ze gewoon een heel goed idee waren.
Dus dan kan je bijvoorbeeld denken, list comprehensions in Python,
of type classes in Rust, of eigenlijk zelfs de Go-routines van Go.
Dat model, daar is heel veel ervaring op gedaan in Haskell.
Want je hebt precies dezelfde soort green threads die dan heel lightweight zijn.
En dat vind ik leuk, dat daar eigenlijk gewoon de goede ideeën worden overgenomen
en de slechte raad het.
Dat is leuk. Iemand heeft z'n PSD mee gehaald,
maar we gaan verder niks meer meer doen.
Even even kijken, want Haskell is al in pose.
Je zei ook net van oké, je zou eerder
een web applicatie maken in Ruby dan met Haskell.
Dat zal vast iemand gedaan hebben.
Dat is trouwens ook een vraag van een collega van mij.
Die had ik vandaag gesproken.
Die heb ik wel vaker aangehaald in de podcast.
Maar goed, die heeft mij ook meerdere keer gezegd,
je moet eens een keer Haskell doen.
Blijkbaar heb je een site, daar kun je allerlei opdrachten doen met Haskell.
Die kun je dan oplossen.
Ja. Maar goed, daar is het gewoon niet van gekomen.
Maar hij vroeg me over, anders moet je vragen
of er webdevelopment gedaan wordt met Haskell.
Maar is dat er ook, zeg maar, of is het meer van oké,
blijft het nog steeds bij dat met meer wiskundigen?
Het hangt er een beetje vanaf.
Kijk, sowieso, het kan allemaal wel.
Ja, er zijn gewoon libraries.
En de eerste laatste, een paar maanden geleden,
heeft een Duits bedrijf, dat heeft dan een framework gelanceerd,
dat heet IAP, en dat probeert een beetje de rails van de Haskell wereld te worden.
Ja, kijk, HTML genereren, dat is op zich goed te doen.
En er zijn allemaal libraries.
Aan de andere kant zijn ze vaak niet zo super gepolist
zoals een rails of een Django of zoiets.
Maar er zijn wel bedrijven.
Dus als groot voorbeeld is Facebook spamfiltering,
dat kwijt allemaal op Haskell.
Er is bijvoorbeeld in Utrecht zit een bedrijfje,
er zit een aantal Haskell bedrijfjes zelfs.
Er is er eentje die doet met machine learning,
maken ze automatisch chords, hoe zeg je dat,
noten en bladmuziek.
Bladmuziek is een lastwoord.
Dus die geef je een stuk muziek,
en dan generereert die daar automatisch bladmuziek uit.
Dat is op zich een website.
Je moet je muziek, ja, je liedje uploaden via webpagina,
maar dat wordt dan later automatisch door de machine learning heen getrokken.
En dat is allemaal in Haskell.
Zo zijn er nog wat meer dingen die dan net niet helemaal
een crud-app zoals dat zo mooi heet,
maar die wat meer involved processing erachter hebben,
dat is er zeer goed geschikt voor.
Oké, cool. Maar wat je ook de mogelijkheid,
de microservices zijn ontstaan, of ze zijn niet ontstaan,
die zijn er misschien alweer al een tijdje,
maar je kan zo een oplossing,
ik moet nou zeggen een applicatie of een landschap,
dus stel dat je nou een oplossing moet maken,
dan zou het dus wel kunnen zijn dat je een deel van die applicatie met Haskell zou schrijven
en dat dat ineen microservices weggestopt wordt.
En de rest met Ruby.
Zie je dat ook weleens gebeuren of is dat spoorradies komt dat voor?
Ja, je vraagt het aan mij alsof ik soort van de guru ben op het gebied van...
Nee, nee, nee.
Ik zie wel dat inderdaad dat je dat soort van microservices in meerdere talen
die dan beter geschikt zijn, dat zie ik wel redelijk regelmatig.
Omdat Ruby en Python of Node.js ofzo, dat zijn vaak talen die dan niet...
Dat zijn interpreted languages natuurlijk,
dus als je daar echt zware nummer crunching mee wilt doen,
dan kan je beter iets gecompileerds gebruiken.
Dat hebben we bij Wytransfer ook weleens gedaan,
bijvoorbeeld dat we in Crystal, als je die taal kent,
dat is een soort gecompileerde Ruby,
die één superzware endpoint, die hebben we daarin herschreven
omdat het gewoon niet te doen was in Ruby.
Dat was echt een drama.
En dat ging letterlijk honderd keer sneller in Crystal.
Dat is gewoon de moeite waard.
Maar voor de meeste dingen, zeker in het webwereld,
dan is Ruby gewoon snel genoeg.
Of je webpagina nou gerenderd wordt in één of twee milliseconden,
dat is leuk, maar de ping van mensen die zoveel hoger,
dat merken ze niet eens.
Nee, oh zo, ja.
Het is een relatieve snelheid, want die...
De randtrip, dat is toch al honderd miliseconden.
Ja, microseconden zou ik wel willen.
Microseconden zou wel tof zijn.
Ja, precies.
Maar er is toch ergens iets met natuurkundige wetten en zo.
Nou, dat gaat gewoon niet.
Misschien verzinnen we daar ook nog wel iets op.
Maar goed, dat is eigenlijk de familie, de functionele talen.
Wat nu veel gebeurt, is dat het...
Ja, goed, er is een hele post geweest,
bijvoorbeeld Java, C++, dat is allemaal de objectorienteerde talen.
We merken ook wel dat er een aantal beloften die daar in de oog gemaakt werden,
die zijn niet helemaal waargemaakt.
Ook in C-Shop, dus de taal waar je tot net meestal informeert,
daar komen ook steeds meer functionele aspecten daar terug.
Dat is wel iets...
Dus better matching.
Er zijn een aantal van dat soort zaken die zie je dan weer in C-Shop komen.
Dan zijn er al weer mensen die zeggen van ja, maar hallo.
Ja, dan laat je bepaalde concepten los, zeg maar, of...
Ik ben er niet zo heel strikt in.
Maar ik vind het wel grappig dat er die zaken overgenomen worden.
Want op een tot net platform heb je dan F-sharp als de functionele taal.
En dan worden er soms dingen overgenomen.
Soms ook wel dingen van C-sharp naar F-sharp, maar meestal andersom.
Dus dat is wel een beweging die je wel de laatste tijd wel ziet.
Ook op het Java-platform is dat met...
Nu moet ik even uitkijken wat ik zeg, maar Scala.
Oeh, dat zou ook...
Scala?
Ja, dat Scala ook daar vandaan kwam.
Ja, toch?
Ja, Scala is een grote inspiratiebron voor Elixir.
En volgens mij is Elixir ook functioneel.
Dat is eerlijk, ja.
Ja, eerlijk, ja.
Wat precies functioneel is dat er een paar mensen...


