SlideShare a Scribd company logo
1 of 70
Tillståndslös
programmering


 Erlang skådat från en överlöpare
     Måns Sandström, Adaptiv
My future is so bright
I got to wear shades...
“Man behöver tänka i timmar utan att kunna skriva en
rad, men när man sedan löser problemet vet man att
man gjort det på rätt sätt.”
                                - Anonym kollega
Be rational!             Get real!



          i                       π
If you understand the joke, I have bad news for you...



       Math Geek
TDD - omöjligt!
Före   Efter
Huh!?
Men är det svårare än OO?
“Absolut!”   -Anonyma kollegor
~50 designmönster             Null
    Trådsäkerhet
                             SOLID-principerna
                DDD


             OO i ett nöt...
Datastrukturer och beteende i ett

              Arv - använd bara för klasser utan tillstånd

                      BDD
~10 designmönster (5 från OO-världen)
                         Rekursion och svansrekursion
 Immuterbart tillstånd        Monader

             FP i ett nöt...
                                     Ackumulatorer
Datastrukturer separerade från beteende

     Högre ordningens funktioner
Onaturligt designtänk!
Svårt att representera en
       verksamhet.



       Få designval, idiomen styr.
Be rational!             Get real!



          i                       π
If you understand the joke, I have bad news for you...



       Math Geek
X=X+1
Vadårå!?




X=X+1
Vadårå!?
           Omöjligt!!!




X=X+1
X2 = X + 1
:D




X2 = X + 1
:D
         Behövs
      vanligtvis inte.




X2 = X + 1
TDD?
Dependency injection
Testalgoritm för
     rekursiv lösning



1. Avslutningsvillkor
2. Ankomma till avslutningsvillkoret
3. Startläge
Testalgoritm för
        rekursiv lösning
Cool! Funkar nog för
      mig med

  1. Avslutningsvillkor
  2. Ankomma till avslutningsvillkoret
  3. Startläge
Testalgoritm för
        rekursiv lösning
Cool! Funkar nog för
      mig med
                          Öhh, ja.

  1. Avslutningsvillkor
  2. Ankomma till avslutningsvillkoret
  3. Startläge
Cloudberry
Title (one line describing the story)
 
Narrative:
As a [role]
I want [feature]
So that [benefit]
 
Acceptance Criteria: (presented as Scenarios)
 
Scenario 1: Title
Given [context]
  And [some more context]...
When  [event]
Then  [outcome]
  And [another outcome]...
Title (one line describing the story)
 
Narrative:
As a [role]
I want [feature]
So that [benefit]
 
Acceptance Criteria: (presented as Scenarios)
 
Scenario 1: Title
Given [context]
  And [some more context]...
When  [event]
Then  [outcome]
  And [another outcome]...
Given
Hoho!
Given-When-Then är ett
sidoeffektsorienterat sätt att
   utveckla programvara.
Det var han som
    började!
Dessutom finns det
sidoeffekter i Erlang
(
Monader...
me: Ok, jag tänker förklara monader på
  DevLin.:)
  Alla IT-konferenser med självaktining har
  någon som förklarar monader.
  Jag tar gärna på mig den dumstruten.

Niklas: :D nice
  "de är typ shell pipes". klart. ;)




                 -Saxat ur chat med Niklas Lindström
me: om jag skulle säga att en monad är en
  process som kan ackumulera state för att
  sedan exekvera en funktion när lämpligt
  state uppnåtts. Skulle du fortfarande
  säga att du känner mig då? 




              -Saxat ur chat med Niklas Lindström
)
Därför finns inga nyckelord i
        Cloudberry
Vilket också gör den
 oberoende av i18n
Then = When(Given)
git://github.com/msa/cloudberry.git
?
?
√
?
√
?
× √
  ?
× √
  ?
× √
× ?
× √
 TDD omöjligt!




× ?
× √
 ×
 TDD omöjligt!




