ga('send', 'pageview');
Categories
Teknik

Java genom nya ögon

Linux-operativsystemet Ubuntu har fått sitt namn av ett ord från språket swahili som brukar översättas till ungefär “jag är den jag är genom andra.” Det är ett djupt och innehållsrikt ord, ett ord med många nivåer och jag upptäckte nyligen att det är perfekt för att beskriva min egen resa genom programmeringsvärlden. ”Hurdå?” undrar du. Låt oss börja från början…

I en InfoQ artikel kommenterar James Ward, PM för Kotlin på Google, såhär:

25 years ago, I wrote my Java like I wrote my Perl. Bruce [Eckel]’s “Thinking in Java” transformed how I thought about programming. Now both Bruce and I have found programming paradigms and experiences that have had the same effect, totally altering the way we think about things. Bruce and I have not experienced these disruptions through Java, but through other languages.

Jag satt nyss och parprogrammerade (eller kanske snarare par-code-reviewade?) Kotlin-kod med en kollega och lade märke till att han ofta refaktorerade min kod på liknande sätt: han tog fristående funktioner och omvandlade dem till metoder eller extension-metoder.

Jag kommenterade på detta och frågade om hans åsikter om funktionell programmering. Han svarade att han under sin karriär hittills enbart arbetat med Java, och därför inte kommit i kontakt med funktionella språk.

Detta fick mig att reflektera på min egen resa mellan olika språk: jag har arbetat både med Java, Javascript, Python, Go och Kotlin i arbetet, medans jag under studietiden använt främst C, Assembler och Java. Utöver det har jag i olika fritidsprojekt också lärt mig C#, C++ och Rust.

Varenda språk har sin egen filosofi, historia och släktskap. Tillsammans representerar de olika paradigmer som procedurell, objekt-orienterad och funktionell programmering. De använder även olika sorters typning, som statisk typning, dynamisk typning, stark typning, svag typning och “duck typing”.

Alla språk har lämnat sina respektive spår i hur jag skriver andra språk, och mest tydligt är detta i Java. Där jag ursprungligen skrev väldigt objekt-orienterade lösningar med arvshierakier och “rich objects” har jag över tid gått över till att arbeta mer med statiska metoder som kan kombineras och kedjas ihop. Efter att Java 8 kom började jag använda mer och mer klasser baserade på Function-interfacet, lambdor, metodreferenser och Streams. När vi sedan fick type inference genom “val”-nyckelordet och records i Java 14-17 så ändrades min kod ännu mer. Och i det senaste steget provade jag på Kotlin, och fann att jag närmast omedvetet slutade skriva traditionella klasser till förmån för data-klasser och komponerbara funktioner. Jag hade uppnått programmeringens Zen, och allt som återstod var att lära mig underhålla motorcyklar och ge mig ut på en obegriplig odyssé genom den amerikanska mellanvästern1.

Skämt åsido så bör jag dock understryka att det inte är något fel på min mer objekt-orienterade kollegas sätt att skriva kod: vi kan båda lösa problemen vi ställs inför, men på olika sätt.

Vad jag däremot vill uppmuntra till är att gå ut och prova på nya språk. Om majoriteten av din erfarenhet är av objekt-orienterad programmering i språk som Java, C# eller C++, prova på ett språk utan klasser som Javascript, Go eller C och fundera över hur du kan strukturera program utan objekt-orientering. Om du främst har erfarenhet av statiskt typade språk, prova ett dynamiskt typat språk som Python eller Javascript. Om du redan provat på eller är helt bekväm med de ovan nämnda språken, prova på något drastiskt annorlunda som det Lisp-inspirerade Clojure, det hårdvarunära Assembler eller det närmast överdrivet säkra Rust.

Det är svårt att skriva ett av de andra språken en längre tid och sedan återgå till ett tidigare språk utan att ha med sig lite av filosofin från dem tillbaka. Och det kan vara, som Bruce och James kommenterade, precis vad vi behöver för att utvecklas i yrket.

  1. Detta är en referens till boken “Zen and the Art of Motorcycle Maintenance” av Robert M Pirsig från 1974, en bok som länge rekommenderats av användare på Stack Overflow till nya programmerare av obskyra skäl.

By Ola Rende

Backendutvecklare, fullstackutvecklare

Leave a Reply

Your email address will not be published. Required fields are marked *