33

Kevlin Henney 97 Klicovych Znalosti Programatora

  • Upload
    siskinx

  • View
    12

  • Download
    0

Embed Size (px)

DESCRIPTION

programovanie

Citation preview

  • Recenze:

    esk teka eReading.cz je vlastn tablet s elektronickm paprem. Netradin funkce doplnila

    monost pjovat si e-knihy (ZDARMA) z knihoven. Vkonem i funkcemi pat eReading.cz 4 ke

  • pice ...

  • Kevlin Henney

    97 klovch znalost programtora

    Computer Press, a. s.Brno2010

    K1834.indd 1K1834.indd 1 21.6.2010 14:31:3221.6.2010 14:31:32

  • 97 klovch znalost programtoraKevlin Henney

    Computer Press, a. s., 2010. Vydn prvn.

    Authorized Czech translation of 97 Things Every Programmer Should Know ISBN 9780596809485 2010, Kevlin Henney.This translation is published and sold by permission of OReilly Media, Inc., the owner of all rights to publish and sell the same.

    Autorizovan peklad z originlnho anglickho vydn 97 Things Every Programmer Should Know.Originln copyright: 2010 Kevlin Henney.Peklad: Computer Press, a. s., 2010.

    Computer Press, a. s.,Holandsk 3, 639 00 Brno

    Objednvky knih:http://[email protected].: 800 555 513

    ISBN 978-80-251-3145-9Prodejn kd: K1834Vydalo nakladatelstv Computer Press, a. s., jako svou 3645. publikaci.

    Computer Press, a. s. Vechna prva vyhrazena. dn st tto publikace nesm bt koprovna a rozmnoovna za elem roziovn v jakkoli form i jakmkoli zpsobem bez psemnho souhlasu vydavatele.

    Jazykov korektura: Veronika MackovVnitn prava: Dagmar HajdajovSazba: Ctibor FoltnRejstk: Daniel treitOblka: Zuzana indlerov

    Koment na zadn stran oblky: Martin Herodek

    Technick spoluprce: Ji MatouekOdpovdn redaktor: Martin HerodekTechnick redaktor: Ji MatouekProdukce: Petr Bal

    K1834.indd 2K1834.indd 2 21.6.2010 14:31:5221.6.2010 14:31:52

  • Obsah 3

    Obsah

    Tipy podle zamen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11

    vod . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17

    Jednejte s opatrnost . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20Seb Rose

    Aplikujte principy funkcionlnho programovn . . . . . . . . . . . . . . . . . . 22Edward Garson

    Polote si otzku: Co by udlal uivatel? (vy jm nejste) . . . . . . . . . . . 24Giles Colborne

    Automatizujte sv kdovac standardy . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26Filip van Laenen

    V jednoduchosti je krsa . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28Jrn lmheim

    Ped refaktorovnm . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30Rajith Attapattu

    Pozor na sdlen kd . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32Udi Dahan

    Skautsk pravidlo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34Robert C. Martin (Uncle Bob)

    Ne zanete obviovat ostatn, zkontrolujte vlastn kd . . . . . . . . . . . 36Allan Kelly

    K1834.indd 3K1834.indd 3 21.6.2010 14:31:5221.6.2010 14:31:52

  • Nstroje volte s rozvahou . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38Giovanni Asproni

    Programujte v jazyce domny . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40Dan North

    Kd pedstavuje nvrh . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42Ryan Brush

    Na odsazen kdu zle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44Steve Freeman

    Revize kdu . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46Mattias Karlsson

    Odvodnn sprvnosti kdu . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48Yechiel Kimchi

    Pr slov ke komentm . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50Cal Evans

    Komentujte pouze to, co kd sm nedoke ct . . . . . . . . . . . . . . . . . . 52Kevlin Henney

    Nepetrit uen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54Clint Shank

    Pohodlnost nepat mezi ctnosti . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56Gregor Hohpe

    Nasazujte brzy a asto . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58Steve Berczuk

    Rozlite technick a business vjimky . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60Dan Bergh Johnsson

    Procviujte se . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62Jon Jagger

    Jazyky specifi ck pro domnu . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64Michael Hunger

    Nebojte se, e nco rozbijete . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 66Mike Lewis

    Nesnate se okouzlit testovacmi daty . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68Rod Begbie

    4 97 klovch znalost programtora

    K1834.indd 4K1834.indd 4 21.6.2010 14:31:5221.6.2010 14:31:52

  • Obsah 5

    Neignorujte chyby . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 70Pete Goodliff e

    Nesta pouze nauit se jazyk, ale porozumt jeho kultue . . . . . . . . . 72Anders Nors

    Nesnate se svj program pibt do vzpmen polohy . . . . . . . . . . . . 74Verity Stob

    Nevte na kouzla . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 76Alan Griffi ths

    Neopakujte se . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 78Steve Smith

    Nedotkej se toho kdu . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 80Cal Evans

    Zapouzdete chovn, ne pouze stav . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 82Einar Landre

    sla s plovouc dovou rkou nejsou reln . . . . . . . . . . . . . . . . . . . . 84Chuck Allison

    Naplte sv ambice pomoc open-source . . . . . . . . . . . . . . . . . . . . . . . . . 86Richard Monson-Haefel

    Zlat pravidlo nvrhu API . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 88Michael Feathers

    Mtus guru . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 90Ryan Brush

    Dina se nevyplc . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 92Olve Maudal

    Pouit systmu pro sledovn chyb . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 94Matt Doar

    Vylepete kd tm, e ho odstrante . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 96Pete Goodliff e

    Nainstaluj si m . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 98Marcus Baker

    Komunikace mezi procesy ovlivuje reakn dobu aplikace . . . . . . . 100Randy Staff ord

    K1834.indd 5K1834.indd 5 21.6.2010 14:31:5221.6.2010 14:31:52

  • Udrujte build ist . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 102Johannes Brodwall

    Naute se pouvat nstroje pkazovho dku . . . . . . . . . . . . . . . . . . 104Carroll Robinson

    Ovldejte vce ne dva programovac jazyky . . . . . . . . . . . . . . . . . . . . . 106Russel Winder

    Poznejte sv IDE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 108Heinz Kabutz

    Poznejte sv limity . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 110Greg Colvin

    Poznejte, kdy dokonte prci . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 112Dan Bergh Johnsson

    Rozshl vzjemn propojen data pat do databze . . . . . . . . . . . . 114Diomidis Spinellis

    Naute se ciz jazyky . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 116Klaus Marquardt

    Naute se odhadovat . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 118Giovanni Asproni

    Naute se ct: Ahoj, svte . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 120Th omas Guest

    Nechte projekt mluvit sm za sebe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 122Daniel Lindner

    Linker nen dnm magickm programem . . . . . . . . . . . . . . . . . . . . . . 124Walter Bright

    Dlouhovkost provizornch een . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 126Klaus Marquardt

    Rozhran by se mla snadno pouvat sprvnm zpsobem a tko patnm . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 128

    Scott Meyers

    A se neviditeln stane vce viditelnm. . . . . . . . . . . . . . . . . . . . . . . . . . . 130Jon Jagger

    6 97 klovch znalost programtora

    K1834.indd 6K1834.indd 6 21.6.2010 14:31:5221.6.2010 14:31:52

  • Obsah 7

    Pedvn zprv vede v paralelnch systmech k lep roziitelnosti . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 132

    Russel Winder

    Odkaz budoucnosti . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 134Linda Rising

    Nevyuit pleitosti k polymorfi zmu . . . . . . . . . . . . . . . . . . . . . . . . . . . 136Kirk Pepperdine

    Novinka: Testei jsou vai kamardi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 138Burk Hufnagel

    Pouze jeden binrn soubor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 140Steve Freeman

    Pouze kd k pravdu . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 142Peter Sommerlad

    Nezapomnejte na sestaven . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 144Steve Berczuk

    Prov programovn . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 146Gudny Hauknes, Kari Rssland a Ann Katrin Gagnat

    Preferujte typy specifi ck pro domnu ped primitivnmi typy . . . . 148Einar Landre

    Pedchzejte chybm . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 150Giles Colborne

    Profesionln programtor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 152Robert C. Martin (Uncle Bob)

    Vechno verzujte . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 154Diomidis Spinellis

    Odlote my a odstupte od klvesnice . . . . . . . . . . . . . . . . . . . . . . . . . . . 156Burk Hufnagel

    tte kd . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 158Karianne Berg

    Zajmejte se o humanitn vdy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 160Keith Braithwaite

    K1834.indd 7K1834.indd 7 21.6.2010 14:31:5221.6.2010 14:31:52

  • asto znovu vynalzejte kolo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 162Jason P. Sage

    Odolejte pokuen nvrhovho vzoru jedinek . . . . . . . . . . . . . . . . . . 164Sam Saariste

    Honbu za vkonem komplikuje pinav kd . . . . . . . . . . . . . . . . . . . . . 166Kirk Pepperdine

    Jednoduchost jde ruku v ruce s redukc . . . . . . . . . . . . . . . . . . . . . . . . . . 168Paul W. Homer

    Princip jedn odpovdnosti . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 170Robert C. Martin (Uncle Bob)

    Zante u Ano . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 172Alex Miller

    Odstupte a automatizujte, automatizujte, automatizujte . . . . . . . . . 174Cay Horstmann

    Vyuijte nstroj pro analzu kdu . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 176Sarah Mount

    Testujte poadovan, nikoli nahodil chovn . . . . . . . . . . . . . . . . . . . . 178Kevlin Henney

    Testujte pesn a konkrtn . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 180Kevlin Henney

    Testujte ve spnku (a pes vkendy) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 182Rajith Attapattu

    Testovn je psnost softwarovho vvoje. . . . . . . . . . . . . . . . . . . . . . . 184Neal Ford

    Mylen ve stavech . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 186Niclas Nilsson

    Dv hlavy jsou asto lep ne jedna . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 188Adrian Wible

    Dvakrt patn me znamenat dobe (a tko se opravuje) . . . . . . 190Allan Kelly

    Ubuntu pro vae ptele. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 192Aslam Khan

    8 97 klovch znalost programtora

    K1834.indd 8K1834.indd 8 21.6.2010 14:31:5321.6.2010 14:31:53

  • Unixov nstroje jsou vai kamardi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 194Diomidis Spinellis

    Pouijte sprvn algoritmus a datovou strukturu . . . . . . . . . . . . . . . . . 196Jan Christiaan JC van Winkel

    Pehnan protokolovn vm na klidnm spnku nepid . . . . . . . . 198Johannes Brodwall

    WET pomh pekonat vkonnostn pekky . . . . . . . . . . . . . . . . . . . . 200Kirk Pepperdine

    Kdy programtoi a testei spolupracuj . . . . . . . . . . . . . . . . . . . . . . . . . 202Janet Gregory

    Pit kd tak, jako byste museli zajiovat jeho podporu po zbytek svho ivota . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 204

    Yuriy Zubarev

    Vytvejte mal funkce na zklad pklad . . . . . . . . . . . . . . . . . . . . . . 206Keith Braithwaite

    Vytvejte testy pro lidi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 208Gerard Meszaros

    O kd se muste starat . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 210Pete Goodliff e

    Vai zkaznci neuvauj nad tm, co kaj . . . . . . . . . . . . . . . . . . . . . . . . 212Nate Jackson

    Pispvatel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 214

    Rejstk . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 235

    Obsah 9

    K1834.indd 9K1834.indd 9 21.6.2010 14:31:5321.6.2010 14:31:53

  • K1834.indd 10K1834.indd 10 21.6.2010 14:31:5321.6.2010 14:31:53

  • Tipy podle zamen

    Chyby a opravy Ne zanete obviovat ostatn, zkontrolujte vlastn kd . . . . . . . . . . . . . . . . . . 36Nedotkej se toho kdu . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 80Pouit systmu pro sledovn chyb . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 94Dvakrt patn me znamenat dobe (a tko se opravuje) . . . . . . . . . . . . . 190

    Vvoj Nasazujte brzy a asto . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58Nedotkej se toho kdu . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 80Nainstaluj si m . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 98Udrujte build ist . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 102Nechte projekt mluvit sm za sebe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 122Pouze jeden binrn soubor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 140Nezapomnejte na sestaven . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 144

    Vzhled kdu Automatizujte sv kdovac standardy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26Na odsazen kdu zle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44Revize kdu . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46Pr slov ke komentm . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50Komentujte pouze to, co kd sm nedoke ct . . . . . . . . . . . . . . . . . . . . . . . . . 52Vyuijte nstroj pro analzu kdu . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 176

    Tipy podle zamen 11

    K1834.indd 11K1834.indd 11 21.6.2010 14:31:5321.6.2010 14:31:53

  • Techniky nvrhu Aplikujte principy funkcionlnho programovn . . . . . . . . . . . . . . . . . . . . . . . . . 22Polote si otzku: Co by udlal uivatel? (vy jm nejste) . . . . . . . . . . . . . . . . . . 24V jednoduchosti je krsa . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28Nstroje volte s rozvahou . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38Programujte v jazyce domny . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40Kd pedstavuje nvrh . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42Odvodnn sprvnosti kdu . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48Pohodlnost nepat mezi ctnosti . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56Rozlite technick a business vjimky . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60Neopakujte se . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 78Zapouzdete chovn, ne pouze stav . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 82Zlat pravidlo nvrhu API . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 88Komunikace mezi procesy ovlivuje reakn dobu aplikace . . . . . . . . . . . . . . 100Rozhran by se mla snadno pouvat sprvnm zpsobem

    a tko patnm . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 128Pedvn zprv vede v paralelnch systmech k lep roziitelnosti . . . . . 132Nevyuit pleitosti k polymorfi smu. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 136Pouze kd k pravdu . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 142Preferujte typy specifi ck pro domnu ped primitivnmi typy . . . . . . . . . . . 148Pedchzejte chybm . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 150Odolejte pokuen nvrhovho vzoru jedinek . . . . . . . . . . . . . . . . . . . . . . . . . 164Princip jedn odpovdnosti . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 170Mylen ve stavech . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 186WET pomh pekonat vkonnostn pekky . . . . . . . . . . . . . . . . . . . . . . . . . . . 200

    Mylen v souvislostech Programujte v jazyce domny . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40Jazyky specifi ck pro domnu . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64Naute se ciz jazyky . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 116Preferujte typy specifi ck pro domnu ped primitivnmi typy . . . . . . . . . . . 148Zajmejte se o humanitn vdy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 160Mylen ve stavech . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 186Vytvejte mal funkce na zklad pklad . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 206

    12 97 klovch znalost programtora

    K1834.indd 12K1834.indd 12 21.6.2010 14:31:5321.6.2010 14:31:53

  • Chyby, vjimky a ladn Rozlite technick a business vjimky . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60Neignorujte chyby . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 70Nesnate se svj program pibt do vzpmen polohy . . . . . . . . . . . . . . . . . . . 74Pedchzejte chybm . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 150Pehnan protokolovn vm na klidnm spnku nepid . . . . . . . . . . . . . . . 198

    Vuka a dovednosti Nepetrit uen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54Procviujte se . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62Nesta pouze nauit se jazyk, ale porozumt jeho kultue . . . . . . . . . . . . . . . . 72Naplte sv ambice pomoc open-source . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 86Mtus guru . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 90Dina se nevyplc . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 92tte kd . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 158Zajmejte se o humanitn vdy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 160asto znovu vynalzejte kolo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 162

    Tajemno a magino Nevte na kouzla . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 76Nedotkej se toho kdu . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 80Mtus guru . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 90Naute se pouvat nstroje pkazovho dku . . . . . . . . . . . . . . . . . . . . . . . . . 104Linker nen dnm magickm programem . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 124Testujte ve spnku (a pes vkendy) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 182Pehnan protokolovn vm na klidnm spnku nepid . . . . . . . . . . . . . . . 198Pit kd tak, jako byste museli zajiovat jeho podporu po zbytek

    svho ivota . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 204

    Vkon a optimalizace Aplikujte principy funkcionlnho programovn . . . . . . . . . . . . . . . . . . . . . . . . . 22sla s plovouc dovou rkou nejsou reln . . . . . . . . . . . . . . . . . . . . . . . . . . . 84Vylepete kd tm, e ho odstrante . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 96Komunikace mezi procesy ovlivuje reakn dobu aplikace . . . . . . . . . . . . . . 100Poznejte sv limity . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 110

    Tipy podle zamen 13

    K1834.indd 13K1834.indd 13 21.6.2010 14:31:5321.6.2010 14:31:53

  • Rozshl vzjemn propojen data pat do databze . . . . . . . . . . . . . . . . . . . 114Pedvn zprv vede v paralelnch systmech k lep roziitelnosti . . . . . 132Honbu za vkonem komplikuje pinav kd . . . . . . . . . . . . . . . . . . . . . . . . . . . . 166Pouijte sprvn algoritmus a datovou strukturu . . . . . . . . . . . . . . . . . . . . . . . . 196WET pomh pekonat vkonnostn pekky . . . . . . . . . . . . . . . . . . . . . . . . . . . 200Profesionln pstup . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .Nepetrit uen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54Procviujte se . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62Dina se nevyplc . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 92Dlouhovkost provizornch een . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 126Profesionln programtor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 152Odlote my a odstupte od klvesnice . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 156Testovn je psnost softwarovho vvoje. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 184Pit kd tak, jako byste museli zajiovat jeho podporu po zbytek

    svho ivota . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 204O kd se muste starat . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 210

    Programovac jazyky a paradigmata Aplikujte principy funkcionlnho programovn . . . . . . . . . . . . . . . . . . . . . . . . . 22Jazyky specifi ck pro domnu . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64Nesta pouze nauit se jazyk, ale porozumt jeho kultue . . . . . . . . . . . . . . . . 72Ovldejte vce ne dva programovac jazyky . . . . . . . . . . . . . . . . . . . . . . . . . . . . 106Naute se ciz jazyky . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 116

    Refaktorovn a drba kdu Jednejte s opatrnost . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20Ped refaktorovnm . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30Skautsk pravidlo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34Komentujte pouze to, co kd sm nedoke ct . . . . . . . . . . . . . . . . . . . . . . . . . 52Nebojte se, e nco rozbijete . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 66Vylepete kd tm, e ho odstrante . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 96Udrujte build ist . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 102Poznejte, kdy dokonte prci . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 112Dlouhovkost provizornch een . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 126Odkaz budoucnosti . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 134

    14 97 klovch znalost programtora

    K1834.indd 14K1834.indd 14 21.6.2010 14:31:5321.6.2010 14:31:53

  • Pouze kd k pravdu . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 142Nezapomnejte na sestaven . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 144Profesionln programtor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 152Honbu za vkonem komplikuje pinav kd . . . . . . . . . . . . . . . . . . . . . . . . . . . . 166Jednoduchost jde ruku v ruce s redukc . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 168Ubuntu pro vae ptele. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 192O kd se muste starat . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 210

    Znovupouit verzus opakovn Pozor na sdlen kd . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32Pohodlnost nepat mezi ctnosti . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56Procviujte se . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62Neopakujte se . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 78asto znovu vynalzejte kolo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 162Pouijte sprvn algoritmus a datovou strukturu . . . . . . . . . . . . . . . . . . . . . . . . 196WET pomh pekonat vkonnostn pekky . . . . . . . . . . . . . . . . . . . . . . . . . . . 200

    Plny, termny a odhady Jednejte s opatrnost . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20Kd pedstavuje nvrh . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42Poznejte, kdy dokonte prci . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 112Naute se odhadovat . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 118A se neviditeln stane vce viditelnm. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 130

    Jednoduchost V jednoduchosti je krsa . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28Naute se ct: Ahoj svte . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 120Odkaz budoucnosti . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 134Jednoduchost jde ruku v ruce s redukc . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 168

    Prce v tmu Revize kdu . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46Naute se ciz jazyky . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 116Prov programovn . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 146Zante u Ano . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 172

    Tipy podle zamen 15

    K1834.indd 15K1834.indd 15 21.6.2010 14:31:5321.6.2010 14:31:53

  • Dv hlavy jsou asto lep ne jedna . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 188Ubuntu pro vae ptele. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 192Kdy programtoi a testei spolupracuj . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 202

    Testy, testovn a testei Aplikujte principy funkcionlnho programovn . . . . . . . . . . . . . . . . . . . . . . . . . 22Kd pedstavuje nvrh . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42Nesnate se okouzlit testovacmi daty . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68Zlat pravidlo nvrhu API . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 88Rozhran by se mla snadno pouvat sprvnm zpsobem

    a tko patnm . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 128A se neviditeln stane vce viditelnm. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 130Novinka: Testei jsou vai kamardi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 138Testujte poadovan, nikoli nahodil chovn . . . . . . . . . . . . . . . . . . . . . . . . . . . 178Testujte pesn a konkrtn . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 180Testujte ve spnku (a pes vkendy) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 182Testovn je psnost softwarovho vvoje. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 184Kdy programtoi a testei spolupracuj . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 202Vytvejte mal funkce na zklad pklad . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 206Vytvejte testy pro lidi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 208

    16 97 klovch znalost programtora

    K1834.indd 16K1834.indd 16 21.6.2010 14:31:5321.6.2010 14:31:53

  • vod

    I ten nejnovj pota pouze znsobuje pradvn problm vztahu mezi lidskmi bytostmi a na konci bude zprostedkovatel muset elit problmu toho, co ci a jak.

    Edward R. Murrow

    V hlavch programtor se hon mnoho mylenek. Programovac jazyky, progra-movac techniky, vvojov prosted, zpsoby kdovn, nstroje, proces vvoje, termny, schzky, soft warov architektura, nvrhov vzory, dynamika tmu, kd, poadavky, chyby, kvalita kdu a mnoho a mnoho dalho.

    Programovn je umn, dovednost a vda, zdaleka pesahujc rmec samotnho programu. Programovn spojuje diskrtn svt pota s fl uidnm svtem lidskch zleitost. Programtoi jsou prostednky mezi vyjednanmi a nejistmi obchod-nmi fakty a nestupnou oblast bit a bajt a vych jazykovch konstrukt.

    Vzhledem k mnostv potebnch znalost a bezpotu monch postup neme nikdo oznaovat prv svj postup za ten jedin sprvn. Kniha 97 klovch zna-lost programtora stav na kolektivnch vdomostech a zkuenostech a spe ne ucelen vt obrzek poskytuje pedstavu odborn veejnosti o tom, co by ml kad programtor znt. Svm rozsahem tak pokrv ve od rad tkajcch se kdu po vzdlvn, od pouit algoritm po agiln uvaovn, od implementa-nho know-how po profesionalismus, od zpsobu k podstat.

    Pspvky na sebe vzjemn nenavazuj a nen to ani zmr spe opak je pravdou. Hodnota pspvk pramen prv z jejich osobitosti. Hodnota kolekce spov v tom, jak se vzjemn dopluj, potvrzuj, nebo jsou dokonce v rozporu. Nenajdete zde dn osl mstky je na vs reagovat, uvit a spojit si dohro-mady, co tete, vzt v potaz v vlastn kontext a zkuenosti.

    OprvnnAutorskou ochranu kadho lnku lze pirovnat k open-source eenm. Kad tip je dostupn online a chrnn na zklad licence Creative Commons, co zna-men, e mete kad z lnk samostatn vyuvat ve sv praxi, pokud uvedete jeho autora.

    vod 17

    K1834.indd 17K1834.indd 17 21.6.2010 14:31:5321.6.2010 14:31:53

  • PodkovnMnoho lid pisplo svm asem i nzory ke vzniku knihy 97 klovch znalost programtora, a to pmo i nepmo. Ti vichni si zaslou uznn.Richard Monson-Haefel je pvodce mylenky edice 97 klovch znalost a tak sestavil prvn knihu tto srie 97 klovch znalost soft warovho architekta, do kter jsem pispl. Chtl bych Richardovi podkovat za tuto srii, jej koncept otevenho pispvn a hlavn za podporu mho npadu realizovat tuto knihu.

    Chci podkovat vem, kte vnovali as a sil pispt do tohoto projektu. Pi-spvatelm, kte jsou se svmi radami uvedeni v tto knize, i tm, kte vybrni nebyli. Velk objem a kvalita pspvk uinily vbr hodn sloitm, pevn dan poet bohuel vyadil i nkolik tch, kter by se normln do knihy poda-ilo vmknout. Velk dk za zptnou vazbu, komente a dal npady pat Giovanni Aspronimu, Paulu Colin Glosterovi a Michaelu Hungerovi.

    Dkuji OReilly za podporu, kterou vnovalo tomuto projektu, velkou pozor-nost a lidem v OReilly jmenovit pak Miku Loukidesovi, Laurelu Ackermanovi, Ediemu Freedmanovi, Edu Stephensonovi a Rachel Monaghanov.

    Chtl bych tak podkovat svoj en Carolyn za to, e vnesla podek do mho chaosu, a tak mm dvma synm, Stefanovi a Yannickovi za znovuvytvoen sti chaosu. Doufm, e kniha vm poskytne informace, vhled a inspiraci.

    Poznmka redakce eskho vydnNakladatelstv Computer Press, kter pro vs tuto knihu peloilo, stoj o zptnou vazbu a bude na vae podnty a dotazy reagovat. Mete se obrtit na nsledujc adresy:

    Computer Pressredakce PC literaturyHolandsk 8 639 00 Brno

    nebo

    [email protected] informace a ppadn opravy eskho vydn knihy najdete na interne-tov adrese http://knihy.cpress.cz/k1834. Prostednictvm uveden adresy mete t na redakci zaslat koment nebo dotaz tkajc se knihy. Na vae reakce se srden tme.

    18 97 klovch znalost programtora

    K1834.indd 18K1834.indd 18 21.6.2010 14:31:5321.6.2010 14:31:53

  • K1834.indd 19K1834.indd 19 21.6.2010 14:31:5421.6.2010 14:31:54

  • 20 97 klovch znalost programtora

    Jednejte s opatrnostSeb Rose

    A u se ujmete ehokoli, jednejte s opatrnost a uvate nsledky.

    Anon

    Bez ohledu na to, jak pjemn vypad pln na zatku iterace, alespo st tohoto asu nevyhnuteln budete pod tlakem. Pokud se dostanete od situace, kdy se muste rozhodnout mezi tm, jestli to udlat sprvn, anebo rychle, je asto lkav to udlat rychle s vdomm toho, e se pozdji budete muset vrtit a opravit to. Pokud uinte toto pedsevzet, muste si za nm stt sami ped sebou, ped svm tmem i zkaznkem. Velmi asto vak dal iterace pinese nov problmy vyadujc vai pozornost. Tento druh odloen prce se asto oznauje jako technick dluh a dozajista nen vam ptelem. Martin Fowler to ve svm rozboru technickch dluh (http://martinfowler.com/bliki/TechnicalDebtQuadrant.html) oznauje za zmrn technick dluh a neml by se zamovat s nemyslnm technickm dluhem.Technick dluh je jako pjka v krtkodobm horizontu z n tte, ale budete z n muset odvdt roky, dokud nebude pln splacen. Zkratky pouit v kdu ztuj pidvn novch funkc a refactoring kdu. Jsou rodnou pdou pro defekty a kehk testy. m dle je nechte bez povimnut, tm hor to bude. V okamiku, kdy se dostanete k pvodn oprav, me existovat ji cel ada ne pli dokonalch rozhodnut uinnch na zklad pvodnho problmu, co znan ztuje opravu kdu a jeho refaktorovn. asto se k oprav pvodnho problmu pikro a v okamiku, kdy se situace natolik zhor, e je oprava pvodnho problmu nutn. A v tento okamik je oprava asto natolik obtn, e si nemete potebn as nebo riziko s n spojen dovolit.

    K1834.indd 20K1834.indd 20 21.6.2010 14:31:5421.6.2010 14:31:54

  • Zkuenosti expert z praxe 21

    Nastanou ppady, kdy se uchlte k technickmu dluhu, abyste stihli termn nebo v minimlnm rozsahu implementovali funkci. Pokuste se tmto situacm vyhnout. Pokud to vak okolnosti vyaduj a nen zbyt, nezbv ne se vydat touto cestou. Nezapomete vak svj technick dluh sledovat a rychle ho splatit, jinak pjdou vci rychle z kopce. Hned jak uinte takovto kompromis, udlejte si do bloku poznmku anebo tuto skutenost poznamenejte ve svm systmu pro sledovn problm, abyste zajistili, e se na nj nezapomene.

    Pokud naplnujete splacen dluhu v dal iteraci, bude cena minimln. Pokud dluh zstane nesplacen, zv se roky. Ty je teba sledovat a mt nklady na och. Zdrazn se tak dopad technickho dluhu na obchodn hodnotu projektu a doshne se potebnho upednostnn jeho splacen. Zpsob jakm vypo-tat a sledovat roky bude zviset na konkrtnm projektu, sledovn je vak nezbytn.

    Splate technick dluhy tak rychle, jak je to jen mon. Nebylo by moudr to neudlat.

    K1834.indd 21K1834.indd 21 21.6.2010 14:31:5421.6.2010 14:31:54

  • 22 97 klovch znalost programtora

    Aplikujte principy funkcionlnho programovnEdward Garson

    Funkcionln programovn se t nov vln zjmu ze strany mainstreamov programtorsk komunity. Z sti je to proto, e vynoujc se vlastnosti funk-cionlnho paradigmatu vhodn adresuj vzvy, kterm elme v dsledku pechodu prmyslu na vcejdrovou architekturu. Pestoe je to jist dleit vyuit, nen to dvod pro vs tento pspvek nabd ke znalosti funkcionl-nho programovn.

    Ovldnut funkcionlnho paradigmatu me vznamn zlepit kvalitu kdu, kter v jinch kontextech vytvte. Pokud hluboce rozumte funkcionlnmu paradigmatu a aplikujete ho, budou vae nvrhy vykazovat mnohem vy stupe referenn transparence.Referenn transparence je velmi douc vlastnost znac, e funkce konzis-tentn vrac pro stejn vstupy stejn vsledky, bez ohledu na to, odkud a kdy se volaj. To znamen, e vyhodnocen funkce zvis mn, ideln vbec, na vedlejch efektech stavovch zmn.

    Hlavn pinou problm v imperativnm kdu jsou nestl promnn. Vichni, kte tyto dky tou, u jist ptrali po pin toho, pro nem urit promnn v dan situaci takovou hodnotu, jak se oekv. Viditeln smantika me pomoci zmrnit tyto zken defekty anebo pinejmenm drasticky snit poet mst, kde se vyskytuj. Hlavnm pachatelem je vak neprozetelnost nvrh, kter podporuj nadmrnou promnlivost.

    V tomto ohledu se od prmyslu nedokme dn vrazn podpory. vody do problematiky objektov orientovanho programovn mlky podporuj takovto nvrhy, protoe asto ukazuj pklady relativn dlouhovkch objekt, je zve-sela vzjemn volaj sv editan a potencionln nebezpen metody.

    V ppad pouit rafi novanho nvrhu zenho testy, pedevm pak dodrujcho zsadu simulovat role, a nikoli objekty (http://www.jmock.org/oopsla2004.pdf), je mon nedouc promnlivost odstranit.

    K1834.indd 22K1834.indd 22 21.6.2010 14:31:5421.6.2010 14:31:54

  • Zkuenosti expert z praxe 23

    Vsledkem je nvrh, kter m lep rozdlen odpovdnost mezi vce mench funkc pracujcch s jim pedanmi parametry namsto s nestlmi lenskmi promnnmi. Vyskytne se men mnostv defekt a asto se tak snadnji budou ladit, protoe je v ppad tchto nvrh jednodu urit, kde se konkrtn hod-nota mn, ne je tomu v nvrzch, kdy je teba dovodit konkrtn kontext, je m za nsledek chybn piazen. To podstatn zvyuje stupe referenn trans-parentnosti. Nic jinho vm tyto mylenky nevryje do pamti tak, jako funkcio-nln programovac jazyk, kde je tento vpoetn model normou.

    Tento pstup samozejm nen za vech okolnost optimln. Nap. v objektov orientovanch systmech tento zpsob asto podv lep vsledky pi vvoji modelu domny (kde vzjemn spoluprce slou k redukci sloitosti business rol) ne pi vvoji uivatelskho rozhran.

    Osvojte si funkcionln paradigma, abyste mohli v ostatnch domnch uven aplikovat nabyt vdomosti. Vae objektov systmy budou dosahovat vyho stupn referenn transparentnosti a budou se svm funkcionlnm protjkm podobat mnohem vce, ne si myslte. V nkterch ppadech se dokonce bude zdt, e je (na nejvy rovni) funkcionln a objektov orientovan programo-vn pouze vzjemnm odrazem tvocm potaovou obdobu yin a yang.

    K1834.indd 23K1834.indd 23 21.6.2010 14:31:5421.6.2010 14:31:54

  • 24 97 klovch znalost programtora

    Polote si otzku: Co by udlal uivatel?(vy jm nejste)Giles Colborne

    Vichni mme ve zvyku pedpokldat, e ostatn lid mysl jako my. Ale nemysl. Psychologov to oznauj za falen konsenzus. Kdy lid mysl nebo jednaj jinak ne my, s velkou pravdpodobnost je (podvdom) ozname za podivny.

    To vysvtluje, pro je pro programtory tak obtn vt se do role uivatel. Uivatel nemysl jako programtoi. Pro zatek trv u potae mnohem mn asu. Nev, jak pota pracuje a ani je to nezajm. To znamen, e nemohou erpat z artilerie programtorm tak dobe znmch technik pro een pro-blm. Neznaj nvrhov vzory a vsledky prce programtor pouvaj skrze rozhran.

    Nejlepm zpsobem, jak zjistit, jak uivatel uvauje, je pozorovat ho. Podejte uivatele, aby provedl urit kol s pomoc soft waru podobajcho se tomu, kter vyvjte. Ujistte se, e je tento kol realistick Seti hodnoty ve sloupci je v podku, Vypotej sv vdaje za posledn msc je jet lep. Vyhnte se pli specifi ckm kolm jako je Mohl bys oznait tyto buky tabulky a pod n uvst jejich sumu?. Tento poadavek u sm o sob k nemu nabd. Nechte za uivatele hovoit jeho vlastn postup. Neperuujte ho. Nesnate se mu pomoci. Polote si otzku, pro dl prv to, a ne tohle.

    Prvn vc, kter si vimnete, je, e uivatel dlaj mnoh zkladn vc podobn. Pokou se plnit koly ve stejnm poad a dlaj stejn chyby na stejnch ms-tech. Na tchto zkladnch vcech byste mli stavt. Velmi se to li od nvrh-skch schzek, kde lid poslouchaj diskuze na tma Co kdy chce uivatel .

    K1834.indd 24K1834.indd 24 21.6.2010 14:31:5521.6.2010 14:31:55

  • Zkuenosti expert z praxe 25

    Vede to ke komplikovanm funkcm a nejasnostem v tom, co uivatel chtj. Sledovn uivatel tyto nejasnosti rozptl.

    Uvidte, jak se uivatel pi nem zaseknou. Kdy se zaseknete vy, rozhld-nete se okolo. Kdy se zaseknou uivatel, svj pohled na vc z. Je pro n obtnj vidt een jinde na obrazovce. To je jeden z dvod, pro je textov npovda chabm eenm nevhodnho nvrhu uivatelskho rozhran. Pokud jsou instrukce nebo npovda nezbytn, umstte ji hned vedle problematickch oblast. zk zamen pohledu uivatele je dvod, pro jsou tzv. tool-tipy sp-nj ne klasick npovda.

    Uivatel maj ve zvyku dlat zmatek. Najdou een, kter funguje, a zstanou u nj, bez ohledu na to, jak sloit je. Je lep poskytnout jeden skuten zjevn zpsob, jak kol provst, ne dv nebo ti zkratky.

    Zjistte tak, e existuje rozdl v tom, co uivatel kaj, e chtj, a co ve skute-nosti dlaj. To je znepokojiv, protoe se poadavky uivatel bn zskvaj dotznm se uivatel. Proto je nejlepm zpsobem, jak urit poadavky, sle-dovat uivatele. Hodinov sledovn uivatel pinese vce informac ne den strven odhadovnm toho, co chtj.

    K1834.indd 25K1834.indd 25 21.6.2010 14:31:5521.6.2010 14:31:55

  • 26 97 klovch znalost programtora

    Automatizujte sv kdovac standardyFilip van Laenen

    Pravdpodobn jste tam tak byli. Na zatku projektu m kad mnoho dob-rch npad nazvejme je pedsevzet novho projektu. Pomrn asto jsou mnoh z tchto pedsevzet zaznamenan v dokumentech. Ty, kter se tkaj kdu, skon v kdovacch standardech projektu. V prbhu vodn schzky hlavn vvoj projde dokumenty a v nejlepm ppad se vichni shodnou na tom, e se pokus podle nich postupovat. Pot co se vak projekt rozbhne, se tyto dobr mysly jeden po druhm rozplynou jako pra nad hrncem. Po dokon-en projektu vypad kd naprosto chaoticky a nikdo nechpe, jak k tomu mohlo dojt.

    Kdy se vci zvrtly? Pravdpodobn u na vodn schzce. Nkte z astnk projektu nedvali pozor. Jin poadavku nerozumli, i jet he nesouhlasili a u plnovali svou rebelii v oblasti standardu kdovn. Nkte sice poadavek akceptovali a souhlasili s nm, ale jak se tlak v prbhu projektu zvyoval, museli od nj upustit. Vhodn formtovan kd zkaznka poadujcho vt funkcio-nalitu zajmat nebude. Dodrovn standard kdovn navc me bt vcelku nudnou zleitost, pokud se neautomatizuje. Jen si zkuste run odsadit kd zanedn tdy.

    Pokud je to ale takov problm, pro bychom vbec mli chtt kdovac stan-dard? Jednm z dvod formtovn kdu jednotnm zpsobem je, e si nikdo neme pivlastnit uritou st kdu pouze tm, e ho naformtuje svm vlastnm zpsobem. Meme chtt zabrnit vvojm v tom, aby pouvali urit anti-vzory, a vyhnout se tak bnm chybm. Standard kdovn by ml konec konc usnadnit prci na projektu a udrovat rychlost vvoje od zatku a do konce. Z toho jasn plyne, e by vichni mli souhlasit s pouitm standardem kdo-vn niemu nepome, pokud jeden vvoj pouv pro odsazen kdu ti mezery, zatmco jin tyi.

    K1834.indd 26K1834.indd 26 21.6.2010 14:31:5521.6.2010 14:31:55

  • Zkuenosti expert z praxe 27

    Existuje cel ada nstroj, kter generuj hlen o kvalit kdu a je mon je pout k dokumentaci a drb standardu kdovn, to vak jako een nesta. Standard by se ml automatizovat, a je-li to mon, i vynutit. Zde je nkolik pklad:

    Ujistte se, e je formtovn kdu soust procesu sestaven, take se auto-maticky provede pokad, kdy nkdo provd peklad svho kdu.

    Pouvejte nstroje pro statickou analzu kdu, kter v kdu vyhledaj nedouc anti-vzory. Pokud se njak najdou, peru se sestaven.

    Naute se tyto nstroje nakonfi gurovat tak, abyste mohli hledat sv vlastn anti-vzory specifi ck pro v projekt.

    Nemte pouze pokryt test, ale tak automaticky kontrolujte jejich vsled-ky. Perute sestaven, pokud je pokryt test pli mal.

    Pokuste se tyto postupy aplikovat na vechno, co povaujete za dleit. Nebu-dete moci automatizovat ve, na em vm skuten zle. V ppad vc, kter nemete automaticky oznait nebo opravit, uvate sadu pravidel doplujcch automatizovan standard kdovn, akceptujte vak skutenost, e je vy a vai kolegov nemus tak peliv dodrovat.

    Standard kdovn by ml bt dynamick, a nikoli statick. Jak se projekt vyvj, jeho poteby se mn a to, co se zdlo chytr na zatku, o nkolik msc pozdji u tak chytr bt nemus.

    K1834.indd 27K1834.indd 27 21.6.2010 14:31:5521.6.2010 14:31:55

  • 28 97 klovch znalost programtora

    V jednoduchosti je krsaJrn lmheim

    Jeden z vrok eckho fi lozofa Platona by podle mho mli soft warov vvoji dobe znt a mt ho neustle na pamti:

    Krsa nvrhu a harmonie a elegance a dobr rytmus zvis na jednoduchosti.

    Tato jedna vta shrnuje hodnoty, o kter bychom mli coby soft warov vvoji usilovat.

    Existuje ada vlastnost, kter jsou u kdu douc:

    itelnost

    Udrovatelnost

    Rychlost vvoje

    Neuchopiteln kvalita krsy

    Platon nm k, e faktorem, umoujcm vechny tyto tyi kvality, je jedno-duchost.

    Co je to krsn kd? To je potencionln velmi subjektivn otzka. Vnmn krsy zvis pevn na danm zzem, stejn jako nae vnmn ehokoli zvis na naem zzem. Lid vzdlan v oblasti umn jinak vnmaj (anebo k n alespo jinak pistupuj) krsu ne lid vzdlan ve vdnch oborech. Studenti umn maj tendenci pistupovat ke krse soft waru tak, e soft ware porovnvaj s um-leckmi dly. Naproti tomu studenti vdnch obor zpravidla hovo o symetrii a zlatm ezu ve snaze redukovat vci na vzorce. Podle mch zkuenost je jed-noduchost zkladem vtiny argument obou stran.

    K1834.indd 28K1834.indd 28 21.6.2010 14:31:5521.6.2010 14:31:55

  • Zkuenosti expert z praxe 29

    Zamyslete se nad zdrojovm kdem, kter jste studovali. Pokud jste nestrvili njak as studovnm kdu jinch lid, odlote tuto knihu a najdte si njak open-source ke studiu. Myslm to vn. Najdte na Webu njak kd ve vmi poadovanm programovacm jazyce, napsanm njakm uznvanm a dobe znmm expertem.

    Jste zptky? Dobe. Tak kde jsme to skonili? Ano, u vm pisel jsem na to, e kdy, kter povauji za krsn a jsem s nimi takkajc na stejn vln, maj nco spolenho. Tm hlavnm je jednoduchost. Piel jsem na to, e bez ohledu na to, jak komplexn cel aplikace nebo systm je, jednotliv sti mus bt jednodu-chmi objekty s jednou zodpovdnost obsahujc podobn jednoduch, vyhra-nn metody s popisnmi nzvy. Nkte lid povauj krtk metody o rozsahu 5 a 10 dk kdu za extrm a v nkterch jazycch je toho velmi obtn doclit, pesto si myslm, e je takovto strunost doucm clem.

    Ponauenm, kter byste si mli odnst, je, e krsn kd je jednoduch kd. Kad jednotliv st se udruje jednoduch s jednoduchmi odpovdnostmi a jednoduchmi vztahy s ostatnmi stmi systmu. To je zpsob, jakm meme systmy v prbhu asu udret upravovateln, s istm, jednoduchm, testova-telnm kdem a zajistit vysokou rychlost vvoje v prbhu ivota systmu.

    Krsa je v jednoduchosti.

    K1834.indd 29K1834.indd 29 21.6.2010 14:31:5621.6.2010 14:31:56

  • Pokud se Vm tato ukzka knihy lbila, bude asn, kdy ns,vechny spolutvrce, podpote zakoupenm jedn kopie na http://ut.ereading.cz/cs/eknihy/7102/97-klicovych-znalosti-programatora. Kniha nestoj vc ne veee (pro jednoho) v restauraci.

    Tento text vznikl dky prci nsledujcch lid:

    1) autora, kter sepsal svoje jedinen mylenky2) pekladatele, kter je peliv peloil (neplat u eskch titul:)3) redaktora, kter dohlel na srozumitelnost a kvalitu textu4) korektora, kter ochrnil vae oi ped hrubkami a peklepy5) grafika, kter pipravil oblku (nebo grafiku v textu)6) sazee, kter knihu vyszel do tto podoby

    Vichni vm dkujeme..

    ObsahTipy podle zamenvodOprvnnPodkovnPoznmka redakce eskho vydn

    Jednejte s opatrnostAplikujte principy funkcionlnho programovnPolote si otzku:Co by udlal uivatel? (vy jm nejste)Automatizujte sv kdovac standardyV jednoduchosti je krsaPed refaktorovnmPozor na sdlen kdSkautsk pravidloNe zanete obviovat ostatn, zkontrolujte vlastn kdNstroje volte s rozvahouProgramujte v jazyce domnyKd pedstavuje nvrhNa odsazen kdu zleRevize kduOdvodnn sprvnosti kduPr slov ke komentmKomentujte pouze to, co kd sm nedoke ctNepetrit uenPohodlnost nepat mezi ctnostiNasazujte brzy a astoRozlite technick a business vjimkyProcviujte seJazyky specifick pro domnuNebojte se, e nco rozbijeteNesnate se okouzlit testovacmi datyNeignorujte chybyNesta pouze nauit se jazyk, ale porozumt jeho kultueNesnate se svj program pibt do vzpmen polohyNevte na kouzlaNeopakujte seNedotkej se toho kduZapouzdete chovn, ne pouze stavsla s plovouc dovou rkou nejsou relnNaplte sv ambice pomoc open-sourceZlat pravidlo nvrhu APIMtus guruDina se nevyplcPouit systmu pro sledovn chybVylepete kd tm, e ho odstranteNainstaluj si mKomunikace mezi procesy ovlivuje reakn dobu aplikaceUdrujte build istNaute se pouvat nstroje pkazovho dkuOvldejte vce ne dva programovac jazykyPoznejte sv IDEPoznejte sv limityPoznejte, kdy dokonte prciRozshl vzjemn propojen data pat do databzeNaute se ciz jazykyNaute se odhadovatNaute se ct: Ahoj, svteNechte projekt mluvit sm za sebeLinker nen dnm magickm programemDlouhovkost provizornch eenRozhran by se mla snadno pouvat sprvnm zpsobem a tko patnmA se neviditeln stane vce viditelnmPedvn zprv vede v paralelnch systmech k lep roziitelnostiOdkaz budoucnostiNevyuit pleitosti k polymorfizmuNovinka: Testei jsou vai kamardiPouze jeden binrn souborPouze kd k pravduNezapomnejte na sestavenProv programovnPreferujte typy specifick pro domnu ped primitivnmi typyPedchzejte chybmProfesionln programtorVechno verzujteOdlote my a odstupte od klvesnicette kdZajmejte se o humanitn vdyasto znovu vynalzejte koloOdolejte pokuen nvrhovho vzoru jedinekHonbu za vkonem komplikuje pinav kdJednoduchost jde ruku v ruce s redukcPrincip jedn odpovdnostiZante u AnoOdstupte a automatizujte, automatizujte, automatizujteVyuijte nstroj pro analzu kduTestujte poadovan, nikoli nahodil chovnTestujte pesn a konkrtnTestujte ve spnku (a pes vkendy)Testovn je psnost softwarovho vvojeMylen ve stavechDv hlavy jsou asto lep ne jednaDvakrt patn me znamenat dobe (a tko se opravuje)Ubuntu pro vae pteleUnixov nstroje jsou vai kamardiPouijte sprvn algoritmus a datovou strukturuPehnan protokolovn vm na klidnm spnku nepidWET pomh pekonat vkonnostn pekkyKdy programtoi a testei spolupracujPit kd tak, jako byste museli zajiovat jeho podporu po zbytek svho ivotaVytvejte mal funkce na zklad pkladVytvejte testy pro lidiO kd se muste staratVai zkaznci neuvauj nad tm, co kajPispvatelRejstk