× ?
Tack!
Måns Sandström

More Related Content

Viewers also liked

Effektiv kunskapsspridning samarbete och konsten att odla ett sympatiskt arbe...
Effektiv kunskapsspridning samarbete och konsten att odla ett sympatiskt arbe...Effektiv kunskapsspridning samarbete och konsten att odla ett sympatiskt arbe...
Effektiv kunskapsspridning samarbete och konsten att odla ett sympatiskt arbe...manssandstrom
 
En lättviktsmodell för gradering av agila team och organisationer - Thomas Lu...
En lättviktsmodell för gradering av agila team och organisationer - Thomas Lu...En lättviktsmodell för gradering av agila team och organisationer - Thomas Lu...
En lättviktsmodell för gradering av agila team och organisationer - Thomas Lu...manssandstrom
 
Selenium ett enkelt verktyg för att testa din webbapplikation - Thomas Sundberg
Selenium ett enkelt verktyg för att testa din webbapplikation - Thomas SundbergSelenium ett enkelt verktyg för att testa din webbapplikation - Thomas Sundberg
Selenium ett enkelt verktyg för att testa din webbapplikation - Thomas Sundbergmanssandstrom
 
Dyra utbytbara människor - Joakim Ohlrogge
Dyra utbytbara människor - Joakim OhlroggeDyra utbytbara människor - Joakim Ohlrogge
Dyra utbytbara människor - Joakim Ohlroggemanssandstrom
 
Parprogrammering bra i alla lägen? - Niklas Lindholm
Parprogrammering bra i alla lägen? - Niklas LindholmParprogrammering bra i alla lägen? - Niklas Lindholm
Parprogrammering bra i alla lägen? - Niklas Lindholmmanssandstrom
 
Vem har ansvar för hastigheten - Thomas Nilsson
Vem har ansvar för hastigheten - Thomas NilssonVem har ansvar för hastigheten - Thomas Nilsson
Vem har ansvar för hastigheten - Thomas Nilssonmanssandstrom
 
Agil porteføljestyring - Christian Hauknes
Agil porteføljestyring - Christian HauknesAgil porteføljestyring - Christian Hauknes
Agil porteføljestyring - Christian Hauknesmanssandstrom
 
Scrum och Kanban samtidigt - Anna Herting
Scrum och Kanban samtidigt - Anna HertingScrum och Kanban samtidigt - Anna Herting
Scrum och Kanban samtidigt - Anna Hertingmanssandstrom
 

Viewers also liked (8)

Effektiv kunskapsspridning samarbete och konsten att odla ett sympatiskt arbe...
Effektiv kunskapsspridning samarbete och konsten att odla ett sympatiskt arbe...Effektiv kunskapsspridning samarbete och konsten att odla ett sympatiskt arbe...
Effektiv kunskapsspridning samarbete och konsten att odla ett sympatiskt arbe...
 
En lättviktsmodell för gradering av agila team och organisationer - Thomas Lu...
En lättviktsmodell för gradering av agila team och organisationer - Thomas Lu...En lättviktsmodell för gradering av agila team och organisationer - Thomas Lu...
En lättviktsmodell för gradering av agila team och organisationer - Thomas Lu...
 
Selenium ett enkelt verktyg för att testa din webbapplikation - Thomas Sundberg
Selenium ett enkelt verktyg för att testa din webbapplikation - Thomas SundbergSelenium ett enkelt verktyg för att testa din webbapplikation - Thomas Sundberg
Selenium ett enkelt verktyg för att testa din webbapplikation - Thomas Sundberg
 
Dyra utbytbara människor - Joakim Ohlrogge
Dyra utbytbara människor - Joakim OhlroggeDyra utbytbara människor - Joakim Ohlrogge
Dyra utbytbara människor - Joakim Ohlrogge
 
