Informasjon for hånden
Da jeg først skulle bli kjent med Matnyttig-kodebasen prøvde jeg å gjøre noe som har fungert for meg tidligere: lese koden, se på typene og prøve å “skjønne greia” derfra. Det fungerte svært dårlig!
Clojure-kode kan være vanskeligere å lese enn kode skrevet i språk med typer, fordi du ikke kan lene deg på typene. Du kan ikke vite hvilke argumenter en funksjon blir kalt med. Du kan ikke se på typene for å få oversikt.
Hvis jeg kunne sendt et råd tilbake i tid til meg selv, ville jeg sendt følgende:
Gjør deg kjent med koden ved å få informasjonen under koden for hånden.
Målet er at vi skal kunne stille systemet vi jobber med spørsmål, og få informasjonen vi søker som svar. Da hjelper det ikke å se etter typesignaturer, eller å stirre på kode!
I stedet kan man gjøre følgende:
- Bli kjent med datamodellen. Er det et databaseskjema? Er det en “kjerne” i hvordan informasjon representeres her?
- Bli kjent med informasjonsflyten i kodebasen. Hvordan sendes så denne informasjonen gjennom systemet? Mange gode Clojure-kodebaser følger en streng informasjonsflyt.
- Bli kjent med mekanismene du har for å hente informasjon.
I Matnyttig-koden kan jeg svare på spørsmålene som følger:
- Vi bruker typisk nøkkelord med navnerom for informasjon som skal flyte gjennom systemet vårt.
Data som lever lenge lever i Datomic, og har et databaseskjema.
Data som lever kortere beskrives ofte med Clojure-specs på attributter, for eksempel
:feil/melding
eller:nats.kv/bucket-name
. Vi unngår på det sterkeste å bruke samme nøkkelord med navnerom til å bety forskjellige ting. - Vi skiller strengt på kommandoer og spørringer ved å følge funksjonell kjerne-imperativt skall. Det betyr at hvis du skal lagre data, ser du etter kommandoer, og skal du hente data, ser du etter spørringer, eller skriver en ny.
- Vi lager mekansimer for å hente informasjonen vi har bruk for. Fra REPL kan vi plukke ut data fra lokal database, fra prod-databasen, fra NATS, og hente ned feil.
Når jeg skal bli kjent med min neste Clojure-kodebase, kommer jeg til å jobbe for å få informasjonen fra koden for hånden, i stedet for å prøve å få oversikt over all koden.