SlideShare ist ein Scribd-Unternehmen logo
1 von 55
The Clean Coder

  A Code of Conduct for
Professional Programmers
    (Robert C. Martin)
Uncle Bob Martin
Ki volt a felelős?
• A rakéta tervezői?
   – Tudtak a problémáról, jelentették 7 évvel korábban.
   – A javításra megvolt a javaslat, de a vezetés halogatta a
     megvalósítást.
   – Közvetlen az indítás előtt is felhívták a figyelmet a problémára.
• A NASA döntéshozói?
   – Hatalmas politikai és anyagi nyomás alatt döntöttek.
   – Úgy érezték a mérnökök aggodalmai túlzóak (bizalomhiány).
• Elég-e tudomásul venni, hogy a vezetők voltak a
  hibásak?
   – Nyugodtan aludtak-e a mérnökök aznap éjszaka?
   – Tehettek-e volna többet?
Katasztrofális bugok
• MIM-104 Patriot rakéta számítási hiba miatt célt tévesztett, ezzel 28
  amerikai katona életét oltotta ki.
• 1983-ban majdnem atomháborút okozott a rakétaelhárítás hibásan
  működő szoftvere.
• Ariane 5 rakéta 1 milliárd dolláros prototípusa egy bug miatt
  önmegsemmisített.
    – További drága bugok az űrkutatás területén: Mars Polar Lander, NASA
      Mariner 1, Phobos 1, Mars Global Surveyor
• 2003. augusztus 14-én több államnyi területen elment az áram
  milliárdos anyagi kárt okozva.
• Therac-25 sugárterápiás eszköz hibás működése 5 emberéletet
  követelt 1980-ban.
• 1992 áprilisában az első F-22 Raptor software hiba miatt landolás
  közben a földnek csapódott.
• 1982 -1983: Vancouver Stock Exchange Index számításában
  felhalmozódtak a kerekítési hibák és újraszámításnál kiderült: nem
  520, hanem 1098.892 kéne, hogy legyen.
Felelősségvállalás
• Felelősségvállalás tetteinkért.
   – Ha kell, akár anyagi értelemben is.
   – Bizonyos értelemben programozni arrogancia:
      • Azt állítod, képes vagy elvégezni 10 , 100 vagy éppen több ezer
        ember munkáját egyszerre.
      • Hatalmas felelősség: könnyen okozhatsz annyi kárt, mint 1000
        „átlagember”.
      • Ne gúnyold, aki hibázott (inkább segíts).
      • Viseld méltósággal, ha a hibáidért büntetnek, vagy gúnyolnak.
          – Ne vedd a szívedre, ha igaztalanul teszik.
• Ne tégy kárt.
   – A célod mindig a hibátlan program legyen.
      • Nem sikerülhet mindig, mert a programok bonyolultak.
      • Az emberi test is az, mégse mondja az orvosod azt, hogy „néha
        megesik, hogy a beteg meghal a műtőben, ez normális”
      • Tanulj meg őszintén bocsánatot kérni!
A konfliktus értéke
A konfliktus értéke
• Egy cégen belül mindenkinek van felelősége.
  – Mindenki a saját érdekeit kell, hogy védje:
     •   A gazdasági vezető érdeke, hogy ne folyjon el a pénz.
     •   A termék manager védi a használhatóságot.
     •   A projekt manager a határidők teljesítéséért felelős.
     •   A TE feladatod, hogy megtartsd a fejlesztés lendületét, és
         REÁLIS információkat szolgáltass annak állapotáról.
           – Ne térj ki részletekre:
              » Jó esetben amúgy se érdekli, mert a TE dolgod.
              » Rossz esetben még beleszól a végén.
  – Közös megegyezés:
     • Addig vitázzatok, amíg közös nevezőre nem jutottatok.
     • Ne próbálj hős lenni. (Ha túlhajtod magad, csökkenni fog a
       teljesítményed.)
     • Megpróbálom = Megcsinálom. (Számítani fognak rá!)
Team player?
• Tévhit                              • Realitás
   – Mindig azt próbálja                 – Nemet mond, ha kell, de ha
     teljesíteni, amit kérnek tőle.        igent mond, azt be is váltja.
   – Kerüli a konfliktust.               – Megoldja a konfliktust.
   – Nem kerüli meg a                    – Ha szükségesnek
     feletteseit.                          érzi, magasabb vezetőknek
                                           is jelzi a problémát.
   – Nem enged a célokból.               – Időben felismeri, ha nem
                                           reálisak a célok.
   – Ha kell, feladja az                 – Ragaszkodik az
     elveit, hogy időben kész              elveihez, mert tudja, hogy a
     legyen.                               kapkodás csak lassít a
                                           munkán.
                                         – Ismeri a határait. Ha mégis
   – Ha kell, zokszó nélkül                kell túlórázni, azt
     túlórázik.                            pihenéssel kompenzálja.
Elhivatottság
• Az elhivatottság fokai:
    – Azt mondod, hogy meg kéne tenned.
    – Az gondolod, hogy (majd egyszer) megteszed.
    – Meg is teszed.
• Az elhivatottság hiányának nyelve:
    – Kellene / Bárcsak / CsinálJUK meg / Majd egyszer
         • Ha ezt hallod, ne számíts megoldásra!
• Az elhivatottság nyelve
    – Megcsinálom! (Nem mi, nem valaki, hanem ÉN!)
    – Ne hagyj magadnak kiutat.
• Ne várj másra!
    –   Beszélj meg vele időpontot.
    –   Ha szükséges, javasolj hetenkénti találkozót.
    –   Absztraháld az interface-t, hogy addig is tudj haladni, amíg rá vársz.
    –   Ha még mindig nincsenek készen, akkor készíts mock-ot az ő
        rendszerükre, hogy a sajátodat tudd tesztelni.
Becslések
• A becslés nem egy szám, hanem egy eloszlás.
   – Ez a tényt mindig tedd egyértelművé.
   – Vigyázz, hogy ne vállalj implicit módon kötelezettséget
     olyanra, amit nem tudsz biztosan teljesíteni.
   – Amíg nem vagy biztos a dolgodban, ne vállalj be határidőt.
• Használd a PERT módszert.
   – Optimista becslés, normális becslés, pesszimista becslés.
      • Ezekből sok egyéb információ számolható.
• Bontsd fel a feladatokat apró részekre.
   – A nagyszámok törvénye szerint, minél több becslést
     aggregálunk, annál kisebb lesz az eltérés esélye.
