Andreas Ryge

  • Der er ikke så længe til at GOTO-konferencen starter, så i øjeblikket sidder jeg og gransker programmet. Der er 2 spor der har særlig interesse for mig og for en gangs skyld, ligger de ikke samtidig. De to spor […]

  • Når man åbner en konto hos en bank, skal man som noget det første bekræfte sin identitet. En del af bankens kerneopgaver er, at registrere alle transaktioner på din konto, så begge parter ved hvor mange af dine […]

  • En af de ting der optager min kollegaer og mig i øjeblikket, er hvilke moralkodeks, der gælder for os udviklere. Vi arbejder med AI og som alle andre indenfor det felt, diskuterer vi hvor den moralske grænse eg […]

  • Jeg håber jeg misforstår din kommentar, for jeg synes at jeg netop problematiserer laksegl og derved dets digitale modpart, NemId.

  • “Programkode har masse og dermed tyngdekraft. Programkode tiltrækker mere programkode og hvis man ikke passer på, ender man med et sort hul, der til sidst opsluger alle udviklingsresourcer.”
    Det er et af de u […]

  • En af mine store aversioner er Scrum. Det til trods for, at jeg i en årerække advokerede for netop Scrum. Da jeg konstaterede, at Scrum ikke rigtig virkede, forsøgte jeg mig med Kanban, hvilket jeg havde st […]

  • Andreas Ryge wrote a new post, GOTO 2016, on the site Andreas Ryge 1 year, 10 months ago

    Efteråret er konferencetid – i hvert fald for mig. Her i efteråret ligger 3 konferencer, som jeg plejer at deltage i. Den første er allerede overstået og de næste 2 er “GOTO” og “Spark Summit”. GOTO afholdes alle […]

  • Jeg havde også høje forventninger til Anita Senguptas præsentation til Goto; og jeg synes bestemt ikke at hun skuffede!

  • Imens virksomheder her i landet først for nylig har fået øjnene op for agile metoder og som gale implementerer scrum, kanban og andre, er early adopters allerede begyndt at mærke tømmermændene efter festen. På årets Goto havde Russel Miles en talk med title “From ‘Agile Hangover’ to ‘Antifragile Organisations’“. Hans pointe om ‘antifragile‘ var interessant, men skal lige synke ind, inden jeg kan formidle den fornuftigt. Pointerne om ‘agile hangover‘ var lidt lettere, for de stemte overens med mine egne oplevelser: Agile var sjovt at prøve, men nu skal vi videre. Det var mine ord, ikke Russels.

    agilityDet er ikke fordi der er noget galt med tankerne bag agile, det er implementationen af det der er problemet. Alene det, at ordet agile bliver udtalt på dansk – agil – synes jeg er et problem. Det leder tankerne hen på hundetræning og agilitybaner. Men på den anden side, er det også cirka sådan scrum bliver implementeret i mange virksomheder: Man trækker medarbejder igennem en masse øvelser og forhindringer som de skal hoppe over, kravle igennem osv. Øvelserne har navne som stand-up, retrospective, sprint planning osv. Agilitybanen kalder man et sprint og så gælder det for hundende… undskyld… deltagerne, om at komme så hurtigt som muligt igennem øvelserne. Hastigheden måles i story-points og kaldes velocity. Hver gang banen løbes igennem, skal deltagerne prøve om de kan gøre det hurtigere end sidst, indtil den maximale hastighed er opnået.

    Selvfølgelig virker det ikke.

    Early adopters, som Russ, ved det godt. Jeg ved det godt. Du ved det godt. Det handler jo ikke om hvad man gør, men hvordan man gør det. Derfor fandtes højtydende teams længe før nogen tænkte på agile, scrum, kanban og hvad det ellers sælges under.

    Det var forresten en af Russ’ pointer: “Du ved det godt”. Fakstisk sagde Russ, at den eneste der ved noget om dine problemer er dig selv, og at man skal holde op med at tro, at andre har en færdigpakket løsning, en one size fits all. Vi skal tænke os godt om, og prøve at forstå netop vores problem og finde ud af hvordan man løser netop vores problem, for de ligner med garanti ikke de andres. Og først når man har forstået naturen af sine problemer, kan man bygge sin organisation og sin software, så de er robuste overfor den foranderlige verden de eksisterer i – bygge antifragile organisations. Mere om det senere.

  • Thumbnail

    “Go do something hard”. Sådan sluttede Russ Olsen dagen første keynote på den sidste dag af årets GOTO. Opfordringen var relateret til Kennedys tale 12. september 1962:

    “We choose to go to the moon. We choose […]

  • Andreas Ryge wrote a new post, Gotocon, on the site Andreas Ryge 3 years, 11 months ago

    Nu vil jeg også melde mig i koret og skrive om Goto. Hvorfor? Fordi jeg holder ganske meget af konferencen og det er der flere årsager til.

    Den første er, at jeg godt kan lide at høre om nye ting. Verden er […]

  • Mest af alt er jeg oprørt over de historier, som udspringer i begivenheder omkring Nets, der florerer i øjeblikket. De får lov at ligge et øjeblik, men jeg skal nok vende tilbage til dem, når der er afdækket mere. Her vil jeg koncentrere mig om noget så virkelighedsfjernt som funktionerne map og reduce. Årsagen til dette er, at jeg har haft nogle stumper til et indlæg liggende i et stykke tid og hellere må få skrevet, inden det kommer alt for langt væk.

    Tidligere skrev jeg noget om lambda’er og fik en enkelt kommentar angående min brug af reduce. Jeg fik svaret lidt kortfattet på kommentaren, men i bund og grund handler det om, at reduce er en sweitzerkniv, som også kan bruges til at implementere funktionerne map, filter og remove. Hvis der ikke er en indbygget funktion, kan problemet som regel løses med reduce. Det vil jeg gerne eksemplificere ved at implementere funktionerne map, filter og remove ved at bruge reduce.

    I det følgende anvender jeg groovy, da ingen af funktionerne findes i sproget (groovy har dog nogle objektorienterede ækvivalenter, som jeg også benytter som reference). Det er en fordel at læse det tidligere indlæg om lambda’er, da der i dette indlæg bruges lambda’er hele tiden. Funktionen add() defineret med en lambda, ser i groovy således ud:

    I krølleparanteser skrives først en liste af argumenter som funktionen tager, så ‘->’ efterfulgt af funktionens implementation.

    Først reduce.
    I mit indlæg om lamda’er, foreslog jeg en implementation af reduce, som jeg genbruger. Reduce er en funktion som tager 3 argumenter: en funktion, en samling data og en initiel værdi for resultatet. For hvert element i samlingen af data, kaldes denne funktion med elementet og resultatet af det foregående kald.

    Hvis add(a,b) returnerer summen af a og b, vil

    svarer til

    Havde vi i stedet for add() haft muligheden for at bruge infix-operatoren ‘+’, ville det have set mere læseligt ud, og derved havde det nok været letter forståeligt:

    I groovy hedder den ækvivalente metode inject(), og da groovy er objektorienteret, findes den selvfølgelig som en metode på en liste. Lad os bruge reduce til at summere tallene fra 1 til 10, begge inklusive.

    Map
    Map er blot en variant af reduce. Den tager en funktion og en samling af data, men returværdien er en liste af resultater, et for hvert element i inddata. Map påtrykker altså en funktion på hvert element i samlingen af data og lægger resultaterne i en liste. Dette kan gøres ved hjælp af reduce. Den ækvivalente metode i groovy hedder collect() og er, som inject, en metode på dataobjektet. Map kan implementeres med reduce som følger:

    Filter
    Funktionen filter minder om map, men i stedet for at tilføje resultatet af et funktionskald, tilføjes elementet, hvis funktionen returnerer true på elementet. Funktionen skal altså teste om elementet overholder en given betingelse. Den kan f.eks. bruges til at udvælge alle lige tal i en liste. Den ækvivalente funktion i groovy hedder findAll().

    Remove
    Funktionen remove gør det modsatte af filter. Den bruges til at udvælge alle elementer der ikke oveholder en given betingelse, f.eks. alle tal, der ikke er delelig med 3. Den har ikke rigtig nogen ækvivalent i groovy, så her genbruges findAll(), men med en negeret betingelse.

    Simple eksempler siger selvfølgelig ikke meget om styrken i reduce(), men jeg har i de sidste 2,5 år kodet clojure på fuldt tid og reduce() er blevet min bedste ven. Jeg håber at eksemplerne har givet lidt større forståelse af reduce.

  • Imens dele af pressen har travlt med at diskutere sig selv, er der et langt alvorligere problem, som burde få al opmærksomheden: Nets omgang med personfølsomme data. Sikkerhed er tilsyneladende ikke-eksisterende og selv hvis Nets havde blot et minimum af sikkerhed til at beskytte persondata, ville det ikke hjælpe den dag USA vil have indblik i vores gøren og laden.

    Oveni synes Trine Bramsen (IT-fagets darling) åbenbart, at det er en god ide, at der skæres i det nærmeste vi kommer en vagthund.

    Jeg kan næsten ikke vente på det næste privatiseringsprojekt og mere digitalisering af det offentlige.

  • Der bliver diskuteret datasikkerhed i disse dage. Salget af Nets har nemlig igen affødt spørgsmålet om, hvad der egentlig sker med vores data, når det kommer på udenlandske hænder. Der bliver også diskuteret […]

  • Jo, men man kommer ikke uden om reduce i længden. Den eneste grund til at du, i dit eksempel, ikke rammer reduce, er fordi nogen allerede har implementeret sum for dig:

    i clojure findes f.eks. ingen […]

  • For nogle år siden læste jeg en artikel, som opfordrede til, at skifte omgivelser, når man skulle skifte perspektiv. Man eksekverede ved skrivebordet, læste i en lænestol og var kreativ ved et andet bord end […]

  • ThumbnailLamda!? Hvad siger manden?

    Java 8 lige på trapperne. Det har Jeppe skrevet og talt om lidt om tidligere. Brian Goetz nævnte på sidste års GOTO i Aarhus, at denne release handler meget om, at udvide java med […]

  • NemId er hot i øjeblikket, Nets er nemlig til salg. Salget har nogle konsekvenser, som kan være svære at diskutere, derfor vil jeg gerne prøve at bidrage til debatten med dette indlæg, ved at dykke lidt ned i, […]

    • Jeg håber jeg misforstår din kommentar, for jeg synes at jeg netop problematiserer laksegl og derved dets digitale modpart, NemId.

  • Det er med sommerfugle i maven, at jeg begiver mig ud på eventyr. Allerede da Therese luftede de første ideer om dette site, var jeg klar til at bidrage. Jeg har selv savnet et medie for nørder, et medie som […]