JohnnyBigert.se
 startsida    |     om mig    |     tjänster    |     gratis C++-tips    |     forskning    |     kontakt 
Smarta
C++-tips
 
 
Behöver ni experthjälp
inom C++?
 
 

Aha-upplevelser i bokform: Beautiful code - Leading programmers explain how they think

(av Andy Oram och Greg Wilson, ISBN 0-596-51004-7, 618 sidor)

"Beautiful code - Leading programmers explain how they think" består av 33 korta texter av olika författare. Författarna beskriver vad de anser vara vacker kod och det kan vara ganska olika saker beroende på författare.

Man ska vara riktigt glad om man får en ordentlig aha-upplevelse när man läser en bok. Det är sällan jag läst en bok med så många aha-upplevelser per sida/krona/tidsenhet som denna! Sammanfattningsvis kan jag bara säga att detta är en kanonbok. Några kapitel är bedrövliga, men detta uppvägs med råge av de riktigt bra kapitlen (se nedan).

bok - Beautiful code

Innehållsförteckningen fanns att hitta på nätet. Vill du ha exempel på vad kapitlen kan handla om finns ett av dem att läsa online. Här följer en sammanfattning av några favoritavsnitt:

Kapitel 3: The most beautiful code I never wrote

Författaren Jon Bentley kombinerar teori med praktik på ett underbart sätt när han analyserar QuickSort. Han börjar med en implementation av QuickSort med 13 rader kod som räknar antalet jämförelser för en uppsättning slumpvist indata. Det tar en evighet att köra och tar en hel del minne. Han guidar oss sen genom hur man förbättrar analysen i små steg. Tolv programversioner senare slutar han med ett program med fyra rader (!) som exakt räknar ut antalet jämförelser. Det kör blixtsnabbt och tar inget minne.

Han skapar alltså ett bättre program med färre rader kod, därav titeln. Och som någon sa: Den kod som har minst fel är den kod som inte finns. Klart läsvärt för den som gillar datalogi.

Kapitel 6: Framework for integrated test - beauty through fragility

Författaren Michael Feathers beskriver ett riktigt användbart koncept i sitt testramverk FIT (framework for integrated test). Han angriper problemet med att få testspecifikationer både mänskligt läsbara och exekverbara samtidigt. Dina tester beskriver du med en HTML-sida. Varje rad är ett testfall och varje kolumn är en variabel. Ramverket hjälper dig sedan att parsa HTML-sidan så att du kan generera testfall. Resultatet av testerna visas sen i samma HTML-sida med färgkodning.

Ramverket består av bara tre klasser och bryter mot alla tänkbara objektorienterade rekommendationer. Det är en väldigt speciell design, vilket gör kapitlet läsvärt bara det. Att ramverket gör ett svårt problem enklare är en bonus.

Kapitel 22: A spoonful of sewage

Författaren Bryan Cantrill beskriver implementationen av blockering och väckning av trådar i Solariskärnan. Och nej, detta är inte ett lättsmält kapitel. Författaren beskriver i detalj en bugg i Solariskärnan som har med trådlås att göra. Lösningen var att specialbehandla en typ av lås (bland en stor mängd olika typer av lås). Och specialfall är ju aldrig kul.

När jag känner att jag skrivit "snygg" kod och allt passar perfekt, då vet jag att min lösning är "rätt". Det är bara det att låsproblemet analyserades av några seriöst talangfulla människor under många månader och lösningen har stått sig genom åren (sedan 1999). Och ändå så är lösningen riktigt grisig. Detta speglas också av en kommentar i koden: "You think this [solution] is cheesy? Let's see you do better." (Koden finns här. Sök på "cheesy".)

Den stora aha-upplevelsen för mig var följande: Även om koden inte är perfekt så kan den vara "rätt"! På något sätt känns det skönt...

Andra bra kapitel

Här är några bra kapitel med information att läsa på nätet:

  • Kapitel 23 (Distrubuted programming with MapReduce) beskriver Googles generiska ramverk för parallell programmering. Det är riktigt coolt och används bl.a. för indexering av webben. Läs mer om MapReduce.
  • Kapitel 24 (Beautiful concurrency) är riktigt bra och ger exempel på varför program med trådar och lås är svårare att modularisera än sekventiella program (och därmed mindre "vackra"). Författaren föreslår också en lösning på problemet: Transactional memory. Exemplen ges i Haskell som är ett mycket intressant (funktionellt) programspråk, värt att läsa om bara det. Hela kapitlet finns att läsa online!
  • Kapitel 28 (Beautiful debugging) handlar om programmet delta som automatiserar buggletandet. T.ex. används delta för att skapa minimala program till gcc-felrapporter. Delta tar ett stort program med (vad du anser vara ett felaktigt) kompileringsfel. Ut kommer ett minimalt program som fortfarande återskapar felet. Riktigt smart.

Vill du ha fler tips är du välkommen att anmäla dig till tipsbrevet som kommer varje månad. Naturligtvis kommer jag inte att sprida din e-postadress vidare (läs e-postpolicyn).

e-postadress:

Om du har möjlighet, läs denna bok redan imorgon. Det är väl spenderad tid.



Relaterade artiklar:

 
© Johnny Bigert Data | De la Gardies gränd 22, 135 63 Tyresö | 076-782 74 00
johnny@johnnybigert.se | www.johnnybigert.se