Parprogrammering bra i alla lägen? - Niklas Lindholm
Parprogrammering bra i alla lägen? - Niklas LindholmParprogrammering bra i alla lägen? - Niklas Lindholm
Parprogrammering bra i alla lägen? - Niklas Lindholm
 
Vem har ansvar för hastigheten - Thomas Nilsson
Vem har ansvar för hastigheten - Thomas NilssonVem har ansvar för hastigheten - Thomas Nilsson
Vem har ansvar för hastigheten - Thomas Nilsson
 
Agil porteføljestyring - Christian Hauknes
Agil porteføljestyring - Christian HauknesAgil porteføljestyring - Christian Hauknes
Agil porteføljestyring - Christian Hauknes
 
Scrum och Kanban samtidigt - Anna Herting
Scrum och Kanban samtidigt - Anna HertingScrum och Kanban samtidigt - Anna Herting
Scrum och Kanban samtidigt - Anna Herting
 

More from manssandstrom

Systemtänkande DevLin 2011
Systemtänkande DevLin 2011Systemtänkande DevLin 2011
Systemtänkande DevLin 2011manssandstrom
 
Agile och Kanban på driftavdelningen - Tomas Bjorkholm
Agile och Kanban på driftavdelningen - Tomas BjorkholmAgile och Kanban på driftavdelningen - Tomas Bjorkholm
Agile och Kanban på driftavdelningen - Tomas Bjorkholmmanssandstrom
 
Skala scrum med visuell planering från lean - Daniel Berg
Skala scrum med visuell planering från lean - Daniel BergSkala scrum med visuell planering från lean - Daniel Berg
Skala scrum med visuell planering från lean - Daniel Bergmanssandstrom
 
Användaren smidig lättrorlig och vig? - Mattias Persson
Användaren smidig lättrorlig och vig? - Mattias PerssonAnvändaren smidig lättrorlig och vig? - Mattias Persson
Användaren smidig lättrorlig och vig? - Mattias Perssonmanssandstrom
 
Spelregler för självorganiserande team - Tomas Lundborg
Spelregler för självorganiserande team - Tomas LundborgSpelregler för självorganiserande team - Tomas Lundborg
Spelregler för självorganiserande team - Tomas Lundborgmanssandstrom
 
Den empiriska processen - Daniel Brolund
Den empiriska processen - Daniel BrolundDen empiriska processen - Daniel Brolund
Den empiriska processen - Daniel Brolundmanssandstrom
 
Scrum och städning, fika eller städa det är frågan - Josefina Trende
Scrum och städning, fika eller städa det är frågan - Josefina TrendeScrum och städning, fika eller städa det är frågan - Josefina Trende
Scrum och städning, fika eller städa det är frågan - Josefina Trendemanssandstrom
 
Vad är agilt i ideelt - Fredrik Jonsson
Vad är agilt i ideelt - Fredrik JonssonVad är agilt i ideelt - Fredrik Jonsson
Vad är agilt i ideelt - Fredrik Jonssonmanssandstrom
 
User story mapping - Andreas Ekstrom
User story mapping - Andreas EkstromUser story mapping - Andreas Ekstrom
User story mapping - Andreas Ekstrommanssandstrom
 
Att lyckas med integration av arbetet från flera scrum team - Christophe Acho...
Att lyckas med integration av arbetet från flera scrum team - Christophe Acho...Att lyckas med integration av arbetet från flera scrum team - Christophe Acho...
Att lyckas med integration av arbetet från flera scrum team - Christophe Acho...manssandstrom
 
Att agilifiera en systemutvecklingsprocess - Annika Widmark
Att agilifiera en systemutvecklingsprocess - Annika WidmarkAtt agilifiera en systemutvecklingsprocess - Annika Widmark
Att agilifiera en systemutvecklingsprocess - Annika Widmarkmanssandstrom
 
Timeboxed releases - Peter Antman
Timeboxed releases - Peter AntmanTimeboxed releases - Peter Antman
Timeboxed releases - Peter Antmanmanssandstrom
 
