Omegapoint

2010-09-09

JavaZone Oslo onsdag 8 september 2010


Årets upplaga av JavaZone i Oslo inleddes från Trondheim. JavaZone har alltid tagit på allvar att studenter ska vara delaktiga och i år visade man vad man verkligen menar. Hela JavaZone, alla föreläsningar under två dagar streamas live över till föreläsningssalar på Norges Tekniska Universitet i Trondheim där några hundra studenter deltar i konferensen på distans. Så, att inledningsanförandet streamades åt andra hållet från föreläsningssalen i Trondheim till tvåtusen deltagare i Oslo kändes inte helt ologiskt.

Multicore, systemintegration och event-drivna arkitekturer

Själva konferensen inleddes för min del med min egen föreläsning om hur trenderna multicore och systemintegration leder till att den dominerande "call-stack"-arkitekturen för kod inte kommer att hålla i längden. Vi behöver en ny metafor och event-drivna arkitekturer (EDA) verkar vara mest lovande metaforen för tillfället.

Tagga koden

En väldigt intressant idé presenterades av Filip van Laenen i hans presentation "Why We Should Start Tagging Our Code". Den bärande tanken är att vi väsentligen har slutat använda hierarkiska taxonomier för sökningar. Om man vill söka efter bil-bilder på Mustanger på Flickr söker man inte på "vehicle.motorvehicle.fourweeler.car.sportscar.Mustang", utan på "Mustang". Om man då får upp för många bilder på hästar och flygplan söker man på "Mustang car". Ur det perspektivet känns hierarkiska paketnamn ganska mossiga. Kunde vi inte istället tagga upp våra klasser med taggar som t ex "business", "web", "infrastructure", "listener" beroende på skikt, lager, domän, pattern o likn. Då skulle det vara busenkelt att t ex få fram alla lyssnarklasser genom att söka på taggen "listener" - och vill man inte se lyssnare i domänlogiken utan bara i infrastrukturen så söker man på "listener" och "infrastructure".

Enhetstestning för C++ och JavaScript

För den som saknar ett vettigt ramverk för enhetstestning i C++ så rekommenderar jag att hålla ögenen öppna efter när Kevlin Henney släpper sitt ramverk Heathrow. Väldigt lågt insteg - du behöver bara lära dig tre primitiver, och framför allt löser den problemet med "testregistrering" som andra lösningar i C++ har, men som funkar automatiskt i Java och C# tack vare reflection. Han har dessutom ett enhetstestramverk för JavaScript som jag också skulle vilja se ute i fält.

Att förstå JavaScript

På temat JavaScript höll Anders Norås en presentation om vad han ser som grunderna för god programmering i JavaScript - att det finns alltför många räliga sådana är vi nog alla överens om. Hans rekommendation är att sätta sig in i att förstå JavaScripts sätt att se på funktioner, objekt och closures. Det är när dessa tre kombineras som JavaScript har sin "sweet spot". Sedan visade han även lite svart magi med hur man kan manipulera anropsstacken typografiskt - vilket jag nog inte skulle rekommendera i någon större utsträckning.

Prestandatesting

Kirk Pepperdine och Dan Hardiker  gjorde ett försöka att ta bort just stämpeln "svart magi" med sin föreläsning "The (not so) Dark Art of Performance Tuning". Visst lyckades de rensa en del, men onekligen blev en del magiska hål kvar. Lite konkreta råd kom dock ut, t ex risken att prestandatesta med ett för litet testdata-set. Då kan man råka få situationen att hela testdatat hamnar i någon cache varefter man inte får en enda cachemiss - och då lär testet inte rapportera några prestandaproblem. Deras namn på detta antipattern var No-Stress Testing.

REST, DCI och Qi4j

