7 February 2018

Bøger der er værd at (gen)læse: Clean Code (af Robert C. Martin)

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.

Tidligere i denne måned genlæste jeg Clean Code, der er skrevet af Robert C. Martin (Uncle Bob) og udgivet i sin førsteudgave i 2008. Første gang jeg læste bogen var for et par år siden, og det er med fordel en bog der kan genlæses med nogle års mellemrum.

Bogen er en eviggyldig påmindelse om at det er en kunst at skrive letlæselig kode, og Robert C. Martin leverer påmindelsen igennem praktiske eksempler på lavniveau programmeringskoncepter som velstrukturereret navngivning, og hvordan man organiserer kode så den er let at forstå.
Med andre ord så er bogen en indførsel i grundprincipper som programmører benytter på daglig basis.

Helt overordnet set efter bogen læseren med en forståelse for:

  • At kunne skelne mellem god og dårlig kode
  • At kunne skrive god kode og kunne omdanne dårlig kode til god
  • At skrive letlæselig kode med velstruktureret navngivning, velstrukturerede funktioner, velstrukturerede objekter og velstrukturerede klasser
  • Hvordan kode formateres for maksimal læsbarhed
  • Implementering af fejlhåndtering (»error handling«) uden at gøre resten af applikationslogikken uklar
  • At skrive unit tests (og herunder en praktisk indførsel til Test-driven development)

Men hvad er »clean code« så? Analogien med at det er kunst at skrive letlæselig og "ren" kode er god, fordi det for det første ikke er meget bevendt at forsøge at skrive ren kode, hvis man ikke ved, hvordan man gør.
Derudover er det at skrive ren kode, ganske ligesom med kunstgrene, en disciplin hvor øvelse gør mester.

Den dårlige nyhed er derfor også, at det at skrive ren kode er meget ligesom at male et billede. De fleste er i stand til at bedømme hvorvidt et billede er pænt malet, eller om det er et klatmaleri. Men, blot fordi man kan bedømme hvordan noget ser ud, betyder det ikke nødvendigvis, at man kan gribe en malerpensel og selv skabe den næste »Mona Lisa«.
Derfor: At kunne skelne god kode fra dårlig gør ikke nødvendigvis, at man kan finde ud af at skrive ren kode.

Generelt set har »clean code« følgende karakteristikker:

  1. Den skal være elegant at se på, og det skal være en fornøjelse at læse: "Reading it should make you smile the way a well-crafted music box or well-designed car would." (Bjarne Stroustrup citeret i Clean Code).
  2. Den skal være fokuseret; hver funktion, klasse og kodemoduler skal have et specifikt fokus som er uafhængigt af omgivende detaljer: Single Responsibility Principle.
  3. Der er brugt tid på at reflektere over koden: "Someone has taken the time to keep it simple and orderly. They have paid appropriate attention to details. They have cared." (Michael Feathers citeret i Clean Code)
  4. Alle tests i kodebasen er grønne; eller med andre ord, kodebasen indeholder ingen test som fejler, og testene afspejler kodebasen (ingen uddaterede tests).
  5. Den indeholder ikke kodeduplikation: Keep it DRY - Don't Repeat Yourself.
  6. Den er dannet under et fokus på at minimere antallet af enheder/entiteter: klasser, metoder, funktioner etc. Desto mindre kode, desto mindre kognitivoverhead for udvikleren hvilket igen fører til lavere sandsynlighed for kode med fejl

Bogen er anbefalelsesværdig for alle erfaringsniveauer, og det er derudover en bog som sagtens kan tåle flere gennemlæsninger, da man får noget nyt ud af den ved hver gennemlæsning. Læs mere om, og køb, den her.