Bra verktyg för produktägare som vidareutvecklar scrum - André Ekespong
Bra verktyg för produktägare som vidareutvecklar scrum - André EkespongBra verktyg för produktägare som vidareutvecklar scrum - André Ekespong
Bra verktyg för produktägare som vidareutvecklar scrum - André Ekespongmanssandstrom
 
Använder du rätt verktyg - Johan Hernefeldt och Emil Nordling
Använder du rätt verktyg  - Johan Hernefeldt och Emil NordlingAnvänder du rätt verktyg  - Johan Hernefeldt och Emil Nordling
Använder du rätt verktyg - Johan Hernefeldt och Emil Nordlingmanssandstrom
 
Projekt en agil bromsmedicin - Andreas Larsson
Projekt en agil bromsmedicin - Andreas LarssonProjekt en agil bromsmedicin - Andreas Larsson
Projekt en agil bromsmedicin - Andreas Larssonmanssandstrom
 
Samarbete och allt vi gör för att förhindra det - Joakim Holm
Samarbete och allt vi gör för att förhindra det - Joakim HolmSamarbete och allt vi gör för att förhindra det - Joakim Holm
Samarbete och allt vi gör för att förhindra det - Joakim Holmmanssandstrom
 

More from manssandstrom (16)

Systemtänkande DevLin 2011
Systemtänkande DevLin 2011Systemtänkande DevLin 2011
Systemtänkande DevLin 2011
 
Agile och Kanban på driftavdelningen - Tomas Bjorkholm
Agile och Kanban på driftavdelningen - Tomas BjorkholmAgile och Kanban på driftavdelningen - Tomas Bjorkholm
Agile och Kanban på driftavdelningen - Tomas Bjorkholm
 
Skala scrum med visuell planering från lean - Daniel Berg
Skala scrum med visuell planering från lean - Daniel BergSkala scrum med visuell planering från lean - Daniel Berg
Skala scrum med visuell planering från lean - Daniel Berg
 
Användaren smidig lättrorlig och vig? - Mattias Persson
Användaren smidig lättrorlig och vig? - Mattias PerssonAnvändaren smidig lättrorlig och vig? - Mattias Persson
Användaren smidig lättrorlig och vig? - Mattias Persson
 
Spelregler för självorganiserande team - Tomas Lundborg
Spelregler för självorganiserande team - Tomas LundborgSpelregler för självorganiserande team - Tomas Lundborg
Spelregler för självorganiserande team - Tomas Lundborg
 
Den empiriska processen - Daniel Brolund
Den empiriska processen - Daniel BrolundDen empiriska processen - Daniel Brolund
Den empiriska processen - Daniel Brolund
 
Scrum och städning, fika eller städa det är frågan - Josefina Trende
Scrum och städning, fika eller städa det är frågan - Josefina TrendeScrum och städning, fika eller städa det är frågan - Josefina Trende
Scrum och städning, fika eller städa det är frågan - Josefina Trende
 
Vad är agilt i ideelt - Fredrik Jonsson
Vad är agilt i ideelt - Fredrik JonssonVad är agilt i ideelt - Fredrik Jonsson
Vad är agilt i ideelt - Fredrik Jonsson
 
User story mapping - Andreas Ekstrom
User story mapping - Andreas EkstromUser story mapping - Andreas Ekstrom
User story mapping - Andreas Ekstrom
 
Att lyckas med integration av arbetet från flera scrum team - Christophe Acho...
Att lyckas med integration av arbetet från flera scrum team - Christophe Acho...Att lyckas med integration av arbetet från flera scrum team - Christophe Acho...
Att lyckas med integration av arbetet från flera scrum team - Christophe Acho...
 
Att agilifiera en systemutvecklingsprocess - Annika Widmark
Att agilifiera en systemutvecklingsprocess - Annika WidmarkAtt agilifiera en systemutvecklingsprocess - Annika Widmark
Att agilifiera en systemutvecklingsprocess - Annika Widmark
 