Rickard Öberg visade hur de i Streamflow implementerat ett REST API för att kunna driva klienten enligt HATEOAS där bra "giltiga" länkar för tillståndsändring är tillgängliga för klienten. En intressant detalj var hur de i sin design "uppgraderat" sökning till en egen REST-resurs med en egen URL "http://.../search". I sig själv ger den ett sökformulär, men anropad med parametrar utför den sökningen. På implementationssidan hade de använt DCI som designprincip och Rickard visade hur detta gav en hel drös av möjligheter för återanvändning av kod - vilket ger en dramatiskt mindre kodmassa för samma funktionalitet. Det var ganska elegant att se hur DCI och Qi4j passar varandra - de möjliga återanvändningarna som DCI skapade kunde Qi4j enkelt skörda till väldigt kompakt kod, utan att behöva kompromissa på tydlighet eller göra esoteriska abstraktioner. Ett problem med presentationen var att det är svårt att visa all kod som _inte_ behövs. Den lilla kod som visades imponerar inte om man inte tänker på hur mycket som skulle behövas med ett annat tillvägagångssätt.

Java4Ever

Under dagen hade jag även nöjet att få träffa Scala Johansson som livs levande strövande omkring på konferensområdet - givetvis ledandes sin numer världsberömda cykel.

97 Things Every Programmer Should Know

En intressant variation på format var att en av salarna var avsatt till blixt-presentationer hela dagen, parallellt med övriga föreläsningar. På eftermiddagen var det ett pass med fem blixtpresentation ur "97 Things Every Programmer Should Know". Trots att en oproportionerlig andel av författarna är norrmän så låg fokus denna gång på icke-norska medförfattare. 

Själv bidrog jag en blixt där jag täckte både "Know Your Next Commit" och "Distinguish Business Exceptions from Technical". Ett bidrag jag inte fördjupat mig så mycket i när jag läste boken var Neal Fords "Testing is the Engineering Rigor of Software Development", men live gjorde han en riktigt bra insats att motivera hur testning i systemutveckling fyller samma roll som analytisk matematik fyller i andra ingenjörsskrå - och hur anledningarna bakom beror på att "byggandet" är det absolut dyraste och långsammaste vid t ex brobygge, medan "byggandet" är i stort sett gratis och momentant i systemutveckling när man väl fått snurr på sin byggserver. Dags att plocka fram boken och läsa igen.

Objektorientering

För den som trodde att javaprogram är objektorienterade var nog "It is Possible to do Object Orientation in Java" med Kevlin Henney en omskakande upplevelse. På ett väldigt underhållande och charmigt sätt lyckades han blanda såväl akademiska avhandlingar om typteori med lambda-kalkyl och kod i C och JavaScript som exempel på god eller ofullständig eller rent av felaktig objektorientering. En intressant detalj var distinktionen mellan abstrakta datatyper (ADT) och objekt-orientering. En subtil men intressant skillnad är att objekt ska egentligen bara känna till sina egna interna strukturer ("autognosis"), inte den interna strukturen på andra objekt - inte ens om de är av samma klass. Så att skriva en equals-metod som gör "this.internalfield == other.internalfield" är visserligen okej ADT, men det är faktiskt inte objektorienterat. Huvuddelen av presentationen var ändock om den viktiga distinktionen mellan typ och klass och hur den senare egentligen bara hör hemma vid objektskapande ("new"). Java har visst stöd för detta med "interface" och "class", men tyvärr fyller även en "class"-deklaration ett dubbelt syfte: skapa en klass och deklarera en typ med samma namn - vilket gör det lätt att blanda ihop dessa i resten av programmet.

Vid dethär laget var klockan närmare åtta och jag hade varit nära 12 timmar på konferensområdet. Onekligen en fullmatad och intressant dag.


Inga kommentarer:

Skicka en kommentar

Om Omegapoint

Omegapoint AB är ledande rådgivare och experter inom Systemarkitektur, Säkerhet och IT-ledning.

Twitter uppdateringar

Omegapoints kvitterström:

    Andra Omegapointbloggar