19 August 2017

Bøger der er værd at (gen)læse: Practical Object-Oriented Design in Ruby (af Sandi Metz)

I dette indlæg fortsætter blogserien om bøger der er værd at læse - eller genlæse, hvis man har læst dem tidligere.

Den seneste IT-relevante fagbog som jeg har genlæst, er Practical Object-Oriented Design in Ruby, der er skrevet af Sandi Metz og udgivet i 2012. Jeg læste bogen første gang kort tid efter dens udgivelse i 2012, og har genlæst den henover de seneste uger.

Hvor bogen ved første gennemlæsning hjalp mig med at se OOD i et nyt lys, så gav genlæsningen mig (udover en genopfriskning af nogle delemner) også følelsen af at sidde og, uden at tænke over det, nikke med hovedet af Sandis elegante måder at formulere basale OOD principper på.

Som eksempel kan nævnes nedenstående citat fra bogen der relaterer til "kunsten" at definere »public interfaces« og herunder objekters kontekstuafhængighed:

"Blind trust is a keystone of object-oriented design. It allows objects to collaborate without binding themselves to context and is necessary in any application that expects to grow and change."

Selvom bogen er skrevet som en guide til OOD i Ruby, så er den teoretiske implementation selvfølgelig også gyldig for andre sprog i OOP-paradigmet. Derudover er syntaksen i Ruby simpel at følge (selv for programmører der ikke har nogen baggrund i sproget), og fordi ruby er »typesvagt« muliggør det samtidig simple og koncise eksempler på praktisk implementering af OOD.

Sandi Metz har skrevet bogen i et sprog der, ud over at være lærerigt, gør bogen let læselig og underholdende. Bogen er derfor ikke et »digert akademisk værk«, men i stedet en (relativt blid) indføring i praktisk OOD og kunsten at bygge et solidt fundament for sin applikationslogik. Et fundament som gør fremtidige ændringer af/tilføjelser til kodebasen overkommelige, og som muliggør agil og inkrementiel udbygning af eksisterende kode via modularitet.

Bogen er anbefalelsesværdig uafhængigt af erfaringsniveau og på tværs af arbejdsområder, men særligt analogt til PHP-branchen skriver Sandi Metz selv følgende om hvorfor bogen er relevant:

"Ruby’s widely admired ease of use has a downside: Too many Ruby and Rails applications have been created without concern for their long-term maintenance or evolution. The Web is awash in Ruby code that is now virtually impossible to change or extend. This text helps you solve that problem by using powerful real-world object-oriented design techniques, which it thoroughly explains using simple and practical Ruby examples."

Da bogens overordnede tema er praktisk implementering af objekt orienteret design skaber det helt naturligt et gennemgående fokus på hvordan objekter kommunikerer med hinanden og herved en applikations »besked« flow. Det overordnede fokus brydes ned på følgende undertemaer:

  • At give en forståelse for hvordan gennemtænkt objekt orienteret programmering/design danner grundlag for applikationer/kode som er nemt at vedligeholde og ændre
  • Simple værktøjer til at vurdere hvor kode hører hjemme (hvilken kode hører hjemme i én enkelt objektklasse)
  • Hvordan man undgår at sammenblande objektklasser (demarkationslinjer for hvornår logik er sammenhørende)
  • At definere fleksible »interfaces« som deles mellem objekter
  • At reducere progammerings »overhead« (cost of change) i et typesvagt sprog
  • Korrekt brug af »inheritance« (klassenedarvning)
  • At bygge objekter via »object composition«
  • En indførsel til TDD og kunsten at skrive cost effective tests
  • Og derudover en introduktion til at arbejde med legacy code

Bogen er anbefalelsesværdig for alle erfaringsniveauer - læs mere om, og køb, den her.