• Becsülj csapatban:
   – Több ember kisebbet téved.
   – Wideband Delphi alapú módszerek:
      • Flying fingers, Planing poker, Affinity Estimation
Csúszások
• Senki sem tökéletes, előfordul, hogy kicsúszunk az
  időből:
   – Soha ne remélj: légy tárgyilagos, és ismerd fel minél hamarabb a
     csúszást.
      • „Monitor your progress” (Pl.: burn down chart.)
   – Ne kapkodj: a kapkodásnak később nagyon megfizeted az árát.
      • False delivery: hamis meggyőződés, mely szerint kész vagy, és
        tovább mehetsz:
          – Legyen a késznek pontos definíciója:
              » FitNesse, Selenium, RobotFX, Cucumber
      • Martin Fowler megengedőbb: Technical debt.
   – Túlórák:
      • Néha szükséges, de nagyon gondold meg, hogy mikor élsz vele:
          –   2-3 hét után többet rontja a hatékonyságot, mint amit segít.
          –   20% túlóra NEM hoz 20% több eredményt.
          –   Legyen B terv arra az esetre, ha a túlóra sem segített.
          –   Ne áldozd fel a magánéleted, és ne várd ezt mástól se.
                » Nincs rosszabb, mint a rosszkedvű programozó.
A lendület megőrzése
• Ne hagyd, hogy a program elrohadjon.
  – Azért soft a software, mert könnyű változtatni.
     • Ez mindig legyen igaz!
     • Akkor marad rugalmas a struktúra, ha nem hagyod
       megkövülni.
     • Ha kezd áttekinthetetlen lenni a forráskód, ne menj tovább.
     • Boy scout rule / Betört ablak elv: Refaktorálj, amint úgy
       érzed, hogy valamit lehetne jobban is.
     • Emlékezz rá, hogy a rendetlen kód exponenciálisan lassít le.
  – Veszélyes a folyamatos változtatás?
     • Az igazán veszélyes az, ha minden változtatás sok apró 1-1
       soros módosítássá válik.
  – Mit tegyünk a veszély ellen?
     • Használj védőhálót = Automatizált tesztek
Felkészültség
• A software fejlesztés nehéz feladat:
   – Egymásnak ellentmondó követelményeknek kell megfelelni.
   – Kreativitást igényel minden egyes lépés.
• Légy mindig kipihent.
   – A hajnal 3-kor írt kódban mindig sok a hiba.
       • Ha lassulsz, elakadsz, ne akarj hős lenni: menj
         haza, pihenj, zuhanyozz le, reggel be fog ugrani a megoldás.
   – Fáradtan az ember hajlamos „keresztbe drótozni” dolgokat.
       • Rossz és visszafordíthatatlan döntéseket hozunk.
• Aggódás:
   – Ha agyilag máshol jársz, nem haladsz.
   – Lehetőleg oldd meg a gondjaidat a szabadidődben.
       • Ha megengedett, hogy eltold a munkaidődet 1-2 órával, akkor ezt
         használd arra, hogy közelebb kerülj a megoldáshoz. (Sokszor elég
         a megnyugváshoz.)
       • Ha ez nem fér bele a cégkultúrába, akkor viszont ne késs emiatt!
   – Ha muszáj elkezdened dolgozni, akkor 45 percenként szánj 10
     percet a probléma megoldására.
Útvesztők és egyéb csapdák
• Least objectional activity / Priority inversion
   – Néha előfordul, hogy amit csinálnod kell, ahhoz nincs
     kedved.
   – Ilyenkor könnyen esünk abba a hibába, hogy
     meggyőzzük magunkat arról, hogy egy másik feladat
     mégis fontosabb.
      • Kifogásokat gyártasz és hazudsz magadnak, hogy
        felkészítsd magad arra, hogy másnak is hazudj.
• Útvesztők
   – Néha rosszul döntünk, de ilyenkor ismerjük fel
     mielőbb.
      • Ne győzködd magad, hogy jó lesz, ha látod, hogy nem.
Kollaboráció
• Programozók maguk közt
  – Ne birtokold a kódot.
  – Pairing
      • Ha megzavarnak, a párod segít visszazökkenni.
      • Ha fáradt vagy, segít tartani a ritmust.
      • Rákényszerít, hogy pontosabban gondolj végig mindent.
• Programozók és munkáltatók
  – Tartsd tiszteletben a cég értékeit.
  – Értsd meg az üzleti célokat.
  – Értsd meg a csapatod céljait.
  – Figyelj oda a határidőkre és egyéb fontos
    információkra.
  – Legyél politikus.
Értsd meg, mivel foglalkozol
• Azonosulj a megrendelővel / főnököddel:
  – Az ő problémája végül a tiéd is!
  – Mindig a cég érdekeit tartsd szem előtt.
  – Nem az a célod, hogy holnap elégedett
    legyen, hanem az, hogy a közös célt elérjétek.
• Ismerd meg a területet:
  – Ne vakon programozz: ismerd meg a felhasználók
    szakterületét legalább alapszinten.
  – Rettenetes hiba pusztán a specifikációból dolgozni:
    ismerd a témát annyira, hogy észrevedd a hibákat
    benne.
Teams
• Az összeszokott team sokkal jobb.
• Ne projektek köré szervezzünk csapatot, hanem
  kész csapatot rendeljünk projekthez.
  – Egy összeszokott csapat képes akár több projektet is
    effektíven szétosztani egymás között.
     • A csapatok teljesítménye mérhető bizonyos (heurisztikus)
       metrikákkal.
     • Megadható egy csapatnak, hogy a fenti teljesítménymérők
       tekintetében hogyan ossza meg az idejét több projekt között.
         – Adott esetben átmenetileg ez eltolható egyik-másik projekt
           javára, ha határidő közeleg.
     • Fél emberek nincsenek
         – A feladatok közötti kontextus váltás időt emészt fel.
Meeting
• Szükségesek és hasznosak.
• Egy rossz meeting rengeteg időt elpocsékolhat.
   – Anyagi oldal: egy átlag 1 órás meeting ára $200/résztvevő
   – A munkáltatóddal szembeni kötelességed, hogy NE menj el
     olyan meetingre, ami nem érint.
