Bli med Sigurd på verdens største Kotlin-konferanse

- Personlig synes jeg workshop-dagen ga aller mest utbytte, skriver Sigurd Ofstad om sitt besøk på KotlinConf i Amsterdam.

Andreas, Brage og Sigurd fra Yne har vært på KotlinConf i Amsterdam, og rapporterer tilbake fra en spennende, sosial og faglig interessant tur.
Andreas, Brage og Sigurd fra Yne har vært på KotlinConf i Amsterdam, og rapporterer tilbake fra en spennende, sosial og faglig interessant tur. Vis mer

Å reise på konferanse kan være en lærerik opplevelse for den enkelte utvikler, og en verdifull investering for et teknologiselskap som Yne. IT og programmering er områder i konstant endring, der nye teknologier har stor innvirkning på måten man jobber på. Derfor er det viktig å holde seg oppdatert på nye trender, søke inspirasjon og forfriske kunnskapen sin.

Teknologikonferanser er den perfekte arena for dette formålet, samtidig som det kan være sosialt og gi et lite avbrekk fra rutinen. Dette er viktig for både Yne og den enkelte utvikleren, og det er derfor vi har muligheten til å delta på konferanse hvert år.

Å reise på utenlandskonferanse er i prinsippet også relativt fritt, men det stilles noen flere krav, som å vise til hvordan konferansen er relevant for akkurat deg, og det er i tillegg ønskelig at man har engasjement i Yne og selskapets felles faglige utvikling. Dette betyr at vi deler på kunnskapen vår internt, til nytte for hele selskapet.

KotlinConf i Amsterdam er verdens største konferanse for Kotlin, et programmeringsspråk som på kort tid har blitt veldig populært blant Java-utviklere. Språket gir de samme fordelene som Java, men Kotlin byr i tillegg på en enkel og elegant syntaks, et allsidig kjernebibliotek, og støtter moderne programmeringsparadigmer som funksjonell syntaks og asynkron programmering.

De mange fordelene førte til at Google allerede i 2017 anbefalte Kotlin til Android-utvikling. Organisasjoner som Google, Skatteetaten og NAV bruker Kotlin, samt noen av Ynes kunder, som Morgenlevering og Spond.

Tirsdagen var viet til workshops, mens selve konferansen ble avholdt på onsdag og torsdag.

«For en som ikke har jobbet så mye med event-drevne systemer var dette meget kult å få større innsikt i!»

Workshops

Første dag deltok vi i en workshop om hvordan man bygger skalerbare og asynkrone mikroservice-applikasjoner i Kafka og Ktor. Foredragsholderene var Anton Arhipov og Viktor Gamov. Førstnevnte jobber i JetBrains og har vært med i utviklingen av Ktor. Gamov jobber i Kong Inc., og har mange års erfaring i Kafka, og er medforfatter av boken Kafka in Action.

Først presenterte Anton det asynkrone web-rammeverket Ktor, og forklarte forskjellen i ideologi med Spring Boot; Ktor er ment som et toolkit, et verktøy som ikke stiller strenge krav til hvordan du velger å forme applikasjonen din. Spring Boot er derimot et rammeverk, hvor du i mye større grad må følge livssyklusen som følger med. Han gikk også gjennom en del praktisk informasjon, som for eksempel hvordan man kan integrere annen nødvendig funksjonalitet, som serialisering, WebSockets og database-integrasjon.

Videre introduserte Gamov verktøyet Kafka, og gikk gjennom motivasjonen for å bygge hendelsesdreven arkitektur med mikrotjenester. Kort summert kan dette utgjøre et godt alternativ til vanlig tilstands-basert arkitektur blant annet fordi en bevarer en full logg over alle hendelser som har skjedd i systemet. I tillegg vil event-prosessering foregå etter prinsippet om statelessness, som gjør debugging av feil mye enklere.

