Rapport från JAOO, del 3

Tillägg till “roten ur Pi” från förra gången. Ja, Alistair avsåg faktorn man multiplicerar estimaten med. Samtidigt himlade han med ögonen, viftade med händerna i luften och sa “Transcendental numbers… flying around…”

Till saken…

Onsdag och sista dagen av konferensen. Man skuttar blixtsnabbt upp med ett stön och släpar sig mot duschen efter gårdagens ehh… thaimat. Idag är det både Ruby och “Enterprise Open Source” på programmet.

Ruby har fått ett helt eget spår detta år (förra året var rubriken “Dynamic Languages”) och det handlar inte så mycket om “Vad är Ruby?” utan snarare “Hur funkar Ruby med Agile?” eller “Hur skriver man ett DSL i Ruby?”. Mer praktik, alltså.

Glenn Vanderburg är en erfaren Ruby-utvecklare (ja alltså, så erfaren som man nu kan bli med ett så ungt språk). Han ser ut som en amerikansk hacker, pratar med knarrig röst och rör sig ständigt över scenen. Men jag är beredd att förlåta honom för han är så duktig på att få fram varför han verkligen mumsmumsar Ruby.

Glenn lyfte fram den eleganta, rena syntaxen. Tänk bara på konstruktionen att anrop till en metod både kan skrivas med och utan paranteser runt argumenten. Det gör att när man anropar något som känns som en funktion så kan man använda paranteser, men när man anropar något som känns som ett kommando så kan man utelämna dem. Eller kanske skriva ett domänspecifikt språk som inte ser ut som grekiska för icke-programmerare (mer om det nedan). Det underlättar det agila, nära samarbetet med kunden.

Eller tänk på öppenheten. I Ruby kan man bygga ut det inbyggda (om uttrycket tillåts), dvs själva klasserna och objekten i språket. Saknar dina heltal metoden att fråga om det är ett primtal? Så lägg till det då!

Andra saker Glenn lyfte fram var block (anonyma funktioner), mixins (säkrare än multipelt arv, friare än rena interface), lispkänslan, operatorn ‘===’ samt exekverbara klassdeklarationer (klasser kan assistera med att bygga sig själva!).

Slutsats: Ruby är suveränt för metaprogrammering, dvs ändra själva språket, vilket visar sig vara en helt essentiell egenskap för att bygga agila, sköna ramverk som Rails.

ThoughtWorks (TW, Fowlers företag) har ju investerat ganska mycket tid och pengar på att få ryktet “bäst på Ruby” och faktiskt kom 3 av 4 talare på Rubyspåret från just TW. Obie Fernandez berättade hur han i några projekt byggt DSL:er (Domain-Specific Languages, en annan stor Fowler-grej) mha Ruby.

Man skiljer på interna DSL:er (sådana som byggs inom andra språk, t.ex. Ruby) och externa (sådana som skapar ett eget språk, t.ex. SQL). Ruby har en ren syntax, vilket inte skrämmer bort användare eller domänexperter. Han berättade hur man inkrementellt bygger upp ett språk som alla kan förstå och hur man sedan använder Rubys metaprogrammeringsdelar för att bygga ut Ruby med de delar som behövdes. Han började ofta med intern, rubybaserad DSL, men om man verkligen ville ha det enkelt för icke-programmerare var man tvungen att skapa ett eget, externt DSL. Snyggt! Borde inte vara så svårt att få det här att hänga ihop med DDD.

Fred George, en intensiv, äldre herre, skulle prata “Patterns and Idioms in Ruby” men det blev det inte alls. Istället blev det en beskrivning sammanfattad med: Agile + Ruby = True (but different).

Ruby är kraftfullt, utbyggbart och dynamiskt vilket gör att agila arbetssätt blir lite annorlunda än med t.ex. Java. Man får ju ingen kompilatorhjälp, mindre informativa felmeddelanden och man kör typiskt sina enhetstester oftare (5-6 ggr oftare). En hel cykel från “tag en uppgift” till “checka in” tar 2-4 tim normalt i Java och 30-60 min med Ruby, menade Fred.