• Legyen pontos agenda.
   – Ha nem érint, illedelmesen mondj rá nemet.
   – Ha eltérnek az agendától, hívd fel rá a figyelmet.
   – Ha valamiért mégsem érint a téma, illedelmesen távozz.
• Stand-up meetings
   – Segít tartani a tempót.
• Vitás kérdések:
   – Ami 5 perc alatt nem dől el, azt szimpla vita nem dönti el.
   – Légy tekintettel másokra, ha őket nem érinti, a vitát meeting után
     folytassátok.
Flow zone
• Meditatív állapot, melyben a fejlesztő
  hatékonynak érzi magát, és képes gyorsan
  nagymennyiségű kódot írni.
  – Probléma:
     • Valóban több kód születik ilyenkor, na de olyan is...
     • Mivel úgy érezzük, kevésbé hibázunk, kevésbé is vesszük
       észre, ha mégis.
     • Könnyebben feladjuk a diszciplínáinkat. (Például TDD esetén
       több kódot írunk meg egy iterációban, mint kéne.)
     • A flow-ból kiszakított programozó sokszor durván reagál, ha
       kérdeznek tőle valamit.
     • A pair programming segít kívül maradni.
  – Gyakorláshoz viszont jó.
Flow zone
• Zenehallgatás:
  – Kizárja a külvilágot, de befolyásolhatja a
    döntéseinket. (Dalszövegből kiragadott elnevezések.)
  – Könnyebben kerül az ember flow-ba.
• Ha kizökkentenek:
  – Ne reagálj agresszívan, ne éreztesd a másikkal, hogy
    megzavart.
  – A TDD segít abban, hogy kontextusban
    maradj, hiszen a nem működő teszt megmutatja, hol
    tartottál.
Pomodoro technika
• 25 percre állítsd be, addig
  koncentrálj arra, amit
  csinálsz.
• Utána 5 percig foglalkozz
  mással.
   – Hívd vissza azt, aki
     keresett.
   – Válaszolj annak, aki
     kérdezett tőled.
   – Ha nem történt
     semmi, akkor csak kapcsolj
     ki picit.
• Minden negyedik ilyen
  után tarts 30 perc
  szünetet.
A hiba megelőzése
• A teszter már ne találjon hibát!
   – Költséges egy nagy QA team fenntartása.
   – A debuggolásra szánt idő épp olyan drága, mint a fejlesztésre
     szánt.
       • A hiba megkeresése sokszor több idő, mint a megelőzése.
   – Ha sok hibát talál a QA, az megrendíti a vezetők bizalmát a
     csapatban.
   – Felelőtlen és lusta hozzáállás:
       • A teszterek csak szűrik a hibákat, sok elkerülheti a figyelmüket.
• Tesztelj minden egyes módosítást!!!
   – Automatizáld a teszteket.
   – A 100% lefedettséget célozd.
   – Nincs nehezen tesztelhető feladat, csak rosszul tervezett
     program!
       • Design for tests!
   – A tesztelés minden szintjén automatizálj, így bizonyos esetekben
     QA team már nem is kell (pl.: FitNesse).
Test Driven Development
• Rövid iterációk
• Alaposan tesztelt kód
    – Amit elveszítesz időben a teszt írással, visszanyered a debuggolásnál.
• Modulárisabb forráskódot kényszerít ki.
• A felhasználó szemszögéből tervezed az interface-t.
• Segíti a refaktorálást, bátorságot ad a változtatásokhoz.
    – „Ki kéne javítani!” <VS> „Hozzá nem érek!”
• Több tanulmány is született már a hibaráta csökkenéséről, és a
  fejlesztés felgyorsulásáról.
• Vannak nehézségei (pl.: IP kapcsolatot tartalmazó program
  tesztelése), de ezekre már mind született megfelelő megoldás.
  (Komoly irodalma van a TDD-nek.)
• Példákon keresztül dokumentálja a használatot.
• Stb, stb, stb.
„The user doesn't know what he wants.”
Felhasználói igények
• A megrendelő nem tudja, mit szeretne.
   – Ami papíron jól hangzik, gyakorlatban lehet mesterkélt.
       • Készülj fel a változásokra.
       • Ne tervezd túl a dolgokat előre.
       • Ne próbálj túl pontosan becsülni határidőt.
           – Hangsúlyozd, hogy becslésről van szó.
           – A diagramjaidon szerepeljenek hiba határok.
• Kétértelműség
   – Ha a döntéshozók nem értenek egyet, sokszor megkerülik a
     döntést.
       • Ha valami kétértelműt látsz a specifikációban, jó esély van rá, hogy
         ide-oda kell majd változtatni.
   – Sokszor feltételezzük implicit módon, hogy a másik tud
     valamit, vagy egyetért velünk valamiben.
       • Ha valamiben nem vagy biztos, kérdezz.
       • Ha nem kapsz egyértelmű választ, vagy hezitál a
         döntéshozó, készülj fel a változtatásra.
Acceptance Tests
• Definíció: olyan automatizált teszt, melyet a fejlesztők
  (főleg QA részről) és a döntéshozók közösen írnak a
  fejlesztés megkezdése ELŐTT, annak érdekében, hogy
  a „KÉSZ” fogalmát pontosítsák az egyes felhasználói
  igények esetén.
   – Nem ugyanaz, mint a User Acceptance Test, ami kézi, és a
     munka befejeztével valósul meg.
   – Happy path vs. Unhappy path. (Stakeholders vs. QA)
• FitNesse:
   – Acceptance testing keretrendszer
   – Automatizált és Wiki alapú
   – Egyszerű nyelvezetű, így a fejlesztéshez nem értő döntéshozók
     számára is elérhető.
   – Kikényszeríti a könyörtelen precizitást a requirement
     megfogalmazóitól.
Fitnesse Példa
given the command LogFileDirectoryStartupCommand
given that the old_inactive_logs directory does not exist
when the command is executed
then the old_inactive_logs directory should exist
and it should be empty



given the command LogFileDirectoryStartupCommand
given that the old_inactive_logs directory exists
and that it contains a file named x
When the command is executed
Then the old_inactive_logs directory should still exist
and it should still contain a file named x
Unit test vs. Acceptance test
• Implementációra        • Követelményekre
  vonatkozik.              vonatkozik.
• Programozóknak         • Döntéshozóknak és
  szól.                    programozóknak szól.
• Az egység a függvény   • Az egység a user
  és az osztály.           story.
• Az implementációt      • A követelmény
  segíti.                  megértését segíti.

  Mindkettő elsősorban dokumentáció, és csak
              másodsorban teszt!