Underveis i workshopen var det satt av tid til å programmere og eksperimentere selv med et eksempel-prosjekt. Dette synes jeg selv er spesielt nyttig, da det gir muligheten til å prosessere det man har lært, og lære av konkret eksperimentering. Dette utgjorde likevel ikke mer enn en time eller to av workshopen, og jeg skulle gjerne sett at det var satt av litt mer tid til dette.

Til slutt kjørte vi opp den siste eksempel-koden basert på alt vi hadde lært, og fikk et fungerende eksempel på en event-dreven sjåfør/passasjer-app med web-server og kart-integrasjon som brukte websockets for å holde appen oppdatert med førerens posisjon til enhver tid. For en som ikke har jobbet så mye med event-drevne systemer var dette meget kult å få større innsikt i!

Konferansedagene

Selve konferansen startet med et innlegg fra keynote speakers som tok for seg de større linjene og utviklingene innenfor Kotlin det siste året. Noen av høydepunktene som ble annonsert inkluderte følgende:

Kotlin 2.0 kommer snart. Det er ingen nye språk-features, men den kommer med den nye Kotlin-kompilatoren K2, som er skrevet på nytt fra scratch. Denne løser visse eksisterende problemer; Som et eksempel, se på kodesnutten nedenfor. Der den nåværende kompilatoren i Kotlin 1.8.20 gir en feilmelding, forstår den nye kompilatoren at `maxI` i den følgende koden ikke kan være null:

image: Bli med Sigurd på verdens største Kotlin-konferanse
  • Du kan prøve ut den nye kompilatoren ved å inkludere dette i build.gradle.kts. Men merk at IDE-en din antakeligvis ikke støtter K2 ennå.
kotlin
  kotlin {
    sourceSets.all {
      languageSettings {
      languageVersion = "2.0"
    }
  }
}
  • Gradle velger Kotlin DSL (domain specific language) som default-språk til sine konfigurasjonsfiler. Hvis du har brukt dette byggesystemet før vet du kanskje at konfigurasjonsfilene kan skrives i enten Kotlin eller Groovy. Jeg synes dette har skapt en del trøbbel da det ofte krever at man må oversette fra ett språk til et annet når man prøver å lese eksempelkode på internett. Med den nye avgjørelsen er vi et steg nærmere en standard, som kan gjøre det enklere å komme i gang.
  • Jetpack Compose inntar stadig nye flater innen cross-platform-sfæren. Compose for iOS er nå i Alpha, og en implementasjon av compose for web er nå i eksperimentell fase. Det blir spennende å se om Jetpack Compose kan konkurrere med mer etablerte teknologier, som React Native og Flutter. Det lovende aspektet ved denne teknologien er at de vil tilby ikke bare Android, iOS, men desktop og web i tillegg.
Konferanselokalet: Beurs van Derlage i Amsterdam sentrum
Konferanselokalet: Beurs van Derlage i Amsterdam sentrum Vis mer

De neste to dagene gikk vi på forelesninger og talks innen diverse Kotlin-relaterte temaer, avbrutt av kaffepauser, variert konferansemat og after party. I tillegg tok vi runden gjennom konferansehallen for å snakke med de ulike selskapene som holdt stands. Blant sistnevnte finner vi arrangøren selv: JetBrains, samt Google, AWS Amplify og Sentry, i tillegg til noen lokale konsulentselskaper.

Til forskjell fra f.eks. JavaZone, hvor mange kanskje hovedsaklig er tilstede for rekrutteringsformål, var det her mer fokus på salg av tjenester og branding. Størsteparten av tiden vår gikk dog til å høre på foredrag, og nedenfor går jeg gjennom noen av presentasjonene vi synes var mest interessante:

Kotlin & Functional programming: pick the best, skip the rest - Urs Peter

Denne talken tok for seg funksjonell programmering i Kotlin, og litt av teorien bak disse konstruksjonene, uten å gå for dypt i det akademiske. Han viste en rekke eksempler, og bygde seg i stor grad opp fra et imperativt kodeeksempel med lav lesbarhet, til gradvis bedre lesbarhet ved å introdusere funksjonelle konsepter.