En skön grej han berättade var om ett stort kontrakt på ett pensionssystem som TW hade vunnit. De hade konkurrerat med ett indiskt företag som använde CMM 5 vattenfall. Deras förslag estimerades till 12 mån, $26/tim, 2 MUSD. ThoughtWorks genomförande, med Agile tog 8 mån, innehåll 3 releaser, kostade $88/tim, totalt 1.1 MUSD. Forrester beräknade ROI för det agila projektet till toppnoteringen 94%, för vattenfallsprojektet: beroende eller som ännu större anledning att använda, är väl en fråga om attityd?

Det andra intressanta spåret för mig idag var, som sagt, Open Source. Det viktigaste, och mest välbesökta, föredraget hölls av Rod Johnson, från Interface21, skapare av Spring (ramverket). Spring har ju dragit fram hela IoC-tänkandet, som ju är intimt förknippat med förenklad enhetstestning.

Det sämsta man kan säga om Rods föredrag var att det drog över tiden, men det kunde gott ha fortsatt en timme till vad mig anbelangade. Rod påminde oss om hur landskapet för “Enterprise Java” såg ut 2003 och hur oerhört annorlunda det ser ut idag. Då var EJB fortfarande den enda lösningen och O/S utsträckte sig ungefär till Struts och Log4J. Idag är det O/S som driver hela javacommunityn, enligt Rod. Men vi är inte i mål ännu, var hans budskap. Det hade han fångat i titeln “Are we there yet?”, frågan som alla barn ställer i baksätet på bilen.

Rod vill att vi fortsätter kampen för “bra OO” och bra domänmodell. Han lyfte speciellt fram DDD-boken av Eric Evans. Spring vill dra sitt strå till stacken. Ett problem som jag själv har upplevt är att det ofta är Hibernate eller dylikt O/R-mappningsverktyg som skapar domänobjekten – inte Spring. Då kan heller inte Spring injicera de eventuella tjänster som domänobjekt behöver. Tills nu. En förbättring man har gjort till Spring v 2.0 är att man nu *kan* injicera tjänster i domänobjekt som skapats på annat sätt.

Nästa otroligt coola nyhet är att Spring blir språkagnostiskt, bönor kan skrivas i andra språk än Java. Till att börja med JRuby, Groovy och BeanShell, men fler kommer. Rod gillar utvecklingen med dynamiska språk för vissa tillämpningar och det är klart att man inte ska behöva lämna den mysiga Springmiljön för det.

Till sist lyfte han fram integreringen av aspekter via AspectJ 5. Rod demonstrerade hur överlägset det var jämfört med “förenklingen” man försökt i EJB 3 via “EJB Interception”. Pinsamt nog påpekade han att specifikationen faktiskt har ett allvarligt misstag i exempelkoden för detta! Så blir det när en kommitté av produktleverantörer som aldrig gjort detta förut ska specificera hur vi utvecklare ska arbeta med deras produkter. Rod verkar tycka det är roligt att hacka ned på EJB. Och vi flinade med.

Det här var min sista rapport från JAOO. Hoppas någon haft lite behållning. Andra spår som jag inte rapporterat från har varit: Abstractions for Concurrency, Emerging Web Technologies, SOA, .NET Client Apps, DSL, Java Rich Client Dev, Performance, .NET Enterprise Dev, Architecture Quality och Back to the Future (om gamla tekniker som kommer tillbaka eller borde göra det).

Som en anmärkning kan nämnas att företaget InfoQ (med Floyd Marinescu, från The Server-Side) videofilmade många av de viktigaste föredragen och kommer att lägga ut dessa successivt. Just nu finns visst Jeff Sutherlands föredrag från förra året där.

Slutord: Leverera ofta. Gör kunden till din partner. Reflektera