Egyéb megjegyzések
• Ne légy passzív agresszív:
   – Ha egy teszt fura, egyeztess annak írójával.
   – Rossz hozzáállás: „Ezt kérték, ezt implementálom”.
• GUI-n keresztül csak GUI-t tesztelj.
   – Válaszd le teljesen a magrendszerről, már csak az SRP miatt is.
   – A GUI gyakran változik, fenntarthatatlanná tenné a teszteket.
• Mind a unit, mind az acceptance test rendszer legyen
  összekötve a verziókövetővel (Continous Integration)
   –   Minden commit váltson ki egy teljes tesztet.
   –   Senki ne commitoljon failing tesztet.
   –   Ha mégis fail van, akkor mindenki azonnal azzal foglalkozzék.
   –   Soha ne kommentezz ki tesztet.
        • Martin Fowler kicsit lazább: limitált méretű quarantine
Teszt piramis
Teszt piramis

Közel 100% lefedettséget
kínáló, implementáció
specifikus tesztek, melyeket
a programozók maguknak
írnak.
Teszt piramis
Acceptance tesztek közül
azok, melyek üzleti logikát
tesztelnek optimális
feltételek mellet.
Interakcióba csak mock
objectekkel léphet.
Teszt piramis
Komponensek közötti
kommunikációt
teszteli, tipikusan a lead
architect írja. Néhány
performancia teszt is lehet
benne. Napi 1 futás.
Teszt piramis
Egyben teszteli az egész
rendszert. Itt is lehetnek
performancia tesztek.
Teszt piramis
Az egyetlen manuális teszt
csoport. Teljesen adhoc, és
a lényege épp az, hogy
azokat az eseményeket
váltsa ki, amikre senki nem
számított. (Bug hunt day.)
A tudás hatalom
• A mi szakmánkban 5 év nagy idő.
  – A munkahelyi feladatok általában nem mozgatják
    meg minden képességedet.
     • Előfordulhat, hogy amit már rég elfelejtettél, arra lenne
       szükséged, és nem is veszed észre: frissítsd a régi tudást is.
     • Aki nem ismeri a múltat, előbb-utóbb megismétli azt.
  – A technológiák olyan gyorsan tűnnek el, amilyen
    gyorsan megjelennek.
  – Nem a munkáltatód feladata, hogy képezzen téged.
     • A Te piaci értéked múlik ezen, nem az övé.
  – Nem munkaidőben kell ezt megtenned.
     • Legyél hálás, ha kapsz rá időt!
Tanulj
• Cél: Átlag heti 20 óra tanulás
   – A manager pozíció (ide értve a CEO-t is) nem ad felmentést!
   – Ezt az időt semmiképp ne töltsd munkahelyi feladatokkal: ez a
     TE időd!
   – Edzés közben, vezetés közben hallgass podcastokat.
   – Olvass a vonaton szakkönyveket.
   – Alapíts a barátaiddal Code Dojo-t.
   – Gyakorold a Kata-kat.
   – Tanulj meg új nyelveket!
       • Lehetőleg olyat, ami nem hasonlít arra, amit épp használsz.
   – Burn out? Ellenkezőleg: ezt az időt arra szánd, amiért szereted a
     munkádat.
• Dolgozz közösen másokkal.
• Légy mentor: taníts, abból többet tanulsz.
Gyakorlás
• Kata
  – Harcművészetekben: formagyakorlat
    • A harc egyik felét imitáló mozgás.
    • Célja: a test felkészítése a helyes reakciókra, a
      mozgás folyamatossá tétele.
  – Programozás terén:
    • A fejlesztőkörnyezet kiismerése.
    • Design elvek berögzülése.
    • Különböző döntések következményeinek
      megértése.
    • Diszciplínák (pl.: TDD) gyakorlása
Tágítsd a látóköröd
• Nem egészséges beleragadni egy
  technológiába.
  – Ki tudja meddig használják még?
• Open source projects
  – Lehetőleg olyan nyelven, amit munkahelyen
    nem használsz.
• Ha otthon vagy dojo-ban
  gyakorolsz, gyakran válts nyelvet.
  – Akár egy napon belül is!
Felhasznált képek
•   Rajzok: Robert C. Martin: The Clean Coder
•   Egyéb képek:
     – http://www.acclaimimages.com/_gallery/_image_pages/0124-1003-0412-
       5958.html
     – http://blogs.exploratorium.edu/strange-attractor/stairway-to-heaven/
     – http://infinitybound.com/index.php/2009/09/08/space-elevator-materials-are-the-
       key/
     – http://spaceelevatorwiki.com/wiki/index.php/Main_Page
     – http://en.wikipedia.org/wiki/File:Challenger_explosion.jpg
     – http://www.hanselman.com/blog/HanselminutesPodcast171TheReturnOfUncleBo
       b.aspx
     – http://www.aeronauticpictures.com/stock-photo/thumbnails.php?album=84
     – http://news.nationalpost.com/2011/08/08/photo-gallery-seven-sad-stock-traders/
     – The Social Network movie
     – http://www.naturalproductivity.com/2011/11/02/defeat-distractions-with-the-
       pomodoro-technique/
     – http://www.digitaltrends.com/computing/was-dennis-ritchie-more-important-than-
       steve-jobs/
     – Kill Bill movie

Weitere ähnliche Inhalte

Andere mochten auch

Monster TV - Youtube Gadget by Runtime Solutions
Monster TV - Youtube Gadget by Runtime SolutionsMonster TV - Youtube Gadget by Runtime Solutions
Monster TV - Youtube Gadget by Runtime SolutionsVinita Daki
 
The role of informal providers in health markets
The role of informal providers in health marketsThe role of informal providers in health markets
The role of informal providers in health marketsJeff Knezovich
 
APBDRF Scientific Advisory Board Meeting December 2013: Research Update
APBDRF Scientific Advisory Board Meeting December 2013: Research UpdateAPBDRF Scientific Advisory Board Meeting December 2013: Research Update
APBDRF Scientific Advisory Board Meeting December 2013: Research UpdateBen Decker
 
A Windows Phone világa
A Windows Phone világaA Windows Phone világa
A Windows Phone világaOpen Academy
 
[Student exchange vietnam] Vietnamese language training
[Student  exchange vietnam] Vietnamese language training[Student  exchange vietnam] Vietnamese language training
[Student exchange vietnam] Vietnamese language trainingLinh MP. Pham
 