Timeboxed releases - Peter Antman
Timeboxed releases - Peter AntmanTimeboxed releases - Peter Antman
Timeboxed releases - Peter Antman
 
Bra verktyg för produktägare som vidareutvecklar scrum - André Ekespong
Bra verktyg för produktägare som vidareutvecklar scrum - André EkespongBra verktyg för produktägare som vidareutvecklar scrum - André Ekespong
Bra verktyg för produktägare som vidareutvecklar scrum - André Ekespong
 
Använder du rätt verktyg - Johan Hernefeldt och Emil Nordling
Använder du rätt verktyg  - Johan Hernefeldt och Emil NordlingAnvänder du rätt verktyg  - Johan Hernefeldt och Emil Nordling
Använder du rätt verktyg - Johan Hernefeldt och Emil Nordling
 
Projekt en agil bromsmedicin - Andreas Larsson
Projekt en agil bromsmedicin - Andreas LarssonProjekt en agil bromsmedicin - Andreas Larsson
Projekt en agil bromsmedicin - Andreas Larsson
 
Samarbete och allt vi gör för att förhindra det - Joakim Holm
Samarbete och allt vi gör för att förhindra det - Joakim HolmSamarbete och allt vi gör för att förhindra det - Joakim Holm
Samarbete och allt vi gör för att förhindra det - Joakim Holm
 

Tillståndslös programmering devlin 2011