Samtidig inneholdt talken en advarsel om at hvis man bruker for mye funksjonelle konsepter samtidig kan det gi like uleselig kode som det opprinnelige imperative eksempelet. Til slutt introduserte han Arrow, som er et library for å skrive funksjonell kode i Kotlin.

Mellom foredrag kunne man plukke opp merch på de ulike bodene – som for eksempel jakkenål med din favoritt-IDE.
Mellom foredrag kunne man plukke opp merch på de ulike bodene – som for eksempel jakkenål med din favoritt-IDE. Vis mer

Crash Course on the Kotlin Compiler - Amanda Hinchman Dominguez

En meget interessant talk, som gikk noe fort, men vi fikk med oss hvordan Kotlin-kompilatoren opererer gjennom en frontend-backend-modell, hvor frontenden utfører en del operasjoner på koden, og infererer betydning og setter dette sammen til en mer eksplisitt modell. Ved å bruke compiler plugins til å gjøre nærmest en slags “code generation” for deg, kan du oppnå ting som vanligvis ikke ville vært mulig i Kotlin.

Interstellar Social Simulation Framework and game development in Kotlin - Kwun Hang Lai

En definitiv outlier når det kommer til valg av tema, men svært interessant for noen som har studert fysikk. Kwun Hang Lai tok for seg hva som var bra, og hva som var dårlig med å velge Kotlin for å simulere mellomstellare sivilisasjoner med relativistiske effekter i Kotlin.

Kvelden startet med liveband som spilte kjente klassikere!
Kvelden startet med liveband som spilte kjente klassikere! Vis mer

After-party

Den første kvelden av konferansen var det after-party, og vi fikk oss noen nye venner fra både USA, Finland og Nederland. Vi avsluttet med noen øl på en pub i Amsterdam sentrum før vi tok en relativt tidlig kveld.

Coroutines and Loom behind the scenes - Roman Elizarov

Denne talken tok for seg hvordan coroutines og Loom vil leve side om side i fremtiden, og hvilke domener hver av dem vil komme mest til nytte. Hvis du ikke vet om Coroutines har du noe å lese deg opp på!

Dette er en lettvektig form for tråder, som kan kjøre på én enkelt kjerne, og opereres av programmeringsspråkets runtime. Disse gir deg de samme kapabilitetene som eventloopen i Node, og gir deg muligheten til å enkelt kjøre millioner av asynkrone prosesser samtidig. Kotlins implementasjon av dette konseptet heter coroutines.

Omtrent samtidig som dette kom til Kotlin versjon 1.3, begynte den konkurrerende implementasjonen for Java, som heter Project Loom.

Detekt 2.0 and beyond - Nicola Corti

Detekt er et statisk analyseverktøy for Kotlin, med et omfattende regelsett for å avdekke bugs, antipatterns og feil. Her fikk vi et overblikk over den fremtidige kursen til dette open source-prosjektet.

Noe jeg syntes var spesielt interessant, var å lære at Detekt i dag krever en dedikert kompilering av Kotlin-koden å bruke visse regelsett. Altså må man kompilere koden to ganger under bygging, noe som kan lede til problemer om disse ikke bruker samme innstillinger. Når Detekt integreres med Kotlin 2.0 vil rammeverket bruke Kotlin compiler plugins, som igjen gjør at man kun må kjøre kompileringen én gang for å få alle regelsettene!

Dag tre i Nederland var over, og vi la kursen mot flyplassen – Men ikke før vi hadde kjøpt litt Kruidnoten og Stroopwafels. Personlig synes jeg Workshop-dagen ga aller mest utbytte, men interessant nok var det denne dagen som ble valgt bort av de fleste av konferansedeltakerne. Hvis du skal på konferanse vil jeg anbefale å vurdere workshops!

Men alt i alt er det viktigste at man har et læringsutbytte av en konferanse, og får nye idéer til hvordan man kan jobbe. Dette er spesielt viktig for oss utviklere, og trioen fra Yne landet tilbake i Norge fredags kveld med forfrisket inspirasjon og kunnskap.