Como llegar a Excel
Como llegar a ExcelComo llegar a Excel
Como llegar a ExcelRRBY28635
 
寫40個願望給未來
寫40個願望給未來寫40個願望給未來
寫40個願望給未來superspeaker
 

Andere mochten auch (17)

Kutpoint - Overview
Kutpoint - OverviewKutpoint - Overview
Kutpoint - Overview
 
Monster TV - Youtube Gadget by Runtime Solutions
Monster TV - Youtube Gadget by Runtime SolutionsMonster TV - Youtube Gadget by Runtime Solutions
Monster TV - Youtube Gadget by Runtime Solutions
 
Parigi tra arte e sho
Parigi tra arte e shoParigi tra arte e sho
Parigi tra arte e sho
 
The role of informal providers in health markets
The role of informal providers in health marketsThe role of informal providers in health markets
The role of informal providers in health markets
 
APBDRF Scientific Advisory Board Meeting December 2013: Research Update
APBDRF Scientific Advisory Board Meeting December 2013: Research UpdateAPBDRF Scientific Advisory Board Meeting December 2013: Research Update
APBDRF Scientific Advisory Board Meeting December 2013: Research Update
 
A Windows Phone világa
A Windows Phone világaA Windows Phone világa
A Windows Phone világa
 
How to make_an_origami_crane
How to make_an_origami_craneHow to make_an_origami_crane
How to make_an_origami_crane
 
Korelasi
KorelasiKorelasi
Korelasi
 
[Student exchange vietnam] Vietnamese language training
[Student  exchange vietnam] Vietnamese language training[Student  exchange vietnam] Vietnamese language training
[Student exchange vietnam] Vietnamese language training
 
Como llegar a Excel
Como llegar a ExcelComo llegar a Excel
Como llegar a Excel
 
寫40個願望給未來
寫40個願望給未來寫40個願望給未來
寫40個願望給未來
 
Lab12
Lab12Lab12
Lab12
 
belum
belumbelum
belum
 
Destress yourself-1213369359172247-8
Destress yourself-1213369359172247-8Destress yourself-1213369359172247-8
Destress yourself-1213369359172247-8
 
Mobile Marketing May 2011
Mobile Marketing May 2011Mobile Marketing May 2011
Mobile Marketing May 2011
 
Deber anualidades
Deber anualidadesDeber anualidades
Deber anualidades
 
TKIO-tools
TKIO-toolsTKIO-tools
TKIO-tools
 

