God morgon
Gomorron!
đ
Gomorron đ€
Hade ju velat gĂ„ pĂ„ Func Prog-grejen, sĂ„klart. Ni som var dĂ€r, vet vi om nĂ„t kommer ut efterĂ„t? NĂ„gra höjdpunkter ni var med om? đ
Ja, bĂ„de FP och OOP Ă€r ju vĂ€ldigt olika. Alan Kay skulle nog motsĂ€tta sig Java som objekt-orienterat, t.ex. Det finns ju en del âgrundpelareâ i bĂ€gge paradigmerna â det Ă€r svĂ„rt att sĂ€ga att ett sprĂ„k Ă€r FP utan âförsta ordningens funktionerâ, t.ex. Men nu för tiden kvalar ju i princip alla moderna sprĂ„k in i den kategorin. Egentligen Ă€r kanske den riktiga vattendelaren hur man ser pĂ„ ett âprogramâ - Ă€r det instruktioner till en maskin, eller Ă€r det ett matematiskt uttryck?
Ăr inte OOP fundamentalt ett paradigm dĂ€r logiken implementeras i form av inkapslad mutable state (ursĂ€kta svengelskan) med (det ytterst missförstĂ„dda) syftet att försöka simulera verkligheten (som ju inte alls Ă€r mutable)? Ett objekt utan mutable state Ă€r ju vĂ€ldigt funktionellt (Ă„tminstone om man kan lita pĂ„ den dĂ€r Qc Na filuren)!
Jag instÀmmer med @pez att det var mycket bra! Jag tyckte ett den första presentationen (om effektsystem) och den tredje presentationen (om STM-monaden) var bra ocksÄ och relaterade till varandra: bÄda handlade om hur man kan representera algoritmiska byggstenar i ett program som vÀrden och utföra operationer pÄ dem. Andra exempel pÄ detta Àr sÄ kallade "lenses" för att representera setters/getters som vÀrden samt transducers i Clojure för att representera algoritmer pÄ sekvenser som vÀrden.
De verkar ha nĂ„gra steg kvar till att tĂ€nka âsom dataâ i Scala-vĂ€rlden. Men âsom vĂ€rdenâ Ă€r ett fint steg pĂ„ vĂ€gen. đ
OcksĂ„ lite intressant att STM ofta verkar vara overkill i Clojure-vĂ€rlden, men viktigt för âthe storytellingâ som RH sĂ€ger 20:25 in i sin genomgĂ„ng av Clojures historia: https://www.pldi21.org/prerecorded_hopl.11.html
En annan intressant grej Ă€r att mĂ„nga verkar göra nĂ„got slags likhetstecken mellan stark typning och FP. I STM-föredraget lĂ€t det som att âSTMâ Ă€r möjligt eftersom Haskellâs starka typsystem. T ex.
Och mycket snack om monader! Mest att man borde sluta prata om dem, men de kunde inte lÄta bli. Jag ba: vad fan Àr monader för nÄt? Men möjligen Àr jag inte en funktionell programmerare.
Inget av detta överskuggar att konferensen bara var bÀst. Det var mest kul att fÄ lite inblick i vad som surrar i skallen pÄ funkisar frÄn andra sprÄk Àn Clojure.
LĂ„ter superhĂ€ftigt. Det fick mig ocksĂ„ att lyssna pĂ„ Func Prog-podden. HĂ„ller helt med, andra sprĂ„k bara ökar ens⊠tja. Vishet. đ Med tanke pĂ„ vilken enkel konstruktion en monad Ă€r, sĂ„ Ă€r folks vilja att anvĂ€nda namnet rĂ€tt bisarr. Det finns sĂ€kert ett ovanligt namn för âlistaâ ocksĂ„, men varför⊠men men. đ
Precis, alla presentationer kommer dyka upp pÄ YouTube hÀr: https://youtube.com/@funcprogsweden?si=dYEwVB5wq8snOF1V
Jag kÀnner att det vore kul att lÀra sig vad monader Àr Àven om jag har tvivel gÀllande deras nytta i det dagliga arbetet. Jag har ocksÄ noterat som du PEZ att det verkar vara rÀtt vanligt att blanda ihop statisk typning med funktionell programmering. Men alla talare hade riktigt bra flyt och var verkligen pedagogiska!
Egentligen Ă€r en monad bara en typ M dĂ€r det finns en funktion (a -> b) -> M a -> M b (brukar kallas âbindâ eller âflatMapâ).
Det lĂ„ter ju lite luddigt, men om man kisar sĂ„ kan man se att det handlar om att âkedjaâ ihop berĂ€kningar. Har man t.ex anvĂ€nt promises har man anvĂ€nt monader (typ)! Promise.then Ă€r en âbindâ, eftersom den tar en Promise<a> samt en funktion a -> Promise<b> och ger en Promise<b>
Monader Ă€r anvĂ€ndbara eftersom de Ă€r en abstraktion som rymmer en massa olika saker (felhantering, option chaining, etc) â precis som att transducers Ă€r en abstraktion ovanpĂ„ olika sorters iteration och aggregering
Ok. Nu mĂ„ste jag ta upp ett favorit-irritationsmoment, och sĂ„ fĂ„r alla vara lugna. Jag menar det med all respekt, och Ă€r nyfiken pĂ„ era Ă„sikter i frĂ„gan. SĂ„hĂ€r - det hĂ€r med begreppen âfunktionell programmeringâ och OOP⊠hur exakta Ă€r de egentligen? NĂ€r ni hör nĂ„gon sĂ€ga nĂ„t av dem, och argumentera för eller emot⊠vet ni dĂ„ exakt vad som avses?
Jag tycker att mĂ„nga, mĂ„nga (kanske samtliga) diskussioner och intervjuer jag hör faller platt. Man kan liksom inte sĂ€ga âhöhö, Java OOPâ och tro att det innehĂ„ller nĂ„gon information.
Och inte heller âhah, vi har ju map istĂ€llet för for-looparâ och tro att nĂ„n vuxen mĂ€nniska tar det som ett argument för nĂ„nting.
Jag Àr super-intresserad av riktiga analyser och resonemang om riktiga fördelar och nackdelar, men det Àr sÄ sÀllan. Och det Àr synd.
FP vs OOP har samma problem som statisk vs dynamisk typning, det blir ofta pajkastning. Men den senare Ă€r ju en snĂ€vare diskussion sĂ„ iaf lite oftare blir det konkret. Men Ă€ven dĂ€r Ă€r det ofta argumentet Ă€r (t ex, för mer typning) âmer kontroll Ă€r bĂ€ttre, dohâ och inget mer. Det Ă€r liksom inte övertygande đ
Presentationerna spelades in sĂ„ du har tre sjukt grymma förelĂ€sningar att se fram emot. Alla tre var höjdpunkter, men om jag tvingas vĂ€lja nĂ„gon blir det presentationen om Gleam, av sjĂ€lvaste Giacomo Cavalieri, frĂ„n Gleamâs core team. Jag blev helt tagen och betagen av sĂ„vĂ€l Gleam som Giacomo. Lyckades fĂ„ en selfie med honom. Kommer bli nĂ„got att skryta om nĂ€r Gleam Ă€r vĂ€rldens största programmeringssprĂ„k.
Skrev lite om upplevelsen pÄ linkan: https://www.linkedin.com/feed/update/urn:li:activity:7384520724914257920/
Kul! Det var ditt inlĂ€gg pĂ„ LI som fick mig att tĂ€nka pĂ„ att frĂ„ga đ Kul som tusan att det kommer ut!
Inget snack om AI alls. VÀldigt uppfriskande! Jag har ju inget emot AI, och snackar gÀrna om det, men det finns sÄ mycket kvar av diskussionen om programmering som det pratas för lite om i dessa dagar.