Editor's Notes

  1. \n
  2. Framtidens språk för flerkärniga processorer\n
  3. \n
  4. Funktionella språk sägs vara anpassat för matematiknördar - något akademiskt som man inte kan skriva riktiga applikationer i. - Jag är inte beredd att helt avvisa det här påståendet.\n
  5. Bara en liten elit av hjärnor är skapta för att programmera i erlang.\nSvårt - “vissa är helt enkelt inte intelligenta nog för att klara av det...”\nBara för eliten? Provocerande tanke.\n
  6. Alla dessa utsagorna triggade mig.\nJag vill vara med i framtiden\nJag gillar eleganta lösningar\nProvocerad av tanken på att IQ skulle ha med saken att göra\nProvocerad av tanken på att behöva ge upp TDD i framtiden\n
  7. Jag utser mig själv till försökskanin - kan jag lära mig så kan alla.\n
  8. Så jag antar givetvis utmaningen - den här objektorienterade hjärnan ska maseras med lite funktionell programmering.\n
  9. Så jag satte igång...\n
  10. Och visst var det en lite stökig väg till en god förståelse.\nJag var inte helt förtjust i dekonstruktion med hjälp av bitsyntaxen som återfinns på sid 95 i boken.\n
  11. \n
  12. De jag pratat med verkar rörande överens om att FP är svårare än OO.\nÄndå envisas Erlangutvecklare med att säga att det är ett utmärkt språk att göra prototyper i...\nHur hänger det här ihop. \n
  13. Min bild av vad det är som gör OO svårhanterat.\nMånga designpatterns bygger på att man gör avsteg från OO-idiom. \n
  14. De som säger att det är ca. 10 mönster räknar bort de mönster som är så inflätade i språkets allmänna syntax att det blir meningslöst att prata om ett designmönster.\n
  15. \n
  16. Hur var det med den där matematikgrejen då?\n
  17. \n
  18. \n
  19. Eftersom all iteration görs med rekursion så får man hela tiden nya variabelscope.\n
  20. Eftersom all iteration görs med rekursion så får man hela tiden nya variabelscope.\n
  21. \n
  22. Men jag hittade eunit för enhetstester. Lite old-school men fungerade riktigt bra.\n\n
  23. Fann att de dynamiska egenskaperna hos erlang tillåter isolerade tester.\nNotera också att dependency injection är en grundförutsättning för att man ska kunna arbeta utifrån och in med isolerade designtester.\n
  24. \n
  25. \n
  26. \n
  27. \n
  28. \n
  29. Lite utav ett annorlunda test-idiom.\n
  30. Lite utav ett annorlunda test-idiom.\n
  31. Däremot verkade det inte finnas något cucumberliknande verktyg för story driven development. Det fanns en lite ogenomtänkt plugin till FitNesse, men den verkade inte förvaltas aktivt.\n
  32. Så jag bestämde mig för att göra något liknande cucumber för erlang.\n
  33. Givetvis råkade jag genast på svårigheter.\n\n
  34. \n
  35. \n
  36. I vårt kära Given-When-Then mönster så fungerar Given som skedet då systemet prepareras med data lite så som man pryder en julgran.\nSedan hänger tillståndet snällt kvar där för att kunna betraktas av vem som helst när som helst.\n
  37. Erlang använder inte sådana julgranar, istället har de skorstenar. Den data man skickar till en erlang process försvinner bara ner i ett svart hål för en betraktares synvinkel. Sedan kan det komma något tillbaka men det är inte så att man kan betrakta någon varaktig förändring. Det är liksom hela tanken med att programmera utan sidoeffekter. Vilket fick mig att tänka.\n
  38. Själva vanan av att dela upp systembeskrivningen i Given-When-Then skvallrar om att vi definierar våra system efter vilka sidoeffekter det har.\nVi har lutat oss så tungt mot rådande paradigmer att vi har bestämt att våra kunder ska uttrycka sig om vår programvara som att det är åtråvärt att den är full av sidoeffekter. Oops. \n
  39. Så frågan är väl om man ska lära kunderna att se system som rena funktioner eller som objekt med sidoeffekter? Eller är den frågan ställd på fel nivå?\n
  40. Min utgångspunkt är att kunderna inte har drivit fram Given-When-Then-konceptet. Det är vi nördar som gjort det och kunder blir inte upprörda över lite frihetsgrader på den punkten.\n
  41. Filer, databaser, och processer. Så jag vill ju inte skapa ett verktyg som helt naivt bortser från att utvecklare vill använda sig av den möjligheten.\n
  42. här kommer en parentes...\n
  43. Alla IT-konferenser med självaktning idag har en talare som försöker förklara monader.\nJag har själv varit på timmslånga föreläsningar om monader som inte lyckades förklara, för mig i alla fall vad det är för någonting - ofta hamnar man i långa matematiska utläggningar som inte säger någonting om vad de gör och varför de finns.\n
  44. Så först får ni min vän Niklas Lindströms förklaring...\n...för er som inte använder shell pipes eller kanske inte reflekterat över hur de fungerar kommer här min förklaring... \n
  45. en process som kan ackumulera tillstånd för att senare kunna exekvera en funktion när lämpligt tillstånd uppnåtts.\nMen för att riktigt förstå dem kan det vara bra att lägga upp en på obduktionsbordet...\n
  46. Så motivationen bakom monader är att man vill tillåta kontrollerade sidoeffekter i språk som annars inte stöder sidoeffekter. De verkar ha fått sin mystiska status genom Haskell. Allt gjort i Haskell är mystiskt.\n
  47. För er som vill ha ett körbart exempel...\n
  48. slutparentes...\n
  49. Jag vet alltför väl att mina ordval inte kommer att vara de bästa därför låter jag det vara helt öppet i Cloudberry.\nDen enda konventionen just nu är att varje rad i ett scenario ger upphov till ett anrop mot en steps-modul.\n
  50. \n
  51. One-liners i BDD a’la FP. \n
  52. Om man vill ta en titt genom staketet in till byggröran och kanske, rentav, hjälpa mig komma till rätta med den.\n
  53. \n
  54. \n
  55. \n
  56. \n
  57. \n
  58. \n
  59. \n
  60. \n
  61. \n
  62. \n
  63. \n