Ördög Rafael - The Clean Coder - bookreview

  • 1. The Clean Coder A Code of Conduct for Professional Programmers (Robert C. Martin)
  • 2.
  • 4.
  • 5.
  • 6. Ki volt a felelős? • A rakéta tervezői? – Tudtak a problémáról, jelentették 7 évvel korábban. – A javításra megvolt a javaslat, de a vezetés halogatta a megvalósítást. – Közvetlen az indítás előtt is felhívták a figyelmet a problémára. • A NASA döntéshozói? – Hatalmas politikai és anyagi nyomás alatt döntöttek. – Úgy érezték a mérnökök aggodalmai túlzóak (bizalomhiány). • Elég-e tudomásul venni, hogy a vezetők voltak a hibásak? – Nyugodtan aludtak-e a mérnökök aznap éjszaka? – Tehettek-e volna többet?
  • 7.
  • 8. Katasztrofális bugok • MIM-104 Patriot rakéta számítási hiba miatt célt tévesztett, ezzel 28 amerikai katona életét oltotta ki. • 1983-ban majdnem atomháborút okozott a rakétaelhárítás hibásan működő szoftvere. • Ariane 5 rakéta 1 milliárd dolláros prototípusa egy bug miatt önmegsemmisített. – További drága bugok az űrkutatás területén: Mars Polar Lander, NASA Mariner 1, Phobos 1, Mars Global Surveyor • 2003. augusztus 14-én több államnyi területen elment az áram milliárdos anyagi kárt okozva. • Therac-25 sugárterápiás eszköz hibás működése 5 emberéletet követelt 1980-ban. • 1992 áprilisában az első F-22 Raptor software hiba miatt landolás közben a földnek csapódott. • 1982 -1983: Vancouver Stock Exchange Index számításában felhalmozódtak a kerekítési hibák és újraszámításnál kiderült: nem 520, hanem 1098.892 kéne, hogy legyen.
  • 9.
  • 10. Felelősségvállalás • Felelősségvállalás tetteinkért. – Ha kell, akár anyagi értelemben is. – Bizonyos értelemben programozni arrogancia: • Azt állítod, képes vagy elvégezni 10 , 100 vagy éppen több ezer ember munkáját egyszerre. • Hatalmas felelősség: könnyen okozhatsz annyi kárt, mint 1000 „átlagember”. • Ne gúnyold, aki hibázott (inkább segíts). • Viseld méltósággal, ha a hibáidért büntetnek, vagy gúnyolnak. – Ne vedd a szívedre, ha igaztalanul teszik. • Ne tégy kárt. – A célod mindig a hibátlan program legyen. • Nem sikerülhet mindig, mert a programok bonyolultak. • Az emberi test is az, mégse mondja az orvosod azt, hogy „néha megesik, hogy a beteg meghal a műtőben, ez normális” • Tanulj meg őszintén bocsánatot kérni!
  • 12. A konfliktus értéke • Egy cégen belül mindenkinek van felelősége. – Mindenki a saját érdekeit kell, hogy védje: • A gazdasági vezető érdeke, hogy ne folyjon el a pénz. • A termék manager védi a használhatóságot. • A projekt manager a határidők teljesítéséért felelős. • A TE feladatod, hogy megtartsd a fejlesztés lendületét, és REÁLIS információkat szolgáltass annak állapotáról. – Ne térj ki részletekre: » Jó esetben amúgy se érdekli, mert a TE dolgod. » Rossz esetben még beleszól a végén. – Közös megegyezés: • Addig vitázzatok, amíg közös nevezőre nem jutottatok. • Ne próbálj hős lenni. (Ha túlhajtod magad, csökkenni fog a teljesítményed.) • Megpróbálom = Megcsinálom. (Számítani fognak rá!)
  • 13. Team player? • Tévhit • Realitás – Mindig azt próbálja – Nemet mond, ha kell, de ha teljesíteni, amit kérnek tőle. igent mond, azt be is váltja. – Kerüli a konfliktust. – Megoldja a konfliktust. – Nem kerüli meg a – Ha szükségesnek feletteseit. érzi, magasabb vezetőknek is jelzi a problémát. – Nem enged a célokból. – Időben felismeri, ha nem reálisak a célok. – Ha kell, feladja az – Ragaszkodik az elveit, hogy időben kész elveihez, mert tudja, hogy a legyen. kapkodás csak lassít a munkán. – Ismeri a határait. Ha mégis – Ha kell, zokszó nélkül kell túlórázni, azt túlórázik. pihenéssel kompenzálja.
  • 14. Elhivatottság • Az elhivatottság fokai: – Azt mondod, hogy meg kéne tenned. – Az gondolod, hogy (majd egyszer) megteszed. – Meg is teszed. • Az elhivatottság hiányának nyelve: – Kellene / Bárcsak / CsinálJUK meg / Majd egyszer • Ha ezt hallod, ne számíts megoldásra! • Az elhivatottság nyelve – Megcsinálom! (Nem mi, nem valaki, hanem ÉN!) – Ne hagyj magadnak kiutat. • Ne várj másra! – Beszélj meg vele időpontot. – Ha szükséges, javasolj hetenkénti találkozót. – Absztraháld az interface-t, hogy addig is tudj haladni, amíg rá vársz. – Ha még mindig nincsenek készen, akkor készíts mock-ot az ő rendszerükre, hogy a sajátodat tudd tesztelni.
  • 15. Becslések • A becslés nem egy szám, hanem egy eloszlás. – Ez a tényt mindig tedd egyértelművé. – Vigyázz, hogy ne vállalj implicit módon kötelezettséget olyanra, amit nem tudsz biztosan teljesíteni. – Amíg nem vagy biztos a dolgodban, ne vállalj be határidőt. • Használd a PERT módszert. – Optimista becslés, normális becslés, pesszimista becslés. • Ezekből sok egyéb információ számolható. • Bontsd fel a feladatokat apró részekre. – A nagyszámok törvénye szerint, minél több becslést aggregálunk, annál kisebb lesz az eltérés esélye. • Becsülj csapatban: – Több ember kisebbet téved. – Wideband Delphi alapú módszerek: • Flying fingers, Planing poker, Affinity Estimation
  • 16. Csúszások • Senki sem tökéletes, előfordul, hogy kicsúszunk az időből: – Soha ne remélj: légy tárgyilagos, és ismerd fel minél hamarabb a csúszást. • „Monitor your progress” (Pl.: burn down chart.) – Ne kapkodj: a kapkodásnak később nagyon megfizeted az árát. • False delivery: hamis meggyőződés, mely szerint kész vagy, és tovább mehetsz: – Legyen a késznek pontos definíciója: » FitNesse, Selenium, RobotFX, Cucumber • Martin Fowler megengedőbb: Technical debt. – Túlórák: • Néha szükséges, de nagyon gondold meg, hogy mikor élsz vele: – 2-3 hét után többet rontja a hatékonyságot, mint amit segít. – 20% túlóra NEM hoz 20% több eredményt. – Legyen B terv arra az esetre, ha a túlóra sem segített. – Ne áldozd fel a magánéleted, és ne várd ezt mástól se. » Nincs rosszabb, mint a rosszkedvű programozó.
  • 17.
  • 18. A lendület megőrzése • Ne hagyd, hogy a program elrohadjon. – Azért soft a software, mert könnyű változtatni. • Ez mindig legyen igaz! • Akkor marad rugalmas a struktúra, ha nem hagyod megkövülni. • Ha kezd áttekinthetetlen lenni a forráskód, ne menj tovább. • Boy scout rule / Betört ablak elv: Refaktorálj, amint úgy érzed, hogy valamit lehetne jobban is. • Emlékezz rá, hogy a rendetlen kód exponenciálisan lassít le. – Veszélyes a folyamatos változtatás? • Az igazán veszélyes az, ha minden változtatás sok apró 1-1 soros módosítássá válik. – Mit tegyünk a veszély ellen? • Használj védőhálót = Automatizált tesztek
  • 19. Felkészültség • A software fejlesztés nehéz feladat: – Egymásnak ellentmondó követelményeknek kell megfelelni. – Kreativitást igényel minden egyes lépés. • Légy mindig kipihent. – A hajnal 3-kor írt kódban mindig sok a hiba. • Ha lassulsz, elakadsz, ne akarj hős lenni: menj haza, pihenj, zuhanyozz le, reggel be fog ugrani a megoldás. – Fáradtan az ember hajlamos „keresztbe drótozni” dolgokat. • Rossz és visszafordíthatatlan döntéseket hozunk. • Aggódás: – Ha agyilag máshol jársz, nem haladsz. – Lehetőleg oldd meg a gondjaidat a szabadidődben. • Ha megengedett, hogy eltold a munkaidődet 1-2 órával, akkor ezt használd arra, hogy közelebb kerülj a megoldáshoz. (Sokszor elég a megnyugváshoz.) • Ha ez nem fér bele a cégkultúrába, akkor viszont ne késs emiatt! – Ha muszáj elkezdened dolgozni, akkor 45 percenként szánj 10 percet a probléma megoldására.
  • 20. Útvesztők és egyéb csapdák • Least objectional activity / Priority inversion – Néha előfordul, hogy amit csinálnod kell, ahhoz nincs kedved. – Ilyenkor könnyen esünk abba a hibába, hogy meggyőzzük magunkat arról, hogy egy másik feladat mégis fontosabb. • Kifogásokat gyártasz és hazudsz magadnak, hogy felkészítsd magad arra, hogy másnak is hazudj. • Útvesztők – Néha rosszul döntünk, de ilyenkor ismerjük fel mielőbb. • Ne győzködd magad, hogy jó lesz, ha látod, hogy nem.
  • 21. Kollaboráció • Programozók maguk közt – Ne birtokold a kódot. – Pairing • Ha megzavarnak, a párod segít visszazökkenni. • Ha fáradt vagy, segít tartani a ritmust. • Rákényszerít, hogy pontosabban gondolj végig mindent. • Programozók és munkáltatók – Tartsd tiszteletben a cég értékeit. – Értsd meg az üzleti célokat. – Értsd meg a csapatod céljait. – Figyelj oda a határidőkre és egyéb fontos információkra. – Legyél politikus.
  • 22. Értsd meg, mivel foglalkozol • Azonosulj a megrendelővel / főnököddel: – Az ő problémája végül a tiéd is! – Mindig a cég érdekeit tartsd szem előtt. – Nem az a célod, hogy holnap elégedett legyen, hanem az, hogy a közös célt elérjétek. • Ismerd meg a területet: – Ne vakon programozz: ismerd meg a felhasználók szakterületét legalább alapszinten. – Rettenetes hiba pusztán a specifikációból dolgozni: ismerd a témát annyira, hogy észrevedd a hibákat benne.
  • 23. Teams • Az összeszokott team sokkal jobb. • Ne projektek köré szervezzünk csapatot, hanem kész csapatot rendeljünk projekthez. – Egy összeszokott csapat képes akár több projektet is effektíven szétosztani egymás között. • A csapatok teljesítménye mérhető bizonyos (heurisztikus) metrikákkal. • Megadható egy csapatnak, hogy a fenti teljesítménymérők tekintetében hogyan ossza meg az idejét több projekt között. – Adott esetben átmenetileg ez eltolható egyik-másik projekt javára, ha határidő közeleg. • Fél emberek nincsenek – A feladatok közötti kontextus váltás időt emészt fel.
  • 24. Meeting • Szükségesek és hasznosak. • Egy rossz meeting rengeteg időt elpocsékolhat. – Anyagi oldal: egy átlag 1 órás meeting ára $200/résztvevő – A munkáltatóddal szembeni kötelességed, hogy NE menj el olyan meetingre, ami nem érint. • Legyen pontos agenda. – Ha nem érint, illedelmesen mondj rá nemet. – Ha eltérnek az agendától, hívd fel rá a figyelmet. – Ha valamiért mégsem érint a téma, illedelmesen távozz. • Stand-up meetings – Segít tartani a tempót. • Vitás kérdések: – Ami 5 perc alatt nem dől el, azt szimpla vita nem dönti el. – Légy tekintettel másokra, ha őket nem érinti, a vitát meeting után folytassátok.
  • 25.
  • 26. Flow zone • Meditatív állapot, melyben a fejlesztő hatékonynak érzi magát, és képes gyorsan nagymennyiségű kódot írni. – Probléma: • Valóban több kód születik ilyenkor, na de olyan is... • Mivel úgy érezzük, kevésbé hibázunk, kevésbé is vesszük észre, ha mégis. • Könnyebben feladjuk a diszciplínáinkat. (Például TDD esetén több kódot írunk meg egy iterációban, mint kéne.) • A flow-ból kiszakított programozó sokszor durván reagál, ha kérdeznek tőle valamit. • A pair programming segít kívül maradni. – Gyakorláshoz viszont jó.
  • 27. Flow zone • Zenehallgatás: – Kizárja a külvilágot, de befolyásolhatja a döntéseinket. (Dalszövegből kiragadott elnevezések.) – Könnyebben kerül az ember flow-ba. • Ha kizökkentenek: – Ne reagálj agresszívan, ne éreztesd a másikkal, hogy megzavart. – A TDD segít abban, hogy kontextusban maradj, hiszen a nem működő teszt megmutatja, hol tartottál.
  • 28. Pomodoro technika • 25 percre állítsd be, addig koncentrálj arra, amit csinálsz. • Utána 5 percig foglalkozz mással. – Hívd vissza azt, aki keresett. – Válaszolj annak, aki kérdezett tőled. – Ha nem történt semmi, akkor csak kapcsolj ki picit. • Minden negyedik ilyen után tarts 30 perc szünetet.
  • 29. A hiba megelőzése • A teszter már ne találjon hibát! – Költséges egy nagy QA team fenntartása. – A debuggolásra szánt idő épp olyan drága, mint a fejlesztésre szánt. • A hiba megkeresése sokszor több idő, mint a megelőzése. – Ha sok hibát talál a QA, az megrendíti a vezetők bizalmát a csapatban. – Felelőtlen és lusta hozzáállás: • A teszterek csak szűrik a hibákat, sok elkerülheti a figyelmüket. • Tesztelj minden egyes módosítást!!! – Automatizáld a teszteket. – A 100% lefedettséget célozd. – Nincs nehezen tesztelhető feladat, csak rosszul tervezett program! • Design for tests! – A tesztelés minden szintjén automatizálj, így bizonyos esetekben QA team már nem is kell (pl.: FitNesse).
  • 30.
  • 31. Test Driven Development • Rövid iterációk • Alaposan tesztelt kód – Amit elveszítesz időben a teszt írással, visszanyered a debuggolásnál. • Modulárisabb forráskódot kényszerít ki. • A felhasználó szemszögéből tervezed az interface-t. • Segíti a refaktorálást, bátorságot ad a változtatásokhoz. – „Ki kéne javítani!” <VS> „Hozzá nem érek!” • Több tanulmány is született már a hibaráta csökkenéséről, és a fejlesztés felgyorsulásáról. • Vannak nehézségei (pl.: IP kapcsolatot tartalmazó program tesztelése), de ezekre már mind született megfelelő megoldás. (Komoly irodalma van a TDD-nek.) • Példákon keresztül dokumentálja a használatot. • Stb, stb, stb.
  • 32. „The user doesn't know what he wants.”
  • 33. Felhasználói igények • A megrendelő nem tudja, mit szeretne. – Ami papíron jól hangzik, gyakorlatban lehet mesterkélt. • Készülj fel a változásokra. • Ne tervezd túl a dolgokat előre. • Ne próbálj túl pontosan becsülni határidőt. – Hangsúlyozd, hogy becslésről van szó. – A diagramjaidon szerepeljenek hiba határok. • Kétértelműség – Ha a döntéshozók nem értenek egyet, sokszor megkerülik a döntést. • Ha valami kétértelműt látsz a specifikációban, jó esély van rá, hogy ide-oda kell majd változtatni. – Sokszor feltételezzük implicit módon, hogy a másik tud valamit, vagy egyetért velünk valamiben. • Ha valamiben nem vagy biztos, kérdezz. • Ha nem kapsz egyértelmű választ, vagy hezitál a döntéshozó, készülj fel a változtatásra.
  • 34. Acceptance Tests • Definíció: olyan automatizált teszt, melyet a fejlesztők (főleg QA részről) és a döntéshozók közösen írnak a fejlesztés megkezdése ELŐTT, annak érdekében, hogy a „KÉSZ” fogalmát pontosítsák az egyes felhasználói igények esetén. – Nem ugyanaz, mint a User Acceptance Test, ami kézi, és a munka befejeztével valósul meg. – Happy path vs. Unhappy path. (Stakeholders vs. QA) • FitNesse: – Acceptance testing keretrendszer – Automatizált és Wiki alapú – Egyszerű nyelvezetű, így a fejlesztéshez nem értő döntéshozók számára is elérhető. – Kikényszeríti a könyörtelen precizitást a requirement megfogalmazóitól.
  • 35. Fitnesse Példa given the command LogFileDirectoryStartupCommand given that the old_inactive_logs directory does not exist when the command is executed then the old_inactive_logs directory should exist and it should be empty given the command LogFileDirectoryStartupCommand given that the old_inactive_logs directory exists and that it contains a file named x When the command is executed Then the old_inactive_logs directory should still exist and it should still contain a file named x
  • 36.
  • 37.
  • 38. Unit test vs. Acceptance test • Implementációra • Követelményekre vonatkozik. vonatkozik. • Programozóknak • Döntéshozóknak és szól. programozóknak szól. • Az egység a függvény • Az egység a user és az osztály. story. • Az implementációt • A követelmény segíti. megértését segíti. Mindkettő elsősorban dokumentáció, és csak másodsorban teszt!
  • 39. Egyéb megjegyzések • Ne légy passzív agresszív: – Ha egy teszt fura, egyeztess annak írójával. – Rossz hozzáállás: „Ezt kérték, ezt implementálom”. • GUI-n keresztül csak GUI-t tesztelj. – Válaszd le teljesen a magrendszerről, már csak az SRP miatt is. – A GUI gyakran változik, fenntarthatatlanná tenné a teszteket. • Mind a unit, mind az acceptance test rendszer legyen összekötve a verziókövetővel (Continous Integration) – Minden commit váltson ki egy teljes tesztet. – Senki ne commitoljon failing tesztet. – Ha mégis fail van, akkor mindenki azonnal azzal foglalkozzék. – Soha ne kommentezz ki tesztet. • Martin Fowler kicsit lazább: limitált méretű quarantine
  • 40.
  • 42. Teszt piramis Közel 100% lefedettséget kínáló, implementáció specifikus tesztek, melyeket a programozók maguknak írnak.
  • 43. Teszt piramis Acceptance tesztek közül azok, melyek üzleti logikát tesztelnek optimális feltételek mellet. Interakcióba csak mock objectekkel léphet.
  • 44. Teszt piramis Komponensek közötti kommunikációt teszteli, tipikusan a lead architect írja. Néhány performancia teszt is lehet benne. Napi 1 futás.
  • 45. Teszt piramis Egyben teszteli az egész rendszert. Itt is lehetnek performancia tesztek.
  • 46. Teszt piramis Az egyetlen manuális teszt csoport. Teljesen adhoc, és a lényege épp az, hogy azokat az eseményeket váltsa ki, amikre senki nem számított. (Bug hunt day.)
  • 47.
  • 48. A tudás hatalom • A mi szakmánkban 5 év nagy idő. – A munkahelyi feladatok általában nem mozgatják meg minden képességedet. • Előfordulhat, hogy amit már rég elfelejtettél, arra lenne szükséged, és nem is veszed észre: frissítsd a régi tudást is. • Aki nem ismeri a múltat, előbb-utóbb megismétli azt. – A technológiák olyan gyorsan tűnnek el, amilyen gyorsan megjelennek. – Nem a munkáltatód feladata, hogy képezzen téged. • A Te piaci értéked múlik ezen, nem az övé. – Nem munkaidőben kell ezt megtenned. • Legyél hálás, ha kapsz rá időt!
  • 49. Tanulj • Cél: Átlag heti 20 óra tanulás – A manager pozíció (ide értve a CEO-t is) nem ad felmentést! – Ezt az időt semmiképp ne töltsd munkahelyi feladatokkal: ez a TE időd! – Edzés közben, vezetés közben hallgass podcastokat. – Olvass a vonaton szakkönyveket. – Alapíts a barátaiddal Code Dojo-t. – Gyakorold a Kata-kat. – Tanulj meg új nyelveket! • Lehetőleg olyat, ami nem hasonlít arra, amit épp használsz. – Burn out? Ellenkezőleg: ezt az időt arra szánd, amiért szereted a munkádat. • Dolgozz közösen másokkal. • Légy mentor: taníts, abból többet tanulsz.
  • 50.
  • 51. Gyakorlás • Kata – Harcművészetekben: formagyakorlat • A harc egyik felét imitáló mozgás. • Célja: a test felkészítése a helyes reakciókra, a mozgás folyamatossá tétele. – Programozás terén: • A fejlesztőkörnyezet kiismerése. • Design elvek berögzülése. • Különböző döntések következményeinek megértése. • Diszciplínák (pl.: TDD) gyakorlása
  • 52.
  • 53. Tágítsd a látóköröd • Nem egészséges beleragadni egy technológiába. – Ki tudja meddig használják még? • Open source projects – Lehetőleg olyan nyelven, amit munkahelyen nem használsz. • Ha otthon vagy dojo-ban gyakorolsz, gyakran válts nyelvet. – Akár egy napon belül is!
  • 54.
  • 55. Felhasznált képek • Rajzok: Robert C. Martin: The Clean Coder • Egyéb képek: – http://www.acclaimimages.com/_gallery/_image_pages/0124-1003-0412- 5958.html – http://blogs.exploratorium.edu/strange-attractor/stairway-to-heaven/ – http://infinitybound.com/index.php/2009/09/08/space-elevator-materials-are-the- key/ – http://spaceelevatorwiki.com/wiki/index.php/Main_Page – http://en.wikipedia.org/wiki/File:Challenger_explosion.jpg – http://www.hanselman.com/blog/HanselminutesPodcast171TheReturnOfUncleBo b.aspx – http://www.aeronauticpictures.com/stock-photo/thumbnails.php?album=84 – http://news.nationalpost.com/2011/08/08/photo-gallery-seven-sad-stock-traders/ – The Social Network movie – http://www.naturalproductivity.com/2011/11/02/defeat-distractions-with-the- pomodoro-technique/ – http://www.digitaltrends.com/computing/was-dennis-ritchie-more-important-than- steve-jobs/ – Kill Bill movie