Académique Documents
Professionnel Documents
Culture Documents
com
Tytu oryginau: The Clean Coder: A Code of Conduct for Professional Programmers
Tumaczenie: Wojciech Moch
ISBN: 978-83-246-7537-1
Authorized translation from the English language edition, entitled: THE CLEAN CODER:
A CODE OF CONDUCT FOR PROFESSIONAL PROGRAMMERS; ISBN 0137081073;
by Robert C. Martin; published by Pearson Education, Inc, publishing as Prentice Hall.
Copyright 2011 Pearson Education, Inc.
All rights reserved. No part of this book may be reproduced od transmitted in any form or by any means, electronic or
mechanical, including photocopying, recording or by any information storage retrieval system, without permission from
Pearson Education, Inc.
Polish language edition published by HELION S.A., Copyright 2013.
All rights reserved. No part of this book may be reproduced or transmitted in any form or by any means, electronic or
mechanical, including photocopying, recording or by any information storage retrieval system, without permission from
the Publisher.
Wszelkie prawa zastrzeone. Nieautoryzowane rozpowszechnianie caoci lub fragmentu niniejszej publikacji
w jakiejkolwiek postaci jest zabronione. Wykonywanie kopii metod kserograficzn, fotograficzn, a take kopiowanie
ksiki na noniku filmowym, magnetycznym lub innym powoduje naruszenie praw autorskich niniejszej publikacji.
Wszystkie znaki wystpujce w tekcie s zastrzeonymi znakami firmowymi bd towarowymi ich wacicieli.
Autor oraz Wydawnictwo HELION dooyli wszelkich stara, by zawarte w tej ksice informacje byy kompletne
i rzetelne. Nie bior jednak adnej odpowiedzialnoci ani za ich wykorzystanie, ani za zwizane z tym ewentualne
naruszenie praw patentowych lub autorskich. Autor oraz Wydawnictwo HELION nie ponosz rwnie adnej
odpowiedzialnoci za ewentualne szkody wynike z wykorzystania informacji zawartych w ksice.
Wydawnictwo HELION
ul. Kociuszki 1c, 44-100 GLIWICE
tel. 32 231 22 19, 32 230 98 63
e-mail: helion@helion.pl
WWW: http://helion.pl (ksigarnia internetowa, katalog ksiek)
Drogi Czytelniku!
Jeeli chcesz oceni t ksik, zajrzyj pod adres
http://helion.pl/user/opinie/mckkod_ebook
Moesz tam wpisa swoje uwagi, spostrzeenia, recenzj.
Printed in Poland.
Ksigarnia internetowa
Oce ksik
S PIS TRECI
Sowo wstpne
11
Wprowadzenie
17
Podzikowania
21
O autorze
25
Na okadce
27
Obowizkowy wstp
29
Rozdzia 1
Profesjonalizm
35
36
36
38
43
48
49
Przeciwstawne role
Wysokie stawki
Gracz zespoowy
Koszta przytakiwania
Kod niemoliwy
51
54
55
60
65
Rozdzia 2
7
Ebookpoint.pl kopia dla: Jaroslaw Babijczuk siarsko@gmail.com
S PIS TRECI
Rozdzia 3
Rozdzia 4
Rozdzia 5
Rozdzia 6
69
Jzyk zobowiza
Naucz si, jak mwi tak
Wnioski
71
75
78
Kodowanie
79
Przygotowanie
Strefa
Blokada twrcza
Debugowanie
Wyznaczanie sobie rytmu
Spnienia
Pomoc
Bibliografia
80
83
85
87
90
91
93
95
TDD
97
Sd na sali
Trzy prawa TDD
Czym TDD nie jest
Bibliografia
98
99
103
103
wiczenia
Kilka wicze w tle
Dojo kodowania
Zwikszanie dowiadczenia
Wnioski
Bibliografia
Rozdzia 7
Rozdzia 8
Testy akceptacyjne
105
106
109
112
113
113
115
Komunikowanie wymaga
Testy akceptacyjne
Wnioski
115
120
129
Strategie testowania
131
8
Ebookpoint.pl kopia dla: Jaroslaw Babijczuk siarsko@gmail.com
132
133
136
136
S PIS TRECI
Rozdzia 9
Zarzdzanie czasem
Spotkania
Manna skupienia
Paczkowanie czasu i pomidory
Uniki
lepe uliczki
Marsze, bagna i baagan
Wnioski
Rozdzia 10
Szacowanie
Czym jest szacowanie?
PERT
Szacowanie zada
Prawo wielkich liczb
Wnioski
Bibliografia
Rozdzia 11
Presja
Unikanie presji
Jak radzi sobie z presj
Wnioski
Rozdzia 12
Wsppraca
Programici kontra ludzie
Mdki
Wnioski
Rozdzia 13
Rozdzia 14
137
138
142
144
145
146
146
147
149
151
154
157
159
160
160
161
163
165
166
167
169
173
174
Zespoy i projekty
175
Mona to zmiksowa?
Wnioski
Bibliografia
176
178
179
181
181
182
187
190
191
9
Ebookpoint.pl kopia dla: Jaroslaw Babijczuk siarsko@gmail.com
S PIS TRECI
Dodatek A
Narzdzia
Narzdzia
Kontrola kodu rdowego
IDE i edytor
ledzenie problemw
Ciga kompilacja
Narzdzia do testw jednostkowych
Narzdzia do testw komponentw
Narzdzia do testw integracyjnych
UML/MDA
Wnioski
Skorowidz
10
Ebookpoint.pl kopia dla: Jaroslaw Babijczuk siarsko@gmail.com
193
195
195
199
201
202
202
203
204
205
207
209
S OWO WSTPNE
11
S OWO WSTPNE
12
S OWO WSTPNE
pracy. I nie chodzio tylko o zesp techniczny. Towarzyszyy nam te osoby z dziau
marketingu, a nawet waciciele produktu.
Wszyscy bylimy dumni. To by naprawd wspaniay moment.
Wtedy na zebranie wpad Joe.
Powiedzia co w rodzaju: Ze wieci. Dzia prawny nie przygotowa jeszcze formularzy
zamwie, czyli nie moemy jeszcze uruchomi strony.
Nie by to wielki problem. Przez cay czas trwania projektu wstrzymyway nas najrniejsze
przeciwnoci, dziki czemu cakiem dobrze odnajdowalimy si w rolach Batmana i Robina.
Byem gotowy, dlatego odpowiedziaem: Dobra, partnerze. Zrobimy to jeszcze raz. Dzia
prawny jest na trzecim pitrze, o ile pamitam.
I wtedy si zaczo.
Zamiast si ze mn zgodzi, Joe zapyta: O czym ty w ogle mwisz, Matt?.
Odpowiedziaem: No wiesz, ten nasz zwyczajowy taniec. W kocu chodzi o cztery pliki
PDF. Do tego one s gotowe. Dzia prawny musi tylko je zatwierdzi. Powisimy w ich
boksach, pozocimy si na nich i w kocu to zaatwi.
Joe nie zgodzi si z moj ocen i po prostu stwierdzi: Uruchomimy stron w cigu
przyszego tygodnia. To przecie aden kopot.
Z pewnoci moesz sobie wyobrazi cig dalszy tej rozmowy. Szo mniej wicej tak:
Matt: A niby dlaczego? Przecie mog to zrobi w par godzin.
Joe:
Matt, to przecie zawodowcy. Nie moemy przecie wisie nad nimi i da,
eby powicali swj prywatny czas dla naszego maego projektu.
Matt: (chwila ciszy) Joe a co niby robilimy z zespoem inynierw przez kilka
ostatnich miesicy?.
Joe:
Cisza.
Gboki oddech.
Co. Joe. Wanie. Powiedzia?
13
S OWO WSTPNE
14
S OWO WSTPNE
15
S OWO WSTPNE
16
Wprowadzenie
28 stycznia 1986 roku, o godzinie 11.39, po zaledwie 73,124 sekundy od startu, na wysokoci
48 000 stp prom kosmiczny Challenger zosta rozerwany na strzpy przez uszkodzenie
prawego silnika wspomagajcego. Zgino siedmioro dzielnych astronautw, w tym
nauczycielka Christa McAuliffe. Do dzisiaj przeladuje mnie wyraz twarzy jej matki
obserwujcej mier swojej crki 15 kilometrw nad sob.
Challenger rozpad si, poniewa gorce gazy wylotowe z uszkodzonego silnika
wspomagajcego wydostay si spomidzy segmentw jego obudowy, trafiajc na gwny
zbiornik paliwa. Podstawa gwnego zbiornika z ciekym wodorem zostaa rozerwana,
paliwo si zapalio, przez co zbiornik przesun si w kierunku zbiornika z ciekym
tlenem. W tym samym momencie silnik wspomagajcy zerwa si z tylnego wspornika
i obrci wok tylnego. Jego czubek przebi zbiornik z ciekym tlenem. Te wszystkie
17
Ebookpoint.pl kopia dla: Jaroslaw Babijczuk siarsko@gmail.com
WPOWADZENIE
18
Ebookpoint.pl kopia dla: Jaroslaw Babijczuk siarsko@gmail.com
WPOWADZENIE
nie ufali ich danym oraz wnioskom. Uruchomili silniki Challengera, poniewa sami byli
pod wielk presj finansow i polityczn. Mieli tylko nadziej, e wszystko si uda.
Wszyscy ci menederowie nie tylko byli gupi, ale stali si przestpcami. Tego mronego
poranka zgino siedmioro dzielnych kobiet i mczyzn, a nadzieje caych pokole
marzcych o podrach w kosmos zostay zawiedzione dlatego, e kilku menederw
przedoyo wasne obawy, nadzieje i przeczucia nad sowa zatrudnianych przez siebie
ekspertw. Podjli decyzj, ktrej nie mieli prawa podejmowa. Przypisali sobie autorytet
ludzi, ktrzy wiedzieli, co robi: inynierw.
A co z inynierami? Z pewnoci zrobili to wszystko, co powinni byli zrobi. Poinformowali
przeoonych i ciko walczyli, prezentujc swoje zalecenia. Przeszli przez wszystkie
waciwe kanay i powoali si na odpowiednie protokoy. Zrobili zatem, co mogli w ramach
istniejcego systemu, ale menederowie i tak postawili na swoim. Wyglda na to,
e inynierowie mog mie czyste sumienie.
Czasami jednak zastanawiam si, czy ktry z nich nie moe spa w nocy, przeladowany
przez obraz matki Christy McAuliffe, rozwaajc, dlaczego nie zadzwoni do Dana Rathera.
O tej ksice
To ksika o profesjonalizmie przy tworzeniu oprogramowania. Zawiera wiele
pragmatycznych wskazwek i prbuje w ten sposb odpowiedzie na takie pytania, jak:
Kim jest zawodowy programista?
Jak zachowuje si profesjonalista?
Jak zawodowiec radzi sobie z konfliktami, krtkimi terminami i nierozsdnymi
menederami?
Kiedy i jak profesjonalista powinien powiedzie nie?
Jak zawodowiec radzi sobie z naciskami?
19
Ebookpoint.pl kopia dla: Jaroslaw Babijczuk siarsko@gmail.com
WPOWADZENIE
Bibliografia
[McConnell87]: Malcolm McConnell, Challenger. A Major Malfunction, New York,
Simon & Schuster, 1987.
[Wiki-Challenger]: Katastrofa promu Challenger, http://pl.wikipedia.org/wiki/
Katastrofa_promu_Challenger.
20
Ebookpoint.pl kopia dla: Jaroslaw Babijczuk siarsko@gmail.com
P ODZIKOWANIA
Moja kariera jest ca seri epizodw wsppracy i planowania. Sam miaem wiele rnych
marze i de, ale zawsze udawao mi si znale kogo, kto je podziela. Pod tym wzgldem
czuj si troch jak Sith. Zawsze dwch ich jest.
Pierwsza wsppraca, ktr mgbym uzna za profesjonaln, miaa miejsce, gdy miaem
13 lat, a moim wsppracownikiem by John Marchese. Razem planowalimy zbudowanie
wasnego komputera. Ja miaem mzg, a on minie. Pokazywaem mu, gdzie ma przylutowa
przewd, a on go przylutowywa. Pokazywaem, gdzie ma zamocowa przekanik, a on go
mocowa. To bya przednia zabawa, na ktrej spdzilimy setki godzin. I rzeczywicie
zbudowalimy kilka cakiem imponujco wygldajcych rzeczy wyposaonych w przyciski,
przekaniki, wiateka, a nawet teletekst! Oczywicie adna z tych rzeczy nie wykonywaa
nic konkretnego, ale byy niezwykle imponujce i powicilimy im bardzo duo czasu.
Dzikuj Ci za to, John!
W pierwszym roku szkoy redniej na lekcjach niemieckiego spotkaem Tima Conrada.
Tim by naprawd mdry. Gdy przystpowalimy do budowania komputera, to on by
mzgiem, a ja miniami. Nauczy mnie elektroniki i zapozna z komputerem PDP-8.
Razem zbudowalimy dziaajcy elektroniczny kalkulator 18-bitowy, wykorzystujc
do tego podstawowe elementy. Potrafi on dodawa, odejmowa, mnoy i dzieli. Zajo
nam to wszystkie weekendy jednego roku oraz cae wakacje letnie i boonarodzeniowe.
Pracowalimy nad nim bez ustanku i na koniec kalkulator dziaa doskonale. Dzikuj
Ci za to, Tim!
Razem z Timem nauczyem si programowa komputery. W roku 1968 nie byo to atwe,
ale jako si udao. Zdobylimy ksiki o asemblerze komputera PDP-8, o jzykach Fortran,
Cobol oraz PL/1 i po prostu je pochanialimy. Pisalimy programy, ktrych nie dao si
21
P ODZIKOWANIA
nawet uruchomi, poniewa nie mielimy dostpu do komputera. Ale pisalimy je mimo
to z czystej przyjemnoci.
W drugiej klasie liceum nasza szkoa zacza prowadzi zajcia z nauk komputerowych.
Do modemu telefonicznego o prdkoci 110 bodw podczono teletekst ASR-33. Szkoa
miaa wasne konto w systemie podziau czasu Univac 1108 prowadzonym przez Institute
of Technology w stanie Illinois. Tim i ja bardzo szybko stalimy si faktycznymi operatorami
tego sprztu. Nikt poza nami nie mia prawa si do niego zblia.
Poczenie modemowe wykonywao si przez podniesienie suchawki i rczne wybranie
numeru. Po usyszeniu piskw modemu z drugiej strony naleao nacisn przycisk orig
na teletekcie, eby nasz modem zacz piszcze w drug stron. Teraz wystarczyo odwiesi
suchawk i poczenie byo ustanowione.
Tarcza telefonu bya zabezpieczona kluczem, do ktrego dostp mieli wycznie nauczyciele.
Nie miao to jednak znaczenia, poniewa wykombinowalimy, e mona wybra numer
(dowolny), wystukujc go za pomoc wycznika pod suchawk. Byem perkusist, wic
miaem cakiem nieze wyczucie czasu i refleks. Nawet przy zablokowanej tarczy telefonu
byem w stanie wybra numer w mniej ni 10 sekund.
W laboratorium dostpne byy dwa telegrafy. Tylko jeden z nich by maszyn podczon
do sieci telefonicznej, ale oba byy uywane przez uczniw do pisania programw. Pisali
oni programy, ktrych kod by wybijany na tamie papierowej. Kade nacinicie klawisza
powodowao wybicie nowych dziurek w tamie. Programy byy pisane w niezwykle
rozbudowanym, interpretowanym jzyku IITran. Przygotowane tamy z programami
naleao zostawi w koszyku umieszczonym obok telegrafw.
Po szkole Tim i ja wybieralimy numer komputera (oczywicie wystukujc go), adowalimy
zawarto tam do systemu wykonawczego IITran i rozczalimy si. Przy prdkoci 10
znakw na sekund caa procedura zajmowaa troch czasu. Po mniej wicej godzinie
ponownie czylimy si z komputerem, aby wydrukowa wyniki. Znw z prdkoci 10
znakw na sekund. System nie rozdziela listingw poszczeglnych uczniw na pojedyncze
strony. Drukowa po prostu stron za stron, dlatego musielimy poci je noyczkami,
doczy odpowiednie tamy z programami i odoy do koszyka z wynikami.
Tim i ja bylimy w tym mistrzami. Nawet nauczyciele nas nie nadzorowali, gdy bylimy
w laboratorium. Wiedzieli, e wykonujemy ich prac, cho nigdy nas o to nie prosili ani
nawet nie zasugerowali takiej moliwoci. Nigdy te nie dostalimy klucza do telefonu.
Po prostu my si tym zajmowalimy, a oni wychodzili, pozostawiajc nam bardzo duo
swobody. Dzikuj zatem moim nauczycielom matematyki: panu McDermitowi, panu
Fogelowi i panu Robienowi.
Potem, po zakoczeniu prac domowych, moglimy zaj si zabaw. Pisalimy program
za programem, a robiy one najrniejsze szalone i dziwaczne rzeczy. Napisalimy program
22
P ODZIKOWANIA
rysujcy okrgi i parabole za pomoc znakw ASCII drukowanych przez telegraf. Pisalimy
generatory losowych sw. Do ostatniej cyfry wyliczalimy silni z 50. Powicalimy cae
godziny na wymylanie programw, pisanie ich i uruchamianie.
Dwa lata pniej Tim, nasz kolega Richard Lloyd i ja zostalimy zatrudnieni jako programici
w firmie ASC Tabulating w Lake Bluff w stanie Illinois. W tym czasie Tim i ja mielimy
po 18 lat. Zdecydowalimy, e liceum to strata czasu i powinnimy od razu zacz nasze
kariery. To wanie w tej firmie spotkalimy Billa Hohriego, Franka Rydera, Wielkiego Jima
Carlina oraz Jona Millera. To dziki nim todzioby mogy si dowiedzie, co oznacza
profesjonalne tworzenie oprogramowania. Dowiadczenie to nie byo ani cakowicie
pozytywne, ani cakowicie negatywne, ale z ca pewnoci byo pouczajce. Dzikuj zatem
wszystkim wymienionym oraz Richardowi, ktry by katalizatorem i si napdow caego
tego procesu.
W wieku 20 lat, po zoeniu wypowiedzenia i uspokojeniu si, przez pewien czas pracowaem
jako serwisant kosiarek do trawy w firmie mojego szwagra. W tym fachu byem tak fatalny,
e szwagier by zmuszony mnie wyrzuci z pracy. I za to Ci dzikuj, Wes!
Jaki rok pniej rozpoczem prac w firmie Outboard Marine Corporation. W tym czasie
miaem ju on i dziecko w drodze. Stamtd te zostaem zwolniony. Dzikuj Wam, John,
Ralph i Tom!
Nastpnie zaczem prac w firmie Teradyne, gdzie spotkaem Russa Ashdowna, Kena
Findera, Boba Copithornea, Chucka Studee oraz CK Srithrana (teraz Krisa Iyera). Ken by
moim szefem, a Chuck i CK kolegami. Od nich wszystkich bardzo duo si nauczyem.
Dzikuj Wam, chopaki!
Pniej pojawi si Mike Carew. W Teradyne razem stworzylimy dynamiczny duet.
Razem napisalimy kilka systemw. Jeeli kto chcia co przygotowa i zrobi to naprawd
szybko, to Bob i Mike doskonale si do tego nadawali. wietnie si razem bawilimy.
Dzikuj Ci, Mike.
Jerry Fitzpatrick rwnie pracowa w Teradyne. Poznalimy si podczas wsplnych
sesji Dungeons & Dragons i bardzo szybko zaczlimy wsppracowa. Napisalimy
oprogramowanie dla Commodore 64 wspomagajce graczy w D&D. W Teradyne
rozpoczlimy te prace nad nowym projektem, ktry otrzyma nazw elektronicznego
recepcjonisty. Pracowalimy razem przez kilka lat, a Jerry zosta i pozosta moim bliskim
przyjacielem. Dzikuj Ci za to, Jerry!
Pracujc dla firmy Teradyne, spdziem cay rok w Anglii, gdzie spotkaem Mikea
Kergozou. Razem snulimy wiele rnych planw, cho wikszo z nich bya zwizana
z motocyklami i pubami. Mike by jednak oddanym programist powicajcym wiele
uwagi kwestiom jakoci i dyscypliny (cho sam pewnie by si nie zgodzi z tym twierdzeniem).
Dzikuj Ci, Mike!
23
P ODZIKOWANIA
Gdy w 1987 roku wrciem z Anglii, zaczem swoje zwyke planowanie wsplnie z Jimem
Newkirkiem. Obaj odeszlimy z Teradyne (w odstpie miesica) i zatrudnilimy si
w start-upie o nazwie Clear Communications. Nastpnych kilka lat spdzilimy razem,
harujc w nadziei na miliony, ktre jako si nie pojawiy. Nigdy jednak nie zaprzestalimy
planowania. Dzikuj Ci, Jim!
Na koniec wsplnie zaoylimy firm Object Mentor. Jim jest najbardziej bezporedni,
zdyscyplinowan i skupion osob, z jak kiedykolwiek zdarzyo mi si pracowa. Nauczy
mnie tak wielu rzeczy, e nawet trudno byoby mi je wymieni. W zamian zadedykowaem
mu t ksik.
Wsppracowaem i snuem plany z wieloma innymi osobami, a jeszcze wicej miao wpyw
na moje zawodowe ycie: Lowell Lindstrom, Dave Thomas, Michael Feathers, Bob Koss,
Brett Schuchert, Dean Wampler, Pascal Roy, Jeff Langr, James Grenning, Brian Button,
Alan Francis, Mike Hill, Eric Meade, Ron Jeffries, Kent Beck, Martin Fowler, Grady Booch
i wielu, wielu innych. Wszystkim Wam z caego serca dzikuj.
Oczywicie moim najwaniejszym wsppracownikiem bya moja ukochana ona Ann
Marie. Oeniem si z ni w wieku 20 lat, cae trzy dni po jej 18 urodzinach. Przez 38 lat
bya moim niezomnym kompanem, moim sternikiem i aglem, mioci mojego ycia.
Mam nadziej przey z ni kolejne cztery dekady.
Aktualnie moimi wsppracownikami i partnerami w snuciu planw s moje dzieci. cile
wsppracuj z moj najstarsz crk Angel moj dzieln opiekunk i nieustraszon
pomocnic. Nigdy nie pozwala mi zboczy z wybranej cieki ani zapomnie o terminach
lub zobowizaniach. Obmylam plany biznesowe z moim synem Micahem, zaoycielem
firmy 8thlight.com. Musz powiedzie, e ma znacznie lepsz gow do interesw, ni ja
miaem kiedykolwiek. Nasz ostatni projekt cleancoders.com jest naprawd bardzo
ekscytujcy.
Mj modszy syn Justin wanie zacz pracowa razem z Micahem w 8th Light. Z kolei
modsza crka Gina jest chemikiem i pracuje dla Honeywell. Z tymi dwojgiem dopiero
zaczlimy powane planowanie.
To wanie dzieci s w stanie nauczy Ci wicej ni ktokolwiek inny w Twoim yciu.
Dzikuj Wam za to, dzieciaki!
24
AUTORZE
25
Ebookpoint.pl kopia dla: Jaroslaw Babijczuk siarsko@gmail.com
AUTORZE
Bdc liderem przemysu tworzcego oprogramowanie, Martin przez trzy lata pracowa
jako gwny redaktor magazynu C++ Report oraz przewodniczcy organizacji Agile
Alliance.
Robert jest te zaoycielem firmy Uncle Bob Consulting LLC, a wsplnie ze swoim synem
Micahem wspzaoycielem firmy The Clean Coders LLC.
26
Ebookpoint.pl kopia dla: Jaroslaw Babijczuk siarsko@gmail.com
N A OKADCE
27
N A OKADCE
28
O BOWIZKOWY WSTP
(Nie pomijaj tego, bdzie pniej potrzebne).
Bez paniki.
29
O BOWIZKOWY WSTP
30
O BOWIZKOWY WSTP
O BOWIZKOWY WSTP
32
O BOWIZKOWY WSTP
Matka wzia mnie pewnego dnia na stron i powiedziaa mi, e moje ycie to katastrofa,
e byem idiot, rzucajc prac i nie majc nic w zamian, rzucajc j tak emocjonalnie
i wsplnie z koleg. Powiedziaa mi te, e nie wolno rzuca pracy, jeli nie ma si ju
nowego kontraktu, e takie rzeczy robi si po cichu, spokojnie i samodzielnie. Powiedziaa
mi, e mam zadzwoni do swojego byego szefa i baga go o ponowne przyjcie. Na koniec
stwierdzia: Musisz nauczy si pokory.
Dziewitnastoletni chopcy raczej nie maj ochoty na nauk pokory, a ja nie byem adnym
wyjtkiem, jednak okolicznoci mocno nadwtliy moj dum. Ostatecznie musiaem
zadzwoni do byego szefa i si przed nim upokorzy. Ale zadziaao. Bardzo chtnie
zatrudni mnie za 6800 dolarw rocznie, a ja byem szczliwy, e mam prac.
W tej pracy spdziem kolejnych 18 miesicy, pilnujc si i prbujc by jak najbardziej
wartociowym pracownikiem. Zostaem za to nagrodzony awansami, podwykami
i regularn wypat. ycie nabrao kolorw. Gdy ponownie opuciem t firm, odbyo
si to na dobrych warunkach, a co waniejsze, miaem ju wtedy propozycj lepszej pracy.
Moesz sdzi, e czego si w tym czasie nauczyem, e staem si profesjonalist. Byem
od tego daleki. To bya dopiero pierwsza z czekajcych mnie lekcji. W kolejnych latach
zostaem zwolniony z pracy za niedbanie o dotrzymywanie wanych terminw, a z innej
prawie mnie wyrzucono za nieumylne przekazanie klientowi tajnych informacji.
Zajmowaem si prowadzeniem projektu skazanego na porak; pozwoliem na jego
zagad, poniewa nie poprosiem nikogo o pomoc, ktrej tak bardzo potrzebowaem.
Agresywnie broniem swoich decyzji technicznych, mimo e w konfrontacji z potrzebami
klienta nie miay one sensu. Przyjem do pracy osob zupenie do niej nieprzygotowan,
czym wpdziem pracodawc w kopoty prawne. A co gorsza, moja niezdarno jako
przeoony spowodowaa, e dwie osoby zostay zwolnione z pracy.
T ksik mona zatem traktowa jak zbir moich wasnych bdw, katalog moich
wystpkw i zbir wskazwek pozwalajcych Ci unikn wpadnicia w te same puapki.
33
O BOWIZKOWY WSTP
34
P ROFESJONALIZM
miej si, Curtin! Kto spata nam figla! Bg, los, natura sam wybierz.
Jednak ktokolwiek to by, mia nieze poczucie humoru!
Howard, Skarb Sierra Madre
35
R OZDZIA 1.
P ROFESJONALIZM
Przejmowanie odpowiedzialnoci
Mam nadziej, e przeczytae wprowadzenie. Jeeli nie, to lepiej zrb to w tej chwili.
To wanie wprowadzenie tworzy kontekst dla caej zawartoci ksiki.
Wszystko, co wiem na temat odpowiedzialnoci, poznaem jako konsekwencj braku
odpowiedzialnoci.
W 1979 roku pracowaem dla firmy o nazwie Teradyne. Byem tam inynierem
odpowiedzialnym za oprogramowanie kontrolujce system mini- i mikrokomputerowy
mierzcy jako linii telefonicznych. Centralny minikomputer by poczony za pomoc
dedykowanych linii telefonicznych o szybkoci 300 bodw z dziesitkami satelitarnych
mikrokomputerw sterujcych oprogramowaniem pomiarowym. Cao kodu zostaa
napisana w asemblerze.
Mona mie nadziej, e wyznaje dobre zasady radzenia sobie z bdami i omykami.
36
P RZEJMOWANIE ODPOWIEDZIALNOCI
37
R OZDZIA 1.
P ROFESJONALIZM
38
39
R OZDZIA 1.
P ROFESJONALIZM
Znam ludzi, ktrzy wykorzystuj dzia kontroli jakoci jako wykrywacz bdw. Wysyaj
do niego kod, ktrego nie sprawdzili do dokadnie. Maj nadziej, e kontrola jakoci
znajdzie w kodzie bdy i przele informacj o nich do programistw. Co wicej, niektre
firmy nagradzaj pracownikw kontroli jakoci na podstawie liczby znalezionych bdw.
Im wicej bdw, tym wysza nagroda.
Pomimy ju nawet to, e jest to niezwykle drogie zachowanie, ktre szkodzi zarwno
firmie, jak i oprogramowaniu. Przymknijmy oko na to, e takie zachowanie niszczy plany
i podminowuje zaufanie firmy do zespou programistw. Spumy zason milczenia
na fakt, e takie dziaanie jest przykadem lenistwa i nieodpowiedzialnoci. Przekazywanie
do dziau kontroli jakoci kodu, co do ktrego nie mamy pewnoci, czy dziaa, jest
najzwyczajniej w wiecie nieprofesjonalne. W ten sposb naruszana jest zasada nie szkodzi.
Czy dzia kontroli jakoci znajdzie bdy? Zapewne tak, dlatego przygotuj ju przeprosiny,
a potem zastanw si, jak tym bdom udao si umkn Twojej uwadze, i zrb wszystko,
eby w przyszoci si to nie powtrzyo.
Za kadym razem, gdy kontrola jakoci albo co gorsza uytkownik znajd w oprogramowaniu
bd, powinnimy by zaskoczeni, zniesmaczeni i zdeterminowani, eby si to nigdy wicej
nie powtrzyo.
41
R OZDZIA 1.
P ROFESJONALIZM
[PPP2002].
42
E TYKA PRACY
Profesjonalni programici s tak pewni swojego kodu i testw, e bez adnych oporw
prowadzaj do kodu rne oportunistyczne zmiany. Ot tak zmieniaj nazw klasy. Jeeli
podczas czytania kodu moduu zauwa przydug metod, to przy okazji podziel j na
mniejsze kawaki. Zamieni instrukcj wyboru w rozwizanie polimorficzne albo zwin
hierarchi dziedziczenia w struktur typu acuch dowodzenia. W skrcie: traktuj
oprogramowanie tak jak rzebiarz traktuje glin cay czas je przeksztacaj i formuj.
Etyka pracy
Twoja kariera to Twoja odpowiedzialno. Zapewnienie Twojej atrakcyjnoci na rynku
pracy nie jest zadaniem Twojego pracodawcy. Jego zadaniem nie jest te szkolenie Ci,
wysyanie na konferencje ani kupowanie Ci ksiek. To wszystko to Twoja odpowiedzialno.
Biada programicie, ktry zawierzy swoj karier pracodawcy.
Niektrzy pracodawcy chtnie kupuj ksiki dla pracownikw, wysyaj ich na kursy
i konferencje. To bardzo mio, e robi Ci takie przysugi. Nigdy jednak nie wpadaj
w puapk mylenia, e jest to zadanie pracodawcy. Jeeli pracodawca tego nie robi,
to musisz szuka sposobu, eby robi to samodzielnie.
Podobnie nie jest zadaniem pracodawcy organizowanie Ci czasu niezbdnego na nauk.
Niektrzy pracodawcy taki czas wygospodarowuj, a cz pracownikw moe si nawet
tego domaga. I tu ponownie trzeba zaznaczy, e takie dziaanie moe by tylko miym
gestem pracodawcy, ktry musimy odpowiednio doceni. Nie mona jednak od pracodawcy
oczekiwa takich prezentw.
Swojemu pracodawcy winni jestemy okrelony czas oraz nakad pracy. Na potrzeby
tej dyskusji przyjmijmy standardowe w USA 40 godzin na tydzie. Tych 40 godzin
powinnimy spdzi, rozwizujc problemy pracodawcy, a nie swoje.
Naley jednak planowa prac w zakresie 60 godzin w tygodniu, pierwszych 40 powicajc
swojemu pracodawcy, a pozostae 20 zachowujc dla siebie. Podczas tych dodatkowych
20 godzin moesz czyta, wiczy, uczy si lub w inny sposb rozwija swoj karier.
Zapewne zaczynasz teraz myle: A co z moj rodzin? Co z moim yciem prywatnym?
Czy mam je powici na rzecz pracodawcy?.
Nie mwi jednak o caym Twoim czasie wolnym, a jedynie o dodatkowych 20 godzinach
tygodniowo. To zaledwie trzy godziny dziennie. Jeeli wykorzystasz przerw obiadow na
czytanie, w drodze do i z pracy posuchasz podcastw, a 90 minut powicisz kadego dnia
na nauk nowego jzyka, to nic wicej nie trzeba.
To prosta matematyka. W tygodniu mamy 168 godzin. Pracodawcy powicasz 40, a na
rozwj kariery kolejnych 20. Pozostaje 108 godzin. Sen zajmuje 56, a zatem zostaj nam
52 godziny na inne aktywnoci.
43
R OZDZIA 1.
P ROFESJONALIZM
By moe nie chcesz takiego powicenia. Nie ma sprawy, ale wtedy nie myl o sobie jako
o profesjonalicie. Zawodowcy powicaj czas, eby zadba o swoj profesj.
Mylisz zapewne, e praca powinna pozosta w pracy i nie naley przynosi jej do domu.
Cakowicie si zgadzam! Podczas tych dodatkowych 20 godzin nie naley pracowa dla
swojego pracodawcy. Ten czas powi na prac nad wasn karier.
Czasami te dwa cele s ze sob zgodne. Czasami praca dla pracodawcy jest bardzo korzystna
dla Twojej kariery. W takiej sytuacji cakiem rozsdne bdzie powicenie czci z tych
20 godzin pracodawcy. Pamitaj jednak, e te 20 godzin ma suy przede wszystkim Tobie.
Dziki nim masz podnie swoj warto jako zawodowca.
Moesz teraz pomyle, e jest to prosta recepta na wypalenie zawodowe. Wrcz przeciwnie!
To recepta na uniknicie wypalenia. Zakadam, e wybr zawodu programisty wynika
z Twojej pasji zwizanej z tworzeniem oprogramowania i dysz do tego, by zosta
profesjonalist napdzanym pasj. Podczas tych 20 godzin naley robi wszystko, eby
t pasj podsyca. Tych 20 godzin ma sprawia Ci przyjemno!
44
E TYKA PRACY
dobrej prasy. Ale nie oznacza to, e nie powinnimy wiedzie, na czym ona polega i jakie
s jej dobre i ze strony.
Mimo wszystko wikszo idei wypracowanych w cigu tych 50 lat dzi nadal jest tak samo
wartociowa. Cz z nich nawet zyskaa na wartoci.
Pamitaj o przeklestwie Santayany: Kto nie pamita o przeszoci, skazany jest na to,
eby j powtarza.
Oto minimalna lista rzeczy, ktre powinien wiedzie kady zawodowy twrca
oprogramowania:
Wzorce projektowe. Musisz by w stanie opisa wszystkie 24 wzorce opisane w ksice
Ciga nauka
To niezwyke tempo zmian w naszej gazi przemysu sprawia, e twrcy oprogramowania
musz cigle przyswaja ogromne iloci wiedzy, tylko po to, eby nady za tym rozwojem.
Biada architektowi, ktry zaprzestanie tworzenia kodu. Bardzo szybko okae si, e nie
przystaje do rzeczywistoci. Biada programistom, ktrzy przestali uczy si nowych jzykw.
Bd mogli tylko popatrze, jak oddala si od nich czowka. Biada projektantom, ktrzy
przestan uczy si nowych technik i rozwiza. Koledzy szybko ich przecign.
Chcesz korzysta z usug doktora, ktry przesta czyta o najnowszych postpach
w medycynie? Zatrudnisz doradc podatkowego, ktry nie ledzi najnowszych zmian
w prawie? Dlaczego zatem mielibymy zatrudnia programistw, ktrzy nie ledz nowoci?
Czytaj ksiki, artykuy, blogi i tweety. Jed na konferencje. Wstpuj do grup
uytkownikw. We udzia w spotkaniach grup naukowych i czytelniczych. Ucz si rzeczy,
ktre nie s dla Ciebie najatwiejsze. Jeeli jeste programist .NET, to naucz si Javy.
Jeeli normalnie programujesz w Javie, to poznaj jzyk Ruby. Jeeli programujesz w C,
naucz si Lispu. A jeeli naprawd chcesz zmusi mzg do pracy, to zacznij poznawa
Prolog lub Forth.
45
R OZDZIA 1.
P ROFESJONALIZM
wiczenia
Zawodowcy nieustannie wicz. Prawdziwi zawodowcy ciko pracuj nad cigym
rozwojem swoich umiejtnoci. Nie wystarczy tylko wykonywa swojej codziennej pracy
i nazywa to wiczeniem. W czasie pracy chodzi o wydajno, a nie wiczenia. O wiczeniu
mona mwi wtedy, gdy wykorzystujesz swoje umiejtnoci poza normaln prac tylko
po to, eby te je utrwali i rozwin.
Co zatem dla programisty oznacza wiczenie? Na pierwszy rzut oka ta koncepcja jest
troch absurdalna. Ale wystarczy przez chwil pomyle. Zastanw si, jak muzycy
doskonal swoje rzemioso. Wcale nie wystpujc, tylko wiczc. A jak to robi? Midzy
innymi maj specjalne wiczenia, ktre regularnie wykonuj. Skale, etiudy i sekwencje.
Powtarzaj je w nieskoczono, wiczc swoje palce i umysy, prbujc osign
doskonao w tym, co robi.
Co zatem mog robi programici w ramach wicze? W tej ksice cay rozdzia
powiciem rnym rodzajom wicze, dlatego nie bd si tutaj rozpisywa. Jedn
z technik, z ktrych sam czsto korzystam, jest powtarzanie prostych wicze, takich
jak Gra w krgle (ang. Bowling game) lub Czynnik pierwszy (ang. Prime factor). Takie
wiczenia nazywam kata. Istnieje spory zbir takich kata do wyboru.
Kata najczciej zdefiniowane jest jako prosty problem programistyczny, ktry naley
rozwiza, taki jak napisanie funkcji obliczajcej czynniki pierwsze danej liczby cakowitej.
Celem wykonywania kata nie jest wymylenie sposobu rozwizania problemu, poniewa
kady zna ju jego rozwizanie. Celem jest tutaj wywiczenie swoich palcw i umysu.
Kadego dnia robi jedno lub dwa kata, czsto w ramach przygotowa do waciwej pracy.
Mog wykona je w Javie, w Ruby albo w Clojure lub dowolnym innym jzyku, ktrego
zasady w danym momencie chc sobie przypomnie. Wykorzystuj kata do poprawienia
okrelonej umiejtnoci, takiej jak przypomnienie palcom rnych skrtw klawiszowych,
albo wykonania okrelonych rodzajw refaktoryzacji.
O kata moesz myle jak o dziesiciominutowych rozgrzewkach o poranku
i dziesiciominutowym rozciganiu po poudniu.
Wsppraca
Kolejn dobr metod nauki jest wsppraca z innymi ludmi. Zawodowi programici
szczeglnie staraj si wsplnie programowa, wiczy, projektowa i planowa. W ten
sposb wiele si nawzajem od siebie ucz, a poza tym wykonuj zadania w znacznie
krtszym czasie i z mniejsz liczb bdw.
Nie oznacza to, e musisz 100% swojego czasu spdza, pracujc wsplnie z innymi. Rwnie
wany jest czas wykorzystywany samodzielnie. Jak bardzo bym lubi programowanie
46
E TYKA PRACY
Nauczanie
Najlepsz metod uczenia siebie jest nauczanie innych. Nic tak szybko nie wprowadzi
do gowy nowych faktw i wartoci jak przekazywanie ich ludziom, za ktrych jestemy
odpowiedzialni. Oznacza to, e zalety nauczania zdecydowanie le po stronie
nauczajcego.
Wedug tego samego schematu mona powiedzie, e nie ma lepszego sposobu na
wprowadzenie nowej osoby do organizacji, ni usi razem z ni i pokaza jej wszystkie
szczegy. Zawodowcy przejmuj osobist odpowiedzialno za nauczanie modych.
Nie pozwalaj modzikom na nienadzorowane zabawy.
47
R OZDZIA 1.
P ROFESJONALIZM
Pokora
Programowanie jest aktem tworzenia. Piszc kod, tworzymy co z niczego. Odwanie
wymuszamy porzdek w chaosie. Pewnie i szczegowo nakazujemy maszynie okrelone
zachowania, ktre zdefiniowane inaczej, mogyby spowodowa nieobliczalne straty.
Oznacza to, e programowanie jest aktem gigantycznej arogancji.
Profesjonalici wiedz, e s aroganccy, i dlatego nie obnosz si z faszyw skromnoci.
Zawodowiec zna swoj prac i czuje dum, widzc swoje dziea. Profesjonalista jest pewien
swoich umiejtnoci i na tej podstawie podejmuje odwane, cho kalkulowane ryzyko.
Zawodowiec nie bdzie niemiay.
Mimo tego profesjonalista wie, e przyjdzie taki czas, kiedy si pomyli, jego ocena ryzyka
okae si bdna, a umiejtnoci niewystarczajce. Spojrzy wtedy w lustro i zobaczy
miejcego si do niego aroganckiego gupca.
Oznacza to, e gdy zawodowiec stanie si obiektem kpin, sam bdzie si z nich mia.
Nigdy nie bdzie wykpiwa innych, ale przyjmie kpiny, na ktre zasuy, a wymieje te
niezasuone. Nie bdzie ponia nikogo za popenione bdy, poniewa wie, e sam moe
wkrtce si pomyli.
Profesjonalista zna rozmiary swojej arogancji i wie, e los w kocu te j zauway
i odpowiednio potraktuje. A gdy si to stanie, najlepsze, co bdzie mona zrobi,
to skorzysta z rady Howarda: mia si.
Bibliografia
[PPP2002]: Robert C. Martin, Agile Software Development. Principles, Patterns,
and Practices, Upper Saddle River, NJ: Prentice Hall, 2002.
48
49
Ebookpoint.pl kopia dla: Jaroslaw Babijczuk siarsko@gmail.com
R OZDZIA 2.
Na tydzie przed terminem w kocu udao si nam zoy system w cao. Musielimy si
jednak upora z dug list bdw i problemw, nad ktr nadal wytrwale pracowalimy.
Nie mielimy czasu na jedzenie, spanie, nie mwic ju o myleniu.
Frank, meneder z ASC, by emerytowanym pukownikiem Air Force. By jednym z tych
gonych i bardzo bezporednich kierownikw. Nie znosi sprzeciwu i kady jego przejaw
dusi brutalnie ju w samym zarodku. Nasza trjka dziewitnastolatkw nie bya w stanie
nawet nawiza z nim kontaktu wzrokowego.
Frank powiedzia, e system ma by gotowy do wyznaczonego dnia. Nie byo adnej dyskusji.
Wielki dzie nadejdzie i system bdzie gotowy. Kropka. adnych dyskusji. Bez odbioru.
Mj szef Bill by cakiem miym czowiekiem. Z Frankiem pracowa ju od adnych kilku
lat i wiedzia, na co mona sobie z nim pozwoli, a co byo wykluczone. Powiedzia nam,
e system zostanie uruchomiony wyznaczonego dnia, niezalenie od okolicznoci.
A zatem system zosta uruchomiony. To bya prawdziwa katastrofa.
Mielimy tuzin pdupleksowych terminali o szybkoci 300 bodw, ktre czyy siedzib
firmy Teamsters w Chicago z naszym komputerem znajdujcym si 50 kilometrw na pnoc
od miasta. Kady z tych terminali blokowa si mniej wicej co 30 minut. Wiedzielimy ju
wczeniej o tym problemie, ale nigdy nie symulowalimy ruchu, ktry zaczli generowa
pracownicy klienta.
eby byo jeszcze gorzej, podczas drukowania arkuszy za pomoc teletekstw ASR-35,
podczonych do systemu liniami telefonicznymi o szybkoci 110 bodw, zdarzay si
blokady w samym rodku arkusza.
Rozwizaniem przy kadej takiej blokadzie byo ponowne uruchomienie systemu. Oznaczao
to, e kada osoba, ktrej terminal jeszcze dziaa, musiaa dokoczy prac i si zatrzyma.
Gdy ju nikt nie pracowa, mogli do nas zadzwoni z prob o ponowne uruchomienie.
Osoba, ktrej zdarzya si blokada, musiaa zaczyna swoj prac od pocztku. A zdarzao
si to kilka razy na godzin.
Po kilku godzinach takiej zabawy meneder biura Teamsters nakaza nam zamkn system
i nie uruchamia go ponownie, dopki nie bdzie dziaa poprawnie. Ju stracili p dnia
pracy i byli zmuszeni ponownie wprowadza te same dane do starego systemu.
W caym budynku sycha byo krzyki i przeklestwa rzucane przez Franka. Trwao to
ca wieczno. Pniej przyszed do nas Bill w towarzystwie analityka systemowego Jalila
z pytaniem, na kiedy moemy doprowadzi system do stanu stabilnego. Powiedziaem,
e za cztery tygodnie.
Na ich twarzach pojawiy si przeraenie i determinacja. To niemoliwe powiedzieli
musi dziaa ju w pitek.
50
Ebookpoint.pl kopia dla: Jaroslaw Babijczuk siarsko@gmail.com
P RZECIWSTAWNE ROLE
Odpowiedziaem: Przecie w zeszym tygodniu dopiero co udao si nam jako tako poskada
system. Musimy pozby si wszystkich problemw i bdw, a na to potrzebujemy czterech
tygodni.
Niestety, Bill i Jalil byli niewzruszeni. Nie, musi dziaa ju w pitek. Moecie przynajmniej
sprbowa?
I wtedy szef naszego zespou powiedzia: No dobra, sprbujemy.
Pitek by cakiem niezym wyborem, poniewa weekendowe obcienie systemu byo
o wiele mniejsze. Przed poniedziakiem moglimy znale i usun jeszcze wicej bdw.
Mimo wszystko cay ten domek z kart zawali si raz jeszcze. Problemy z zawieszaniem si
terminali pojawiay si jeszcze raz lub dwa razy kadego dnia. Oprcz tego system trapiy
te inne problemy. Jednak powoli, w cigu kilku tygodni doprowadzilimy go do stanu,
w ktrym skargi nie byy ju a tak czste, a normalno wydawaa si cakiem osigalna.
Wtedy, tak jak wspomniaem ju we wstpie, wszyscy zoylimy wypowiedzenie. Firma
miaa teraz naprawd powany problem. Musiaa zatrudni nowych programistw, ktrzy
mieli prbowa zaj si ogromnym strumieniem problemw zgaszanych przez klienta.
Kogo mona byo wini za t sytuacj? Z pewnoci sposb bycia Franka stanowi jaki
problem. Jego cige oniemielanie rozmwcy sprawiao, e ciko byo mu usysze
prawd. Z pewnoci Bill i Jalil powinni byli bardziej naciska Franka. Z pewnoci szef
zespou programistw nie powinien by zgadza si na pitkowy termin. Ostatecznie
ja sam powinienem by powiedzie nie, zamiast ustawia si za szefem zespou.
Profesjonalici mwi prawd niezalenie od sytuacji. Profesjonalici maj odwag
powiedzie nie swoim przeoonym.
Ale jak powiedzie nie swojemu szefowi? W kocu to Twj szef! Czy nie naleaoby
robi tego, co szef nakazuje?
Nie. Nie, jeeli uwaasz si za profesjonalist.
Niewolnik nie ma prawa powiedzie nie. Robotnicy mog mie opory przed mwieniem
nie. Ale od profesjonalistw oczekuje si, e bd mwi nie. Co wicej, dobrzy
menederowie szukaj ludzi, ktrzy maj charakter, eby si sprzeciwia. Tylko w ten
sposb mona naprawd wiele osign.
Przeciwstawne role
Jeden z recenzentw naprawd nienawidzi tego rozdziau. Powiedzia, e z jego powodu
prawie odoy ksik na pk. Tworzy ju zespoy, w ktrych nie byo wrogich stosunkw.
Takie zespoy pracoway w harmonii, bez adnych konfrontacji.
51
Ebookpoint.pl kopia dla: Jaroslaw Babijczuk siarsko@gmail.com
R OZDZIA 2.
Ciesz si z sytuacji tego recenzenta, ale zastanawiam si, czy jego zespoy naprawd byy
tak harmonijne, jak twierdzi. Jeeli takie byy, to zastanawiam si, czy byy tak wydajne,
jak mogyby by. Z mojego dowiadczenia wynika, e najtrudniejsze decyzje najlepiej
podejmuje si w trakcie konfrontacji przeciwstawnych rl.
Menederowie s ludmi, ktrym powierzono okrelone zadanie, i wikszo z nich
doskonale wie, jak to zadanie wykona. Cz ich pracy polega na jak najagresywniejszej
obronie wyznaczonych im celw.
Podobnie programici te s ludmi, ktrzy rwnie maj do wykonania pewne zadanie
i wikszo z nich wie, jak si z niego dobrze wywiza. Jeeli s oni profesjonalistami,
to bd starali si broni swoich celw tak agresywnie, jak tylko bd mogli.
Gdy Twj kierownik mwi Ci, e strona logowania ma by gotowa na jutro, to stara si
osiga swoje wasne cele. Wykonuje po prostu swoj prac. Jeeli doskonale wiesz, e
przygotowanie strony logowania na jutro jest po prostu niemoliwe, to mwic: OK,
sprbuj, zdecydowanie nie wykonujesz swojej pracy. T prac wykonasz waciwie,
tylko twierdzc, e to jest niemoliwe.
Czy jednak nie masz obowizku wykonywania polece przeoonego? Wcale nie. Twj
meneder liczy wanie na to, e bdziesz broni swoich celw tak agresywnie, jak on
broni swoich. Tylko w ten sposb bdziecie w stanie wypracowa rozwizanie najlepsze
z moliwych.
Takim rozwizaniem jest cel, pod ktrym Ty i Twj kierownik moecie si podpisa.
Caa sztuka polega na odnalezieniu takiego celu, a to zwykle wymaga negocjowania.
Czasami takie negocjacje mog by cakiem przyjemne.
Mike: Paula, ta strona logowania musi by gotowa na jutro.
Paula: O rany! Tak szybko? Ale OK, sprbuj.
Mike: wietnie, wielkie dziki!.
To bya cakiem mia rozmowa. Cakowity brak konfrontacji, a obie strony rozstay si
z umiechem. Wspaniale.
Jednak obie strony zachoway si bardzo nieprofesjonalnie. Paula wie doskonale, e
przygotowanie strony logowania zajmie jej troch wicej ni jeden dzie, a zatem kamie.
By moe nawet nie myli o tym w kategorii kamstwa i naprawd ma zamiar sprbowa,
bo ma cho cie nadziei, e uda jej si dotrzyma terminu. Jak by na to nie patrze, to nadal
jest kamstwo.
Jednake Mike uzna sowo sprbuj za tak. To wyjtkowo gupie zaoenie. Powinien
by wiedzie, e Paula prbuje tylko unikn konfrontacji, dlatego mia pocign t spraw
52
Ebookpoint.pl kopia dla: Jaroslaw Babijczuk siarsko@gmail.com
P RZECIWSTAWNE ROLE
R OZDZIA 2.
A co z dlaczego?
Moesz myle, e Paula powinna bya wyjani, dlaczego przygotowanie strony logowania
zajmie duo wicej czasu. Z mojego dowiadczenia wynika jednak, e powd ma duo
mniejsze znaczenie od faktu. A faktem jest, e prace nad stron logowania potrwaj dwa
tygodnie. Dlaczego potrwa to tak dugo, jest ju tylko mao znaczcym szczegem.
Mimo to, znajc powody, Mike mgby zrozumie, a przez to i zaakceptowa sam fakt.
Zgadza si. I w sytuacjach, w ktrych Mike ma odpowiedni wiedz techniczn oraz ch
zrozumienia, takie wyjanienia mogyby by przydatne. Jednak Mike mgby si te nie
zgodzi z takimi wnioskami. Mgby doj do wniosku, e Paula wszystko robi le. Mgby
stwierdzi, e wcale nie potrzeba jej tych wszystkich testw, kontroli, a poza tym krok 12.
mona miao pomin. Prezentowanie zbyt wielu informacji moe by zaproszeniem do
mikrozarzdzania.
Wysokie stawki
Najmocniej naley sprzeciwia si wtedy, gdy stawka jest najwysza. Im wysza stawka,
tym wiksz si zyskuje Twoje nie.
To w ogle nie powinno wymaga wyjanie. Jeeli koszt pomyki byby tak duy, e
zaleaoby od tego przetrwanie firmy, Twoim bezwzgldnym obowizkiem jest przekazanie
menederom jak najdokadniejszych informacji. A to czsto oznacza sprzeciwianie si
ich daniom.
Don (dyrektor dziau rozwoju): Zgodnie z naszymi aktualnymi szacunkami projekt
Zota Kura powinien zosta ukoczony za dwanacie tygodni z dokadnoci
do plus minus piciu tygodni.
54
Ebookpoint.pl kopia dla: Jaroslaw Babijczuk siarsko@gmail.com
G RACZ ZESPOOWY
Charles (prezes): (siedzi przez pitnacie sekund z coraz bardziej czerwon twarz)
Chcesz przez to powiedzie, e bdziemy gotowi dopiero za siedemnacie
tygodni?.
Don:
Tak, to moliwe.
Charles: (wstaje, sekund pniej wstaje te Don) Do jasnej cholery! Cao miaa by
gotowa trzy tygodnie temu! Klienci dzwoni do mnie codziennie i wypytuj,
gdzie podziewa si ich system. Nie mam zamiaru informowa ich, e bd
musieli poczeka jeszcze cztery miesice. Musisz si bardziej postara!
Don:
Charles: Dobrze wiesz, e tego nie zrobiem. Don, nie moemy sobie pozwoli na
utrat tego zamwienia (milknie i blednie). Przecie bez niego siedzimy
w gbokim bagnie. Chyba dobrze o tym wiesz. A teraz jeszcze to opnienie.
Obawiam si co ja mam powiedzie zarzdowi? (Powoli siada w swoim
fotelu, prbujc zebra si w sobie). Naprawd musisz si bardziej postara.
Don:
Tutaj nic nie mog zrobi. Przerabialimy to ju. Klient nie chce ograniczy
projektu ani nie chce zaakceptowa czciowych wyda. Chc mie jedn
wielk instalacj i zapomnie o wszystkim. W tych warunkach nie da si zrobi
nic szybciej. Po prostu si nie da.
Charles: Cholera. Gdyby to twoja posada bya zagroona, pewnie nie byby tak twardy.
Don:
Przykro mi, ale zwolnienie mnie w aden sposb nie poprawi szacunkw.
Charles: Dobra, koczymy. Wracaj do swojego zespou i pchaj ten projekt do przodu.
Ja musz wykona kilka mao przyjemnych telefonw.
Oczywicie Charles powinien by poinformowa klienta o nowych terminach ju trzy
miesice temu, gdy tylko si o nich dowiedzia. Przynajmniej teraz podj waciw decyzj
i zapa za telefon (zarzd te musi poinformowa). Jeeli jednak Don nie obstawaby przy
swoim, to te telefony z pewnoci nie zostayby wykonane.
Gracz zespoowy
Wszyscy wielokrotnie syszelimy, jak wane jest, eby by graczem zespoowym. Gracz
zespoowy gra na swojej pozycji tak dobrze, jak tylko potrafi, i pomaga kolegom z zespou,
gdy tego potrzebuj. Gracz zespoowy czsto wymienia si informacjami, wsppracuje
z caym zespoem, a swoje obowizki wykonuje tak dobrze, jak tylko potrafi.
Graczem zespoowym nie jest jednak kto, kto na wszystko si zgadza. Przyjrzyjmy si
kolejnej rozmowie.
55
Ebookpoint.pl kopia dla: Jaroslaw Babijczuk siarsko@gmail.com
R OZDZIA 2.
Paula: Mike! Mam dla ciebie kilka szacunkw. Zesp zdecydowa, e bdziemy
w stanie dostarczy wersj demonstracyjn za mniej wicej osiem tygodni.
Plus minus tydzie.
Mike: Chyba artujesz. Wedug oficjalnego planu demo ma by gotowe za sze
tygodni.
Paula: I nie zapytalicie nas o zdanie? Daj spokj, przecie nie moesz tak wymusza
terminw.
Mike: Przykro mi, ju si stao.
Paula: (wzdycha) OK, zapytam w zespole, czy moemy co zrobi, eby cokolwiek
dostarczy w cigu szeciu tygodni. Ale na cay system nie ma najmniejszych
szans. Pewnych funkcji bdzie brakowao, a i dane bd niekompletne.
Mike: Paula, klienci chc zobaczy w peni funkcjonalne demo.
Paula: Zapomnij. Na to nie ma najmniejszych szans.
Mike: Cholera! Dobra, zobacz, co si da zrobi, i do jutra mnie poinformuj.
Paula: Tyle mog ci obieca.
Mike: Nie ma adnej moliwoci, eby skrci prace? Moe da si pracowa jako
sprytniej i szybciej?.
Paula: Wszyscy dziaamy ju cakiem sprytnie. Doskonale wiemy, jak si za to zabra,
i z szacunkw wynika, e cao bdzie gotowa za osiem lub dziewi tygodni.
Ale nie za sze.
Mike: Moe jakie nadgodziny?.
Paula: To tylko wszystko spowolni. Pamitasz, jaki powsta baagan, gdy ostatnio
zarzdzono prac w nadgodzinach?.
Mike: No tak, ale tym razem wcale tak nie musi by.
Paula: Nie ud si. Bdzie tak jak ostatnio. Moesz mi zaufa. Demo bdzie gotowe
za osiem lub dziewi tygodni. Nie za sze.
Mike: Dobra, przelij mi szczegowy plan, ale zastanw si jeszcze, jak zaatwi to
w sze tygodni. Wiem, e co si wam uda wymyli.
Paula: Mike! Nie! Nie uda si! Mog ci dostarczy plan na sze tygodni, ale w demo
bdzie brakowao pewnych funkcji i danych. Tylko tak masz moliwo.
Mike: OK, OK. I tak wiem, e jak si postaracie, to bdziecie w stanie zdziaa cuda
(odchodzi, krcc gow).
Pniej, w trakcie zebrania dyrektorw w sprawie strategii.
Don: Mike, jak wiesz, klient zawita do nas za sze tygodni i bdzie chcia obejrze
demo swojego systemu. Mwili ju, e chcieliby, aby wszystko do tego czasu
dziaao.
56
Ebookpoint.pl kopia dla: Jaroslaw Babijczuk siarsko@gmail.com
G RACZ ZESPOOWY
Prbowanie
Najgorsz odpowiedzi, jakiej Paula mogaby udzieli w wyniku manipulacji Mikea,
byoby: OK, sprbujemy. Nie chciabym tu brzmie jak Yoda, ale w tym przypadku
ma on cakowit racj. Nie ma prbowania.
Moliwe, e ta idea Ci si nie podoba. By moe sdzisz, e prbowanie jest czym
pozytywnym. W kocu czy Kolumb odkryby Ameryk, gdyby nie prbowa?
Niestety, sowo prbowa ma wiele definicji. Definicja, z ktr mam najwicej problemw,
jest taka: Dooy stara. Jakich dodatkowych stara mona wymaga od Pauli, eby
dostarczya system na czas? Jeeli daoby si zwikszy starania w tym zakresie, to znaczyoby,
e zesp Pauli i ona sama nie wykorzystywali wszystkich swoich moliwoci. Musieli
ukrywa pewne rezerwy na wszelki wypadek1.
Obietnica sprbowania jest jednoczenie przyznaniem si, e nie wykorzystujesz wszystkich
swoich moliwoci; e masz jeszcze w zanadrzu co, czego mona uy. Obietnica
sprbowania jest te przyznaniem, e cel jest osigalny, o ile zostan zastosowane te
dodatkowe rodki. Co wicej, jest te zobowizaniem si do wykorzystania tych rodkw,
aby osign cel. Oznacza to, e obiecujc sprbowa, zobowizujesz si do osignicia
wyznaczonych celw. Na obiecujcego spada zatem cay ciar. Jeeli wasze prbowanie
nie przyniesie podanych skutkw, to znaczy, e zawiedlicie.
Tak jak Kurak Leghorn: Na takie wanie przypadki zawsze numeruj swoje pira.
57
Ebookpoint.pl kopia dla: Jaroslaw Babijczuk siarsko@gmail.com
R OZDZIA 2.
Masz jaki dodatkowy rezerwuar energii na czarn godzin? Jeeli wykorzystasz te rezerwy,
to uda si zrealizowa plan? Czy moe obiecujc sprbowa, najzwyczajniej w wiecie
podpisujesz wyrok na siebie i zesp?
Obiecujc sprbowa, obiecujesz te zmieni dotychczasowe plany. W kocu te stare byy
niewystarczajce. Obiecujc sprbowa, przyznajesz, e istnieje jaki nowy plan. Jak zatem
on wyglda? Jakie zmiany wprowadzisz w swoim zachowaniu? Czym bd rniy si Twoje
dziaania, poniewa teraz zaczynasz prbowa?
Jeeli nie masz adnego nowego planu, jeeli nie wprowadzisz zmiany w swoim dziaaniu,
jeeli bdziesz pracowa dokadnie tak jak do tej pory, zanim zaczo si prbowanie,
to na czym to prbowanie ma niby polega?
Jeeli jednak nie masz adnych rezerw energetycznych, jeeli nie masz nowego planu, jeeli
nie masz zamiaru zmienia swoich zachowa i jeeli masz cakowit pewno co do swojego
pierwotnego planu, to obietnica sprbowania bdzie absolutnie nieszczera. Mona bdzie
nazwa j kamstwem. Jedynym powodem, dla ktrego skadasz tak obietnic, jest prba
zachowania dobrej opinii i uniknicia konfrontacji.
Postawa Pauli jest tu zdecydowanie lepsza. Cay czas przypominaa Mikeowi, e szacunek
zespou nie jest cakowicie dokadny. Mwia cigle o omiu lub dziewiciu tygodniach.
Wyrazia t niepewno i nigdy si z niej nie wycofaa. Nigdy nie zasugerowaa, e istniej
jakie rezerwy, nowy plan albo jakakolwiek zmiana zachowa, ktre mogyby zmniejszy
stopie tej niepewnoci.
Trzy tygodnie pniej
Mike: Paula, termin dema ju za trzy tygodnie, a klienci chc zobaczy dziaajc
funkcj przesyania plikw.
Paula: Hola! Tego nie byo na uzgodnionej licie funkcji.
Mike: No wiem, ale klient si tego domaga.
Paula: Dobra, to znaczy jednak, e w demie nie bd dziaay centralne logowanie
albo kopia zapasowa.
Mike: Wykluczone! Te funkcje rwnie chc zobaczy.
Paula: Czyli chc zobaczy dziaajce wszystkie funkcje? To mi chcesz powiedzie?
Przecie ju dawno temu mwiam ci, e nie ma na to najmniejszych szans.
Mike: Przykro mi, Paula, ale klient jest nieugity. Chc zobaczy wszystkie funkcje.
Paula: Ale nie zobacz. Nie ma takiej moliwoci.
Mike: Daj spokj, nie moecie chocia sprbowa?.
Paula: Mike, prbowa to ja mog lewitacji. Mog prbowa zmieni ow w zoto.
Mog prbowa przepyn abk Atlantyk. Jak mylisz, uda mi si?.
58
Ebookpoint.pl kopia dla: Jaroslaw Babijczuk siarsko@gmail.com
G RACZ ZESPOOWY
Pasywna agresja
Paula musi podj bardzo ciekaw decyzj. Podejrzewa ona, e Mike nie przekazuje Donowi
informacji o jej szacunkach. Moe zatem pozwoli Mikeowi i dalej t drog, a do
przepaci. Moe sprawdzi, czy w dokumentacji znajduj si wszystkie przygotowane przez
ni dokumenty, tak eby w momencie rozptania si awantury moga udowodni, co i kiedy
mwia Mikeowi. Mwic krtko, pozwoli Mikeowi przygotowa wasn szubienic.
Moe te zapobiec katastrofie i porozmawia bezporednio z Donem. Oczywicie to do
ryzykowne posunicie, ale na tym rwnie polega gra zespoowa. Jeeli pocig towarowy
pdzi prosto na was, a tylko ty jeste w stanie go zobaczy, to moesz albo po cichu zej
z torw i popatrze, jak pocig przerabia kolegw na kotlety, albo gono krzycze:
Uwaga! Pocig! Schodzi z torw!.
Dwa dni pniej
Paula: Mike, przekazae ju Donowi moje szacunki? Mam nadziej, e poinformowa
ju klienta, i w demie nie bdzie dziaaa funkcja przesyania plikw.
Mike: Przecie powiedziaa, e to dla mnie zaatwisz.
Paula: Nie, Mike, nic takiego nie powiedziaam. Mwiam, e to niemoliwe. Tutaj masz
kopi wiadomoci, ktr wysaam ci po naszej rozmowie.
Mike: No tak, ale zrozumiaem, e mimo wszystko bdziesz prbowa.
Paula: Ju o tym rozmawialimy. Pamitasz? Ow, zoto
Mike: (wzdycha) Paula, no musisz to zaatwi. Po prostu musisz. Prosz, porusz niebo
i ziemi, ale ta funkcja musi dziaa na czas. Jeste mi to winna.
Paula: Mike, mylisz si. Nic nie jestem ci winna. Jedyne, co musz zrobi, to przekaza
t informacj Donowi, skoro ty nie jeste w stanie.
Mike: To byoby przekroczeniem twoich kompetencji. Nie omielisz si.
Paula: Nie chc tego, ale nie dajesz mi innego wyboru.
Mike: Och, Paula
59
Ebookpoint.pl kopia dla: Jaroslaw Babijczuk siarsko@gmail.com
R OZDZIA 2.
Koszta przytakiwania
Zwykle chcemy po prostu powiedzie tak. I rzeczywicie zdrowo dziaajce zespoy
szukaj jakiejkolwiek moliwoci, eby powiedzie tak. Menederowie i programici
wsppracujcy w ramach takich zespow negocjuj ze sob tak dugo, a ustal plan
dziaa, na ktry obie strony mog si zgodzi.
Jak jednak widzielimy, czasami jedyn metod na uzyskanie zdrowego tak jest brak
oporw przed mwieniem nie.
Zastanwmy si nad ponisz opowieci, ktr John Blanco opublikowa na swoim blogu2.
Prezentuj j tutaj za jego zgod. Czytajc tekst, sprbuj zastanowi si, kiedy i jak powinien
by powiedzie nie.
http://raptureinvenice.com/?p=63.
60
Ebookpoint.pl kopia dla: Jaroslaw Babijczuk siarsko@gmail.com
K OSZTA PRZYTAKIWANIA
61
Ebookpoint.pl kopia dla: Jaroslaw Babijczuk siarsko@gmail.com
R OZDZIA 2.
Wtrca si dyrektor numer 2: I jeszcze par kuponw, ktre klient bdzie mg pokaza
przy kasie. Sama aplikacja bdzie do jednorazowego uytku. Za chwil przejdziemy do fazy
drugiej i przygotujemy co wikszego od podstaw.
I wtedy si zaczyna. Mimo lat cigego przypominania sobie, e kada funkcja wymylona przez
klienta bdzie o wiele bardziej skomplikowana w realizacji, ni wynika z opisu, i tak si zgadzasz.
Naprawd wierzysz, e da si to zrobi w dwa tygodnie. Tak! Zrobimy to! Tym razem bdzie
inaczej! To tylko par obrazkw i wywoanie usugi, eby pobra pozycj sklepu. XML! Buka
z masem. Zrobimy! Ale si nakrciem! Do roboty!
A wystarcza tylko jeden dzie, eby rzeczywisto sprowadzia ci z powrotem na ziemi.
Ja: Moesz powiedzie mi, jak wywoa t usug sieciow, eby dosta pozycj sklepu?.
Klient: Jak usug sieciow?.
Ja: .
To si naprawd wydarzyo. Ich usuga wyznaczania pozycji sklepu, dostpna w prawym grnym
rogu ich strony internetowej, nie bya usug sieciow. Bya generowana przez kod napisany
w Javie. Zapomnij o jakim API. Niet. A eby byo gorzej, kod jest serwowany przez strategicznego
partnera Gorilla Martu.
Witamy w strasznym wiecie stron trzecich.
Z punktu widzenia klienta strona trzecia jest podobna do Angeliny Jolie. Mimo obietnic,
e bdziesz mg poprowadzi z ni wiat konwersacj przy wystawnej kolacji, z cieniem nadziei
na co ciekawszego pniej przykro mi, nic z tego. Pozostaje ci fantazjowanie w czasie, gdy sam
musisz zaj si sprawami.
W moim przypadku jedyne, co udao mi si wydusi z Gorilla Martu, to bya aktualna lista
sklepw w postaci pliku Excela. Musiaem od zera pisa kod wyznaczajcy pozycje sklepw.
A po poudniu tego samego dnia zaoyli nam podwjnego nelsona. Chcieli, eby produkty
i dane do kuponw byy dostpne online, tak eby mogli je co tydzie zmienia. Tyle widzielimy
z kodowania na twardo! Dwa tygodnie na napisanie aplikacji dla iPhonea zmieniy si w dwa
tygodnie na napisanie aplikacji dla iPhonea, aplikacji serwera w PHP i wykonanie integracji.
e co? Chc, ebym jeszcze przej na siebie zadania QA?
eby zrekompensowa tak krtki czas, musimy zatem szybciej tworzy kod. Zapomnij o fabryce
abstrakcyjnej. Zamiast kompozycji uyj wielkiej, ohydnej ptli. Nie ma czasu!
Dobry kod jest w tych warunkach nieosigalny.
62
Ebookpoint.pl kopia dla: Jaroslaw Babijczuk siarsko@gmail.com
K OSZTA PRZYTAKIWANIA
Tych osiem dni spdziem na tworzeniu kodu w przyspieszonym tempie. Wykorzystaem wszystkie
dostpne mi narzdzia, pozwalajce szybciej zakoczy prace: kopiuj i wklej (czyli ponowne
wykorzystanie kodu), magiczne liczby (unikaem pracy zwizanej z definiowaniem staych i potem
cigym ich wpisywaniem) i absolutnie adnych testw jednostkowych! (Komu s w takim
momencie potrzebne czerwone kropki? To tylko demotywuje!)
Powstay kod by naprawd paskudny i nigdy nie miaem czasu, eby go poprawi. Jeeli jednak
wzi pod uwag czas wykonania, to wyszed cakiem sprawnie, a poza tym i tak mia zosta zaraz
wyrzucony. Co wam to przypomina? Tylko czekajcie, bdzie jeszcze lepiej.
Kiedy wprowadzaem w aplikacji ostatnie poprawki (te dotyczyy wycznie kodu serwerowego),
zaczem przeglda cao powstaego kodu i pomylaem sobie, e moe jednak byo warto.
Mimo wszystko aplikacja bya gotowa, a mnie udao si przey!
Cze, wanie zatrudnilimy Boba. Jest bardzo zajty i nie moe sam do ciebie zadzwoni,
ale twierdzi, e powinnimy da od uytkownikw podania adresu e-mail w zamian za
kupon. Nie widzia jeszcze aplikacji, ale uwaa, e to byby wietny pomys. Chcemy te
mie system raportw, eby te adresy pobiera z serwera. Taki adny i niezbyt kosztowny.
(Zaraz, ten ostatni tekst by z Monty Pythona). A skoro mwimy o kuponach, to powinny
si przedawnia po zdefiniowanej przez nas liczbie dni. I jeszcze
Wrmy jeszcze do podstaw. Co wiemy na temat tego, jak powinien wyglda dobry kod?
Dobry kod powinien atwo si rozbudowywa i by atwy w konserwacji. Powinien a prosi
si o wprowadzanie zmian. Powinno si go czyta jak proz. C, to niestety nie by dobry kod.
Inna rzecz. Jeeli chcesz by lepszym programist, wci musisz o tym pamita: klienci zawsze
bd przesuwa termin. Zawsze bd chcieli mie wicej funkcji. Zawsze bd chcieli wprowadza
zmiany, ale ju w pnej fazie prac. A oto formua opisujca to, czego mona si spodziewa:
(liczba dyrektorw)2
+ 2 * liczba nowych dyrektorw
+ liczba dzieci Boba
= DNI DODANE W OSTATNIEJ CHWILI
Trzeba jednak przyzna, e dyrektorzy to cakiem porzdni ludzie. Tak sdz. Musz dba o swoje
rodziny (zakadajc, e szatan pozwoli im je zaoy). Chc, eby aplikacja okazaa si sukcesem
(czas na awans). Problem polega na tym, e wszyscy oni chc by bezporednio odpowiedzialni
za ten sukces. Gdy ju wszystko zostanie powiedziane i zrobione, chc wskaza okrelon funkcj
lub decyzj projektow, ktr mogliby nazwa swoj.
A wracajc do opowieci, dodalimy do projektu jeszcze dwa dni i wprowadzilimy funkcj
pobierania adresw e-mail. Zaraz potem padem z wyczerpania.
63
Ebookpoint.pl kopia dla: Jaroslaw Babijczuk siarsko@gmail.com
R OZDZIA 2.
(grrr!), menederw itd. GOTOWE! OTO WERSJA 1.0! CHWALCIE ME IMI! Kliknem
przycisk Wylij i z umiechem opadem na krzeso. Zaczem fantazjowa, jak to caa firma poniesie
mnie na rkach w kierunku 42 Ulicy, gdzie zostan koronowany na Najlepszego Programist
Wszech Czasw. A przynajmniej moj podobizn umieszcz na wszystkich swoich reklamach.
Zadziwiajce, e nie podzielali mojej wizji. Tak naprawd to nie wiem, o czym myleli, bo nie
dostaem adnej odpowiedzi. Absolutnie adnej. Okazao si, e wszyscy w Gorilla Marcie byli
tak zabiegani, e zajmowali si ju nastpnym projektem.
Mylicie, e kami? No to jedziemy dalej. Wysaem podanie do sklepu Apple bez podawania
opisu aplikacji. Prosiem Gorilla Mart o przygotowanie takiego, ale si do mnie nie odezwali,
a ja nie mogem ju duej czeka. (Czytalicie akapity powyej?) Prosiem raz jeszcze. I jeszcze
raz. Wspierao mnie w tym nasze wasne kierownictwo. Dwa razy dostaem odpowied o treci:
Czego waciwie potrzebujesz?. MUSZ MIE OPIS APLIKACJI!
Tydzie pniej Apple zaczo testowa aplikacj. Zwykle jest to czas wielkiej radoci, ale tym
razem czuem tylko miertelny strach. Tak jak oczekiwaem, pniej tego dnia aplikacja zostaa
odrzucona. By to najsmutniejszy i najgorszy z moliwych powodw odrzucenia aplikacji, jaki
mog sobie wyobrazi: Aplikacja nie ma opisu. Dziaa doskonale, ale nie ma opisu. I z tego
powodu Gorilla Mart nie mia aplikacji gotowej na czarny pitek. Byem troszeczk wcieky.
Opuciem swoj rodzin, pracujc w dwutygodniowym supersprincie, ale w Gorilla Marcie
nikt nie mia czasu na napisanie opisu, mimo tygodnia nagabywa. Przesali nam go godzin
po odrzuceniu aplikacji. Najwyraniej to by sygna, eby wzi si do pracy.
Jeeli wtedy byem wcieky, to ptora tygodnia pniej zagotowaem si. Wyobraacie sobie,
e nadal nie dostarczyli nam rzeczywistych danych? Produkty i kupony na serwerze byy
faszywkami. Wymylone. Kod kuponu to byo 1234567890. No wiecie, dmuchawce, latawce.
I tego doniosego dnia o poranku sprawdziem portal, a na nim DOSTPNA BYA TA
APLIKACJA! Z wszystkimi faszywymi danymi itp.! Zawyem w najwyszym przeraeniu,
zaczem dzwoni, do kogo tylko si dao, i krzycze: POTRZEBUJ DANYCH!. Kobieta
po drugiej stronie linii spytaa, czy potrzeba mi policji, czy straakw, wic rozczyem si
z numerem 911. Nastpnie jednak zadzwoniem do Gorilla Martu i ponownie krzyczaem:
POTRZEBUJ DANYCH!. Nigdy nie zapomn ich odpowiedzi:
O, cze, John! Mamy teraz nowego wiceprezesa i zdecydowalimy si nie publikowa
tej aplikacji. Jeeli mgby, to wycofaj j z AppStore.
Ostatecznie okazao si, e przynajmniej 11 osb zarejestrowao swoje adresy e-mail w bazie
danych, co znaczyo, e jakie 11 osb mogo wej do Gorilla Martu z faszywym kuponem na
iPhonie. Oj, mogo si to le skoczy.
Po tym wszystkim mogem stwierdzi, e klient w jednym nie kama. Kod by do wyrzucenia.
Problem polega na tym, e nigdy nie zosta wykorzystany.
64
Ebookpoint.pl kopia dla: Jaroslaw Babijczuk siarsko@gmail.com
K OD NIEMOLIWY
programist do szybkiego tworzenia kodu. Skutecznego? Nie. Szybkiego. Oj, tak! A cao dziaa
nastpujco:
Powiedz programicie, e aplikacja bdzie prosta. W ten sposb wpuszczasz zesp
w faszywe nastawienie. Poza tym programici zaczn te wczeniej pracowa, a wtedy
Dodawaj funkcje, twierdzc, e to zesp nie przewidzia ich niezbdnoci. W tym
przypadku treci zakodowane na twardo wymagayby cigego aktualizowania aplikacji,
przy kadej ich zmianie. Jak mogem tego nie zauway? Zauwayem, ale wczeniej dostaem
faszyw obietnic. Na tym to polega. Albo klient zatrudni kogo nowego, kto zauway,
e w aplikacji brakuje czego oczywistego. Czy jak pewnego dnia klient powie, e zatrudnili
wanie Stevea Jobsa, to do aplikacji trzeba bdzie doda troch alchemii? A potem
Przesuwaj termin. I jeszcze raz, i jeszcze. Programici pracuj najszybciej i najskuteczniej
(ale te s najbardziej podatni na robienie bdw, ale kto si tym przejmuje?), gdy do
terminu oddania projektu zostaje ju tylko kilka dni. No to po co mwi im, e mona
przesun termin, skoro s a tak produktywni? Wykorzystaj to! I w ten sposb dodaje si
jeszcze par dni, a potem tydzie, a ty cay czas pracujesz w 20-godzinnych zmianach, eby
zdy na czas. To jak z osem i marchewk, tylko e osio jest znacznie lepiej traktowany.
To rozwizanie doskonae. Czy mona ich wini za to, e wierz w jego skuteczno? Oni nie widz
tego ohydnie paskudnego kodu. I tak dzieje si za kadym razem, pomimo tego, jakie s wyniki
tych praktyk.
W ekonomii globalnej, w ktrej korporacje sprawuj wadz nad wszechmocnym dolarem,
a podniesienie ceny akcji wymaga zwolnienia czci pracownikw, zmuszenia pozostaych do
nadgodzin i zlecenia prac za granic, taka metoda minimalizowania kosztw pracy programistw
sprawia, e dobry kod jest niepotrzebny. Jeeli nie bdziemy ostroni, to zostaniemy poproszeni/
zmuszeni/wmanewrowani w pisanie kodu o dwa razy wikszej objtoci w czasie o poow krtszym.
Kod niemoliwy
W przytoczonej opowieci John pyta: Czy dobry kod jest niemoliwy do osignicia?.
Ale tak naprawd pytanie brzmi: Czy profesjonalizm jest niemoliwy do osignicia?.
W kocu w tej opowieci o wszelkich dysfunkcjach ucierpia nie tylko kod. W tej caej
przygodzie stracili te rodzina Johna, jego pracodawca, klient oraz uytkownicy. Tutaj
straty ponieli wszyscy4. A ponieli je z powodu braku profesjonalizmu.
Kto zatem zachowywa si nieprofesjonalnie? John jasno stwierdza, e win ponosz
dyrektorzy Gorilla Martu. W caej jego opowieci cakiem jasno przedstawia ich niewaciwe
zachowania. Ale czy to zachowanie rzeczywicie byo ze? Osobicie sdz inaczej.
Zarzd Gorilla Martu chcia mie moliwo udostpnienia aplikacji dla iPhone na czarny
pitek. Zdecydowali si zapaci za tak aplikacj. Znaleli kogo, kto podj si tego zadania.
Dlaczego wic zrzuca win na nich?
4
By moe wyjtkiem jest bezporedni pracodawca Johna, ale myl, e i on ponis tu strat.
65
Ebookpoint.pl kopia dla: Jaroslaw Babijczuk siarsko@gmail.com
R OZDZIA 2.
66
Ebookpoint.pl kopia dla: Jaroslaw Babijczuk siarsko@gmail.com
K OD NIEMOLIWY
tak krtki czas, musimy zatem szybciej tworzy kod. Zapomnij o fabryce abstrakcyjnej.
Zamiast kompozycji uyj wielkiej, ohydnej ptli. Nie ma czasu!.
I jeszcze to:
Tych osiem dni spdziem na tworzeniu kodu w przyspieszonym tempie. Wykorzystaem
wszystkie dostpne mi narzdzia, pozwalajce szybciej zakoczy prace: kopiuj i wklej
(czyli ponowne wykorzystanie kodu), magiczne liczby (unikaem pracy zwizanej
z definiowaniem staych i potem cigym ich wpisywaniem) i absolutnie adnych testw
jednostkowych! (Komu s w takim momencie potrzebne czerwone kropki? To tylko
demotywuje!).
Zatwierdzenie tych wszystkich decyzji byo prawdziwym powodem caej katastrofy. John
zaoy, e jedynym sposobem na sukces jest w tym przypadku nieprofesjonalne zachowanie,
dlatego zasuy sobie na odpowiedni nagrod.
To wszystko moe brzmie bardzo okrutnie, ale wcale nie o to mi chodzi. W poprzednim
rozdziale opowiadaem ju, e podobne bdy popeniaem rwnie w swojej karierze.
Pokusa bohaterskiego rozwizania problemu jest po prostu ogromna. Trzeba sobie
jednak uwiadomi, e celowe porzucanie naszej profesjonalnej dyscypliny nie jest
waciw metod rozwizywania problemw. Porzucenie tej dyscypliny jest pierwszym
krokiem do popadnicia w nowe kopoty.
W ten sposb mog ostatecznie odpowiedzie na gwne pytania postawione przez Johna.
Czy dobry kod jest nieosigalny? Czy profesjonalizm jest niemoliwy?
Odpowied: Uwaam, e nie.
67
Ebookpoint.pl kopia dla: Jaroslaw Babijczuk siarsko@gmail.com
R OZDZIA 2.
68
Ebookpoint.pl kopia dla: Jaroslaw Babijczuk siarsko@gmail.com
69
R OZDZIA 3.
Nasz recepcjonista odbiera telefon i prosi o wprowadzenie nazwiska osoby, z ktr chcesz
rozmawia. Prosi te o podanie swojego nazwiska i przystpowa do realizacji poczenia.
Najpierw jednak zapowiada w firmie dane poczenie i pyta, czy ma ono zosta odebrane.
Jeeli otrzyma potwierdzenie, to posusznie czy i si wycofywa.
Naszemu recepcjonicie mona byo powiedzie, gdzie si jest. Mona mu byo poda kilka
numerw, z ktrymi ma prbowa si czy. Dziki temu nawet jeeli byo si w innym
biurze, to recepcjonista i tak mg ci znale. Podobnie jeeli byo si w domu albo w innym
miecie. Jeeli jednak mimo tych wszystkich zabiegw ER nie mg ci dopa, to pozwala
na pozostawienie wiadomoci. To wanie tutaj pojawia si poczta gosowa.
Co ciekawe, firma Teradyne nie bya w stanie wymyli sposobu na skuteczn sprzeda ER.
Projekt przekroczy budet i zosta wczony do czego, co umielimy dobrze sprzedawa
CDS, czyli Craft Dispatch System, ktry suy do przydzielania zada serwisantom linii
telefonicznych. Poza tym Teradyne wycofaa wniosek patentowy, nawet nas o tym nie
informujc (!). Aktualny waciciel patentu zoy wniosek trzy miesice po nas (!!)1.
Dugo po tym, jak system ER zosta wczony do CDS, ale te na dugo, zanim dowiedziaem
si o wycofaniu wniosku patentowego, czekaem na naszego prezesa, siedzc na drzewie.
Przed budynkiem firmy rs ogromny stary db, na ktry si wspiem, i czekaem na
przyjazd jaguara. Prezesa w kocu spotkaem przed drzwiami firmy i zapytaem, czy ma
dla mnie kilka minut. Zaprosi mnie do biura.
Powiedziaem mu, e naprawd musimy ponownie uruchomi projekt ER, poniewa
jestem pewien, e przyniesie on nam spore pienidze. Zaskoczy mnie, mwic: Dobrze,
Bob. Przygotuj jaki plan i poka mi, jak na tym zarobi. Jeeli zdoasz mnie przekona,
to ponownie uruchomi projekt.
Tego si zupenie nie spodziewaem. Zakadaem, e usysz co w rodzaju: Masz racj,
Bob. Zaraz zreanimuj cay projekt i postaram si wykombinowa, jak na tym zarobi.
Ale nie. Cay ten ciar zrzuci na moje barki. Na dodatek miaem do tego wszystkiego
do ambiwalentny stosunek. W kocu byem tylko programist, a nie marketingowcem.
Chciaem pracowa nad projektem ER, a nie przejmowa odpowiedzialno za zyski lub
straty. Nie chciaem jednak okazywa swoich uczu. Podzikowaem mu zatem i wyszedem
z biura, mwic:
Dziki, Russ. Chyba si tego podejm.
W tym momencie pozwl, e zapoznam Ci z Royem Osherovem, ktry powie Ci,
jak aosna bya moja odpowied.
Nie chodzi o to, e ten patent mia dla mnie znaczenie finansowe. Zgodnie z umow o prac
sprzedaem go firmie Teradyne za jednego dolara (ale go nie dostaem).
70
J ZYK ZOBOWIZA
Jzyk zobowiza
Autor: Roy Osherove.
potrzeba nam nowych routerw. I ju wiesz, e w tej materii nic si nigdy nie zmieni.
Zapytaj czonka swojego zespou, czy przeprowadzi rcznie testy, zanim wprowadzi
71
R OZDZIA 3.
72
J ZYK ZOBOWIZA
zalenoci.
Przygotowa interfejs odzwierciedlajcy zalenoci Twojego moduu od infrastruktury
innego zespou.
Spotyka si przynajmniej trzy razy w tygodniu z nadzorc kompilacji, aby si upewni,
tworzonego moduu.
73
R OZDZIA 3.
Widzisz rnic?
Jeeli rezultat jest uzaleniony od kogo innego, to lepiej zobowizywa si do konkretnych
dziaa, ktre przybliaj Ci do ostatecznego celu.
bdw.
niegronie, ale potem okazuje si, e jest znacznie bardziej zoony i kopotliwy, to moesz
74
od razu podnie czerwon flag. Zesp moe wtedy podj decyzj o dziaaniach
koniecznych do wykonania tego zobowizania (dziaanie w parze, burza mzgw lub
inne) albo po prostu zmieni priorytety i przenie Ci do prac nad innym bdem.
W tym wszystkim wane jest to, e jeeli nie powiesz nikomu o zaistniaym problemie,
to nie dasz nikomu szansy na udzielenie Ci pomocy niezbdnej do wywizania si ze
zobowizania.
Podsumowanie
Wytworzenie jzyka zobowiza moe wydawa si przeraajce, ale pomaga to
rozwizywa wiele problemw z komunikacj, z ktrymi programici stykaj si kadego
dnia niewaciwymi szacunkami, niedopasowanymi terminami i nieporozumieniami
w bezporedniej komunikacji. Dziki temu jzykowi bd Ci traktowa jak powanego
zawodowca, ktry zawsze dotrzymuje danego sowa. A to chyba najlepsza reputacja,
jak mona mie.
~~~
75
R OZDZIA 3.
Dyscyplina zobowiza
Marge: Peter, potrzebuj tutaj jasnej odpowiedzi. Czy do pitku uda ci si wprowadzi
wszystkie zmiany do systemu ocen i napisa do nich dokumentacj?.
Nic nie stoi na przeszkodzie, eby Marge swoje pytanie sformuowaa w ten sposb. Musi
pilnowa planu, dlatego potrzebuje jasnej odpowiedzi na temat zakoczenia prac w pitek.
Jak powinien odpowiedzie Peter?
Peter: W takiej sytuacji musz odpowiedzie: nie. Jestem pewien, e zmiany
i dokumentacj bd mia gotowe najpniej we wtorek.
Marge: Czyli mog zapisa wtorek jako koniec prac?.
Peter: Owszem, na wtorek wszystko bdzie gotowe.
Co jednak, jeeli Marge bdzie potrzebowaa wprowadzenia zmian i dokumentacji ju
w pitek?
Marge: Peter, ten wtorek to dla mnie prawdziwy problem. Willy z dokumentacji
technicznej bdzie wolny ju w poniedziaek. Zaplanowa ju pi dni na
przygotowanie instrukcji dla uytkownika. Jeeli w poniedziaek nie bd
miaa gotowej dokumentacji systemu ocen, to nie uda mu si na czas napisa
instrukcji. Czy moesz najpierw napisa dokumentacj?.
Peter: Nie bardzo. Najpierw musz wprowadzi modyfikacje w systemie, poniewa
dokumentacja jest generowana na podstawie wynikw naszych testw.
76
77
R OZDZIA 3.
Marge: Cholera. A tak chciaam wczeniej skreli ten punkt z listy. Jeste pewny?.
Peter: Jestem absolutnie pewny, e cao moe si przecign do wtorkowego
popoudnia.
Marge: OK, chyba musz pogada z Willym, czy nie przestawi swojego planu.
W tym przypadku Marge zaakceptowaa odpowied Petera i zacza szuka innych rozwiza.
Ale co bdzie, jeeli Marge nie ma ju adnego asa w rkawie? Co zrobi, jeeli Peter jest jej
ostatni nadziej?
Marge: Peter, prosz. Wiem, e to spora proba, ale naprawd te prace musz by
zakoczone przed poniedziakiem rano. Mam n na gardle. Na pewno nie
da si nic poradzi?.
Teraz Peter zaczyna myle o zrobieniu caej grki nadgodzin i powiceniu na to zadanie
sporej czci weekendu. Musi jednak zdawa sobie spraw z wasnej wytrzymaoci
i rezerw energii. atwo mona powiedzie, e wszystko zostanie zrobione w cigu
weekendu, ale realizacja tych prac jest znacznie trudniejsza i wymaga dodatkowych
nakadw, aby zachowana bya odpowiednia jako pracy.
Profesjonalici znaj granice swoich moliwoci. Wiedz, ile nadgodzin mog skutecznie
przepracowa, i zdaj sobie spraw, jakie bd ich koszta.
W tym przypadku Peter czuje si na tyle pewnie, e kilka dodatkowych godzin w cigu
tygodnia i jeszcze par w trakcie weekendu wystarczy do zakoczenia prac.
Peter: Dobra, powiem ci co. Zadzwoni do domu i zapytam, czy znios troch moich
nadgodzin. Jeeli nie bdzie protestw, to zrobi te poprawki do poniedziaku
rano. Nawet w poniedziaek przyjd wczeniej, by si upewni, e Willy nie
bdzie mia problemw. Ale potem wrc do domu i nie pojawi si a do rody.
Zgoda?.
Bardzo rozsdna propozycja. Peter wie, e bdzie w stanie wprowadzi wszystkie zmiany
i napisa ich dokumentacj, jeeli zrobi kilka nadgodzin. Wie te, e po tym wszystkim
przez par dni nie bdzie si do niczego nadawa.
Wnioski
Zawodowcy wcale nie musz si zgadza na wszystko, co si im proponuje. Powinni jednak
bardzo si stara, szukajc wszelkich moliwoci znalezienia zadowalajcego wszystkich
rozwizania. Jeeli jednak profesjonalista mwi tak, to uywa przy tym jzyka zobowiza,
tak eby nie byo adnych wtpliwoci co do zakresu danej obietnicy.
78
K ODOWANIE
[Martin09].
79
R OZDZIA 4.
K ODOWANIE
Pocztkowo zdarzao mi si cakiem sporo bdw, ale pod wieczr mogem zapisywa
karty niemal perfekcyjnie. W cigu dugiej nocy przekonaem si, e pisanie bezwzrokowe
wymaga przede wszystkim pewnoci siebie. Moje palce wiedziay, gdzie s poszczeglne
klawisze, i musiaem tylko zyska pewno, e nie popeniam bdw. Jedn z rzeczy, ktre
mi bardzo przy tym pomogy, byo to, e dokadnie czuem, kiedy popeniam bd. Pod
wieczr od razu wiedziaem, kiedy popeniem bd, i mogem zaraz wyrzuci kart bez
patrzenia na ni.
Umiejtno wyczuwania wasnych bdw jest niezwykle wana. Nie tylko podczas pisania
na klawiaturze, ale w kadym elemencie. Ten dodatkowy zmys oznacza, e bardzo szybko
zamykasz ptl sprzenia zwrotnego i jeszcze szybciej jeste w stanie uczy si na swoich
bdach. Od czasu tego dnia spdzonego nad klawiatur dwudziestki dziewitki wiele si
nauczyem i pogbiem swoj wiedz. Za kadym razem przekonywaem si, e kluczem
do sukcesu s pewno siebie i umiejtno wyczuwania bdw.
W tym rozdziale opisz mj osobisty zbir zasad i regu dotyczcych tworzenia kodu.
Te reguy i zasady nie odnosz si do samego kodu, ale raczej do mojego zachowania,
nastawienia i humoru podczas jego pisania. Opisuj mj mentalny, moralny i emocjonalny
kontekst pisania kodu. To wanie one s podstaw mojej pewnoci siebie i umiejtnoci
wyczuwania bdw.
Z pewnoci nie zgodzisz si ze wszystkim, co tutaj napisz, to w kocu sprawy bardzo
osobiste. Co wicej, cakiem prawdopodobne jest, e gwatownie zaoponujesz przeciwko
niektrym moim zasadom. To zupenie normalne. Nie maj by one prawdami absolutnymi
dla nikogo poza mn. S tylko moj wasn metod profesjonalnego tworzenia kodu.
By moe analizujc moje rodowisko tworzenia kodu, bdziesz w stanie lepiej zrozumie
ca zawarto tej ksiki.
Przygotowanie
Tworzenie kodu jest bardzo wyczerpujc czynnoci i ogromnym wyzwaniem
intelektualnym. Wymaga ono osignicia pewnego poziomu koncentracji i skupienia,
niezbdnego tylko w kilku innych dziedzinach. Wynika to z tego, e tworzenie kodu
wymaga od programisty onglowania wieloma sprzecznymi zasadami.
1. Twj kod musi dziaa. Musisz pozna problem, ktry masz rozwiza, i zdefiniowa
sposb jego rozwizania. Musisz mie pewno, e napisany przez Ciebie kod bdzie
wiernym odwzorowaniem tego rozwizania. Musisz zadba o kady szczeg tego
rozwizania, pozostajc w zgodzie z jzykiem programowania, platform, uywan
architektur oraz kruczkami systemu.
2. Kod musi rozwizywa problem zdefiniowany przez klienta. Czsto jest tak,
e wymagania okrelone przez klienta wcale nie rozwizuj jego problemw.
80
P RZYGOTOWANIE
[PPP2002].
81
R OZDZIA 4.
K ODOWANIE
Pamitam, e byem dumny z tego, e tak dugo pracowaem. Pamitam, e czuem swoje
powicenie. Pamitam te, e sdziem, i zawodowcy zawsze pracuj do 3 nad ranem.
Oj, jak bardzo si myliem!
Tamten kod kopn nas jeszcze wielokrotnie. Zdefiniowaem wadliw struktur, z ktrej
korzystali wszyscy, ale jednoczenie zmuszeni byli tworzy cige obejcia. Wytworzya ona
najdziwniejsze problemy czasowe i niezwyke ptle sprzenia zwrotnego. Wpadalimy
w nieskoczone ptle wiadomoci, gdy jeden komunikat powodowa wysanie innego
i jeszcze kolejnego, ad infinitum. Nigdy nie mielimy czasu na napisanie na nowo fragmentw
powodujcych te problemy (a przynajmniej tak si nam wydawao), ale zawsze znajdowalimy
czas na utworzenie kolejnej atki i poprawki obchodzcych wykrywane problemy. Cao
cigle rosa, opakowujc ten kod napisany o 3 nad ranem w coraz wikszy baga efektw
ubocznych. Pniej stao si to podstaw artw w zespole. Za kadym razem, gdy byem
zmczony lub sfrustrowany, mwili do siebie: Patrzcie! Bob zaraz wyle do siebie maila!.
Mora tej historii jest taki: nie pisz kodu, jeeli jeste zmczony. Powicenie i profesjonalizm
s bardziej zwizane z odpowiedni dyscyplin, a nie z godzinami pracy. Upewnij si, e Twj
styl ycia, zdrowie i dawka snu s wystarczajce, eby pracy powici osiem dobrych godzin.
Kod ze zmartwieniami
Czy kiedykolwiek zdarzyo Ci si ostro pokci ze wspmaonkiem lub przyjacielem,
a zaraz potem przystpi do pisania kodu? Pamitasz zapewne, e gdzie z tyu Twojej gowy
trwa may proces, ktry stara si ponownie analizowa przebieg ktni. Stres generowany
przez ten may proces mona czasami poczu w klatce piersiowej lub w odku. Sprawia to,
e czujesz niepokj jak po wypiciu zbyt wielu kaw lub coli. To bardzo rozprasza.
Jeeli martwi si ktni ze swoj on albo problemami z klientem albo chorym dzieckiem,
to nie jestem w stanie si odpowiednio skupi. Moja koncentracja cay czas odpywa.
Okazuje si, e mimo oczu skierowanych na ekran, a palcw lecych na klawiaturze nie
jestem w stanie nic zrobi. Katatonia. Parali. Jestem tysic kilometrw std, analizujc
palcy mnie problem, a nie zastanawiajc si nad tworzonym kodem.
Czasami zmuszam si do mylenia na temat kodu. W ten sposb jestem w stanie dopisa
wiersz lub dwa. Mog zmusi si do napisania jednego testu lub dwch, ale nie jestem w stanie
duej koncentrowa si na pracy. Ostatecznie zawsze popadam w to niezwyke odrtwienie,
w ktrym nie widz nic mimo otwartych oczu i przetwarzam moje najrniejsze troski.
Nauczyem si ju, e nie jest to dobry czas na tworzenie kodu. Kady kod, ktry w tym
czasie napisz, bd mg wyrzuci do kosza. Dlatego wanie zamiast pisa, staram si
rozwizywa problemy powodujce zmartwienia.
Oczywicie istnieje wiele trosk, ktrych nie da si usun z godziny na godzin. Co wicej,
nasz pracodawca raczej nie bdzie chtnie tolerowa naszej bezczynnoci, w czasie gdy
82
S TREFA
bdziemy stara si rozwizywa prywatne problemy. Sztuczka polega zatem na tym, eby
nauczy si zamyka ten dziaajcy w tle proces, a przynajmniej zmniejsza jego priorytet,
tak aby nie stawa si on nieustajcym elementem rozpraszajcym.
Sam robi to, odpowiednio dzielc swj czas. Zamiast zmusza si do pisania kodu z cigle
atakujcymi mnie mylami, powicam im pewien wybrany wycinek czasu moe nawet
godzin starajc si pracowa nad powodem mojego niepokoju. Jeeli moje dziecko
jest chore, to dzwoni do domu, aby dowiedzie si, czy wszystko jest w porzdku. Jeeli
pokciem si z on, to dzwoni do niej i staram si obgada powd tej ktni. Jeeli
mam problemy finansowe, to myl nad tym, jak sobie z nimi poradzi. Wiem, e
najprawdopodobniej nie uda mi si rozwiza problemu w czasie tej godziny, ale jest
bardzo moliwe, e zmniejsz w ten sposb swoje napicie i ucisz dziaajcy w tle proces.
Najlepiej byoby, gdyby czas powicony na walk z osobistymi problemami by Twoim
czasem prywatnym. Spdzenie w ten sposb godziny w pracy byoby niewaciwe. Zawodowi
programici wykorzystuj swj prywatny czas tak, eby czas spdzony w biurze by jak
najbardziej produktywny. Oznacza to, e jeszcze w domu naley powici troch czasu
na zmniejszenie wewntrznych niepokojw, tak aby nie przynosi ich ze sob do biura.
Jednak jeeli jeste ju w pracy, a wewntrzne niepokoje nie pozwalaj pracowa z pen
skutecznoci, to moe lepiej powici godzin na ich uspokojenie, ni zmusza si do pisania
kodu, ktry pniej i tak bdzie trzeba napisa od nowa. Albo co gorsza dalej z nim y.
Strefa
Wiele ju napisano o tym stanie hiperproduktywnoci nazywanym przepywem (ang. flow).
Niektrzy programici nazywaj ten stan stref (ang. zone). Niezalenie od nazwy kady
z nas z pewnoci si ju z tym stanem zetkn. To stan wiadomoci z duym skupieniem
i widzeniem tunelowym, w ktry mog wej programici tworzcy kod. Wwczas czuj si
naprawd produktywni. To wanie wtedy czuj si cakowicie nieomylni. W efekcie staraj
si jak najduej pozostawa w tym stanie, a miar ich wartoci staje si spdzony w nim czas.
Oto maa rada od kogo, kto dokadnie przerobi ju ten temat: unikaj strefy. W tym stanie
wiadomoci tak naprawd nie jest si hiperproduktywnym, a ju na pewno nie jest si
nieomylnym. Tak naprawd jest to tylko pewien stan medytacyjny, w ktrym niektre
czynniki racjonalne zostaj umniejszone w celu uzyskania wikszej prdkoci pracy.
Musz tu wyrazi si jasno. Bdc w strefie, na pewno napiszesz wicej kodu. Jeeli stosujesz
praktyki TDD, to na pewno szybciej przejdziesz ptl czerwone zielone refaktoryzacja.
I dodatkowo poczujesz lekk eufori. Problem polega na tym, e bdc w strefie, stracisz
szerszy pogld na sprawy, przez co moesz podejmowa decyzje, ktre pniej bdzie
trzeba zmienia. Kod napisany w strefie na pewno powstaje szybciej, ale pniej trzeba
go czciej poprawia.
83
R OZDZIA 4.
K ODOWANIE
Aktualnie, gdy czuj, e sam zaczynam wpada w stref, na kilka minut odchodz od
komputera. Oczyszczam umys, odpisujc na kilka e-maili i czytajc kilka wiadomoci na
Tweeterze. Jeeli jest tu przed poudniem, to id na obiad. Jeeli pracuj w zespole, to id
poszuka sobie partnera.
Jedn z zalet programowania w parach jest to, e dla pary praktycznie niemoliwe jest
wejcie w stref. Jest to stan niekomunikatywny, podczas gdy programowanie w parach
wymaga cigej i intensywnej komunikacji. Co ciekawe, czsto sysz, e jedn z wad
programowania w parach jest to, e nie pozwala ono na wejcie w stref. O rany! Przecie
nikt nie powinien dy do tego, eby znale si w strefie.
To jednak nie do koca prawda. Czasami strefa jest miejscem, w ktrym chciaoby si
znale. Ale zdarza si to tylko podczas wicze. O tym opowiem jednak w innym rozdziale.
Muzyka
W latach 70. w firmie Teradyne miaem prywatne biuro. Byem wtedy administratorem
systemu na naszym PDP 11/60 i jako jeden z niewielu programistw dostaem swj wasny
terminal. Terminalem tym by VT100 podczony do PDP-11 za pomoc 25 metrw kabla
RS-232 dziaajcego z prdkoci 9600 bodw, ktry przypiem do sufitu swojego biura
i w ten sposb poprowadziem do pokoju komputerowego.
W biurze miaem zestaw stereo. Skada si ze starego gramofonu, wzmacniacza i sporych
gonikw. Miaem te du kolekcj pyt winylowych, w tym Led Zeppelin, Pink Floyd i
chyba ju wiesz, o co chodzi.
Czsto korzystaem z tego zestawu w czasie pisania kodu. Sdziem, e muzyka uatwiaa
mi koncentracj. Niestety, byem w bdzie.
Pewnego dnia musiaem wrci do moduu, ktry pisaem, suchajc sekwencji otwierajcej
The Wall. W komentarzach do kodu zobaczyem kawaki tekstu tego utworu, a take
wzmianki o bombowcach nurkujcych i paczcych dzieciach.
To wtedy zrozumiaem, e czytelnik mojego kodu dowie si z niego wicej o moich gustach
muzycznych ni o problemie, ktry ten kod ma rozwizywa.
Okazao si, e suchajc muzyki, wcale nie pisz lepszego kodu. Muzyka wcale nie pomaga
mi si skoncentrowa. Co wicej, suchanie muzyki zdaje si pochania cakiem spor
cz zasobw mojego umysu, ktrych potrzebuj do tworzenia czystego i dobrze
zaprojektowanego kodu.
By moe w Twoim przypadku dziaa to inaczej. By moe Tobie muzyka uatwia pisanie
kodu. Znam w kocu wiele osb, ktre pisz kod ze suchawkami na gowie. Jestem w stanie
zaakceptowa fakt, e muzyka uatwia im prac, ale mam dziwne podejrzenia, e tak naprawd
pomaga im ona wej do strefy.
84
B LOKADA TWRCZA
Przerwy
Wyobra sobie, e wanie tworzysz kod na swojej stacji roboczej. Jak odpowiadasz, gdy
kto zadaje Ci pytanie? Odpowiadasz niemio? Patrzysz gniewnie? Czy jzyk Twojego
ciaa informuje rozmwc, e ma si szybko oddali, bo masz inne zajcie? W skrcie:
czy zachowujesz si niegrzecznie? A moe przerywasz swoj prac i chtnie pomagasz
komu, kto wanie ma jaki problem? Czy traktujesz intruza tak jak w Twoim wyobraeniu
on powinien potraktowa Ciebie, gdy przyjdziesz z jakim problemem?
Takie niegrzeczne zachowania czsto wi si ze stref. Mog wynika z rozgoryczenia
powodowanego wycigniciem ze strefy albo przerwaniem prb wejcia do niej. W obu
przypadkach niegrzeczne zachowania s powizane ze stref.
Czasami jednak powodem wcale nie jest strefa, ale prosty fakt, e prbujesz zrozumie
co zoonego, co wymaga sporej koncentracji. W takim przypadku masz do wyboru kilka
rozwiza.
Dobr metod radzenia sobie z takimi przerwami moe by praca w parach. Twj partner
moe nadal pamita kontekst Waszych prac, podczas gdy Ty odbierasz telefon albo
odpowiadasz na pytania innego kolegi. Po powrocie partner szybko pomoe Ci odtworzy
stan umysu sprzed tej przerwy.
Doskona pomoc moe by te technika TDD. Jeeli masz niedziaajcy test, to z pewnoci
przechowuje on cay kontekst zadania, nad ktrym pracujesz. Po przerwie moesz atwo
wrci do pracy i sprawi, eby test zacz dziaa.
Oczywicie zawsze bd zdarzay si przerwy, ktre bd Ci rozpraszay i powodoway
straty czasu. Gdy co takiego si zdarzy, pamitaj, e nastpnym razem to Ty moesz
potrzebowa pomocy i bdziesz komu przerywa prac. Oznacza to, e do profesjonalnego
zachowania naley uprzejmo i ch udzielania pomocy.
Blokada twrcza
Czasami kod po prostu nie chce powsta. Zdarzyo mi si to kilka razy i wiele razy widziaem
taki stan u innych. Siedzi si wtedy przed komputerem i zupenie nic si nie dzieje.
Czsto znajdujesz wtedy jakie inne zajcie. Czytasz e-maile albo wiadomoci z Tweetera.
Przegldasz rne ksiki, dokumenty lub kalendarze. Zwoujesz zebranie albo zajmujesz
si rozmow ze wsppracownikami. Robisz wtedy cokolwiek, byle tylko nie siedzie przed
komputerem i nie patrze, jak kod uparcie nie chce si urodzi.
Co powoduje tak blokad? O wielu czynnikach wspominaem ju wczeniej. Dla mnie
jedn z najwaniejszych rzeczy jest sen. Jeeli si dobrze nie wypi, to najzwyczajniej
85
R OZDZIA 4.
K ODOWANIE
w wiecie nie jestem w stanie pisa kodu. Innymi podobnie dziaajcymi czynnikami mog
by strach, zmartwienia lub depresja.
Najdziwniejsze jest to, e istnieje dla tego problemu bardzo proste rozwizanie, ktre
sprawdza si niemal za kadym razem. Jest naprawd proste, a moe da Ci rozpd
wystarczajcy do napisania cakiem sporych iloci kodu.
Rozwizanie jest takie: znajd sobie partnera do programowania w parze.
To niesamowite, jak dobrze sprawdza si ta metoda. Gdy tylko usidziesz przy kim innym,
wszystkie problemy powodujce blokad same znikaj. Podczas pracy z inn osob nastpuje
zmiana fizjologiczna. Nie mam pojcia, na czym ona polega, ale za kadym razem czuj j
doskonale. W moim mzgu lub w moim ciele nastpuje zmiana chemiczna, ktra pozwala
mi si przebi przez blokad i wrci do normalnej pracy.
Nie jest to niestety rozwizanie doskonae. Czasami na zmian trzeba czeka godzin lub
dwie, po ktrych nastpuje tak powane zmczenie, e musz opuci swojego partnera
i znale jaki kcik, aby odpocz. Czasami nawet siedzc z kim przy komputerze, nie
jestem w stanie zrobi nic poza przytakiwaniem. Najczciej jednak moj typow reakcj
w takiej sytuacji jest odzyskanie swojego typowego rytmu.
Kreatywne wejcie
Istnieje jeszcze kilka innych rzeczy, ktre robi, eby zapobiega takim blokadom. Ju dawno
temu przekonaem si, e kreatywne wyjcie zaley od kreatywnego wejcia.
Sporo czytam, i to na wiele rnych tematw. Czytam teksty powicone oprogramowaniu,
polityce, biologii, astronomii, fizyce, chemii, matematyce i wielu innym zagadnieniom. Co
wicej, uwaam, e literatura science fiction najlepiej pobudza we mnie kreatywne wyjcie.
W Twoim przypadku elementem pobudzajcym moe by co cakiem innego. By moe
dobra powie detektywistyczna, poezja albo nawet romans. Jak sdz, chodzi tu o to, e
kreatywno tworzy kreatywno. Moe te chodzi o swego rodzaju ucieczk, eskapizm.
Godziny, ktre spdzam z dala od moich normalnych problemw, stymulujc si i wchaniajc
rne kreatywne idee, wywouj niemal nieodpart potrzeb samodzielnego tworzenia.
Nie dziaaj na mnie jednak wszystkie rodzaje kreatywnego wejcia. Na przykad zupenie
nie pomaga mi ogldanie telewizji. Wypad do kina dziaa lepiej, ale tylko troszk lepiej.
Suchanie muzyki nie pomaga mi w tworzeniu kodu, ale bardzo uatwia tworzenie prezentacji,
przemwie i filmw. Jednak ze wszystkich rodzajw kreatywnego wejcia nic nie dziaa
na mnie lepiej ni stara dobra space opera.
86
D EBUGOWANIE
Debugowanie
Jedna z najgorszych sesji debugowania w mojej karierze przytrafia mi si w 1972 roku.
Terminale podczone do systemu ksigowego firmy Teamsters zawieszay si raz lub
dwa razy na dzie. Nie dao si jednak w aden sposb wymusi tego stanu. Bd nie by
zwizany z konkretnym rodzajem terminala ani z okrelonymi aplikacjami. Nie miao te
znaczenia, co uytkownik robi tu przed zawieszeniem. W jednej chwili terminal dziaa
doskonale, a w nastpnej nie reagowa ju na nic.
Zdiagnozowanie tego problemu zajo nam cae tygodnie, w czasie ktrych firma Teamsters
stawaa si coraz bardziej nerwowa. Za kadym razem osoba, ktrej terminal si zawiesi,
musiaa skoordynowa si z innymi uytkownikami, tak eby zakoczyli oni prac, a nastpnie
zadzwoni do nas z prob o restart. To by prawdziwy koszmar.
Pierwsze dwa tygodnie spdzilimy, zbierajc dane z wywiadw prowadzonych z osobami,
ktrym przytrafia si blokada. Pytalimy, co robiy w czasie wystpienia blokady i wczeniej.
Pytalimy, czy zauwayy cokolwiek na swoich zawieszonych terminalach. Wszystkie te
pytania zadawalimy przez telefon, poniewa wszystkie terminale byy umiejscowione
w centrum Chicago, a my pracowalimy 50 kilometrw na pnoc od miasta, w rodku
pola kukurydzy.
Nie mielimy adnych protokow, adnych licznikw, adnych debuggerw. Jedynym
dostpem, jaki mielimy do systemu, byy wiateka i przeczniki na przednim panelu.
Moglimy zatrzyma komputer i przeglda jego pami po jednym sowie. Nie moglimy
tego jednak robi duej ni pi minut, poniewa firma Teamsters musiaa korzysta ze
swojego systemu.
Kilka dni powicilimy na napisanie prostego inspektora dziaajcego w czasie rzeczywistym,
ktrym moglimy sterowa z teletekstu ASR-33 sucego nam za konsol. W ten sposb
moglimy zaglda do pamici komputera w czasie pracy systemu. Dodalimy komunikaty
protokou, ktre w krytycznych momentach byy wypisywane na teletekcie. Przygotowalimy
liczniki zliczajce zdarzenia i zapamitujce histori stanw, ktr moglimy sprawdza za
pomoc inspektora. Oczywicie to wszystko zostao napisane od zera w asemblerze i byo
testowane wieczorami, gdy system nie by uywany.
Terminale byy sterowane przerwaniami, natomiast znaki przesyane do nich byy
umieszczane w cyklicznych buforach. Za kadym razem, gdy port szeregowy koczy
wysyanie znaku, uruchamiane byo przerwanie, w ktrym do wysania by przygotowywany
kolejny znak z cyklicznego bufora.
Ostatecznie okazao si, e terminale zawieszay si wtedy, gdy rozsynchronizoway si trzy
zmienne zarzdzajce stanem cyklicznego bufora. Nie mielimy pojcia, dlaczego tak si
dziao, ale to bya ju jaka wskazwka. Gdzie w 5 000 wierszy kodu superwizora znajdowa
si bd powodujcy nieprawidowe dziaanie tych wskanikw.
87
R OZDZIA 4.
K ODOWANIE
88
D EBUGOWANIE
zmienne byy tylko odczytywane, a przez to caa operacja bya niegrona. Problem polega
na tym, e w tym szczeglnym asemblerze nie dao si stwierdzi, czy referencja zmiennej
bya niegronym odczytem, bez dokadniejszego sprawdzenia kodu. Po kadym odczycie
zmiennej mogy nastpi jej aktualizacja i zapisanie. Jeeli zdarzyo si to w czasie, gdy
przerwania byy wczone, to zawarto zmiennej moga zosta uszkodzona.
Dokadne sprawdzenie kodu zajo mi kilka dni, ale w kocu znalazem przyczyn. W samym
rodku kodu ukryo si jedno miejsce, w ktrym aktualizowana bya jedna z trzech zmiennych
bez uprzedniego wyczenia przerwa.
Dokonaem wtedy pewnych oblicze. Czas trwania podatnoci to mniej wicej dwie
mikrosekundy. W firmie dziaao jakie 12 terminali pobierajcych dane z prdkoci
30 znakw na sekund, czyli jedno przerwanie pojawiao si mniej wicej co 3 milisekundy.
Biorc pod uwag wielko superwizora, czstotliwo zegara procesora, mona byo si
spodziewa, e terminal zostanie zablokowany jeden raz lub dwa razy dziennie. Bingo!
Usunem ten bd, ale nigdy nie miaem odwagi wyczy automatu sprawdzajcego
i korygujcego liczniki. Do dzisiaj nie mam pewnoci, czy w programie nie ukrywa si
jeszcze inny bd.
Czas debugowania
Z nieznanych mi powodw cz programistw nie uznaje czasu powiconego na
debugowanie za czas tworzenia kodu. Twierdz, e czas debugowania jest po prostu
wymogiem natury, czyli czym, co trzeba zrobi. Jednak z punktu widzenia firmy czas
debugowania jest tak samo kosztowny jak czas tworzenia kodu, dlatego wszystko, co zrobimy,
eby unikn debugowania albo przynajmniej skrci jego czas, bdzie pozytywnym
dziaaniem.
Dzisiaj spdzam na debugowaniu znacznie mniej czasu ni jeszcze 10 lat temu. Oczywicie
nie mierzyem rnicy, ale sdz, e jest to mniej wicej jeden rzd wielkoci. T radykaln
redukcj czasu debugowania uzyskaem przez przyjcie praktyki TDD (Test Driven
Development), o ktrej bd mwi w innym rozdziale.
Niezalenie od tego, czy stosujemy praktyk TDD, czy inne rozwizania o podobnej
skutecznoci3, na kadym zawodowym programicie ciy zadanie denia do jak
najskuteczniejszego redukowania czasu spdzanego na debugowaniu. Zerowy czas
jest tutaj celem asymptotycznym, ale mimo to zawsze powinien by naszym celem.
Chirurdzy nie lubi ponownie otwiera swoich pacjentw, eby poprawi co, co zrobili le.
Prawnicy nie lubi powtarza pozww tylko dlatego, e przy poprzednim palnli gupot.
Nie znam innej techniki o skutecznoci zblionej do TDD, ale moe wiesz co, czego ja nie wiem.
89
R OZDZIA 4.
K ODOWANIE
Chirurg lub prawnik, ktry zbyt czsto popenia takie bdy, nigdy nie bdzie uznany za
profesjonalist. Podobnie programista robicy zbyt wiele bdw dziaa nieprofesjonalnie.
Jazda do domu
Miejscem, w ktrym udao mi si rozwiza zadziwiajco wiele problemw, jest mj
samochd wiozcy mnie z pracy do domu. Kierowanie autem wymaga zaangaowania
wielu niekreatywnych zasobw umysowych. Wykonywaniu tego zadania musisz powici
swoje oczy, rce oraz cz umysu. Oznacza to, e musisz odczy si od problemw
z pracy. Takie wanie odczenie pozwala Twojemu umysowi na poszukiwanie rozwiza
w inny, znacznie bardziej kreatywny sposb.
Prysznic
Rwnie wielk liczb problemw udao mi si rozwiza pod prysznicem. By moe ten
strumie wody wczenie rano pobudza mnie na tyle, e mog ponownie przeanalizowa
wszystkie rozwizania, na jakie wpad mj umys w czasie, gdy spaem.
90
S PNIENIA
Pracujc nad jakim problemem, czasami wchodzisz w niego tak gboko, e nie jeste
w stanie dostrzec wszystkich moliwych opcji. Pomijasz eleganckie rozwizania, poniewa
kreatywna cz Twojego umysu jest tumiona przez intensywno skupienia na zadaniu.
Czasami najlepszym sposobem na rozwizanie problemu jest powrt do domu, zjedzenie
kolacji, obejrzenie czego w telewizji, pjcie do ka i skorzystanie z prysznica po
przebudzeniu si nastpnego dnia.
Spnienia
Spnienia bd Ci si przytrafia. To zdarza si najlepszym spord nas. Zdarza si tym
najbardziej oddanym pracy. Czasami po prostu nasze szacunki nie s do dokadne i wtedy
si spniamy.
Waciw metod radzenia sobie z opnieniami jest wczesne ich wykrywanie i otwarte
informowanie o nich. Nie ma nic gorszego ni utrzymywanie do samego koca, e zdysz
na czas, i sprawienie zawodu w ostatnim momencie. Tak si nie robi. Zamiast tego regularnie
mierz swoje postpy i porwnuj je z celem, a nastpnie podawaj trzy4 wynikajce z tego
porwnania daty: najlepszy przypadek, normalny przypadek i najgorszy przypadek. Do tych
szacunkw nie dodawaj swoich nadziei! Trzy wyliczone daty zaprezentuj caemu zespoowi
i wszystkim zainteresowanym, a nastpnie codziennie je aktualizuj.
Nadzieja
Co zrobi, jeeli z tych szacunkw wynika, e moesz przestrzeli termin? Dla przykadu
zamy, e za 10 dni s targi i do tego czasu musimy mie gotowy produkt. Zamy te,
e Twoje trzy szacowane daty ukoczenia funkcji, nad ktr pracujesz, to 8/12/20.
Nie opieraj si na nadziei, e zdoasz zrobi wszystko w 10 dni! Nadzieja jest zabjc projektw.
Nadzieja niszczy plany i rujnuje reputacj. Nadzieja wpdzi Ci w powane tarapaty. Jeeli
targi zaczynaj si za 10 dni, a Twoja szacunkowa, normalna data ukoczenia to 12 dni,
to znaczy, e nie zdysz na czas. Upewnij si, e cay zesp i udziaowcy znaj szczegy
sytuacji, i nie odpuszczaj, dopki nie powstanie plan awaryjny. Nie dawaj innym faszywej
nadziei.
Popiech
Co zrobi, jeeli przeoony usadza Ci i prosi o prb dotrzymania terminu? Co zrobi,
jeeli kierownik nastaje, eby zrobi, co trzeba? Nie koryguj swoich szacunkw! Twoje
pierwotne szacunki bd o wiele dokadniejsze ni wszelkie zmiany, jakie wprowadzisz do
nich podczas takiej konfrontacji z szefem. Powiedz szefowi, e wszelkie moliwoci zostay
4
91
R OZDZIA 4.
K ODOWANIE
ju wzite pod uwag (bo tak si stao) i jedyn metod poprawienia planu jest redukcja
zakresu projektu. Nie ulegaj pokusom przyspieszenia prac.
Biada biednemu programicie, ktry ugnie si pod presj i zgodzi si sprbowa dotrzyma
terminu. Taki programista zacznie wykorzystywa skrty i pracowa w nadgodzinach
w prnej nadziei na cud. To jest najprostsza recepta na katastrof, poniewa daje to
zespoowi i udziaowcom faszyw nadziej na sukces. Przez to nikt moe nie zauwaa
problemu, co opnia podjcie niezbdnych, cho trudnych decyzji.
Popiech nie jest adnym rozwizaniem. Nie jeste w stanie szybciej pisa kodu. Nie zmusisz
si do szybszego rozwizywania problemw. Jeeli zaczniesz podejmowa takie prby,
to tylko spowolnisz swoje dziaania, tworzc przy okazji baagan, ktry zacznie spowalnia
pozostaych czonkw zespou.
Musisz zatem udzieli szefowi i zespoowi uczciwej odpowiedzi, ktra pozbawi ich faszywej
nadziei.
Nadgodziny
Zdarza si, e szef mwi Ci: A jeeli popracujesz dwie dodatkowe godziny dziennie? A jeeli
przyjdziesz do pracy w sobot? Przecie musi by jaki sposb, eby wygospodarowa
dodatkowe godziny i przygotowa t funkcj na czas.
Nadgodziny mog by dobrym rozwizaniem, a czasami s nawet nieodzowne. Czasami
mona dotrzyma niemoliwego terminu, pracujc po 10 godzin dziennie, a nawet w jedn
sobot lub dwie. To jednak bardzo ryzykowne zaoenie. Nie jeste w stanie wykona 20%
wicej pracy, powicajc na to 20% wicej czasu. Co wicej, nadgodziny na pewno strac
jakikolwiek sens, jeeli taki tryb pracy potrwa duej ni dwa lub trzy tygodnie.
Oznacza to, e nie naley zgadza si na nadgodziny, chyba e (1) moesz sobie na to
pozwoli, (2) jest to rozwizanie krtkoterminowe, maksymalnie na dwa tygodnie i (3)
Twj szef ma ju plan awaryjny na wypadek, gdyby praca w nadgodzinach nie wystarczya.
Ten ostatni warunek jest tutaj najwaniejszy. Jeeli Twj szef nie jest w stanie stwierdzi,
co zrobi, jeeli nadgodziny nie przynios oczekiwanych efektw, to nie zgadzaj si na
dodatkowe godziny pracy.
Faszywa dostawa
Ze wszystkich nieprofesjonalnych zachowa, na jakie moe sobie pozwoli programista,
chyba najgorsze jest twierdzenie, e prace s zakoczone, cho ma si pen wiadomo
tego, e tak nie jest. Czasami jest to najzwyklejsze kamstwo, co samo w sobie jest ze.
Jednak znacznie bardziej podstpnym przypadkiem jest prba stworzenia nowej definicji
92
P OMOC
Definicja gotowego
Problemu faszywych dostaw mona unikn, tworzc cakowicie niezalen definicj
gotowego. Najlepsz metod jej uzyskania jest wsppraca analitykw i testerw w celu
przygotowania zautomatyzowanych testw akceptacyjnych5, ktre musz zosta zaliczone,
aby dana funkcja moga zosta uznana za gotow. Takie testy powinny zosta zapisane
w wyspecjalizowanym jzyku, takim jak FitNesse, Selenium, RobotFX, Cucumber lub
podobnym. Poszczeglne testy musz by zrozumiae dla udziaowcw projektu oraz
dla biznesmenw, a przede wszystkim musz by uruchamiane odpowiednio czsto.
Pomoc
Programowanie to cika praca. Im kto jest modszy, tym trudniej mu w to uwierzy.
W kocu to tylko zbir instrukcji if i while. Jednak zbierajc dowiadczenie, zaczynasz
dostrzega, e najwaniejszy jest sposb, w jaki czone s ze sob te wszystkie instrukcje.
Nie moesz ich umieci po prostu w sekwencji i mie nadziej, e taka konstrukcja
zadziaa. Konieczne jest ostrone dzielenie caego systemu na mniejsze, zrozumiae czci,
ktre maj ze sob jak najmniej wsplnego. I to wanie jest najtrudniejsze.
Programowanie jest tak trudne, e jedna osoba nie jest w stanie zrobi tego dobrze.
Niezalenie od tego, jak wielki masz talent, to na pewno skorzystasz na przemyleniach
i pomysach innych programistw.
93
R OZDZIA 4.
K ODOWANIE
Pomaganie innym
Z tego wanie powodu kady programista powinien w miar moliwoci pomaga innym.
Izolowanie si w swoim boksie lub biurze i odmawianie odpowiedzi na pytania zadawane
przez innych jest naruszeniem etyki zawodowca. Twoja praca nie jest tak wana, e nie
moesz powici chwili na to, by pomc kolegom. Co wicej, kady profesjonalista podejmuje
honorowe zobowizanie do udzielania pomocy wszdzie tam, gdzie jest ona niezbdna.
Nie oznacza to, e nie potrzeba Ci czasu spdzonego w samotnoci. Oczywicie, e tego
potrzebujesz. Ale musisz o tym otwarcie i spokojnie informowa. Na przykad moesz
przekaza zespoowi, e pomidzy godzin 10 rano a poudniem nie naley Ci przeszkadza,
ale ju w godzinach od 13 do 15 Twoje drzwi s otwarte i kady moe przyj z pytaniami.
Musisz mie pen wiadomo tego, w jakim stanie s czonkowie Twojego zespou. Jeeli
zauwaasz, e kto ma problemy, to zaoferuj mu swoj pomoc. Moesz si naprawd zdziwi,
jak wielki skutek moe odnie Twoja pomoc. Nie chodzi o to, e ta inna osoba jest mniej
inteligentna od Ciebie. Po prostu spojrzenie z innej perspektywy moe mie ogromne
znaczenie przy rozwizywaniu problemw.
Prbujc komu pomc, najlepiej jest usi razem z nim i razem zacz tworzy kod.
Zaplanuj na ten cel jak godzin, a moe i wicej. By moe potrzeba bdzie mniej czasu,
ale te nie chodzi o popdzanie kogokolwiek. Uznaj dane zadanie za wasne i przy si
do niego solidnie. Cakiem moliwe, e na kocu nauczysz si wicej, ni dasz od siebie.
Przyjmowanie pomocy
Jeeli kto proponuje Ci swoj pomoc, oka mu wdziczno. Przyjmij j i staraj si j jak
najlepiej wykorzysta. Nie chro swojego terytorium. Nie rezygnuj z oferowanej pomocy,
nawet jeeli masz n na gardle. Powi na ten cel jakie p godziny. Jeeli przez ten czas
okae si, e kolega nie jest w stanie Ci pomc, to piknie mu podzikuj i zakocz sesj.
Pamitaj, e tak jak honor zobowizuje Ci do udzielania pomocy, tak i zobowizuje Ci
do jej przyjmowania.
Naucz si te prosi o pomoc. Jeeli utkniesz, dopadnie Ci zamroczenie albo po prostu nie
bdziesz w stanie ogarn problemu, to popro kogo o pomoc. Jeeli siedzisz w pokoju
z caym zespoem, moesz po prostu wsta i powiedzie: Potrzebuj pomocy. W innych
okolicznociach wykorzystaj Tweetera, e-mail albo telefon stojcy na biurku i popro
kogo o pomoc. Powtarzam raz jeszcze, e jest to kwestia etyki zawodowej. Zdecydowanie
nieprofesjonalne jest stanie w miejscu, podczas gdy pomoc jest tak atwo dostpna.
W tym momencie moe Ci si wydawa, e zaraz chralnie zapiewam Kumbaya, a w tle
rowe krliczki bd wskakiwa na grzbiety jednorocw i wsplnie poszybujemy ponad
tcz nadziei i zmian. No, nie do koca. Okazuje si, e programici bywaj aroganckimi,
94
B IBLIOGRAFIA
pochonitymi sob introwertykami. Tego zawodu nie wybiera si dlatego, e tak bardzo
lubi si ludzi. Wikszo z nas zostaa programistami, poniewa wolimy koncentrowa si
na sterylnych szczegach, jednoczenie przerzucajc rne pomysy, i w ogle udowadnia,
e mamy mzgi wielkoci maej planety, a jednoczenie unika skomplikowanej interakcji
z innymi ludmi.
To oczywicie stereotyp i wielka generalizacja, z wieloma rnymi wyjtkami. Ale
rzeczywisto jest taka, e programici raczej nie s najlepszymi wsppracownikami6.
A mimo to wsppraca jest bardzo istotnym czynnikiem skutecznego programowania.
Oznacza to, e cho dla wielu z nas wsppraca nie jest instynktowna, musimy wyrobi
sobie dyscyplin, ktra bdzie nas do tego zmuszaa.
Mentor
W dalszej czci ksiki powic temu tematowi cay rozdzia. Na razie powiem tylko
tyle, e szkolenie mniej dowiadczonych programistw jest zadaniem tych o wikszym
dowiadczeniu. I nie licz si tutaj kursy programowania. Nie licz si ksiki. Nic nie
jest w stanie szybciej wynie modego programisty na wyyny wydajnoci ni wasna
motywacja i pomoc starszych kolegw. I znw powicenie czasu, eby wzi modych
pod swoje skrzyda i odpowiednio ich szkoli, naley do etyki zawodowej dowiadczonych
programistw. Z tego wynika te, e zadaniem modszych programistw jest poszukiwanie
moliwoci skorzystania na dowiadczeniu starszych kolegw.
Bibliografia
[Martin09]: Robert C. Martin, Czysty kod. Podrcznik dobrego programisty, Gliwice,
Helion, 2009.
[PPP2002]: Robert C. Martin, Agile Software Development. Principles, Patterns,
and Practices, Upper Saddle River, NJ: Prentice Hall, 2002.
95
R OZDZIA 4.
K ODOWANIE
96
TDD
Mino ju ponad 10 lat od czasu, gdy po raz pierwszy wiat usysza o TDD (Test Driven
Development rozwj oprogramowania sterowany testami). Praktyka ta bya czci
fali programowania ekstremalnego (XP Extreme Programming), ale pniej zostaa
zastosowana te w takich metodach jak Scrum i waciwie wszystkich innych metodach
zwinnych. Nawet zespoy niestosujce metodologii zwinnych uywaj dzisiaj TDD.
Kiedy w 1998 roku pierwszy raz usyszaem o programowaniu najpierw testw, byem
raczej sceptycznie nastawiony. Kto by nie by? Najpierw pisa testy? Kt wpad na tak
szalony pomys?
97
R OZDZIA 5.
TDD
Sd na sali
Od tego czasu dowiedziaem si, e technika TDD jest czym wicej ni tylko prost sztuczk
pozwalajc skrci cykl pracy nad oprogramowaniem. Wie si z ni cay zbir zalet,
o ktrych napisz w poniszych akapitach.
1
Z mojego punktu widzenia dzieckiem jest jeszcze kady, kto nie ukoczy 35. roku ycia. Gdy miaem
20 lat, sporo czasu spdzaem na pisaniu maych, prostych gier w jzykach interpretowanych.
Pisaem w nich gry wojenne, przygodowe, wycigi konne, wopodobne, hazardowe i inne.
98
99
R OZDZIA 5.
TDD
I tak w koo Macieju. Dopisanie kawaeczka kodu testowego. Dopisanie kawaeczka kodu
produktywnego. Dwa strumienie kodu rosnce jednoczenie w postaci uzupeniajcych
si skadnikw. Test dopasowuje si do kodu produktywnego, jak antyciao dopasowuje
si do antygenu.
Litania zalet
Pewno
Jeeli zaczniesz w normalnej pracy stosowa TDD, to kadego dnia bdziesz tworzy
dziesitki testw, co tydzie wytworzysz ich setki, a w rok zbior si tysice. A wszystkie
te testy bd zawsze aktualne i bdziesz uruchamia je przy kadej zmianie, jak wprowadzisz
do kodu.
Jestem gwnym autorem i konserwatorem projektu FitNesse2, czyli napisanego w Javie
narzdzia do testw akceptacyjnych. W czasie tworzenia tej ksiki projekt skada si
z 64 000 wierszy kodu, z czego 28 000 zawierao troch ponad 2200 testw jednostkowych.
Testy te pokrywaj ponad 90% kodu produktywnego3, a uruchomienie ich wszystkich
zajmuje jakie 90 sekund.
Za kadym razem, gdy wprowadzam jakkolwiek zmian do FitNesse, po prostu
uruchamiam testy jednostkowe. Jeeli zostan zaliczone, mam niemal cakowit pewno,
e wprowadzona wanie zmiana niczego nie popsua. Co waciwie znaczy niemal
cakowit pewno? Na tyle du, eby udostpnia poprawk!
Proces kontroli jakoci projektu FitNesse skada si z jednego polecenia: ant release.
Polecenie to kompiluje cay projekt od zera, uruchamia wszystkie testy jednostkowe
i akceptacyjne. Jeeli wszystkie testy zostan zaliczone, to znaczy, e mog udostpnia wersj.
http://fitnesse.org.
90% to minimum. Faktyczna warto jest zdecydowanie wysza. Niestety, dokadn warto pokrycia
bardzo trudno jest wyliczy, poniewa obliczajce j narzdzia nie widz kodu uruchamianego
w zewntrznych procesach albo w blokach catch.
100
To nie jest efekt jednostkowy. Istnieje ju kilka raportw4 i bada5 opisujcych ogromn
redukcj liczby bdw. Kada firma od IBM do Microsoftu, od Sabre do Symanteca
dowiadczya dwukrotnego, piciokrotnego, a nawet dziesiciokrotnego zmniejszenia
liczby bdw. Takich wartoci nie moe ignorowa aden profesjonalista.
Odwaga
Dlaczego nie poprawiasz zego kodu w momencie, w ktrym go dostrzeesz? Twoj pierwsz
reakcj po zobaczeniu kodu zabaaganionej funkcji jest myl: Ten baagan trzeba koniecznie
uprztn. Zaraz po niej pojawia si jednak: Nawet tego nie dotkn. Dlaczego? Poniewa
wiesz, e jeeli tego dotkniesz, to prawdopodobnie co zepsujesz. A jeeli co zepsujesz,
to na Ciebie spadnie odpowiedzialno za to.
Co by si jednak stao, gdyby dano Ci pewno, e Twoje poprawki niczego nie zepsuj?
Czy wpynoby to na Twoje postpowanie? Co by byo, gdyby po klikniciu jednego
przycisku i odczekaniu 90 sekund mona byo uzyska pewno, e Twoje zmiany nic
nie zepsuy, a jedynie poprawiy jako kodu?
To jedna z najwaniejszych zalet TDD. Jeeli dysponujesz zestawem testw, ktrym moesz
zaufa, to nie masz ju obaw przed wprowadzaniem zmian. Jeeli widzisz zy kod, to po
prostu go poprawiasz. Kod upodabnia si do plasteliny, ktr moesz dowolnie ksztatowa,
tworzc proste i przyjemne struktury.
Gdy tylko programista przestaje si ba wprowadzania zmian, zaczyna czyci istniejcy
kod. Z kolei czysty kod jest znacznie atwiejszy do zrozumienia, atwiejszy do poprawienia,
a i jego rozbudowa jest prostsza. Dziki temu, e kod staje si prostszy, zmniejsza si szansa
powstania bdw. A cao kodu cigle jest poprawiana, zupenie inaczej ni w przypadku
typowego dla naszego zawodu powolnego niszczenia.
Czy zawodowy programista moe pozwoli sobie na dalsze niszczenie swojego kodu?
Dokumentacja
Zdarzyo Ci si ju korzysta z zewntrznych bibliotek? Czsto do takich bibliotek doczana
jest adnie sformatowana instrukcja napisana przez wyznaczonych do tego ludzi. Zazwyczaj
taka instrukcja skada si z byszczcych fotografii uzupenionych kkami i strzakami
oraz podpisem wyjaniajcym, jak naley skonfigurowa i zainstalowa dan bibliotek,
manipulowa ni czy te po prostu jej uywa. A na kocu instrukcji, w ktrym z dodatkw
znajduje si kilka maych przykadw paskudnego kodu.
http://www.objectmentor.com/omSolutions/agile_customers.html.
101
R OZDZIA 5.
TDD
Projekt
Jeeli postpujc zgodnie z tymi trzema prawami, najpierw napiszesz testy, staniesz przed
pewnym dylematem. Czsto dokadnie wiesz, jaki kod chcesz napisa, ale zasada testu
jednostkowego nakazuje Ci najpierw napisa test, ktry nie zostanie zaliczony! To znaczy,
e musisz przetestowa kod, ktry dopiero zaczniesz pisa.
Problem z testowaniem takiego kodu polega na tym, e najpierw musisz go wydzieli.
Czsto trudno testuje si funkcj, jeeli ta funkcja wywouje inne funkcje. Aby napisa
taki test, musisz wymyli sposb na oddzielenie danej funkcji od pozostaych. Oznacza
to, e konieczno napisania najpierw testu zmusza Ci do wymylenia dobrego projektu.
Jeeli nie napiszesz najpierw testu, to nic nie powstrzyma Ci przed poczeniem wielu
funkcji w niepoddajc si testowaniu mas. Jeeli test napiszesz pniej, to prawdopodobnie
uda Ci si przetestowa wejcia i wyjcia tej masy, ale przetestowanie poszczeglnych funkcji
moe by bardzo utrudnione.
Oznacza to, e postpujc zgodnie z trzema prawami i piszc najpierw testy, wytwarzasz
si, ktra zmusza Ci do tworzenia lepiej odizolowanego projektu. A ktry profesjonalista
nie skorzystaby z narzdzi pozwalajcych mu uzyska lepszy projekt oprogramowania?
Powiesz teraz: Przecie testy mog dopisa pniej. Niestety, nie moesz. Naprawd nie.
Oczywicie moesz pniej dopisa jakie testy, a jeeli si bardzo postarasz, to moesz
nawet osign wysokie pokrycie kodu. Ale testy pisane po powstaniu produktywnego
kodu s tylko rodzajem obrony. Testy pisane przed powstaniem kodu s bardzo ofensywne.
102
Testy powstajce po fakcie s pisane przez osob, ktra poznaa dokadnie testowany kod
i doskonale wie, jak zosta rozwizany dany problem. Nie ma takiej moliwoci, eby te testy
byy tak wnikliwe jak testy pisane przed faktem.
Profesjonalne rozwizanie
Wniosek z tych wszystkich rozwaa jest taki, e TDD to bardzo profesjonalne rozwizanie.
Jest to dziedzina rozwijajca pewno siebie, odwag, zmniejszajca liczb bdw,
poprawiajca dokumentacj oraz projekt. Patrzc na to z tej perspektywy, nieuywanie
tej metody mona uzna za nieprofesjonalne.
Bibliografia
[Maximilien]: E. Michael Maximilien, Laurie Williams, Assessing Test-Driven
Development at IBM, http://collaboration.csc.ncsu.edu/laurie/Papers/
MAXIMILIEN_WILLIAMS.PDF.
[George2003]: B. George i L. Williams, An Initial Investigation of Test-Driven
Development in Industry, http://collaboration.csc.ncsu.edu/laurie/Papers/
TDDpaperv8.pdf.
[Janzen2005]: D. Janzen i H. Saiedian, Test-driven development concepts, taxonomy,
and future direction, IEEE Computer, t. 38: 2005, nr 9, s. 43 50.
[Nagappan2008]: Nachiappan Nagappan, E. Michael Maximilien, Thirumalesh Bhat
i Laurie Williams, Realizing quality improvement through test driven development:
results and experiences of four industrial teams, Springer Science + Business Media,
2008: http://research.microsoft.com/en-us/groups/ese/nagappan_tdd.pdf.
103
R OZDZIA 5.
TDD
104
WICZENIA
105
R OZDZIA 6.
WICZENIA
Kto z nas nie napisa tego programu w tej lub innej formie? Uywamy go jako sposb na
sprawdzenie nowego rodowiska lub nowego jzyka. Pisanie i uruchamianie tego programu
jest dowodem, e jestemy w stanie napisa i uruchomi dowolny program.
Gdy byem znacznie modszy, jednym z pierwszych programw, jakie pisaem na nowym
komputerze, by SQUIN, ktry oblicza kwadraty liczb cakowitych. Napisaem go
w asemblerze, BASIC-u, FORTRAN-ie, COBOL-u i setkach innych jzykw. By to
dla mnie sposb, by dowie, e mog zmusi komputer do zrobienia tego, co mu zadam.
Na pocztku lat 80. w sklepach zaczy pojawia si komputery osobiste. Gdy tylko dostaem
w swoje rce jeden z nich, czy by to VIC-20, Commodore-64, czy te TRS-80, zawsze
pisaem na nim may program, ktry wypisywa na ekranie niekoczcy si cig znakw
ukonika (\) i lewego ukonika (/). Wzory generowane przez taki program byy cakiem
przyjemne, a jednoczenie wyglday na bardziej skomplikowane ni sam program, ktry
je wytworzy.
Mimo e takie programy zdecydowanie byy wiczeniami, programici oglnie nie stosowali
wicze. Po prostu nigdy nikomu nie przyszo to na myl. Bylimy zbyt zajci pisaniem
kodu, eby w ogle pomyle o wiczeniu naszych umiejtnoci. Poza tym jaki miaby
by tego cel? Przez cae lata programowania nie potrzebowaem umiejtnoci szybkiego
reagowania ani szczeglnie sprawnych palcw. Do koca lat 70. nie uywalimy edytorw
ekranowych. Wikszo czasu spdzalimy w oczekiwaniu na zakoczenie pracy kompilatora
albo na debugowaniu straszliwie dugich cigw kodu. Nie wymylilimy jeszcze krciutkich
cykli TDD, dlatego niepotrzebne byo nam to szczeglne dopasowanie do rodowiska,
ktre mona uzyska tylko za pomoc wicze.
106
Czas wykonania
Bardzo zmieni si jednak sposb, w jaki pracujemy. W latach 60. musielimy czeka dzie
lub dwa, eby zobaczy w kocu efekty naszej kompilacji. Pod koniec lat 70. kompilacja
programu o dugoci 50 000 wierszy trwaa mniej wicej 45 minut. Nawet w latach 90.
dugie czasy kompilacji nie byy niczym niezwykym.
Dzisiaj programici nie musz czeka na zakoczenie kompilacji1. Dzisiaj programici maj
do dyspozycji tak gigantyczn moc, e czerwono-zielony cykl refaktoryzacji mog realizowa
w cigu sekund.
1
Fakt, e cz programistw nadal czeka na jej zakoczenie, jest prawdziw tragedi i oznak
bezmylnoci. Dzisiaj czasy kompilacji powinny by mierzone w sekundach, a nie minutach,
a ju na pewno nie w godzinach.
107
R OZDZIA 6.
WICZENIA
Na przykad pracuj nad projektem o nazwie FitNesse, ktry skada si z 64 000 wierszu
kodu Javy. Pena kompilacja projektu, poczona z wykonaniem wszystkich testw
jednostkowych i integracyjnych, zajmuje mniej ni 4 minuty. Jeeli wszystkie testy zostan
zaliczone, to wiem, e mog wyda kolejn wersj. Cay proces kontroli jakoci, od kodu
rdowego do udostpnienia, zajmuje niecae 4 minuty. Czas samej kompilacji jest trudny
do zmierzenia. Testy czstkowe trwaj kilka sekund. Oznacza to, e cay cykl kompilacji
i testw mog wykonywa dziesi razy na minut!
Nie zawsze warto dziaa a tak szybko. Czsto znacznie lepszym rozwizaniem jest zwolni
i pomyle2. Ale zdarzaj si sytuacje, w ktrych jak najszybsza realizacja kolejnych cykli jest
dziaaniem niezwykle produktywnym.
Jakiekolwiek szybkie dziaanie wymaga odpowiedniej praktyki. Szybkie dziaanie w ptli
kodowania i testowania wymaga bardzo szybkiego podejmowania decyzji. A szybkie
podejmowanie decyzji wymaga umiejtnoci rozpoznawania wielu sytuacji i problemw
oraz dopasowywania do nich waciwych rozwiza.
Zastanwmy si nad walk dwch dowiadczonych wojownikw. Kady z nich musi
rozpozna zamiary przeciwnika i w cigu milisekund odpowiednio na nie zareagowa.
W trakcie walki nie masz moliwoci zatrzymania czasu, przeanalizowania pozycji
i zastanowienia si nad waciw reakcj. Walczc, musisz po prostu reagowa. Co wicej,
reagowaniem zajmuje si Twoje ciao, podczas gdy umys pracuje nad bardziej rozbudowan
strategi.
Podczas wykonywania kilku cykli tworzenia kodu i testowania na minut to Twoje ciao
wie, ktre klawisze ma naciska. Pierwotna cz Twojego umysu rozpoznaje dan sytuacj
i reaguje w cigu milisekund, stosujc pasujce rozwizanie, podczas gdy umys moe
swobodnie koncentrowa si na problemach wyszego poziomu.
Zarwno w przypadku wojownikw, jak i programistw szybko jest uzaleniona od
praktyki. A w obu przypadkach uzyskuje si j w podobny sposb. Wybieramy cay repertuar
par problem rozwizanie i powtarzamy je tak dugo, a poznamy je na pami.
Zastanwmy si nad gitarzyst klasy Carlosa Santany. Muzyka powstajca w jego gowie
po prostu przepywa przez jego palce. Nie zastanawia si on nad uoeniem palcw ani nad
zastosowaniem waciwej techniki. Jego umys moe swobodnie planowa rozbudowane
melodie, podczas gdy jego ciao przeksztaca te plany w niskopoziomowe ruchy palcw.
Jednak uzyskanie takiej atwoci grania wymaga wicze. Muzycy wicz gamy i etiudy,
powtarzajc je do znudzenia, a mog gra je na lepo.
Ta technika jest nazywana przez Richa Hickeya HDD, czyli Hammock-Driven Development
(rozwj hamakowy).
108
D OJO KODOWANIA
Dojo kodowania
Od 2001 roku prowadz zajcia demonstracyjne z TDD, ktre nazywam Gr w krgle
(ang. The Bowling Game)3. To mae i przyjemne wiczenie zajmuje okoo 30 minut.
Tworzy najpierw konflikt w projekcie, potem buduje napicie, a koczy si niespodziank.
Na podstawie tego przykadu napisaem cay rozdzia ksiki [PPP2002].
Przez lata zademonstrowaem to kata setki, a moe i tysice razy. Sprawio to, e jestem
w tym bardzo dobry! Mog je wykonywa na pico. Zminimalizowaem liczb nacini
klawiszy, dopasowaem nazwy zmiennych i zmieniem struktur algorytmu tak, e w kocu
staa si doskonaa. To byo moje pierwsze kata, cho wtedy tego jeszcze nie wiedziaem.
W 2005 roku wziem udzia w konferencji XP2005 w Sheffield, w Anglii. Skorzystaem
z sesji o nazwie Dojo kodowania (ang. Coding Dojo) prowadzonej przez Laurenta Bossavita
i Emmanuela Gaillota. Kazali wszystkim otworzy swoje laptopy i tworzy kod razem
z nimi, podczas gdy oni wykorzystywali TDD, eby przygotowa Gr ycia Conwaya.
To, co robili, nazywali kata, a pierwszestwo idei4 przyznawali Pragmatycznemu
Daveowi Thomasowi5.
Od tego czasu wielu programistw przyjo t pochodzc ze sztuk walki metafor sesji
wicze. Wyglda na to, e dojo kodowania6 zostao bardzo dobrze przyjte. Czasami
grupa programistw spotyka si i razem wiczy, podobnie jak robi to wojownicy. Zdarza
si te, e programici wicz samodzielnie, tak jak zdarza si to wojownikom.
Mniej wicej rok temu uczyem grup programistw z Omaha. W czasie obiadu poprosili
mnie o wzicie udziau w ich dojo kodowania. Obserwowaem, jak dwudziestu programistw
otworzyo swoje laptopy i klawisz po klawiszu powtarzali ruchy prowadzcego, ktry
wykonywa kata Gra w krgle.
W ramach dojo wykonywanych jest kilka rodzajw dziaa. Oto niektre z nich:
Kata
W sztukach walki kata to szczegowy zestaw ruchw, ktry symuluje jedn stron w walce.
Celem jest prba osignicia perfekcji, do ktrej mona si zbliy, ale nigdy nie mona jej
osign. Wojownik stara si nauczy swoje ciao, by doskonale wykonywao kady ruch,
Staa si ona bardzo popularnym kata, a wyszukiwanie tego hasa w Google zwraca wiele rde.
Orygina mona znale tutaj: http://butunclebob.com/ArticleS.UncleBob.TheBowlingGameKata.
http://codekata.pragprog.com.
http://codingdojo.org/.
109
R OZDZIA 6.
WICZENIA
a nastpnie poczy poszczeglne ruchy w pynny taniec. Dobrze wykonane kata naprawd
przyjemnie si oglda.
Mimo caego ich uroku celem nauki kata nie jest prezentowanie ich na scenie. Ich zadaniem
jest takie wywiczenie umysu i ciaa, eby reagoway one na szczeglne sytuacje w walce.
Celem jest sprawienie, e takie doskonae ruchy stan si automatyczne i instynktowne,
tak by w razie potrzeby byy zawsze do dyspozycji.
W programowaniu kata jest dokadnym zestawem chronologicznie uoonych nacini
klawiszy oraz ruchw mysz symulujcych rozwizanie okrelonego problemu
programistycznego. Nie chodzi o samo wymylenie rozwizania problemu, poniewa
ono jest ju znane, ale o wywiczenie zwizanych z nim ruchw oraz decyzji.
Tutaj rwnie celem jest denie do perfekcji. Powtarzasz wiczenie raz za razem, aby
wywiczy mzg i palce w wykonywaniu odpowiednich ruchw i reagowaniu. Podczas
takich wicze zauwaysz drobne poprawy kadego wykonywanego ruchu albo i caego
rozwizania.
wiczenie caego zbioru rnych kata jest dobr metod na nauczenie si skrtw
klawiszowych oraz idiomw nawigacyjnych. Jest te dobr metod na nauk takich
metodologii jak TDD lub CI. Najwaniejsze jest jednak to, e jest to wietna metoda na
wprasowanie rozwiza typowych problemw w swoj podwiadomo, tak eby od razu
wiedzie, jak je rozwizywa w momencie, gdy si na nie natkniemy.
Podobnie jak wojownik programista powinien zna kilka rnych kata i wiczy je regularnie,
tak eby nie wyleciay mu z pamici. Wiele kata zostao zapisanych na stronie http://katas.
softwarecraftsmanship.org. Inne mona znale pod adresem http://codekata.pragprog.com.
Do moich ulubionych nale:
Gra w krgle (The Bowling Game): http://butunclebob.com/ArticleS.UncleBob.
TheBowlingGameKata.
Czynniki pierwsze (Prime Factors): http://butunclebob.com/ArticleS.UncleBob.
ThePrimeFactorsKata.
Zawijanie sw (Word Wrap): http://thecleancoder.blogspot.com/2010/10/
craftsman-62-darkpath.html.
Prawdziwym wyzwaniem jest nauczenie si kata tak dobrze, e mona zmieni je w muzyk.
To dopiero jest trudne7.
http://katas.softwarecraftsmanship.org/?p=71.
110
D OJO KODOWANIA
Wasa
W czasie gdy wiczyem jujitsu, wiele czasu spdzalimy w parach, wiczc nasze wasa.
Wasa mona przyrwna do dwuosobowego kata. Trzeba dokadnie zapamita poszczeglne
ruchy, a nastpnie je odtworzy. Jeden z partnerw odgrywa rol agresora, a drugi prbuje
si broni. Wszystkie ruchy s powtarzane w nieskoczono, a potem wiczcy zamieniaj
si rolami.
Programici mog wiczy w podobny sposb, wykorzystujc do tego gr ping-pong8. Dwch
partnerw wybiera w niej kata lub prosty problem. Jeden z nich pisze test jednostkowy,
a drugi musi sprawi, e zostanie on zaliczony. Potem zamieniaj si rolami.
Jeeli partnerzy wybior standardowe kata, to wynik wiczenia jest znany, a programici mog
wiczy i krytykowa wzajemne techniki posugiwania si klawiatur lub mysz, a take
poziom zapamitania danego kata. Jeeli jednak wybior nowy problem do rozwizania,
to gra staje si troch bardziej interesujca. Programista piszcy test ma ogromn wadz
nad ksztatem rozwizania. Ma te wielkie moliwoci tworzenia ogranicze. Na przykad
jeeli programista zdecyduje si zaimplementowa algorytm sortowania, to piszcy test
moe atwo naoy ograniczenia odnonie do prdkoci i zapotrzebowania na pami,
co bdzie wyzwaniem dla partnera. To sprawia, e caa gra moe sta si powan
rywalizacj i niez zabaw.
Randori
Randori jest walk w stylu wolnym. W naszym dojo jujitsu przygotowywalimy kilka
rodzajw starcia, a nastpnie je odgrywalimy. Czasami jedna osoba miaa si broni,
podczas gdy pozostali starali si j po kolei atakowa. Niekiedy dwie osoby miay atakowa
jednego obroc (zwykle by nim sensei, ktry niemal zawsze wygrywa). Kiedy indziej
stawalimy dwch na dwch itd.
Symulowana walka nie najlepiej przekada si na programowanie, ale istnieje pewna gra
nazywana randori, ktr wykorzystywaem podczas wielu dojo programowania. Przypomina
ona wasa z dwjk partnerw starajcych si rozwiza okrelony problem. Tym razem
jednak w zabawie bierze udzia wicej osb, a w reguach zostaje wprowadzona drobna
zmiana. Zawarto ekranu jest prezentowana na cianie. Jedna osoba pisze test i siada
na swoje miejsce. Nastpna osoba sprawia, e test zostaje zaliczony, i pisze kolejny test.
Mona to powtarza w kolejnoci dookoa stou, ale poszczeglne osoby mog si po prostu
zgasza, jeeli czuj tak potrzeb. W obu przypadkach wykonywanie takiego wiczenia
moe sprawia sporo radoci.
http://c2.com/cgi/wiki?PairProgrammingPingPongPattern.
111
R OZDZIA 6.
WICZENIA
Zadziwiajce jest, jak wiele mona si z takich sesji nauczy. Moesz w ten sposb pozna
metody rozwizywania problemw stosowane przez inne osoby. Takie informacje pomagaj
poszerzy wasne horyzonty i poprawi umiejtnoci.
Zwikszanie dowiadczenia
Profesjonalni programici zwykle cierpi z powodu braku zrnicowania stawianych przed
nimi problemw. Pracodawcy zazwyczaj wymuszaj stosowanie jednego jzyka, platformy
oraz dziedziny, w ktrych programista musi si porusza. Przy braku czynnika poszerzajcego
horyzonty moe to doprowadzi do niezdrowego zawenia yciorysu i umysu. Nierzadko
zdarza si, e tak ograniczeni programici s cakowicie nieprzygotowani na zmiany, jakie
okresowo przetaczaj si przez nasz bran.
Otwarte rda
Jednym ze sposobw wyrwania si z zastoju jest to, co czsto robi lekarze i prawnicy:
wykonanie pewnych prac pro bono, na przykad przez wspprac przy jakim
otwartordowym projekcie. W sieci istniej setki takich projektw i nie ma chyba
lepszego sposobu na poszerzenie repertuaru swoich umiejtnoci ni praca nad czym,
na czym zaley komu innemu.
Jeeli zatem programujesz normalnie w Javie, to docz do projektu pisanego w Ruby.
Jeeli w pracy wiele piszesz w C++, to znajd sobie projekt w Pythonie i postaraj si
go rozwija.
Etyka pracy
Profesjonalni programici wiczenia wykonuj w swoim czasie wolnym. Utrwalanie
i rozwijanie Twoich umiejtnoci nie jest zadaniem Twojego pracodawcy. Nie on ma
si zajmowa uatrakcyjnianiem Twojego CV. Pacjenci nie pac lekarzom za wiczenie
zakadania szww. Fani footbolu nie pac (zwykle) zawodnikom za patrzenie, jak biegaj
przez opony. Chodzcy chtnie na koncerty nie pac muzykom za ich wiczenia i granie
gam. A pracodawcy programistw nie powinni paci za czas powicony przez nich na
wiczenia.
Skoro czas wicze naley cakowicie do Ciebie, nie musisz korzysta z jzykw i platform
stosowanych przez Twojego pracodawc. Wybierz sobie dowolny jzyk i rozwijaj swj talent
poligloty. Jeeli w pracy poruszasz si w rodowisku .NET, to w czasie przerwy obiadowej
albo w domu powicz troch programowanie w Javie albo Ruby.
112
W NIOSKI
Wnioski
W ten lub inny sposb kady zawodowiec musi wiczy. Robi to, poniewa chce wykonywa
swoj prac najlepiej, jak to moliwe. Co wicej, na wiczenia powica swj prywatny
czas, gdy utrzymywanie umiejtnoci na wysokim poziomie uznaje za obowizek swj,
a nie pracodawcy. wiczenia wykonuje si wtedy, gdy Ci za to nie pac. Wykonuje si je
po to, eby uzyska dobr zapat za swoj prac.
Bibliografia
[K&R-C]: Brian W. Kernighan i Dennis M. Ritchie, The C Programming Language,
Upper Saddle River, NJ: Prentice Hall, 1975.
[PPP2002]: Robert C. Martin, Agile Software Development.Principles, Patterns,
and Practices, Upper Saddle River, NJ: Prentice Hall, 2003.
113
R OZDZIA 6.
WICZENIA
114
T ESTY AKCEPTACYJNE
Komunikowanie wymaga
Jednym z najczstszych problemw w komunikacji midzy programistami i menederami
jest zdefiniowanie wymaga. Biznesmeni opowiadaj o tym, co jak im si wydaje
jest im potrzebne. Nastpnie programici tworz co, co jak im si wydaje opisa
115
R OZDZIA 7.
T ESTY AKCEPTACYJNE
116
K OMUNIKOWANIE WYMAGA
Czsto musia rysowa swoj wizj na kartce papieru. Niektre z jego pomysw trudno
byoby zrealizowa za pomoc ED-402, dlatego proponowaem inne rozwizania. Ostatecznie
zgadzalimy si na rozwizanie porednie, a potem staraem si je zastosowa.
W kocu prbowalimy to, co zostao zaimplementowane, a on zmienia zdanie. Mwi co
w rodzaju: No tak, ale to jednak nie dziaa tak, jak sobie wyobraaem. Moe sprbujemy
czego innego.
Godzina po godzinie prbowalimy, przestawialimy i nadawalimy aplikacji ostateczny
ksztat. Prbowalimy jednej rzeczy, potem innej, a potem jeszcze innej. Stawao si dla
mnie coraz wyraniejsze, e to on by tutaj rzebiarzem, a ja tylko trzymanym przez niego
narzdziem.
W kocu udao si nam przygotowa aplikacj, o ktrej myla Tom, cho on nadal nie
mia pojcia o tym, jak mgby sam napisa kolejny program. Z kolei ja dostaem porzdn
lekcj na temat tego, jak klienci dowiaduj si, czego im naprawd potrzeba. Nauczyem
si, e ich wizja poszczeglnych funkcji czsto nie jest w stanie przetrwa rzeczywistego
kontaktu z komputerem.
Przedwczesna dokadno
Zarwno programici, jak i biznesmeni czsto wpadaj w puapk przedwczesnej dokadnoci.
Biznesmeni chc od samego pocztku, jeszcze przed autoryzacj projektu, wiedzie, co waciwie
dostan. Programici z kolei chc od samego pocztku, jeszcze przed podaniem jakichkolwiek
szacunkw, wiedzie, co maj dostarczy. Obie strony chciayby mie dane o nieosigalnej
dokadnoci, ale czsto s w stanie powici fortun, eby mimo wszystko je otrzyma.
Zasada niepewnoci
Problem polega na tym, e pewne rzeczy wygldaj inaczej na papierze, a inaczej
w dziaajcym systemie. Gdy biznesmen widzi to, co opisa wczeniej, w gotowym systemie,
czsto zdaje sobie spraw, e nie o to mu chodzio. Gdy w kocu zobaczy swoje wymagania
w akcji, stwierdza, e ma lepszy pomys, ktry najczciej nie ma nic wsplnego z tym,
co wanie widzi.
W gr wchodzi tu pewnego rodzaju efekt obserwatora albo zasada niepewnoci. Kiedy
demonstrujesz funkcj biznesmenom, dajesz im wicej informacji, ni mieli wczeniej,
co wpywa na ich postrzeganie systemu jako caoci.
Ostatecznie okazuje si, e im dokadniej zdefiniowane bd wymagania systemu, tym
mniejsze bd miay one znaczenie w czasie implementowania.
117
R OZDZIA 7.
T ESTY AKCEPTACYJNE
Niepokojce szacunki
Programici rwnie mog wpa w puapk zbyt duej dokadnoci. Wiedz, e musz
oszacowa system, i czsto sdz, e to wymaga dokadnych informacji. Nieprawda.
Po pierwsze nawet z doskonale dokadnymi informacjami Twoje szacunki bd miay spor
niedokadno. Po drugie zasada niepewnoci te wstpnie dokadne dane przerabia na
sieczk. Wymagania odnonie do systemu na pewno si zmieni, przez co pocztkowa
precyzja staje si nieistotna.
Profesjonalni programici wiedz, e szacunki mog i powinny by tworzone na podstawie
mao dokadnych wymaga, a jednoczenie musz pamita, e szacunki s tylko
szacunkami. Na diagramach przedstawiajcych takie szacunki dodaj jeszcze paski
prezentujce moliwy bd, tak eby uwidoczni menederom t niepewno. (Zajrzyj
do rozdziau 10., Szacowanie).
Pna wieloznaczno
Rozwizaniem problemu przedwczesnej dokadnoci jest jak najdusze opnianie
pojawienia si tej precyzji. Profesjonalni programici nie zastanawiaj si nad danym
wymogiem do czasu, a przystpuj do jego implementowania. To moe jednak powodowa
inny rodzaj kopotw: pn wieloznaczno.
Udziaowcy projektu czsto si ze sob nie zgadzaj. W takiej sytuacji znacznie atwiej
jest im w jaki sposb obej ten brak porozumienia, ni faktycznie rozwiza problem.
Wyszukiwane s zatem sposoby takiego wyraenia wymagania, z ktrym kady moe si
zgodzi, cho to wcale nie rozwizuje problemu. Jaki czas temu syszaem, jak Tom DeMarco
powiedzia: Wieloznaczno w dokumencie wymaga systemu jest odzwierciedleniem
konfliktu midzy udziaowcami1.
Oczywicie do wytworzenia wieloznacznego wymagania nie trzeba adnej ktni ani braku
zgody. Czasami udziaowcy zakadaj, e czytelnicy dokumentu domyl si, co oni mieli
na myli.
We wasnym kontekcie mog doskonale zna swoje wymagania, ale dla programisty,
ktry pniej czyta ten tekst, moe on mie cakowicie odmienne znaczenie. Ten rodzaj
kontekstowej wieloznacznoci moe pojawi si rwnie wtedy, gdy klienci i programici
rozmawiaj bezporednio ze sob.
Sam (udziaowiec): Dobrze, natomiast te pliki trzeba bdzie zapisywa w kopii
zapasowej.
118
K OMUNIKOWANIE WYMAGA
119
R OZDZIA 7.
T ESTY AKCEPTACYJNE
Testy akceptacyjne
Pojcie testw akceptacyjnych jest uywane zdecydowanie zbyt szeroko. Niektrzy uwaaj,
e s to testy przeprowadzane przez uytkownikw, zanim zaakceptuj dane wydanie
systemu. Inni sdz, e chodzi o testy wykonywane przez dzia kontroli jakoci. W tym
rozdziale zdefiniujemy testy akceptacyjne jako testy napisane przez wsppracujcych
ze sob udziaowcw i programistw w celu zdefiniowania, kiedy dane wymaganie zostaje
spenione.
Definicja gotowego
Jedn z najwikszych niejednoznacznoci, z jakimi stykaj si zawodowi programici,
jest niejednoznaczne okrelenie, kiedy co jest gotowe. Gdy programista mwi, e wykona
dane zadanie, to co to waciwie oznacza? Czy zadanie zostao wykonane tak, e programista
moe przekaza dan funkcj dalej i mie cakowit pewno, e dziaa ona prawidowo?
Czy moe oznacza to, e wszystko jest gotowe dla dziau kontroli jakoci? A moe tylko
napisa kod funkcji i raz j uruchomi, ale nie przetestowa jej dokadnie?
Pracowaem ju z zespoami, ktre miay bardzo rne definicje sowa gotowe i zakoczone.
Jeden z takich zespow stosowa nawet dwa pojcia: gotowe i gotowe-gotowe.
Profesjonalni programici maj tylko jedn definicj tego sowa: gotowe znaczy gotowe.
Oznacza ono, e kod zosta napisany, wszystkie testy zostay zaliczone, a funkcja zostaa
zaakceptowana przez dzia kontroli jakoci i udziaowcw projektu.
Jak jednak mona osign a tak wysoki poziom gotowoci i nadal szybko rozwija
system w kadej iteracji? Trzeba przygotowa zestaw automatycznych testw, po ktrych
zaliczeniu stwierdzane jest, e kod spenia wszystkie kryteria! Testy akceptacyjne rozwijanej
funkcji zostaj zaliczone i wszystko jest gotowe.
Profesjonalni programici rozwijaj definicj wymaga systemu tak daleko, e na ich
podstawie opracowuj testy akceptacyjne. Pracuj przy tym z udziaowcami projektu
i dziaem kontroli jakoci, aby upewni si, e przygotowane testy akceptacyjne w peni
opisuj wymagania.
120
T ESTY AKCEPTACYJNE
121
R OZDZIA 7.
T ESTY AKCEPTACYJNE
Paula: Ten test zajmie ci strasznie duo czasu. Aktualnie czas uruchomienia systemu
to 20 sekund i cigle si wydua. Poza tym nie chc kompilowa caego systemu
na potrzeby uruchomienia testu akceptacyjnego.
Tom: Co zatem proponujesz?.
Paula: Utworzymy klas SystemStarter. Program gwny zaaduje taki starter
z doczon list obiektw StartupCommand zbudowanych zgodnie ze wzorcem
polecenia. Nastpnie program nakae obiektowi SystemStarter uruchomi
wszystkie obiekty z listy. Jedno z tych polece utworzy katalog, jeeli nie bdzie
jeszcze istnia.
Tom: OK. Czyli wszystko, co musz zrobi, to przetestowa ten konkretny obiekt
wywiedziony z klasy StartupCommand. Mog napisa prosty test w FitNesse.
Tom podchodzi do tablicy.
Pierwsza cz bdzie wygldaa mniej wicej tak:
zakadajc, e mamy polecenie LogFileDirectoryStartupCommand
zakadajc, e katalog old_inactive_logs nie istnieje
gdy polecenie zostanie uruchomione
to katalog old_inactive_logs powinien istnie
i by pusty
Komunikacja
Zadaniem testw akceptacyjnych jest odpowiednia komunikacja, wprowadzenie jasnoci
i precyzji. Zgadzajc si na to, programici, udziaowcy i testerzy ustalaj, jakie jest planowane
zachowanie systemu. Za uzyskanie takiej jasnoci odpowiedzialne s wszystkie strony
projektu. Profesjonalni programici uznaj za cz swojej pracy wspprac z udziaowcami
i testerami w celu ustalenia, e wszyscy wiedz, co ma zosta przygotowane.
122
T ESTY AKCEPTACYJNE
Automatyzacja
Testy akceptacyjne zawsze powinny by automatyzowane. W cyklu ycia oprogramowania
miejsce na testy manualne znajduje si gdzie indziej. Ten rodzaj testw nigdy nie powinien
by wykonywany rcznie. Powd jest bardzo prosty: koszta.
Spjrz na rysunek 7.1. Widoczne na nim rce nale do menedera kontroli jakoci
pracujcego w wielkiej firmie internetowej. Trzyma w nich dokument bdcy spisem treci
jego planu testw manualnych. Zarzdza on ca armi testerw w kilku zagranicznych
centrach, ktrzy wykonuj cay ten plan raz na sze tygodni. Za kadym razem kosztuje
to ponad milion dolarw. Trzyma ten dokument w taki sposb, poniewa wanie wraca
ze spotkania ze swoim menederem, ktry powiedzia mu, e musi ograniczy budet
o poow. Kieruje zatem do mnie pytanie: Ktr poow tych testw mam pomija?.
123
R OZDZIA 7.
T ESTY AKCEPTACYJNE
Dodatkowa praca
Uwaga Sama dotyczca nakadu pracy jest cakiem zrozumiaa. Pisanie tego rodzaju testw
akceptacyjnych naprawd wyglda na ogrom pracy. Jednak z rysunku 7.1 wynika, e tak
naprawd nie jest to praca dodatkowa. Pisanie tych testw jest prac zwizan z tworzeniem
specyfikacji systemu. Tworzenie specyfikacji o takim poziomie dokadnoci jest jedynym
sposobem pozwalajcym nam, programistom, stwierdzi, co waciwie znaczy gotowe.
Tak dokadna specyfikacja pozwala udziaowcom projektu upewni si, e system, za ktry
pac, naprawd robi to, co powinien. Poza tym napisanie tak dokadnej specyfikacji jest
jedynym sposobem na to, eby testy mona byo zautomatyzowa. Nie mona zatem
patrze na to jak na dodatkow prac, ale raczej trzeba widzie w tym metod pozwalajc
na ogromn oszczdno czasu i pienidzy. Takie testy zapobiegn implementowaniu
niewaciwego systemu i powiedz Ci dokadnie, kiedy system bdzie gotowy.
124
T ESTY AKCEPTACYJNE
Rola programisty
Prace nad implementowaniem funkcji zaczyna si, gdy gotowe bd jej testy akceptacyjne.
Programici uruchamiaj testy akceptacyjne tworzonej funkcji, aby si dowiedzie, w jaki
sposb nie zostan one zaliczone. Nastpnie pracuj nad poczeniem testu akceptacyjnego
z systemem, a potem staraj si zaliczy ten test, implementujc opisywan przez niego
funkcj.
Paula: Peter, pomoesz mi z tym?.
Peter: No pewnie. W czym problem?.
Paula: Mam tutaj test akceptacyjny, ktrego jak widzisz, nie udao si zaliczy.
zakadajc, e mamy polecenie LogFileDirectoryStartupCommand
zakadajc, e katalog old_inactive_logs nie istnieje
gdy polecenie zostanie uruchomione
to katalog old_inactive_logs powinien istnie
i powinien by pusty
Peter: No faktycznie, czerwony. Ale nikt nie dopisa do niego scenariuszy. Na szybko
napisz pierwszy.
|scenario| given the command _|cmd|
|create command|@cmd|
125
R OZDZIA 7.
T ESTY AKCEPTACYJNE
Tom: Jak dla mnie jest OK. W wymaganiach zapisano, e uytkownicy nie powinni
czeka duej ni dwie sekundy. Gdzie widzisz problem?.
Paula: Problem polega na tym, e takiej gwarancji moemy udzieli tylko w sensie
statystycznym.
Tom: To brzmi troch podstpnie. W wymaganiach s zapisane dwie sekundy.
Paula: Zgadza si. I moemy tego dotrzyma w 99,5% przypadkw.
Tom: Ale wymaganie nie zostao zdefiniowane w ten sposb.
Paula: Ale tak wyglda rzeczywisto. Nie ma sposobu na to, eby zagwarantowa
zakoczenie wysyania w dwie sekundy.
Tom: Sam si wcieknie.
Paula: No wanie nie. Ju z nim rozmawiaam o tym i nie ma nic przeciwko, pod
warunkiem e normalne odczucie uytkownika nie przekroczy dwch sekund.
Tom: No dobrze. W takim razie jak mam zapisa ten test? Nie mog przecie wpisa,
e operacja wysyania zwykle koczy si w cigu dwch sekund.
Paula: Zapisz to statystycznie.
Tom: Czyli mam tysic razy uruchomi operacj wysyania i sprawdzi, e co najwyej
pi prb trwao duej ni dwie sekundy? To przecie absurd.
Paula: Nie, to zajoby prawie godzin. Jest na to lepsza metoda. Co powiesz na to?.
wykonaj 15 operacji wysyania i zsumuj ich czasy
upewnij si, e ocena Z dla 2 sekund wynosi przynajmniej 2,57
126
T ESTY AKCEPTACYJNE
127
R OZDZIA 7.
T ESTY AKCEPTACYJNE
128
W NIOSKI
Niektre testy akceptacyjne opisuj zachowanie samego GUI. Takie testy musz korzysta
z interfejsu uytkownika. Trzeba jednak pamita, e nie sprawdzaj one regu biznesowych,
a zatem nie wymagaj podczenia ich do GUI. Z tego powodu podczas testowania GUI
dobrze jest odczy interfejs uytkownika od regu biznesowych i zastpi te ostatnie
atrapami.
Testy interfejsu uytkownika naley ograniczy do minimum. Takie testy s nietrwae,
poniewa GUI szybko si zmienia. Im wicej testw GUI przygotujesz, tym bardziej
prawdopodobne jest, e z czasem zostan one porzucone.
Ciga integracja
Upewnij si, e wszystkie Twoje testy jednostkowe i akceptacyjne s uruchamiane kilka razy
dziennie w ramach systemu cigej integracji (ang. continuous integration system). System
ten powinien by uruchamiany przez system kontroli wersji kodu rdowego. Za kadym
razem, gdy kto wprowadza zmiany do moduu, system CI powinien uruchamia kompilacj,
a nastpnie wykonywa wszystkie testy w systemie. Wyniki takiego przebiegu powinny by
wysyane do wszystkich czonkw zespou.
Zatrzyma pras
Bardzo wane jest, eby testy w systemie CI byy uruchamiane bardzo czsto. Wszystkie
te testy powinny zosta zaliczone. Jeeli to si nie uda, to cay zesp powinien wstrzyma
prace i skupi si na tym, eby poprawi feralny test. Niepen kompilacj i niezaliczone
testy naley traktowa jak sytuacj alarmow i zdarzenie zatrzymujce pras.
Wsppracowaem ju z zespoami, ktre nie traktoway powanie nieudanych kompilacji
systemu. Wszyscy byli zbyt zajci, eby poprawia niezaliczone testy, dlatego spychali je
na bok, obiecujc, e poprawi je pniej. W jednym przypadku zesp usun z procesu
kompilacji niedziaajce testy, poniewa ich czerwone statusy byy w tym momencie nie na
rk. Pniej, po przekazaniu systemu klientowi, przypomnieli sobie, e zapomnieli wczy
te testy do procesu. Dowiedzieli si o tym, poniewa wcieky klient dzwoni i cigle zgasza
kolejne bdy.
Wnioski
Porozumiewanie si w sprawie szczegw jest bardzo trudne. Specjalnego wyrazu nabiera
to w przypadku, gdy programici i udziaowcy projektu musz porozumie si w sprawie
szczegw tworzonej aplikacji. Zbyt atwo kada ze stron moe machn rk i zaoy,
e druga strona j zrozumie. Czsto zdarza si te tak, e obie strony zgadzaj si na
porozumienie, ale rozchodz si, poniewa maj zupenie rne wyobraenia.
129
R OZDZIA 7.
T ESTY AKCEPTACYJNE
130
S TRATEGIE TESTOWANIA
Profesjonalni programici testuj swj kod. Jednak testowanie nie jest tylko kwesti napisania
kilku testw jednostkowych albo testw akceptacyjnych. Pisanie tych testw z ca pewnoci
pomaga, ale nie jest wystarczajce. Kady profesjonalny zesp programistw musi mie
dobr strategi testowania.
W 1989 roku pracowaem w firmie Rational nad pierwszym wydaniem systemu Rose. Mniej
wicej co miesic szef dziau kontroli jakoci ogasza dzie polowania na bdy. Kady
czonek zespou od programistw do menederw, sekretarki i administratorw baz danych
siedzia i prbowa wywoa jaki bd w Rose. Za wykrycie okrelonych rodzajw bdw
131
R OZDZIA 8.
S TRATEGIE TESTOWANIA
byy przyznawane rne nagrody. Osoba, ktra wykrya bd powodujcy nage zamknicie
systemu, wygrywaa obiad dla dwojga. Z kolei osoba, ktra znalaza najwicej bdw,
wygrywaa weekend w Monterrey.
http://www.satisfice.com/articles/what_is_et.shtml.
132
Testy jednostkowe
Na samym dole piramidy s testy jednostkowe. Testy te s pisane przez programistw dla
programistw, w jzyku programowania, w ktrym tworzony jest system. Zadaniem tych
testw jest zdefiniowanie systemu na jego najniszym poziomie. Programici pisz je przed
napisaniem kodu produktywnego i traktuj jak sposb na zdefiniowanie tego, co maj
2
133
R OZDZIA 8.
S TRATEGIE TESTOWANIA
Testy komponentw
Tutaj znajduj si niektre z testw akceptacyjnych, o ktrych wspominaem w poprzednim
rozdziale. Pisane s one tak, eby testowa poszczeglne komponenty systemu. Komponenty
te obejmuj take reguy biznesowe, dlatego ich testy mona traktowa jak testy akceptacyjne
tych regu.
Jak mona zobaczy na rysunku 8.2, test komponentu zawija si naokoo tego, co testuje.
Przekazuje do komponentu dane wejciowe i odbiera od niego dane wyjciowe. Sprawdza
nastpnie, czy wyjcie pasuje do wejcia. Wszelkie pozostae komponenty systemu s w tym
momencie odczone z wykorzystaniem odpowiednich technik podmiany i imitowania
komponentw.
134
Testy integracyjne
Te testy maj znaczenie tylko w wikszych systemach skadajcych si z wielu komponentw.
Jak pokazaem na rysunku 8.3, cz kilka komponentw w grup i testuj ich wzajemn
komunikacj. Pozostae komponenty systemu pozostaj odczone z wykorzystaniem
typowych technik podmiany i imitowania.
Testy integracyjne mona nazwa testami choreografii. Nie maj testowa regu biznesowych,
ale raczej to, czy poszczeglne komponenty waciwie ze sob wsppracuj. S to testy
hydrauliczne, sprawdzajce, czy poszczeglne komponenty s ze sob odpowiednio poczone
i mog si ze sob komunikowa.
Testy integracyjne zazwyczaj pisane s przez architektw systemu albo przez jego gwnych
projektantw. Zapewniaj, e struktura architektoniczna systemu pozostaje nienaruszona.
To wanie na tym poziomie mona przeprowadza testy wydajnoci i przepustowoci.
Testy integracyjne zwykle pisane s w tym samym jzyku i rodowisku, w ktrym powstaj
testy komponentw. Nie s jednak wykonywane w ramach cigej integracji, poniewa czsto
czasy ich wykonania s bardzo dugie. Zamiast tego s uruchamiane cyklicznie (co noc albo
raz na tydzie), zalenie od tego, czy ich autorzy uznaj to za konieczne.
Testy systemowe
Testy systemowe s testami zautomatyzowanymi uruchamianymi na caym, poczonym
systemie. S ostatecznymi testami integracyjnymi. Nie testuj bezporednio regu
biznesowych, ale sprawdzaj, czy cay system zosta prawidowo poczony, a poszczeglne
jego czci dziaaj zgodnie z zaoeniami. Wrd tych testw powinny znale si te testy
przepustowoci i wydajnoci.
Ten rodzaj testw jest pisany przez architektw systemu. Zwykle s tworzone w tym samym
jzyku i rodowisku, w ktrym powstaway testy integracyjne interfejsu uytkownika. Ze
wzgldu na czas trwania wykonywane s raczej rzadko, ale im czciej si to dzieje, tym lepiej.
135
R OZDZIA 8.
S TRATEGIE TESTOWANIA
Testy systemowe pokrywaj moe 10% systemu. Wynika to z faktu, e ich zadaniem nie jest
zapewnienie waciwego zachowania systemu, ale jego waciwej konstrukcji. Podane
zachowania bazowego kodu i komponentw zostay ju dokadnie przetestowane przez testy
z niszych poziomw piramidy.
Wnioski
TDD jest bardzo potnym narzdziem, a testy akceptacyjne s cennym rodkiem wyraania
i wymuszania wymaga wobec systemu. S one jednak tylko czci oglnej strategii
testowania. Chcc jak najbardziej zbliy si do celu, w ktrym kontrola jakoci nie
znajdzie nic, zespoy programistw musz wsppracowa z dziaem kontroli jakoci
i wsplnie przygotowywa hierarchi testw jednostkowych, testw komponentw, testw
integracyjnych, testw systemu i testw badawczych. Testy te powinny by uruchamiane
tak czsto, jak to moliwe, aby zapewni jak najwiksz ilo danych i utrzyma nieprzerwan
czysto systemu.
Bibliografia
[COHN09]: Mike Cohn, Succeeding with Agile. Software Development Using Scrum,
Boston, MA: Addison-Wesley, 2009.
136
Z ARZDZANIE CZASEM
Osiem godzin to zadziwiajco krtki czas. To tylko 480 minut albo 28 800 sekund. Jako
profesjonalista oczekujesz zapewne, e jak najskuteczniej wykorzystasz t niewielk pul
sekund. Jak strategi moesz zastosowa, eby na pewno nie marnowa cennego czasu?
Jak mona skutecznie zarzdza swoim czasem?
W 1986 roku mieszkaem w Little Sandhurst, w hrabstwie Surrey w Anglii. Zarzdzaem
wtedy 15-osobowym dziaem programistw firmy Teradyne w Bracknell. Moje chaotyczne
dni wypeniay rozmowy telefoniczne, improwizowane spotkania i najrniejsze przerwy.
Chcc wykona jakkolwiek prac, przyjem kilka do drastycznych zasad zarzdzania
czasem.
137
R OZDZIA 9.
Z ARZDZANIE CZASEM
docieraem o 6 rano. To dawao mi 2,5 godziny ciszy, zanim zaczyna si codzienny chaos.
Po dotarciu do pracy rysowaem na tablicy plan dnia. Dzieliem czas na 15-minutowe
w kadej godzinie po jednym 15-minutowym bloku. W ten sposb mogem atwo wepchn
nieprzewidziane przerwy w takie otwarte przestrzenie, a potem pracowa dalej.
Czas po obiedzie pozostawiaem niezaplanowany, poniewa wiedziaem, e do tego czasu
Spotkania
Koszt spotkania to mniej wicej 200 dolarw za godzin, za uczestnika. W t cen wliczam
zarwno pensj i dodatki, jak i koszta pomieszczenia itp. Nastpnym razem biorc udzia
w spotkaniu, policz jego koszta. Na pewno bd zadziwiajce.
O spotkaniach mona powiedzie na pewno, e:
1. Spotkania s niezbdne.
2. Spotkania s strasznym marnotrawstwem czasu.
Czasami oba punkty rwnie dobrze opisuj jedno spotkanie. Cz uczestnikw moe uzna
je za wartociowe, podczas gdy pozostali uznaj je za niepotrzebne.
Profesjonalici s wiadomi wysokich kosztw spotka. Wiedz te, e ich wasny czas
jest cenny w kocu musz napisa kod i zdy zrobi to w terminie. Z tego powodu
aktywnie oponuj przed udziaem w spotkaniach, z ktrych nie da si czerpa bezporednich
i znaczcych zyskw.
Odmawianie
Nie musisz bra udziau w kadym spotkaniu, na ktre dostaniesz zaproszenie. Co wicej,
udzia w zbyt wielkiej liczbie spotka mona uzna za dziaanie nieprofesjonalne. Musisz
mdrze korzysta ze swojego czasu, a zatem ostronie wybieraj spotkania i grzecznie
odmawiaj uczestniczenia w tych, ktre uznasz za nieprzydatne.
138
S POTKANIA
Wychodzenie ze spotka
Spotkania nie zawsze id zgodnie z planem. Czasami bierzesz udzia w spotkaniu, ktre
odbyoby si bez Ciebie, gdyby tylko wczeniej dostarczono Ci odpowiednie informacje.
Niekiedy dodawane s nowe tematy albo kto zaczyna zdominowywa rozmow swoim
konikiem. Przez lata wypracowaem sobie prost zasad: gdy spotkanie staje si nudne,
to po prostu wychodz.
Przypominam, e Twoim zadaniem jest odpowiednie zarzdzanie swoim czasem. Jeeli
okazuje si, e bierzesz udzia w spotkaniu, ktre zupenie nie przyczynia si do dobrego
wykorzystania Twojego czasu, znajd sposb, eby grzecznie si z niego wycofa.
Oczywicie nie naley wybiega z pokoju konferencyjnego, krzyczc: Ale nudy!. To byoby
niegrzeczne. Moesz jednak we waciwym momencie zapyta, czy Twoja obecno jest
konieczna. Naley wtedy wyjani, e nie masz a tyle czasu do dyspozycji, i poprosi
o przyspieszenie dyskusji albo zmian planu spotkania.
139
R OZDZIA 9.
Z ARZDZANIE CZASEM
Trzeba sobie uwiadomi, e dalszy udzia w takim spotkaniu bdzie dla Ciebie strat
czasu i nie jeste w stanie wnie nic istotnego do dyskusji. Twoim zadaniem jest mdre
gospodarowanie czasem i pienidzmi pracodawcy, dlatego wybranie waciwego momentu
i wyjcie ze spotkania jest zachowaniem godnym profesjonalisty.
Spotkania na stojco
Takie spotkania nale do kanonu metodologii zwinnych. Nazwa wywodzi si z tego,
e od uczestnikw spotkania oczekuje si stania przez cay jego czas. Po kolei kady
uczestnik odpowiada na trzy pytania:
1. Co dzisiaj zrobiem?
2. Co mam zamiar zrobi jutro?
3. Co mi przeszkadza?
To wszystko. Odpowied na kade z pyta powinna zajmowa nie wicej ni 20 sekund,
dlatego na kadego uczestnika spotkania przypada bdzie najwyej minuta. Nawet
w grupie dziesiciu osb spotkanie powinno si skoczy przed upywem 10 minut.
140
S POTKANIA
Ktnie i nieporozumienia
Kent Beck powiedzia mi kiedy co bardzo wanego: Kada ktnia, ktrej nie da si
zaagodzi w 5 minut, nie zostanie zaagodzona w ramach dalszej ktni. Powodem takiego
przecigania sprawy jest to, e adna ze stron nie moe znale konkretnego dowodu
potwierdzajcego jej tezy. Takie ktnie s najzwyczajniej religijne, w przeciwiestwie
do ktni bazujcych na faktach.
Techniczne rozbienoci potrafi wybuchn a po sam stratosfer. Kada ze stron ma
pewne umocowania swoich pogldw, ale rzadko dysponuje jakimikolwiek danymi. Bez
danych w kadej ktni, w ktrej nie uda si zawrze porozumienia w cigu kilku minut
(pomidzy 5 a 30), nie ma najmniejszych szans na porozumienie. Jedynym rozwizaniem
jest dostarczenie niezbdnych danych.
S ludzie, ktrzy prbuj wygra tak ktni za pomoc siy charakteru. Mog wtedy
krzycze, dziaa natarczywie albo protekcjonalnie. To nie ma adnego znaczenia. Sia woli
nie usuwa niezgody na dugo. Tylko dane mog tego dokona.
Niektrzy mog zachowywa si pasywno-agresywnie. Zgadzaj si na zakoczenie sporu,
a potem sabotuj wyniki, odmawiajc swojego zaangaowania w rozwizanie. Tacy ludzie
141
R OZDZIA 9.
Z ARZDZANIE CZASEM
mwi sobie: Przecie tego chcieli, a zatem dostan dokadnie to, o co prosili. To chyba
najgorszy z moliwych przykad nieprofesjonalnego zachowania. Nigdy nie naley tak
postpowa. Jeeli si na co zgadzasz, to musisz si w to zaangaowa.
Jak zdoby dane niezbdne do zaagodzenia sporu? Czasami mona wykona kilka
eksperymentw albo symulacji. Niekiedy jednak alternatyw bdzie rzucenie monet
i wybranie jednego z dwch moliwych rozwiza.
Jeeli wybrane rozwizanie zadziaa, to znaczy, e byo waciwe. Jeeli wpadniesz w tarapaty,
to zawsze moesz si wycofa i sprbowa drugiego rozwizania. Dobrze jest te ustali czas
i zestaw kryteriw uatwiajcych stwierdzenie, kiedy naley porzuci wybrane rozwizanie.
Wystrzegaj si spotka, ktre s jedynie sposobem na upublicznienie sporu i zebranie
poparcia dla jednej lub drugiej strony. I unikaj tych spotka, na ktrych obecna jest tylko
jedna ze stron sporu.
Jeeli spr musi by zaagodzony, to popro obie strony o zaprezentowanie zespoowi swoich
argumentw w cigu maksymalnie 5 minut. Nastpnie cay zesp powinien zagosowa.
Tego rodzaju spotkanie nie potrwa nawet 15 minut.
Manna skupienia
Wybacz, jeeli ten, podrozdzia bdzie mia posmak metafizyki New Age albo Dungeons
& Dragons. Po prostu w ten sposb wyobraam sobie cae to zagadnienie.
Programowanie jest wiczeniem intelektualnym, ktre wymaga dugich okresw
koncentracji i skupienia. Skupienie jest niestety bardzo rzadkim dobrem, podobnie jak
manna1. Po wyczerpaniu swojej manny skupienia musisz j uzupeni, wykonujc przez
przynajmniej godzin czynnoci niewymagajce koncentracji.
Nie wiem dokadnie, czym jest ta manna skupienia, ale mam wraenie, e jest to wrcz
fizyczna substancja (albo moe jej brak), ktra wpywa na nasz uwag i czujno.
Czymkolwiek jest, na pewno czujesz, gdy jest z Tob, czujesz rwnie, gdy jej brakuje.
Profesjonalni programici nauczyli si tak zarzdza swoim czasem, eby jak najlepiej
wykorzysta swoj mann skupienia. Pisz kod, gdy masz sporo manny skupienia, a mniej
produktywne czynnoci wykonuj wtedy, gdy jej brakuje.
Manna jest zasobem czsto wykorzystywanym w grach fantasy i przygodowych, takich jak
Dungeons & Dragons. Kady gracz ma pewien zasb manny, czyli magicznej substancji, ktra
wyczerpuje si w czasie rzucania czarw. Im potniejsze jest zaklcie, tym wicej manny zuywa.
Niestety, manna odradza si bardzo powoli, w pewnym dziennym rytmie. Oznacza to, e atwo
mona wyczerpa swoje zasoby w zaledwie kilku sesjach rzucania zakl.
142
M ANNA SKUPIENIA
Manna skupienia jest te zasobem, ktrego powoli ubywa. Jeeli nie korzystasz z niej
wtedy, gdy jest dostpna, to najprawdopodobniej j stracisz. To midzy innymi dlatego
spotkania mog mie tak niszczce dziaanie. Jeeli ca swoj mann skupienia roztrwonisz
na spotkaniach, to nie zostanie Ci nic w czasie, gdy zechcesz pisa kod.
Zmartwienia i rozproszona uwaga rwnie zuywaj Twoj mann skupienia. Wczorajsza
ktnia z on lub mem, zadrapanie, ktre udao Ci si zrobi dzi rano na zderzaku, albo
niezapacony rachunek to wszystko bardzo szybko wysysa z Ciebie mann skupienia.
Sen
Nie jestem w stanie wyrazi tego do stanowczo. Najwicej manny skupienia mam po dobrze
przespanej nocy. Siedem godzin snu czsto dostarcza mi manny skupienia na pene osiem
godzin pracy. Profesjonalni programici odpowiednio planuj swj sen tak, eby najwicej
manny skupienia mie w czasie, gdy rano przychodz do pracy.
Kofeina
Bez wtpienia niektrzy z nas umiej lepiej wykorzysta swoje zasoby manny skupienia,
wlewajc w siebie niewielkie iloci kawy. Ale tu trzeba postpowa ostronie. Kofeina
sprawia, e nasze skupienie staje si roztrzsione, a wiksze jej iloci mog skierowa
je na bardzo dziwne tory. Naprawd solidna dawka kofeiny moe sprawi, e stracisz cay
dzie, koncentrujc si na zupenie niepotrzebnych rzeczach.
Konsumpcja i tolerancja kofeiny to sprawa bardzo osobista. Sam lubi wypi kubek mocnej
kawy rano i dietetyczn kol do obiadu. Czasami podwajam sobie dawk, ale bardzo rzadko
przekraczam t granic.
adowanie akumulatorw
Mann skupienia mona czciowo odzyska, robic co niewymagajcego koncentracji.
Dugi spacer, rozmowa z przyjacielem albo spogldanie przez okno mog podnie poziom
Twojej manny skupienia.
Niektrzy prbuj medytowa. Inni pozwalaj sobie na krtk drzemk. Jeszcze inni suchaj
jakiego podcastu albo czytaj gazet.
Wiem te, e po wyczerpaniu manny nie mona zmusza si do dalszego skupienia. Nadal
moesz pisa kod, ale niemal na pewno konieczne bdzie poprawianie go nastpnego dnia.
No chyba e pogodzisz si z istnieniem tego paskudztwa przez kolejne tygodnie i miesice.
Lepiej jednak powici 30 albo i 60 minut na co niewymagajcego koncentracji.
143
R OZDZIA 9.
Z ARZDZANIE CZASEM
Skupienie mini
Co niesamowitego jest w wykonywaniu wicze fizycznych, takich jak sztuki walki, tai-chi
albo joga. Mimo e wiczenia te wymagaj od Ciebie duego skupienia, to jednak jest to inny
rodzaj skupienia ni to niezbdne podczas tworzenia kodu. Nie jest to skupienie intelektu,
ale mini. I w jaki przedziwny sposb skupienie mini pozwala na odzyskanie moliwoci
intelektu. To jednak co wicej ni proste naadowanie akumulatorw. Przekonaem si ju,
e regularne wiczenia fizyczne zwikszaj moje moliwoci skupienia umysowego.
Moj ulubion form skupienia fizycznego jest jazda na rowerze. Jad przez godzin lub
dwie, pokonujc w tym czasie jakie 30 lub 40 kilometrw. Jed zwykle po ciece biegncej
wzdu rzeki Plaines, dlatego nie musz si przejmowa samochodami.
W czasie jazdy sucham podcastw na temat astronomii lub polityki. Czasami wybieram
po prostu swoj ulubion muzyk, a innym razem zdejmuj suchawki i wsuchuj si
w odgosy natury.
S te ludzie, ktrzy lubi prace rczne. Na przykad bawi si stolark, budowaniem
modeli albo pielgnacj ogrodu. Niezalenie od rodzaju takiej aktywnoci jest co w pracach
wykorzystujcych gwnie minie, e powikszaj one moliwoci pracy umysowej.
http://www.pomodorotechnique.com/.
144
U NIKI
Uniki
Czasami najzwyczajniej w wiecie nie masz serca do pracy. By moe wynika to z tego,
e zadanie, ktre na Ciebie czeka, jest tak straszne, nieprzyjemne albo po prostu nudne.
Moe sdzisz, e zadanie to popchnie Ci w kierunku niechcianej konfrontacji albo zapdzi
w kozi rg. A moe po prostu nie masz ochoty na akurat t prac.
Odwrcenie priorytetw
Niezalenie od powodu zawsze znajdziesz jaki sposb na unikanie faktycznej pracy.
Przekonujesz si, e co jest o wiele waniejsze, i tym wanie si zajmujesz. Takie dziaanie
jest nazywane odwrceniem priorytetw. Podnosisz priorytet jednego zadania tylko po to,
eby opni wykonanie zadania o faktycznie wyszym priorytecie. Odwrcenie priorytetw
jest kamstwem, ktrym sami siebie mamimy. Nie moemy znie tego, co trzeba zrobi,
dlatego przekonujemy si, e inne zadanie jest waniejsze. Wiemy, e tak nie jest, ale i tak
wmawiamy sobie co innego.
145
R OZDZIA 9.
Z ARZDZANIE CZASEM
Cho tak naprawd wcale si nie okamujemy. Tak naprawd przygotowujemy sobie tylko
kamstwo na wypadek, gdy kto nas zapyta, co i dlaczego bdziemy dzisiaj robi. Tworzymy
sobie w ten sposb ochron przed ocen innych.
Jak mona si domyla, nie jest to zachowanie profesjonalne. Profesjonalici oceniaj
priorytet poszczeglnych zada, nie uwzgldniajc przy tym osobistych lkw i pragnie,
a nastpnie wykonuj te zadania w odpowiedniej kolejnoci.
lepe uliczki
lepe uliczki s czci ycia kadego twrcy oprogramowania. Czasami podejmuje si
decyzj, ktra kieruje nas na technologiczn ciek prowadzc donikd. Im bardziej
jestemy zwizani ze swoj decyzj, tym gbiej wchodzimy w t dzicz. Jeeli na szali way
si Twoja reputacja profesjonalisty, to z raz obranej cieki nie zejdziesz ju nigdy.
Roztropno i dowiadczenie pozwol Ci unika niektrych lepych uliczek, ale nigdy nie
uda Ci si przed nimi uciec. Dlatego wanie potrzebna jest Ci umiejtno szybkiego
rozpoznawania takich sytuacji i odwaga, eby si z nich wycofa. Czasami jest to nazywane
regu dziury: gdy si w jakiej znajdziesz, przesta kopa.
Profesjonalici staraj si nie przywizywa do idei tak mocno, e pniej nie s w stanie
jej porzuci i pody inn ciek. Staraj si mie umys otwarty na inne pomysy,
by po zabrniciu w lep uliczk mie jakie inne rozwizania.
146
W NIOSKI
problemu rosn, starasz si rozbudowywa istniejcy kod i nadal jak najlepiej utrzymywa
jego czysto. W pewnym momencie uwiadamiasz sobie, e podjta ju na samym
pocztku decyzja bya bdna i dlatego kod nie skaluje si dobrze wraz z napywaniem
kolejnych wymaga.
To jest wanie krytyczny moment! Moesz zawrci i poprawi projekt, ale moesz te
brn dalej. Zawrcenie w tym momencie wydaje si kosztowne, poniewa zmusza Ci
do przebudowy istniejcego kodu, ale ju nigdy pniej zawrcenie nie bdzie tak atwe
jak teraz. Jeeli zdecydujesz si brn dalej, to zmienisz system w bagno, z ktrego moesz
si ju nigdy nie wydosta.
Profesjonalici obawiaj si baaganu duo bardziej ni lepych uliczek. Zawsze szukaj
miejsc, w ktrych baagan zaczyna narasta, i nie szczdz rodkw na jak najwczeniejsz
ucieczk od niego.
Dalsze posuwanie si w takim bagnie, jeeli wiesz, e to jest bagno, to najgorszy z moliwych
przykad odwrcenia priorytetw. Prc naprzd, oszukujesz siebie, swj zesp, swoj
firm i swoich klientw. Mwisz im, e wszystko bdzie w porzdku, podczas gdy wsplnie
zmierzacie ku zagadzie.
Wnioski
Profesjonalni programici staraj si jak najlepiej zarzdza swoim czasem i moliwociami
koncentracji. Znaj pokusy wynikajce z odwrcenia priorytetw, a ich zwalczanie staje si
dla nich spraw honoru. Nie zamykaj si na inne rozwizania, ale staraj si mie otwarty
umys. Nie przywizuj si za bardzo do jednego rozwizania, tak eby nie mie oporw przed
jego porzuceniem. Cay czas wypatruj te rosncego baaganu i staraj si jak najszybciej
posprzta wypatrzone miejsca. Nie ma smutniejszego widoku ni zesp programistw
bezproduktywnie walczcych z coraz gbszym bagnem.
147
R OZDZIA 9.
Z ARZDZANIE CZASEM
148
10
S ZACOWANIE
149
Ebookpoint.pl kopia dla: Jaroslaw Babijczuk siarsko@gmail.com
R OZDZIA 10.
S ZACOWANIE
Zobowizanie
Zobowizanie jest czym, czego musisz dotrzyma. Jeeli zobowizujesz si wykona
co do wyznaczonego dnia, to po prostu musisz to zrobi do tego czasu. Jeeli oznacza to,
e musisz pracowa 12 godzin dziennie, w weekendy i zrezygnowa z rodzinnego urlopu,
to tak musi by. Podejmujc zobowizanie, musisz go dotrzyma.
Profesjonalici nie podejmuj zobowiza, chyba e dokadnie wiedz, e mog ich
dotrzyma. To naprawd jest takie proste. Jeeli prosz Ci o zobowizanie si do czego,
a Ty nie masz pewnoci, czy bdziesz w stanie to zrobi, to najlepiej bdzie odmwi.
151
Ebookpoint.pl kopia dla: Jaroslaw Babijczuk siarsko@gmail.com
R OZDZIA 10.
S ZACOWANIE
Szacunek
Szacunek jest tak naprawd tylko przypuszczeniem. Nie ma nic wsplnego ze zobowizaniem.
Nie wie si z obietnicami. Nietrafienie z szacunkiem nie jest adn ujm na honorze.
Powodem, dla ktrego tworzymy szacunki, jest to, e nie wiemy, jak dugo trwa bdzie
dane zadanie.
Niestety, wikszo programistw zupenie nie umie szacowa. Nie chodzi o przyswojenie
sobie jakiej tajnej umiejtnoci szacowania nic takiego nie istnieje. Powodem naszych
bdnych szacunkw jest to, e nie znamy natury szacowania.
Szacunek nie jest liczb, ale rozkadem. Pomyl prosz:
Mike: Kiedy wedug twoich szacunkw zakoczysz to zadanie?.
Peter: Za trzy dni.
Czy Peter naprawd zrobi wszystko w cigu trzech dni? Moliwe, ale jak bardzo
prawdopodobne? Odpowied brzmi: nie mamy zielonego pojcia. Co Peter mia na myli,
a czego dowiedzia si Mike? Czy Mike bdzie zaskoczony za trzy dni, jeeli Peter nie
bdzie jeszcze gotowy? Niby dlaczego miaby by? Przecie Peter do niczego si nie
zobowizywa. Nie powiedzia mu jednak te, jak bardzo prawdopodobne jest zakoczenie
prac w trzy dni w porwnaniu z czterema albo picioma dniami.
Co si stanie, gdy Mike zapyta Petera o prawdopodobiestwo sprawdzenia si jego
trzydniowego szacunku?
Mike: Jakie s szanse na to, e skoczysz w cigu trzech dni?.
Peter: Cakiem spore.
Mike: Moesz jako je okreli?.
Peter: Pidziesit, szedziesit procent.
Mike: Czyli istnieje niemaa szansa, e zajmie to nawet cztery dni.
Peter: No tak, to moe potrwa nawet pi do szeciu dni, cho w to akurat wtpi.
Mike: Jak bardzo wtpisz?.
152
Ebookpoint.pl kopia dla: Jaroslaw Babijczuk siarsko@gmail.com
Peter: No nie wiem. Jestem na 95% pewien, e zrobi wszystko przed upywem
szeciu dni.
Mike: Czyli moe si to przecign do siedmiu dni?.
Peter: Tylko jeeli wszystko naraz pjdzie le. Rany, jeeli wszystko pjdzie le,
to moe mi zaj nawet dziesi lub jedenacie dni. Ale taki natok nieszcz
nie jest za bardzo moliwy.
Teraz zaczynamy zblia si do prawdy. Szacunek Petera jest rozkadem prawdopodobiestwa.
Peter widzi prawdopodobiestwo ukoczenia zadania w sposb przedstawiony na rysunku 10.1.
Teraz ju wiemy, dlaczego Peter poda swj pierwotny trzydniowy szacunek. Na wykresie
trzeci dzie ma najwyszy supek. A zatem dla Petera jest to najbardziej prawdopodobny
czas trwania zadania. Mike widzi to jednak nieco inaczej. Patrzy na praw stron wykresu
i martwi si tym, e Peterowi prace mog zaj nawet jedenacie dni.
Czy Mike powinien si tym martwi? Oczywicie! Murphy1 zawsze znajdzie jaki sposb
na Petera, a zatem co na pewno pjdzie nie tak.
Ukryte zobowizania
Teraz Mike ma problem. Nie ma pewnoci, ile czasu zajmie Peterowi wykonanie zadania.
eby zmniejszy t niepewno, moe poprosi Petera o jakie zobowizanie. Ale jest to co,
czego Peter nie moe mu da.
1
153
Ebookpoint.pl kopia dla: Jaroslaw Babijczuk siarsko@gmail.com
R OZDZIA 10.
S ZACOWANIE
PERT
W 1957 roku zostaa utworzona technika PERT (Program Evaluation and Review
Technique technika oceny i rozwoju programw) majca wspomaga projekt polarnej
odzi podwodnej dla U.S. Navy. Jednym z elementw tej techniki jest sposb obliczania
szacunkw. Przygotowano wtedy bardzo prost, a jednoczenie skuteczn metod
przeksztacania szacunkw w rozkady prawdopodobiestwa prezentowane menederom.
Szacujc pracochonno zadania, podajesz trzy wartoci. Nazywane jest to analiz trzech
zmiennych:
O: Szacunek optymistyczny ta warto powinna by bardzo optymistyczna.
Zakoczenie zadania w tym czasie powinno by moliwe jedynie wwczas, gdy absolutnie
154
Ebookpoint.pl kopia dla: Jaroslaw Babijczuk siarsko@gmail.com
PERT
wszystko udaoby si bez problemw. Caa procedura bdzie miaa sens tylko wtedy,
gdy prawdopodobiestwo prawidowoci tego szacunku bdzie wynosio okoo 1%2.
W przypadku Petera, zgodnie z rysunkiem 10.1, powinien to by jeden dzie.
N: Szacunek normalny to szacunek z najwikszym prawdopodobiestwem. Jeeli
O 4N P
6
Warto jest tutaj oczekiwanym czasem trwania zadania. W przypadku Petera bdzie
to (1 + 12 + 12)/6, czyli jakie 4,2 dnia. W przypadku wikszoci zada bdzie to warto
nieco pesymistyczna, poniewa prawa strona rozkadu prawdopodobiestwa zawsze jest
bardziej rozcignita od lewej3.
P O
6
Dokadna warto w przypadku rozkadu normalnego to 1:769 albo 0,13% albo 3 sigma.
Prawdopodobiestwo jeden do tysica jest ju cakiem bezpieczne.
PERT zakada, e przypomina to rozkad beta. To cakiem dobre zaoenie, poniewa minimalny
czas trwania zadania czsto jest bardziej pewny ni czas maksymalny. [McConnell2006], rysunek 1.3.
Jeeli nie wiesz, czym jest odchylenie standardowe, to znajd dobry podrcznik do rachunku
prawdopodobiestwa i statystyki. To pojcie jest cakiem atwe do ogarnicia, a bywa niezwykle
przydatne.
155
Ebookpoint.pl kopia dla: Jaroslaw Babijczuk siarsko@gmail.com
R OZDZIA 10.
S ZACOWANIE
Optymistyczne
Normalne
Pesymistyczne
Alfa
12
4,2
1,8
Beta
1,5
14
3,5
2,2
Gamma
6,25
11
6,5
1,3
Nie sdzisz, e zadanie beta jest troch dziwne? Wyglda na to, e Peter ma spor
pewno co do czasu ukoczenia, ale moe zdarzy si co, co bardzo utrudni mu prac.
Jak Mike powinien to zinterpretowa? Jaki czas ma on zaplanowa na ukoczenie
wszystkich trzech zada przez Petera?
Okazuje si, e za pomoc kilku prostych oblicze Mike moe poczy wszystkie zadania
Petera i wyznaczy rozkad prawdopodobiestwa caego zestawu zada. Obliczenia te s
naprawd nieskomplikowane:
sekwencji zadania
W przypadku dowolnej sekwencji zada oczekiwany czas jej trwania jest prost sum
oczekiwanych czasw trwania wszystkich zada z tej sekwencji. A zatem skoro Peter
mia do wykonania trzy zadania o szacunkach 4,2/1,8; 3,5/2,2 i 6,5/1,3, to prawdopodobnie
uda mu si zakoczy je wszystkie w 14 dni: 4,2 + 3,5 + 6,5.
sekwencji
2
zadania
156
Ebookpoint.pl kopia dla: Jaroslaw Babijczuk siarsko@gmail.com
S ZACOWANIE ZADA
Jeeli masz troch wicej ni kilka lat dowiadcze w programowaniu, to z pewnoci zdarzyo
Ci si widzie projekty, ktre pocztkowo szacowano bardzo optymistycznie, a potem
zajmoway trzy do piciu razy wicej czasu. Przedstawiona tu prosta technika PERT jest
jedn z metod pozwalajcych na unikanie zbyt optymistycznych oczekiwa. Profesjonalni
programici staraj si definiowa bardzo rozsdne oczekiwania mimo naciskw, eby
sprbowa dziaa szybko.
Szacowanie zada
Mike i Peter popenili straszliwy bd. Mike pyta Petera, jak dugo potrwaj jego zadania.
Peter poda mu szczere szacunki, ale zapomnieli o opiniach pozostaych czonkw zespou.
By moe bd mieli inne pomysy.
Najwaniejszym z dostpnych Ci narzdzi do szacowania zada s otaczajcy Ci ludzie.
Oni mog zobaczy co, co Ty przeoczysz. To oni mog pomc Ci przygotowa dokadniejsze
szacunki.
Wideband Delphi
W latach 70. XX wieku Barry Boehm zaprezentowa technik szacowania, ktr nazwa
wideband delphi5. Pniej przez lata powstao wiele jej odmian. Niektre s bardziej
formalne, a inne zupenie nieformalne, ale wszystkie maj pewn cech wspln: konsensus.
Sama strategia jest prosta. Zesp si zbiera, omawia zadanie, szacuje je i powtarza
ca dyskusj i szacowanie tak dugo, a zostanie osignite porozumienie.
Pierwotna metoda opisana przez Boehma wymagaa przynajmniej kilku spotka
i dokumentw, co jak na mj gust wizao si ze zbyt wielkim ceremoniaem
i przygotowaniami. Wol jednak stosowa rozwizania z niewielk nadmiarowoci
nakadu pracy, takie jak ponisze.
Latajce palce
Wszyscy siedz wok stou i omawiaj po kolei wszystkie zadania. Rozmawiaj o tym,
co jest zwizane z kadym zadaniem, co moe je skomplikowa i jak mona je
zaimplementowa. Uczestnicy spotkania umieszczaj swoje rce pod stoem i podnosz
od zera do piciu palcw w zalenoci od wasnej oceny czasochonnoci zadania.
Prowadzcy spotkanie liczy 1, 2, 3 i wszyscy naraz pokazuj swoje rce.
[Boehm81].
157
Ebookpoint.pl kopia dla: Jaroslaw Babijczuk siarsko@gmail.com
R OZDZIA 10.
S ZACOWANIE
Planujcy poker
W 2002 roku James Grenning napisa wspaniay artyku6 opisujcy planujcego pokera
(ang. planning poker). Ten wariant techniki wideband delphi sta si tak popularny,
e kilka rnych firm wykorzystao go do przygotowania materiaw marketingowych
w postaci talii kart do planujcego pokera7. Istnieje nawet strona internetowa o nazwie
planningpoker.com, za pomoc ktrej mona przeprowadzi sesj planowania
z rozproszonym zespoem.
Idea jest bardzo prosta. Kady czonek zespou dostaje zestaw kart z rnymi numerami.
Liczby od 0 do 5 sprawdzaj si cakiem dobrze, a jednoczenie cay system jest wtedy
rwnoznaczny z latajcymi palcami.
Wybierane jest zadanie i zaczyna si dyskusja. W pewnym momencie prowadzcy prosi
wszystkich o wybranie karty. Czonkowie zespou wybieraj kart odpowiadajc ich ocenie
i trzymaj j tak, eby nikt nie widzia wybranej liczby. Nastpnie prowadzcy nakazuje
wszystkim pokaza swoje karty.
Reszta dziaa dokadnie tak samo jak latajce palce. Jeeli wszyscy si zgadzaj, to szacunek
jest przyjmowany, w przeciwnym wypadku karty wracaj do zestaww, a gracze do dyskusji.
Wybieranie waciwych kart do zestawu stao si ju cakiem osobn dziedzin nauki.
Niektrzy poszli ju tak daleko, e uywaj kart odpowiadajcych cigowi Fibonacciego.
Inni dodali jeszcze karty ze znakami nieskoczonoci i zapytania. Osobicie uwaam,
e karty o oznaczeniach 0, 1, 3, 5, 10 powinny wystarczy.
6
[Grenning2002].
http://store.mountaingoatsoftware.com/products/planning-poker-cards.
158
Ebookpoint.pl kopia dla: Jaroslaw Babijczuk siarsko@gmail.com
Szacowanie pokrewiestwa
Szczeglnie ciekaw wariacj techniki wideband delphi zaprezentowa mi kilka lat temu
Lowell Lindstrom. Rozwizanie to dobrze sprawdzio si kilka razy z rnymi klientami
i zespoami.
Wszystkie zadania s zapisane na kartach bez adnych szacunkw dotyczcych
pracochonnoci. Zesp szacujcy stoi wok stou albo przy cianie, na ktrej karty
s poprzyczepiane losowo. Czonkowie zespou nie rozmawiaj ze sob, ale po prostu
sortuj karty wzgldem siebie. Dusze zadania wdruj na prawo, a krtsze na lewo.
Kady czonek zespou moe w dowolnym momencie przesun dowoln kart,
nawet jeeli zostaa ona ju przesunita przez kogo innego. Kada karta przesunita
wicej ni razy jest odkadana na bok do omwienia.
Ostatecznie ciche sortowanie kart si koczy i mona rozpocz dyskusj. Omawiane
s rnice zda co do kolejnoci uoenia kart. Szybkie sesje projektowania albo rcznie
rysowane diagramy mog uatwi uzyskanie konsensusu.
Nastpnym krokiem jest rysowanie linii pomidzy kartami, ktre reprezentuj grupy
rozmiarw liczone w dniach, tygodniach albo punktach. Tradycyjnie stosuje si pi grup
zgodnych z cigiem Fibonacciego (1, 2, 3, 5, 8).
Szacunki trjwartociowe
Przedstawione tu techniki sprawdzaj si przy wybieraniu normalnych szacunkw
poszczeglnych zada. Jak jednak wspominaem wczeniej, najczciej chcemy uzyska
trzy wartoci szacunkw pozwalajce na okrelenie rozkadu prawdopodobiestwa.
Optymistyczny i pesymistyczny szacunek kadego zadania mona szybko okreli za
pomoc kadego z przedstawionych wariantw techniki wideband delphi. Na przykad
stosujc technik planujcego pokera, wystarczy poprosi o podniesienie kart z szacunkiem
pesymistycznym, a potem optymistycznym.
http://pl.wikipedia.org/wiki/Prawo_wielkich_liczb.
159
Ebookpoint.pl kopia dla: Jaroslaw Babijczuk siarsko@gmail.com
R OZDZIA 10.
S ZACOWANIE
Wnioski
Profesjonalni programici wiedz, jak przedstawi swoim przeoonym szacunki, ktre
ci mog wykorzysta do planowania. Nie skadaj obietnic, ktrych nie mog dotrzyma,
i nie bior na siebie zobowiza, jeeli nie maj pewnoci, czy bd w stanie ich dotrzyma.
Gdy profesjonalista bierze na siebie zobowizanie, to podaje mocne dane i si z niego
wywizuje. W wikszoci przypadkw profesjonalici nie bior takich zobowiza, ale
podaj probabilistyczne szacunki opisujce oczekiwany czas ukoczenia zadania i moliw
wariancj.
Profesjonalni programici wsppracuj z innymi czonkami swojego zespou i wsplnie
staraj si okreli szacunki zada, ktre pniej przedstawi menederom.
Techniki opisane w tym rozdziale s przykadami rnych metod wykorzystywanych przez
programistw do tworzenia szacunkw. Nie s to jedyne takie techniki i niekoniecznie s
najlepsze z moliwych. S to techniki, ktre sprawdziy si w mojej pracy.
Bibliografia
[McConnell2006]: Steve McConnell, Software Estimation: Demystifying the Black Art,
Redmond, WA: Microsoft Press, 2006.
[Boehm81]: Barry W. Boehm, Software Engineering Economics, Upper Saddle River, NJ:
Prentice Hall, 1981.
[Grenning2002]: James Grenning, Planning Poker or How to Avoid Analysis Paralysis
while Release Planning, kwiecie 2002, http://renaissancesoftware.net/papers/14-papers/
44-planing-poker.html.
160
Ebookpoint.pl kopia dla: Jaroslaw Babijczuk siarsko@gmail.com
11
P RESJA
161
R OZDZIA 11.
P RESJA
Czy moe raczej wolisz, eby poci si i przeklina? Chcesz, eby rozbija i rozrzuca swoje
narzdzia? Chcesz, eby obwinia zarzd o nierealistyczne oczekiwania i cigle narzeka na
brak czasu? Chcesz, eby zachowywa si jak profesjonalista, czy jak typowy programista?
Profesjonalny programista pod presj jest spokojny i zdecydowany. Gdy presja wzrasta,
odwouje si do swojego wyszkolenia i swojej dyscypliny, wiedzc, e to najlepsza metoda
na dotrzymanie terminw i zobowiza.
W 1988 roku pracowaem w firmie Clear Communications. By to typowy start-up, ktry
nigdy tak naprawd nie wystartowa. Przebrnlimy przez pierwsze kopoty finansowe,
a zaraz potem pojawiy si kolejne, i jeszcze jedne.
Pocztkowa wizja produktu wygldaa bardzo obiecujco, ale nigdy nie udao si nam
odpowiednio zdefiniowa jego architektury. Najpierw produkt mia skada si zarwno
z oprogramowania, jak i ze sprztu. Potem przeksztaci si w samo oprogramowanie.
Platforma dla tego oprogramowania zmienia si z komputerw PC na Sparc. Potencjalni
klienci zmienili si z bogatych firm w odbiorc masowego. Ostatecznie nawet cel naszego
produktu zmieni si, poniewa firma szukaa czegokolwiek, co wygenerowaoby zyski.
W cigu niemal czterech lat, ktre spdziem w tej firmie, nie zobaczya ona chyba nawet
grosza przychodu.
Nie musz zatem nadmienia, e pracujcy w niej programici znajdowali si pod cig
presj. Przed terminalem w biurze spdzilimy wiele bardzo dugich nocy, a nawet jeszcze
duszych weekendw. Pisalimy w jzyku C funkcje o dugoci 3000 wierszy. Pojawiay si
awantury z wykrzykiwanymi obelgami. Czsto knuto intrygi i planowano podstpy. Pici
przebijay ciany, dugopisy rzucone w gniewie odbijay si od tablic, na cianach pojawiay
si wydrapane karykatury nielubianych kolegw. Ten strumie stresu i gniew nigdy si nie
koczyy.
Terminy byy wyznaczane przez okrelone wydarzenia. Poszczeglne funkcje miay by
gotowe na targi albo prezentacje dla klientw. Na nastpn prezentacj musielimy mie
gotowe wszystko, o co poprosi klient, niewane, jak gupie to byy dania. Zawsze
brakowao nam czasu i zawsze mielimy jakie zalegoci. Tworzone plany przyprawiay
o zawrt gowy.
Jeeli pracowae 80 godzin w tygodniu, moge zasuy na miano bohatera. Takim samym
bohaterem mona byo zosta po przygotowaniu jakiego paskudnego kodu na prezentacj
dla klienta. Jeeli kto si dostatecznie stara, mg dosta awans. Jeeli kto si nie stara,
wylatywa na bruk. To by prawdziwy start-up i chodzio tylko o wypracowane wartoci.
I w 1988 roku, mimo 20 lat dowiadczenia, wsiadem do tego wzka.
Byem jednym z menederw informujcych pracujcych dla mnie programistw, e musz
pracowa szybciej i wicej. Byem jednym z tych pracujcych po 80 godzin wyrobnikw,
tworzcych liczce 3000 wierszy funkcje w C o 2 nad ranem, podczas gdy moje dzieci spay
162
U NIKANIE PRESJI
w domu bez opieki ojca. Byem jednym z krzyczcych i rzucajcych dugopisami wciekych
ludzi. Wyrzucaem ludzi z pracy, jeeli nie chcieli si dopasowa. To by koszmar. Ja sam
byem koszmarem.
Potem nadszed dzie, w ktrym moja ona zmusia mnie do spojrzenia w lustro. Nie
spodobao mi si to, co w nim zobaczyem. Powiedziaa mi, e przebywanie ze mn nie jest
przyjemne, i musiaem si z ni zgodzi. Ale wcale mi si to nie podobao, dlatego wcieky
wybiegem z domu, zaczem chodzi po okolicy bez adnego celu. aziem tak jakie p
godziny, gotujc si ze zoci. I wtedy zaczo pada.
I co w mojej gowie si przeczyo. Zaczem si mia. miaem si ze swojej wasnej
gupoty. miaem si ze swojego stresu, z czowieka, ktrego zobaczyem w lustrze, a ktry
uprzykrza ycie sobie i swoim bliskim w imi czego?
Tego dnia wszystko si zmienio. Przestaem robi tak szalone nadgodziny i zakoczyem
ycie w wielkim stresie. Przestaem rzuca dugopisami i pisa gigantyczne funkcje w C.
Stwierdziem, e bd cieszy si swoj karier, wykonujc swoj prac dobrze, a nie gupio.
Odszedem z tej pracy tak profesjonalnie, jak tylko mogem, i zostaem konsultantem.
Od tego dnia nigdy nikogo nie nazwaem ju szefem.
Unikanie presji
Najlepszym sposobem na uzyskanie spokoju mimo presji jest unikanie sytuacji powodujcych
presj. Takie uniki zapewne nie zlikwiduj presji cakowicie, ale pozwol na zminimalizowanie
i skrcenie tych nieprzyjemnych okresw.
Zobowizania
Jak ju mwiem w rozdziale 10., wane jest, eby nie zobowizywa si do dotrzymywania
terminw, ktrych nie jestemy cakowicie pewni. Menederowie zawsze nastaj na tego
typu zobowizania, poniewa eliminuj one ryzyko. Naszym zadaniem jest kwantyfikacja
tego ryzyka i przedstawienie go menederom, tak eby mogli nim odpowiednio zarzdza.
Przyjmowanie nierealistycznych zobowiza niweczy ten cel, a zatem nie suy ani nam,
ani naszym przeoonym.
Czasami zobowizania s przenoszone na nas. Okazuje si, e menederowie potrafi zoy
klientowi obietnice, nawet si z nami nie konsultujc. W takiej sytuacji honor nakazuje nam
pomc menederom wywiza si ze zobowizania. Trzeba jednak pamita, e honor wcale
nie nakazuje nam go zaakceptowa.
To bardzo wana rnica. Profesjonalici zawsze wspomagaj menederw w poszukiwaniu
sposobu osignicia celu. Ale jednoczenie niekoniecznie przyjmuj na siebie zobowizania
163
R OZDZIA 11.
P RESJA
zoone w ich imieniu. Moe si przecie okaza, e nie ma adnego sposobu na dotrzymanie
zoonej obietnicy, a wtedy osoba skadajca tak obietnic musi przyj na siebie
odpowiedzialno za ni.
atwo powiedzie. Jeli firma si chwieje, a Twoje wypaty s opniane z powodu
niedotrzymanych zobowiza, trudno nie ulega presji. Jeeli jednak zachowujesz si
profesjonalnie, to przynajmniej moesz zacz szuka nowej pracy z podniesion gow.
Utrzymanie czystoci
Sposobem na szybki rozwj projektu i dotrzymywanie wszystkich terminw jest odpowiednie
utrzymanie czystoci. Profesjonalici nie poddaj si pokusie tworzenia baaganiarskiego
kodu tylko po to, eby robi to szybciej. Profesjonalici wiedz doskonale, e wyraenie
szybko i paskudnie to oksymoron. Paskudny kod zawsze oznacza spowolnienie!
Moemy unika presji, utrzymujc nasz system, kod i projekt w jak najlepszym stanie.
Nie oznacza to, e mamy spdza godziny na polerowaniu kodu. To znaczy tylko tyle,
e nie powinnimy tolerowa baaganu. Wiemy, e baagan nas spowalnia, przez co nie
dotrzymujemy terminw i amiemy dane sowo. A zatem staramy si, eby wyniki naszej
pracy byy tak schludne, jak tylko si da.
Dyscyplina kryzysowa
Obserwujc swoje zachowania w czasie kryzysu, moesz stwierdzi, w co naprawd wierzysz.
Jeeli podczas kryzysu przestrzegasz swojej dyscypliny, to znaczy, e naprawd wierzysz
w jej skuteczno. Jeeli jednak w czasie kryzysu zmieniasz sposb postpowania, to znaczy,
e tak naprawd nie uznajesz swoich normalnych zachowa za skuteczne.
Jeeli podczas normalnej pracy stosujesz metodologi TDD, ale porzucasz j w czasie kryzysu,
to nie uznajesz jej za naprawd uyteczn. Jeeli w spokojnych czasach utrzymujesz w swoim
kodzie porzdek, ale gdy tylko pojawia si kryzys, dopuszczasz powstanie baaganu, to znaczy,
e nie wierzysz w to, e baagan moe Ci spowolni. Jeeli w kryzysie programujesz w parach,
ale normalnie tego nie robisz, to uznajesz, e programowanie w parach jest skuteczniejsze
od programowania solo.
Wybierz rozwizania, ktre uznasz za skuteczne w czasie kryzysu, a potem stosuj je przez
cay czas. Wykorzystywanie tych rozwiza w normalnej pracy jest najlepszym sposobem
na unikanie kryzysu.
Nie zmieniaj te swojego zachowania w czasie, gdy pojawia si presja. Jeeli Twoje
rozwizania s najlepszym sposobem pracy, to naley ich przestrzega rwnie podczas
najgbszego kryzysu.
164
Nie panikuj
Opanuj stres. Bezsenne noce nie pomog Ci w szybszej pracy. Podobnie nie pomoe Ci
siedzenie i zamartwianie si. A najgorsze, co moesz zrobi, to zacz si spieszy! Za wszelk
cen opieraj si tej pokusie. Popiech wpdzi Ci tylko gbiej w bagno.
Zdecydowanie lepiej bdzie zwolni. Jeszcze raz przemyle problem. Zaplanowa kurs na
najlepsze z moliwych rozwiza, a nastpnie poda w tym kierunku w staym i rozsdnym
tempie.
Informuj
Poinformuj swj zesp i przeoonego o kopotach. Przedstaw im swj plan wybrnicia
z nich i popro o uwagi i wskazwki. Unikaj niespodzianek. Poza niespodziankami chyba
nic nie wprawia ludzi w wikszy gniew i nie prowokuje do mniej racjonalnych zachowa.
Niespodzianki dziesiciokrotnie zwikszaj presj.
165
R OZDZIA 11.
P RESJA
Sprowad pomoc
Programuj w parach! Gdy grunt zaczyna si pali, znajd kogo, kto zechce programowa
z Tob w parze. Zadanie ukoczysz szybciej, z mniejsz liczb bdw. Twj partner uatwi
Ci trzymanie si staych metod pracy i powstrzyma Twoj panik. Twj partner zauway
szczegy, ktre umkn Tobie, bdzie mia ciekawe pomysy, a kiedy si zdekoncentrujesz,
bdzie mg przej paeczk.
Natomiast gdy kto inny ma kopoty, zaproponuj mu programowanie w parach. Pom
mu wydosta si z doka.
Wnioski
Podstawow sztuk radzenia sobie z presj jest unikanie jej, gdy tylko to moliwe. Gdy
jednak nas dopadnie, trzeba jako j przetrwa. Presji mona unika przez odpowiednie
dobieranie zobowiza, przestrzeganie uznanych metod pracy i utrzymywanie czystego
kodu. Presj mona przetrwa, zachowujc spokj, informujc o istniejcej sytuacji,
przestrzegajc metod pracy i proszc o pomoc.
166
12
W SPPRACA
167
R OZDZIA 12.
W SPPRACA
168
Ostatecznie udao nam si osign czas poniej 15 minut, co byo czasem zblionym do
tego, ile zajmowao proste przeczytanie tamy z kodem. Bylimy zatem cakiem zadowoleni.
169
R OZDZIA 12.
W SPPRACA
Oznacza to, e profesjonalny programista powica czas na poznanie swojej firmy i brany,
w ktrej ona dziaa. Rozmawia z klientami o uywanym przez nich oprogramowaniu.
Rozmawia z ludmi z dziau sprzeday i marketingu o trapicych ich problemach. Rozmawia
z ich menederami, chcc pozna krtko- i dugoterminowe cele zespou.
Mwic krtko, profesjonalni programici interesuj si statkiem, ktrym przyszo im pyn.
Jedyny raz, kiedy wyrzucono mnie z pracy zwizanej z programowaniem, mia miejsce
w 1976 roku. W tym czasie pracowaem w firmie Outboard Marine Corp. Pomagaem
w niej pisa system automatyzacji fabryki wykorzystujcy komputery IBM System/7
do monitorowania dziesitek maszyn do odlewu aluminium, ktre pracoway na hali.
Pod wzgldem technicznym bya to bardzo wymagajca, ale te wdziczna praca.
Architektura komputerw System/7 bya fascynujca, a i sam system automatyzacji
fabryki by bardzo ciekawy.
Mielimy te bardzo dobry zesp. Jego kierownik John by zarwno kompetentny, jak
i zmotywowany, natomiast moi dwaj koledzy programici mili i pomocni. Pracowalimy
w laboratorium specjalnie przygotowanym na potrzeby tego projektu. Nasz biznesowy
partner bardzo zaangaowa si z nami w prace laboratoryjne. Nasz meneder Ralph by
kompetentny, skoncentrowany i rzeczywicie mia wadz.
Wszystko powinno byo dziaa doskonale. To ja byem problemem. Bardzo entuzjastycznie
podchodziem do caego projektu i do uywanej w nim technologii. Niestety, w podeszym
wieku 24 lat nie byem w stanie zmusi si do zainteresowania sam firm i jej wewntrzn
polityczn struktur.
Pierwszy bd popeniem ju pierwszego dnia. Pojawiem si w pracy bez krawata. Miaem
krawat w czasie rozmowy kwalifikacyjnej i widziaem wtedy, e wszyscy nosili krawaty,
ale jako nie wycignem odpowiednich wnioskw. Pierwszego dnia Ralph podszed do
mnie i po prostu powiedzia: W tej firmie nosimy krawaty.
Nie mog nawet wyrazi, jak bardzo tego nie znosiem. Mczyo mnie to straszliwie.
Codziennie nosiem krawat i nienawidziem tego. Ale dlaczego? Przecie wiedziaem,
w co si pakuj. Znaem konwencje panujce w tej firmie. Dlaczego miabym si denerwowa?
Tylko dlatego, e byem samolubnym, narcystycznym maym palantem.
Po prostu nie mogem dotrze do pracy na czas i sdziem, e nie ma to znaczenia. W kocu
robiem dobr robot. To prawda, naprawd doskonale wywizywaem si z zadania
polegajcego na pisaniu programw. Mog powiedzie, e byem najlepszym programist
w zespole. Umiaem pisa kod szybciej i lepiej ni pozostali koledzy. Byem w stanie szybciej
rozwizywa rne problemy. Wiedziaem, e jestem dla firmy wartociowy, i dlatego nie
liczyy si dla mnie terminy i czas.
170
Decyzja o zwolnieniu mnie zapada pewnego dnia, gdy nie zjawiem si na czas podczas
prezentacji kolejnego kamienia milowego. Najwyraniej John powiedzia nam wszystkim,
e w przyszy poniedziaek chce zobaczy prezentacj dziaajcych funkcji systemu. Jestem
pewien, e o tym wiedziaem, ale takie terminy nie byy dla mnie szczeglnie istotne.
System nadal by aktywnie rozwijany i nie zosta wprowadzony do produkcji. Nie byo
powodu, eby dziaa, skoro nikogo nie byo w laboratorium. Byem chyba ostatni osob
wychodzc w pitek do domu i najwyraniej pozostawiem system w stanie nienadajcym
si do uycia. Fakt, e w poniedziaek bdzie tak wany, po prostu wylecia mi z gowy.
W poniedziaek spniem si godzin i zobaczyem, jak wszyscy stoj zebrani nad
niedziaajcym systemem. John zapyta mnie: Bob, dlaczego system dzisiaj nie dziaa?.
Odpowiedziaem: Nie mam pojcia. Usiadem i zaczem szuka przyczyny. Nadal nic
mi nie witao na temat poniedziakowej prezentacji, ale z mowy ciaa wszystkich zebranych
wnioskowaem, e co jest mocno nie w porzdku. Wtedy John podszed do mnie i szepn
mi do ucha: A co by byo, gdyby Stenberg postanowi nas odwiedzi?. A potem odszed
zniesmaczony.
Stenberg by wiceprezesem firmy odpowiedzialnym za automatyzacj. Dzisiaj cieszyby si
tytuem CIO. Zadane pytanie nie miao dla mnie adnego sensu. No i co? pomylaem.
Przecie system nie jest jeszcze w produkcji, co za rnica?.
Pniej tego dnia dostaem pierwszy list z ostrzeeniem. Informowa mnie, e musz zmieni
swoje nastawienie albo konieczne bdzie szybkie wypowiedzenie. Byem naprawd
przeraony!
Troch czasu zajo mi przeanalizowanie swojego zachowania i uwiadomienie sobie,
co waciwie robiem le. Rozmawiaem na ten temat z Johnem i Ralphem. Byem
zdeterminowany, eby zmieni siebie i swj stosunek do pracy.
I udao mi si! Przestaem si spnia. Zaczem zwraca uwag na wewntrzn polityk
firmy. Zaczem rozumie, dlaczego John tak bardzo obawia si Stenberga. W kocu
zobaczyem, w jak trudnej sytuacji go postawiem, unieruchamiajc cay system przed
feralnym poniedziakiem.
Niestety, to wszystko byo za mao i za pno. Koci zostay ju rzucone. Miesic pniej
dostaem drugi list z ostrzeeniem za trywialny bd, jaki mi si przytrafi. Ju wtedy
powinienem by zauway, e te listy s tylko formalnoci, a decyzja o zwolnieniu mnie
zostaa ju podjta. Ale byem zdeterminowany, eby ratowa sytuacj, dlatego zaczem
pracowa jeszcze ciej.
Spotkanie, na ktrym zostaem zwolniony, miao miejsce kilka tygodni pniej.
Poszedem do domu do mojej 22-letniej, ciarnej ony i musiaem jej powiedzie,
e straciem prac. Nie jest to dowiadczenie, ktre chciabym kiedykolwiek powtrzy.
171
R OZDZIA 12.
W SPPRACA
Wasno kodu
Jednym z najgorszych symptomw dysfunkcyjnego zespou jest sytuacja, w ktrej kady
programista tworzy mur otaczajcy jego kod i odmawia pozostaym prawa do zmian.
Bywaem w miejscach, w ktrych programici nie pozwalali innym nawet zobaczy swojego
kodu. To prosta recepta na katastrof.
Pewnego razu pracowaem jako konsultant dla firmy tworzcej drukarki najwyszej klasy.
Takie maszyny skadaj si z wielu rnych elementw, takich jak podajniki, drukarki,
sztaplarki, zszywarki, obcinarki itp. Firma inaczej wartociowaa kady z tych elementw.
Podajniki byy waniejsze od sztaplarek, ale nic nie byo waniejsze od samych drukarek.
Kady programista pracowa nad swoim urzdzeniem. Jedna osoba pisaa kod podajnika,
inna zajmowaa si kodem przeznaczonym dla sztaplarki. Kady z nich zazdronie strzeg
swoich technologii i uniemoliwia wprowadzanie zmian do swojego kodu. Polityczne
znaczenie, jakie mieli poszczeglni programici, byo zwizane bezporednio z wartoci
przypisywan przez firm poszczeglnym urzdzeniom. Programista pracujcy nad sam
drukark by nie do ruszenia.
To bya prawdziwa katastrofa dla caej technologii drukowania. Jako konsultant byem
w stanie stwierdzi, e caa masa kodu bya duplikowana, a interfejsy czce poszczeglne
moduy byy dokumentnie wypaczone. Mimo tego aden z moich argumentw nie by
w stanie przekona programistw (i samej firmy) do zmiany sposobu pracy. W kocu ich
wypaty byy powizane z wag obsugiwanych przez nich urzdze.
Wasno kolektywna
Zdecydowanie lepiej jest, gdy zostan zburzone mury wasnoci kodu, a sam kod stanie si
wasnoci caego zespou. Wol wsppracowa z zespoami, w ktrych kady programista
moe przejrze dowolny modu i wprowadzi do niego takie zmiany, jakie uzna za stosowne.
Chc, eby kod by wasnoci zespou, a nie jego czonkw.
Profesjonalni programici nie zabraniaj innym pracy nad swoim kodem. Nie buduj na
okoo niego murw. Staraj si raczej wsppracowa ze sob nad wsplnym rozwijaniem
systemu. Ucz si nawzajem, pracujc wsplnie nad rnymi czciami systemu.
Praca w parach
Wielu programistw nie lubi pracy w parach. Osobicie uwaam, e to dziwne, poniewa
wikszo programistw pracuje w parach w sytuacjach awaryjnych. Dlaczego?
172
M DKI
Mdki
Pewnego ranka 2000 roku, w samym rodku szalestwa dot comw, jechaem pocigiem
w Chicago. Wyszedem z wagonu na peron, gdzie zaatakowa mnie wielki billboard wiszcy
nad drzwiami wyjciowymi. Reklamowa on doskonale znan firm softwareow, ktra
zatrudniaa programistw. Przeczytaem na nim Przyjd i zetrzyj swj mdek z najlepszymi.
Od razu uderzy mnie poziom gupoty tak sformuowanego hasa. Biedni, niemajcy
zielonego pojcia ludzie z dziau reklamy prbowali przemawia do populacji technicznych,
inteligentnych i mdrych programistw. To przecie jest rodzaj ludzi nie najlepiej
znoszcych jakiekolwiek przejawy gupoty. Reklamodawcy prbowali przywoa obraz
wiedzy wspdzielonej z innymi inteligentnymi osobami. Niestety, odwoali si do tej
czci mzgu mdku, ktra zajmuje si kontrolowaniem mini i nie ma nic
wsplnego z inteligencj. A zatem ludzie, do ktrych kierowana bya ta reklama,
miali si z powodu tak idiotycznego bdu.
W billboardzie zaintrygowao mnie jednak co innego. Sprawi on, e zaczem wyobraa
sobie grup ludzi trcych swoje mdki. Jak wiadomo, mdek znajduje si w tylnej
czci mzgu, a zatem chcc pociera mdki, trzeba odwrci si do siebie plecami.
173
R OZDZIA 12.
W SPPRACA
Wnioski
By moe programowaniem nie zainteresowalimy si po to, eby pracowa z innymi ludmi.
Niestety, mamy pecha. Programowanie oznacza nieustann wspprac z innymi. Musimy
wsppracowa ze sob, a take z ca nasz firm.
Wiem, wiem. Czy nie byoby lepiej, gdyby po prostu zamknli nas w pokoju z szecioma
wielkimi ekranami, szybkim czem, bateri superszybkich procesorw, nielimitowan
pamici RAM i miejscem na dysku oraz nieskoczonym zapasem dietetycznej koli
i pikantnych chipsw? Przykro mi, ale tego si nie da zrobi. Jeeli naprawd chcemy
cae dnie spdza na programowaniu, to musimy nauczy si rozmawia z ludmi1.
174
13
Z ESPOY I PROJEKTY
Co zrobi, jeeli musisz pracowa nad wieloma maymi projektami? Jak przydziela
te projekty programistom? A co w przypadku, gdy musisz si zaj tylko jednym
gigantycznym projektem?
175
R OZDZIA 13.
Z ESPOY I PROJEKTY
Mona to zmiksowa?
Przez lata pracowaem jako konsultant w wielu bankach i firmach ubezpieczeniowych.
Jedyn rzecz wspln dla wszystkich tych firm jest dziwaczny sposb dzielenia projektw.
W banku projekt jest czsto wzgldnie niewielk prac, wymagajc udziau jednego
programisty lub dwch przez kilka tygodni. Do takiego projektu zwykle przydzielany jest
meneder, ktry jednoczenie zajmuje si innymi projektami. Dorzuca si do tego analityka
biznesowego, ktry definiuje wymagania w kilku innych projektach. Poza tym do zespou
doczanych jest kilku programistw pracujcych rwnie w innych projektach. Na koniec
dodaje si testera lub dwch, ktrzy rwnie pracuj nad kilkoma projektami.
Ju widzisz, o co chodzi? Projekt jest zbyt may, eby pracujcy nad nim ludzie mogli
powici si mu w penym wymiarze. Kady pracuje nad projektem w 50 albo nawet 25%.
A teraz wana zasada: nie istnieje co takiego jak p osoby.
Bezsensem jest nakazywanie programicie przeznaczenia poowy jego czasu na projekt A,
a pozostaej czci na projekt B, szczeglnie wtedy, gdy oba te projekty maj rnych
menederw, analitykw biznesowych, programistw i testerw. W jakim wiecie mona
takiego potworka nazywa zespoem? To nie zesp, tylko efekt pracy blendera.
Zesp zespolony
Na sformowanie si zespou potrzeba czasu. Czonkowie zespou zaczynaj tworzy midzy
sob zwizki. Ucz si wsppracy, poznaj swoje silne i sabe strony. W ten sposb zesp
zaczyna si spaja.
W zintegrowanych zespoach jest co prawdziwie magicznego. Takie zespoy mog zdziaa
cuda. Ich czonkowie przewiduj wzajemnie swoje dziaania, wspieraj si i wymagaj od
siebie tego, co najlepsze. Takie zespoy naprawd sprawiaj, e co si dzieje.
Zespolony zesp skada si zwykle z mniej wicej tuzina osb. Moe by ich nawet
dwadziecia albo mog by jedynie trzy, ale zazwyczaj liczba czonkw zespou bliska jest
dwunastu. Zesp powinien skada si z programistw, testerw i analitykw. I powinien
mie menedera projektu.
Stosunek liczby programistw do testerw i analitykw moe si bardzo rni, ale dobr
proporcj jest 2:1. Oznacza to, e dobrze zespolony zesp moe si skada z siedmiu
programistw, dwch testerw, dwch analitykw i jednego menedera projektu.
Analityk definiuje wymagania i na ich podstawie pisze zautomatyzowane testy akceptacyjne.
Testerzy rwnie zajmuj si tworzeniem zautomatyzowanych testw akceptacyjnych.
176
M ONA TO ZMIKSOWA ?
Rnic midzy nimi jest inna perspektywa. Wszyscy zapisuj wymagania, ale analityk
koncentruje si na wartociach biznesowych, natomiast tester na poprawnoci. Analitycy
tworz optymistyczne cieki w testach, a testerzy zastanawiaj si nad tym, co moe pj
le, i pisz testy obejmujce bdy i przypadki brzegowe.
Meneder projektu ledzi postpy zespou i upewnia si, e zesp zna wszystkie priorytety
i harmonogramy.
Jeden z czonkw zespou moe przej rol trenera lub mistrza, ktrego odpowiedzialnoci
jest ochrona procesw i metod stosowanych przez zesp. Taka osoba ma by sumieniem
zespou, jeeli ten chciaby porzuci istniejce procesy w wyniku zwikszajcej si presji.
Fermentacja
Taki zesp potrzebuje czasu na zapoznanie si z wewntrznymi rnicami, pogodzenie
si z nimi i rzeczywiste spojenie. Ten proces moe potrwa sze miesicy, a nawet cay
rok. Ale gdy si zakoczy, dziej si cuda. Zespolony zesp zaczyna wsplnie planowa,
rozwizywa problemy, wsplnie stawia czoa przeciwnociom i praca posuwa si naprzd.
Gdy to si w kocu zdarzy, przestpstwem byoby rozbija ten ukad tylko dlatego, e koczy
si projekt. Znacznie lepiej jest utrzyma niezmieniony skad zespou i poszuka mu
odpowiedniego projektu.
[PPP2002], s. 2022; [COHN2006], tu szukaj w indeksie wielu wietnych odniesie do tempa prac.
177
R OZDZIA 13.
Z ESPOY I PROJEKTY
Wnioski
Zespoy tworzy si trudniej ni projekty. Z tego powodu lepiej jest tworzy trwae zespoy,
ktre razem pracuj nad kolejnymi projektami i mog obsugiwa w danym czasie kilka
projektw. Celem formowania zespou jest przekazanie mu wystarczajcej iloci czasu na
zintegrowanie si. Pniej taki zesp nie powinien by rozbijany, poniewa jest on gotowy
na realizacj wielu projektw.
178
B IBLIOGRAFIA
Bibliografia
[PPP2002]: Robert C. Martin, Agile Software Development. Principles, Patterns,
and Practices, Upper Saddle River, NJ: Prentice Hall, 2003.
[COHN2006]: Mike Cohn, Agile Estimating and Planning, Upper Saddle River, NJ:
Prentice Hall, 2006.
179
R OZDZIA 13.
Z ESPOY I PROJEKTY
180
N AUCZANIE ,
14
TERMINOWANIE
I MISTRZOSTWO
Stopnie niepowodzenia
Prowadziem kiedy rozmow kwalifikacyjn z mod kobiet studiujc informatyk na
wielkim uniwersytecie. Staraa si o letnie stanowisko staysty. Poprosiem j o napisanie
dla mnie prostego kodu, a ona odpowiedziaa: Ale ja tak naprawd nie pisz kodu.
181
R OZDZIA 14.
N AUCZANIE ,
TERMINOWANIE I MISTRZOSTWO
Nauczanie
Jak mona si nauczy programowa? Opowiem Ci historyjk o byciu nauczanym.
Jest wiele stron internetowych udostpniajcych symulatory tego maego stymulujcego komputera.
182
N AUCZANIE
183
R OZDZIA 14.
N AUCZANIE ,
TERMINOWANIE I MISTRZOSTWO
184
N AUCZANIE
185
R OZDZIA 14.
N AUCZANIE ,
TERMINOWANIE I MISTRZOSTWO
Nauczanie niekonwencjonalne
Zaprezentowaem te dwie historie, poniewa opisuj one dwa cakowicie rne rodzaje
nauczania, z ktrych aden nie mia wiele wsplnego z tym, co kojarzy si ze sowem
nauczanie. W pierwszym przypadku uczyem si od autorw doskonale przygotowanego
podrcznika. W drugim obserwujc osoby, ktre bardzo staray si mnie ignorowa.
W obu przypadkach zdobyta wiedza bya gboka i niezwykle wana.
Oczywicie miaem te innych nauczycieli. Choby miy ssiad, ktry pracowa w firmie
Teletype i przynis mi do domu pudeka z 30 przecznikami telefonicznymi, ktrymi
mogem si bawi. Powiem tylko: dajcie chopakowi kilka przecznikw i transformator
z kolejki elektrycznej, a bdzie prbowa podbi wiat!
By te inny miy ssiad radiooperator, ktry pokaza mi, jak korzysta z multimetru
(bardzo szybko go jednak zepsuem). By te waciciel sklepu z materiaami biurowymi,
ktry pozwala mi przychodzi i bawi si jego drogim programowalnym kalkulatorem.
Byo te biuro firmy DEC, ktre pozwalao mi bawi si ich komputerami PDP-8 i PDP-10.
By te wielki Jim Carlin, programista jzyka BAL, ktry ocali mnie przed wyrzuceniem
z pierwszej pracy zwizanej z programowaniem uczy mnie debugowa program
w COBOL-u, ktry wykracza poza moje wczesne moliwoci. Nauczy mnie czyta zrzuty
jdra i formatowa kod sprytnie wstawianymi pustymi wierszami, rzdami gwiazdek
i komentarzami. To on pierwszy popchn mnie w kierunku dobrego rzemiosa. auj,
e nie mogem mu pomc rok pniej, gdy spad na niego gniew naszego szefa.
Ale tak naprawd to ju wszystko. Na pocztku lat 70. nie byo zbyt wielu starszych
programistw. Wszdzie, gdzie pracowaem, to ja byem tym starszym. Nie byo nikogo,
kto powiedziaby mi, czym naprawd jest profesjonalne programowanie. Nie byo wzorca,
ktry nauczyby mnie, jak naley si zachowywa i co naley ceni. Tego wszystkiego
musiaem nauczy si samodzielnie i zdecydowanie nie byo to atwe.
186
T ERMINOWANIE
Mocne ciosy
Jak wspominaem ju wczeniej, w 1976 roku zostaem zwolniony z pracy przy automatyzacji
fabryki. Mimo e pod wzgldem technicznym byem bardzo kompetentny, to jednak
nie nauczyem si jeszcze zwraca uwagi na firm i jej cele. Niewiele znaczyy dla mnie
wyznaczone terminy. Zapomniaem o wielkim poniedziakowym pokazie, w pitek
zostawiem system w nieuywalnym stanie, a w poniedziaek spniem si i wszyscy si
na mnie wciekali.
Mj szef wysa mi list z ostrzeeniem mwicym, e mam si natychmiast zmieni albo
zostan zwolniony. To by dla mnie powany wstrzs. Przemylaem swoje ycie oraz
karier i zaczem wprowadza w zachowaniu daleko idce zmiany. Niestety, to wszystko
byo za mao i za pno. Wczeniej nabraem ju rozpdu w niewaciwym kierunku i teraz
szczegy, ktre wczeniej nie miayby znaczenia, urosy do ogromnych rozmiarw. Chocia
staraem si naprawd mocno, ostatecznie i tak zostaem odeskortowany poza budynek.
Nie musz chyba wspomina, e przyniesienie takich wiadomoci ciarnej onie
i dwuletniej crce nie jest niczym przyjemnym. Pozbieraem si jednak i do nastpnej
pracy zabraem kolejn wan nauczk. Pamitaem o niej i o innych przez nastpnych
15 lat, dlatego stay si one podstaw mojej aktualnej kariery.
Ostatecznie przeyem i dalej si rozwijaem. Istniej jednak znacznie lepsze metody. Lepiej
dla mnie byoby, gdybym mia prawdziwego mentora, ktry nauczyby mnie odrnia
dobro od za. Kogo, kogo mgbym obserwowa podczas prac nad drobnymi zadaniami,
kto sprawdzaby moj wczesn prac i kierowa ni. Kogo, kto byby dla mnie wzorem
i uczy mnie waciwych reakcji i wartoci. Sensei. Mistrza. Mentora.
Terminowanie
Co robi lekarze? Sdzisz, e szpitale zatrudniaj absolwentw szk medycznych i ju
pierwszego dnia pracy kieruj ich na sale operacyjne? Oczywicie, e nie.
W zawodzie lekarza wypracowano metody intensywnej nauki, zwizane z ustanowionym
rytuaem i zanurzone w tradycji. wiat medyczny kontroluje uniwersytety i upewnia si, e ich
absolwenci maj jak najlepsze wyksztacenie. Na to wyksztacenie niemal po rwno skadaj
si zajcia w murach uczelni i dziaania kliniczne w szpitalach pod okiem profesjonalistw.
Po ukoczeniu szkoy, ale jeszcze przed przyznaniem licencji nowi lekarze musz spdzi
cay rok na kontrolowanej praktyce i wiczeniach nazywanych staem. W istocie jest
to bardzo intensywne szkolenie przez prac. Kady staysta jest otoczony nauczycielami
i wzorcami do naladowania.
187
R OZDZIA 14.
N AUCZANIE ,
TERMINOWANIE I MISTRZOSTWO
188
T ERMINOWANIE
Terminowanie programisty
Jak zatem naleaoby w zawodzie programisty wprowadza modych absolwentw w szeregi
profesjonalistw? Jakie kroki naley podejmowa? Jakie wyzwania przed nimi stawia?
Zacznijmy rozwaania od tyu.
Mistrzowie
Mistrzowie s programistami, ktrzy prowadzili ju niejeden powany projekt
programistyczny. Zwykle maj ju ponad 10 lat dowiadczenia i pracowali nad rnymi
rodzajami systemw, w rnych jzykach i systemach operacyjnych. Wiedz, jak prowadzi
i koordynowa wiele zespow, s sprawnymi projektantami i architektami, bez adnego trudu
s w stanie napisa dowolny kod. Oferowano im ju stanowiska zwizane z zarzdzaniem,
ale odmwili albo po ich zaakceptowaniu szybko si wycofali, albo poczyli nowe zadania
z pierwotnymi pracami technicznymi. Nadal utrzymuj swoje umiejtnoci techniczne,
czytajc, uczc si, wiczc, pracujc i nauczajc. To wanie takim mistrzom firmy bd
przypisywa odpowiedzialno za techniczn stron projektu. Pomyl o Scottym.
Czeladnicy
To programici o odpowiednim wyszkoleniu, kompetencjach i chciach. W tym okresie
swojej kariery ucz si dobrze wsppracowa z zespoem i staj si liderami. Doskonale
orientuj si w aktualnych technologiach, ale zwykle brak im dowiadczenia z rnorodnymi
systemami. Zwykle znaj jeden jzyk, jeden system, jedn platform, ale cigle si ucz.
Poziom dowiadczenia moe by bardzo rny, ale najczciej jest to jakie pi lat. Na
jednym kocu tej redniej mamy rodzcych si mistrzw, na drugiej niedawnych
praktykantw.
Czeladnicy s nadzorowani przez mistrzw albo starszych czeladnikw. Modym czeladnikom
rzadko tylko pozwala si na jakkolwiek autonomi. Ich praca zawsze jest cile nadzorowana.
Ich kod jest przegldany. Wraz z zyskiwanym dowiadczeniem zwiksza si te ich
autonomia. Nadzr przestaje by tak bezporedni, a jego gorset jest powoli luzowany.
Ostatecznie ogranicza si do krtkich recenzji.
Praktykanci i stayci
Absolwenci zaczynaj swoj karier jako praktykanci. Praktykanci nie maj adnej
autonomii i s cile nadzorowani przez czeladnikw. Pocztkowo nie otrzymuj adnych
zada, a jedynie wspomagaj czeladnikw w pracy. To powinien by dla nich czas bardzo
intensywnego programowania w parach. To wanie wtedy ucz si rnych metodologii.
To wanie wtedy tworzone s w nich podstawowe wartoci.
189
R OZDZIA 14.
N AUCZANIE ,
TERMINOWANIE I MISTRZOSTWO
Rzeczywisto
Tutaj rwnie wszystko zostao wyidealizowane i pozostaje w sferze hipotez. Jeeli jednak
pozmienia kilka nazw i przymkn oko na pewne okrelenia, to cay opis nie bdzie bardzo
odlegy od tego, czego bymy oczekiwali. Absolwenci s nadzorowani przez modych
liderw zespow, ktrzy z kolei s nadzorowani przez prowadzcych projekty itd. Problem
polega na tym, e w wikszoci przypadkw takie nadzorowanie nie ma nic wsplnego
z technik! W wikszoci firm nie istnieje co takiego jak nadzr techniczny. Programici
dostaj podwyki i ewentualne awanse, poniewa tak si postpuje z programistami.
Rnica midzy tym, co naprawd robimy, a moim wyidealizowanym programem
terminowania polega na koncentracji na nauczaniu, wiczeniach, nadzorze i recenzjach.
Rnic stanowi pogld, e wartoci stanowice o profesjonalizmie i techniczna doskonao
musz by uczone, wpajane, pielgnowane, pieszczone i hodowane. W naszym aktualnym
podejciu brakuje nakazu dla starszych, eby uczyli modych.
Rzemioso
Teraz moemy ju zdefiniowa to sowo: rzemioso. Czym ono waciwie jest? Chcc je
zrozumie, musimy przyjrze si sowu rzemielnik. Sowo to przywodzi na myl kwalifikacje
i jako. I jeszcze dowiadczenie, i kompetencj. Rzemielnik jest kim, kto pracuje szybko,
ale bez popiechu, kto podaje rozsdne szacunki i dotrzymuje zobowiza. Rzemielnik wie,
kiedy naley odmwi, ale z caych si stara si tego unika. Rzemielnik jest profesjonalist.
Rzemioso jest stanem umysu waciwym dla rzemielnikw. Rzemioso jest memem
zawierajcym w sobie wartoci, metody, techniki, nastawienie i odpowiedzi.
Jak jednak rzemielnicy przyjmuj do siebie ten mem? Jak osigaj ten stan umysu?
Mem rzemiosa jest przekazywany z jednej osoby na drug. Starsi ucz go modszych.
Jest dzielony przez wsppracujce osoby. Mona go obserwowa i ponownie si go uczy,
190
W NIOSKI
tak jak starsi obserwuj modszych. Rzemioso jest zaraliwe, to swego rodzaju wirus,
ktry mona zapa, obserwujc innych i pozwalajc memowi zagniedzi si w sobie.
Przekonywanie
Nie mona nikogo przekona do bycia rzemielnikiem. Nie mona nakoni nikogo
do przyjcia memu rzemiosa. Tutaj nie dziaaj adne argumenty, adne dane nie maj
znaczenia, a studia przypadkw s pustymi historiami. Przyjcie tego memu nie jest decyzj
racjonaln, ale emocjonaln. To bardzo ludzkie.
Jak zatem sprawi, eby ludzie zaakceptowali mem rzemiosa? Pamitaj, e ten mem jest
zaraliwy, ale tylko wtedy, gdy jest obserwowany. Trzeba zatem sprawi, eby kto chcia
go obserwowa. Musisz sta si dla innych wzorcem. Najpierw to Ty musisz sta si
rzemielnikiem i sprawi, eby Twoje rzemioso byo widoczne. Potem pozwl memowi
wykona reszt pracy.
Wnioski
W szkoach mona nauczy si teorii programowania komputerw. Szkoa nie jest jednak
w stanie naucza dyscypliny, praktyki i umiejtnoci niezbdnych rzemielnikom. Te
rzeczy nabywa si przez lata wypenione osobist kuratel i uczeniem si. Musimy sobie
uwiadomi, e wprowadzenie nastpnych pokole programistw w zawodow doroso
bdzie naszym zadaniem, a nie zadaniem uniwersytetw. Nadszed dla nas czas przyjcia
programu praktyk, staw i dugoterminowego prowadzenia modych.
191
R OZDZIA 14.
N AUCZANIE ,
192
TERMINOWANIE I MISTRZOSTWO
N ARZDZIA
W 1978 roku pracowaem w firmie Teradyne nad systemem testujcym telefony, o ktrym
ju wczeniej opowiadaem. System skada si z mniej wicej 80 000 wierszy kodu
w asemblerze komputera M365. Cay kod rdowy by przechowywany na tamach.
Same tamy byy podobne do kasetek do magnetofonw 8-ciekowych, tak popularnych
w latach 70. Tama bya niekoczc si ptl, a napd mg przewija j tylko w jednym
kierunku. W kasetkach byy dostpne tamy o dugoci 3, 7, 15 i 30 metrw. Im dusza
bya tama, tym duej trwao jej przewijanie, poniewa napd musia j przesuwa
naprzd a do napotkania punktu adowania. W przypadku tam 30-metrowych procedura
193
Ebookpoint.pl kopia dla: Jaroslaw Babijczuk siarsko@gmail.com
D ODATEK A
N ARZDZIA
Tamy przewijay si tylko w jednym kierunku. Jeeli przy odczycie zdarzy si bd, napd nie mia
ju moliwoci cofnicia si i odczytania danych jeszcze raz. Trzeba byo przerwa procedur,
przewin tam do punktu adowania i rozpocz wszystko on nowa. Zdarzao si to dwa lub
trzy razy dziennie. Powszechne byy te bdy zapisu, a napd nie mia adnych moliwoci ich
wykrywania. Dlatego wanie zawsze zapisywalimy tamy parami, a po zakoczeniu zapisu kad
z nich kontrolowalimy. Jeeli jedna z tam zawieraa bdy, to natychmiast robilimy kopi. Jeeli
obie tamy byy uszkodzone, co nie zdarzao si czsto, ca operacj zaczynalimy od pocztku.
Tak wanie wygldao ycie w latach 70.
194
Ebookpoint.pl kopia dla: Jaroslaw Babijczuk siarsko@gmail.com
N ARZDZIA
Narzdzia
Dzisiaj programici mog wybiera z wielkiego zasobnika rnych narzdzi. Wikszo
z nich nie jest warta zainteresowania, ale jest kilka takich, ktre kady programista powinien
doskonale zna. W tym rozdziale przedstawi aktualn zawarto mojego narzdziownika.
Nie sprawdzaem dokadnie wszystkich dostpnych narzdzi, dlatego nie mona uzna tego
opisu za wyczerpujcy. Po prostu tych narzdzi uywam.
195
Ebookpoint.pl kopia dla: Jaroslaw Babijczuk siarsko@gmail.com
D ODATEK A
N ARZDZIA
CVS i SVN
Najstarszym znanym systemem kontroli wersji jest CVS. W swoich czasach by doskonaym
rozwizaniem, ale nie sprawdza si ju w dzisiejszych projektach. Mimo e wietnie radzi
sobie z pojedynczymi plikami i katalogami, to jednak operacje jak zmiana nazw plikw albo
usuwanie katalogw go przerastaj. A poza tym moe lepiej pomin to milczeniem.
Z kolei Subversion dziaa naprawd przyjemnie. Umoliwia pobranie caego systemu
w jednej tylko operacji. Moliwe jest atwe aktualizowanie, czenie i wstawianie. Dopki
nie zaczniesz bawi si w tworzenie rozgazie, system SVN jest bardzo prosty w obsudze.
196
Ebookpoint.pl kopia dla: Jaroslaw Babijczuk siarsko@gmail.com
Rozgazianie
Do 2008 roku stosowaem jedynie najprostsze formy tworzenia rozgazie. Jeeli programista
utworzy nowe rozgazienie, to musiao ono zosta wczone do gwnej linii jeszcze przed
zakoczeniem iteracji. Naprawd tak bardzo nie lubiem rozgaziania, e w projektach,
w ktrych uczestniczyem, praktycznie ich nie uywano.
Nadal sdz, e stosujc SVN, naley trzyma si z daleka od rozgazie. Na szczcie
istnieje kilka nowych narzdzi, ktre diametralnie zmieniaj zasady gry. S nimi rozproszone
systemy kontroli wersji. Moim ulubionym jest Git i o nim chciabym pokrtce opowiedzie.
Git
Systemu Git zaczem uywa w 2008 roku i od razu zmieni on wszystko w moim sposobie
wykorzystywania mechanizmw kontroli wersji. Wyjanienie, dlaczego to narzdzie powoduje
tak ogromn zmian, wykracza poza ramy tej ksiki. Jednak porwnanie rysunku A.1
z rysunkiem A.2 powinno zastpi wiele wyjanie, ktre pozwol sobie zatem pomin.
197
Ebookpoint.pl kopia dla: Jaroslaw Babijczuk siarsko@gmail.com
D ODATEK A
N ARZDZIA
Na rysunku A.1 przedstawiono kilka tygodni prac nad projektem FitNesse w czasie,
gdy pracowaem jeszcze z systemem SVN. Dokadnie wida tu efekty mojej zasady
niestosowania adnych rozgazie. Po prostu ich nie tworzylimy. Zamiast tego bardzo
czsto dokonywalimy aktualizacji gwnej linii kodu, czylimy j i wprowadzalimy
do niej zmiany.
Na rysunku A.2 przedstawiono kilka tygodni prac nad tym samym projektem, ale ju
w systemie Git. Jak wida, przez cay czas tworzymy i czymy rne rozgazienia. Nie
wynika to z faktu, e nie stosuj si cile do zasady braku rozgazie. Po prostu okazao
si, e jest to cakiem oczywisty i wygodny sposb pracy. Poszczeglni programici mog
tworzy bardzo krtkie rozgazienia, a potem bardzo prosto czy je ze sob.
Zwr uwag, e nie da si tu zauway gwnej linii kodu. Wynika to z faktu, e takiej nie ma.
Korzystajc z systemu Git, nie masz czego takiego jak centralne repozytorium ani gwna
linia kodu. Kady programista przechowuje na swoim komputerze wasn kopi caej
historii projektu. Operacje pobrania i wstawienia kodu s wykonywane na tej wanie
lokalnej kopii, a potem czy si je z kopiami pozostaych programistw.
198
Ebookpoint.pl kopia dla: Jaroslaw Babijczuk siarsko@gmail.com
IDE I EDYTOR
IDE i edytor
Programici wikszo swojego czasu powicaj na czytanie i edytowanie kodu. Narzdzia,
ktrych uywamy do tego celu, przez dziesiciolecia bardzo si zmieniy. Niektre z nich
stay si niezwykle wszechstronne, ale inne praktycznie nie zmieniy si od lat 70.
vi
Mona by sdzi, e dni wykorzystywania vi jako edytora do rozwoju oprogramowania
powinny ju dawno min. Dzisiaj mamy narzdzia przewyszajce moliwociami vi
i inne, podobne do niego proste edytory tekstu. Prawda jest jednak taka, e vi znowu
zaczyna zyskiwa na popularnoci dziki swojej prostocie, atwej obsudze, szybkoci
i elastycznoci. By moe nie jest on a tak rozbudowany jak Emacs albo Eclipse, ale nadal
jest bardzo szybkim i wszechstronnym edytorem.
Po tym wstpie mog si przyzna, e nie jestem ju zaawansowanym uytkownikiem vi.
By taki czas, kiedy byem znany jako bg vi, ale to ju zamierzcha przeszo. Nadal
jednak od czasu do czasu uywam vi, jeeli musz szybko wprowadzi jak zmian
do pliku tekstowego. Ostatnio uyem go nawet, gdy musiaem szybciutko poprawi
co w pliku rdowym Javy w zdalnym rodowisku. Jednak oglna ilo kodu, jak
w ostatnim dziesicioleciu napisaem za pomoc vi, jest przeraajco niewielka.
Emacs
Emacs to nadal jeden z najbardziej rozbudowanych edytorw, jakie znam.
Najprawdopodobniej nie zmieni si to jeszcze przez co najmniej dekad, co gwarantuje
wewntrzny model Lispu. Nic nie moe si z nim rwna w kategorii edytora oglnego
przeznaczenia. Uwaam jednak, e Emacs nie moe konkurowa z dominujcymi
aktualnie IDE tworzonymi pod konkretne zadania. Pisanie kodu nie jest niestety
zadaniem dla edytora o oglnym przeznaczeniu.
W latach 90. byem prawdziwym wyznawc Emacsa. Nawet nie mylaem o uywaniu
czegokolwiek innego. Edytory typu wska-i-kliknij z tamtego czasu byy miesznymi
199
Ebookpoint.pl kopia dla: Jaroslaw Babijczuk siarsko@gmail.com
D ODATEK A
N ARZDZIA
Eclipse/IntelliJ
Jestem uytkownikiem rodowiska IntelliJ. Po prostu je kocham. Uywam go do pisania
programw w Javie, Ruby, Clojure, Scali, JavaScripcie i wielu innych jzykach. To narzdzie
zostao napisane przez programistw, ktrzy dokadnie wiedz, czego potrzebuje programista
tworzcy kod. Przez te wszystkie lata tylko rzadko mnie rozczarowywali, a prawie zawsze
speniali moje oczekiwania.
Jeeli chodzi o moliwoci, to Eclipse jest bardzo podobny do IntelliJ. W kontekcie
edytowania kodu Javy oba IDE pod kadym moliwym wzgldem przewyszaj Emacsa.
Oczywicie istniej te inne podobne IDE, ale nie bd o nich wspomina, poniewa nie
mam adnego dowiadczenia w pracy z nimi.
Funkcje, dziki ktrym te IDE tak bardzo wyprzedzaj Emacsa, dotycz przede wszystkim
ogromnej rnorodnoci metod manipulacji kodem. Na przykad w IntelliJ za pomoc
jednego polecenia mona wydoby superklas z wybranej klasy. Wrd innych wanych
funkcji mona wymieni zmian nazw zmiennych, wydobywanie metod i przeksztacanie
dziedziczenia w kompozycje.
Dziki takim narzdziom edytowanie kodu nie ogranicza si do wierszy i znakw, ale
pozwala te na wykonywanie zoonych manipulacji. Zamiast myle o kolejnych kilku
znakach i wierszach, ktre musisz wprowadzi, moesz myle o kilku przeksztaceniach,
jakie bd jeszcze konieczne. W skrcie: taki model programowania jest zdecydowanie
bardziej produktywny.
Oczywicie takie moliwoci maj swoj cen. Poznanie tych narzdzi wymaga czasu,
a i skonfigurowanie caego projektu to dodatkowa praca. Tych narzdzi nie mona nazwa
lekkimi. Do dziaania potrzebuj sporo zasobw komputera.
TextMate
TextMate jest rozbudowanym i jednoczenie lekkim edytorem. Oczywicie nie mona
w nim robi tych wspaniaych manipulacji na kodzie, na ktre pozwalaj IntelliJ i Eclipse.
Nie jest te wyposaony w potne mechanizmy Lispu i biblioteki Emacsa. Nie ma te
szybkoci i pynnoci dziaania vi. Jednake prawie nie trzeba si uczy jego obsugi, ktra
jest zadziwiajco intuicyjna.
Edytora TextMate uywam od czasu do czasu, szczeglnie do rzadkiego ju pisania
programw w C++. Do wikszych projektw w tym jzyku uybym Emacsa, ale do krtkich
zada, jakie na mnie spadaj, TextMate w zupenoci mi wystarcza.
200
Ebookpoint.pl kopia dla: Jaroslaw Babijczuk siarsko@gmail.com
LEDZENIE PROBLEMW
ledzenie problemw
Aktualnie uywam systemu Pivotal Tracker, ktry w codziennym uytkowaniu jest bardzo
elegancki i prosty. Doskonale wpasowuje si w rozwizania iteracyjne i zwinne. Umoliwia
szybk komunikacj midzy programistami a udziaowcami projektu. Mog powiedzie,
e jestem z niego bardzo zadowolony.
W przypadku bardzo maych projektw czasami korzystam z systemu Lighthouse. Jest bardzo
szybki i prosty zarwno w konfiguracji, jak i w uytkowaniu, ale pod wzgldem moliwoci
nie moe si rwna z Pivotal Trackerem.
Dawniej uywalimy te po prostu wiki, ktre doskonale sprawdzaj si w projektach
wewntrznych. Umoliwiaj przygotowanie dowolnego schematu postpowania. Nie
zmuszaj nas do stosowania okrelonych procesw albo sztywnych struktur. Mona
je atwo pozna i jeszcze atwiej si ich uywa.
Czasami najlepszym systemem ledzenia problemw jest zestaw kartek powieszonych
na tablicy. Tak tablic dzieli si na trzy czci: Do zrobienia, W toku i Gotowe.
Programici musz tylko przenosi karty z jednej do drugiej kolumny. Taki system
ledzenia problemw jest prawdopodobnie najpowszechniej uywany w zespoach
stosujcych metodologie zwinne.
Klientom zalecam na pocztek prac z rcznymi systemami, takimi jak kartki na tablicy,
i dopiero pniej dokupienie konkretnego narzdzia. Gdy naucz si wykorzystywa taki
rczny system, zdobd te dowiadczenie niezbdne do wybrania waciwego rozwizania.
A nierzadko jest te tak, e najlepszym rozwizaniem jest pozostanie przy systemie rcznym.
Licznik problemw
Zespoy programistw z pewnoci musz mie listy problemw, nad ktrymi trzeba
pracowa. Do takich problemw zaliczaj si zarwno nowe zadania i funkcje, jak i zwyczajne
bdy. W przypadku zespow o rozsdnej wielkoci (od 5 do 12 programistw) na takiej
licie mog znajdowa si dziesitki lub setki pozycji. Nie tysice.
Jeeli masz tysice bdw, to co na pewno dziaa le. Jeeli masz tysice nowych funkcji
lub zada, to rwnie co jest nie tak. Oglnie rzecz biorc, lista problemw powinna by
wzgldnie krtka, tak eby mona byo j opanowa za pomoc lekkich narzdzi, jak wiki,
Lighthouse lub Tracker.
Dostpne s te narzdzia komercyjne, ktre sprawiaj cakiem dobre wraenie. Widziaem
uywajcych ich klientw, ale nigdy nie miaem okazji pracowa z nimi osobicie. Nie jestem
przeciwnikiem takich narzdzi, o ile liczba problemw bdzie pozostawa krtka i przejrzysta.
201
Ebookpoint.pl kopia dla: Jaroslaw Babijczuk siarsko@gmail.com
D ODATEK A
N ARZDZIA
Ciga kompilacja
Ostatnio jako mechanizmu cigej kompilacji uywaem systemu Jenkins. Jest naprawd
niewielki, prosty i prawie nie wymaga nauki. Wystarczy go pobra, uruchomi, szybko
i atwo skonfigurowa, i gotowe. Sama przyjemno.
Moja filozofia dotyczca cigej kompilacji jest bardzo prosta. Podcz system do systemu
kontroli wersji kodu rdowego. Gdy tylko kto wprowadzi zmiany do kodu, kompilacja
powinna zosta uruchomiona automatycznie, a jej wynik przesany do zespou.
Zadaniem zespou jest cige utrzymywanie bezproblemowej kompilacji systemu. Kada
nieudana kompilacja powinna by sygnaem krytycznym, a zesp powinien stara si jak
najszybciej rozwiza ten problem. Pod adnym pozorem nie mona pozwoli, eby taka
sytuacja trwaa dzie lub duej.
W przypadku projektu FitNesse nakazuj kademu programicie uruchomienie skryptu
cigej kompilacji jeszcze przed wprowadzeniem zmian do repozytorium. Caa kompilacja
trwa poniej 5 minut, a zatem nie jest to bardzo uciliwe. Jeeli pojawi si jakie problemy,
to programista musi je rozwiza, zanim przekae kod do repozytorium. Dziki temu
automatyczna kompilacja prawie nigdy nie zgasza bdw. Najczstszym powodem takich
bdw okazuj si problemy zwizane ze rodowiskiem, poniewa rodowisko automatycznej
kompilacji rni si od rodowiska stosowanego przez poszczeglnych programistw.
202
Ebookpoint.pl kopia dla: Jaroslaw Babijczuk siarsko@gmail.com
zaliczone. IntelliJ obsuguje zarwno JUnit, jak i RSPEC, dlatego wystarczy nacinicie
tylko jednego przycisku. Do testw NUnit wykorzystuj wtyczk Resharper, ktra
rwnie udostpnia przycisk uruchamiania testw.
2. Narzdzie powinno jasno przedstawia informacj, czy testy zostay zaliczone, czy te
nie. Nie ma znaczenia, czy bdzie to graficzny zielony pasek, czy konsolowy komunikat
Testy zaliczone. Wane jest to, e musisz by w stanie szybko i jednoznacznie
stwierdzi, czy testy udao si zaliczy. Jeeli musisz w tym celu czyta wielowierszowy
raport albo co gorsza porwnywa zawarto dwch plikw, to narzdzie nie
wykonuje swojego zadania.
3. Narzdzie powinno jasno prezentowa postp w wykonywaniu testw. Nie ma znaczenia,
czy bdzie to prosty graficzny miernik, czy cig kropek. Wane jest, aby jasno byo
wida, e testy nadal s wykonywane, a nie zatrzymay si lub zostay przerwane.
4. Narzdzie powinno utrudnia komunikacj midzy poszczeglnymi testami. JUnit
robi to, tworzc nowy egzemplarz klasy testowej przed uruchomieniem kadej metody
testowej. W ten sposb nie pozwala testom na wykorzystywanie zmiennych obiektw
do komunikacji. Inne narzdzia wykonuj testy w losowej kolejnoci, tak e nie mona
zakada uruchomienia jednego testu przed drugim. Bez wzgldu na zastosowany
mechanizm narzdzie powinno wspomaga tworzenie testw cakowicie niezalenych
od siebie. Testy uzalenione od siebie s puapk, w ktr nikt nie chce wpa.
5. Narzdzia powinny uatwia pisanie testw. JUnit na przykad udostpnia wygodne
API do tworzenia zaoe. Wykorzystuje te refleksj i atrybuty Javy, aby odrnia
funkcje testujce od normalnych. Pozwala to dobrym IDE na automatyczne
wyszukiwanie testw i eliminowanie tym samym problemw wynikajcych z czenia
ze sob poszczeglnych zestaww testw oraz tworzenia ich list.
Definicja gotowego
Za pomoc narzdzi do testw komponentw mona bardzo atwo okrela, co znaczy
gotowe. Jeeli analitycy biznesowi i testerzy wsppracuj ze sob, tworzc specyfikacj
opisujc zachowanie komponentu, i specyfikacj t mona uruchamia jako zestaw testw,
to gotowe moe mie tylko jedno znaczenie: wszystkie testy zostay zaliczone.
203
Ebookpoint.pl kopia dla: Jaroslaw Babijczuk siarsko@gmail.com
D ODATEK A
N ARZDZIA
FitNesse
Moim ulubionym narzdziem do testw komponentw jest FitNesse. Napisaem spor cz
tego systemu i jestem jego gwnym programist. Mog powiedzie, e to moje dziecko.
FitNesse jest systemem wykorzystujcym wiki, ktry umoliwia analitykom biznesowym
i testerom pisanie testw w prostej, tabelarycznej formie. Tabele te s podobne do tablic
Parnasa zarwno w formie, jak i przeznaczeniu. Poszczeglne testy mona szybko czy
w zestawy, a same zestawy mona bardzo atwo uruchamia.
FitNesse jest tworzony w Javie, ale moe testowa systemy pisane w dowolnym jzyku,
poniewa komunikuje si z podstawowym systemem testowym, ktry moe powsta
w innym jzyku. Na licie obsugiwanych jzykw znajduj si Java, C#/.NET, C, C++,
Python, Ruby, PHP, Delphi i inne.
U podstaw FitNesse znajduj si dwa systemy testowe: Fit i Slim. Fit zosta napisany przez
Warda Cunninghama i sta si inspiracj do powstania FitNesse i podobnych narzdzi.
Slim to znacznie prostszy i przenony system testowy, z ktrego chtniej korzystaj
uytkownicy FitNesse.
Inne narzdzia
Znam te kilka innych narzdzi, ktre mona zakwalifikowa do kategorii testw
komponentw.
RobotFX jest narzdziem przygotowanym przez inynierw firmy Nokia. Stosuje
204
Ebookpoint.pl kopia dla: Jaroslaw Babijczuk siarsko@gmail.com
UML/MDA
UML/MDA
Na pocztku lat 90. miaem wielk nadziej, e narzdzia typu CASE cakowicie zmieni
sposb, w jaki rozwijane jest oprogramowanie. Patrzc w przyszo, sdziem, e dzisiaj
kady bdzie tworzy oprogramowanie za pomoc diagramw na wysokim poziomie
abstrakcji, a kod skadajcy si z tekstu bdzie nalee do przeszoci.
Straszliwie si pomyliem. Nie chodzi nawet o to, e moje marzenie si nie spenio, ale
e kada prba jego realizacji skoczya si katastrofalnym fiaskiem. Oczywicie istniej
narzdzia i systemy bdce demonstracj moliwoci tej technologii, ale niestety nie s
one faktycznym spenieniem marzenia, a na dodatek wyglda na to, e nikt nie ma zamiaru
ich uywa.
Moje marzenie zakadao, e programici porzuc szczegowo kodu tekstowego i zaczn
tworzy systemy za pomoc wysokopoziomowych jzykw zbudowanych z diagramw.
Co wicej, mogoby si okaza, e wcale nie potrzebujemy programistw. Architekci mogliby
tworzy cae systemy za pomoc diagramw UML. Nastpnie zastpujce programistw
potne, cho zimne mechanizmy przeksztacayby te diagramy w wykonywalny kod. Tak
wanie wygldao wielkie marzenie o architekturze sterowanej modelami (MDA Model
Driven Architecture).
Niestety, w tym wspaniaym marzeniu bya maa skaza. MDA zakada, e to kod jest
problemem. Ale kod problemem nie jest. Nigdy nim nie by. Prawdziwym problemem
s szczegy.
Szczegy
Programici zarzdzaj szczegami. Dokadnie tak! Definiujemy zachowanie systemu
w najdrobniejszym detalu. Wykorzystujemy przy tym jzyki tekstowe (kod), poniewa
taka ich forma jest niezwykle wygodna (pomyl na przykad o jzyku polskim).
Jaki rodzaj szczegw musimy obsugiwa?
205
Ebookpoint.pl kopia dla: Jaroslaw Babijczuk siarsko@gmail.com
D ODATEK A
N ARZDZIA
Znasz rnic midzy znakami \n i \r? Pierwszy z nich (\n) oznacza wysunicie wiersza.
Drugi (\r) to powrt karetki. Ale czym jest karetka?
Na przeomie lat 60. i 70. najpowszechniejszym urzdzeniem wyjciowym komputerw
by teletekst. Najczciej uywany by model ASR-332.
Urzdzenie do miao gowic drukujc zdoln do wydrukowania dziesiciu znakw na
sekund. Skadaa si ona z maego cylindra, na ktrym wygrawerowane byy poszczeglne
znaki. By on przesuwany i obracany tak, eby w stron papieru skierowany by waciwy
znak. Pomidzy cylindrem a papierem bya umieszczona wstka z atramentem, ktry by
nakadany na papier w ksztacie wybranego znaku.
Caa gowica drukujca poruszaa si na karetce. Po wydrukowaniu kadego znaku karetka
bya przesuwana o jedn pozycj w prawo, przenoszc przy okazji gowic. Gdy ostatecznie
docieraa do koca 72-znakowego wiersza, trzeba byo nakaza jej powrt do pocztku,
wysyajc znak powrotu karetki (\r = 0x0D). Bez tego gowica wypisywaaby kolejne znaki
w 72. kolumnie, tworzc paskudny, czarny prostokt.
Oczywicie nie byo to wystarczajce. Powrt karetki na pocztek wiersza nie powodowa
podniesienia papieru o jeden wiersz. Jeeli po powrocie karetki nie zosta wysany znak
wysunicia wiersza (\n = 0x0A), to nowe znaki byy wypisywane w ju raz zapisanym wierszu.
Oznacza to, e w przypadku teletekstu ASR-33 sekwencj znakw koczc wiersz byo
"\r\n". Trzeba byo na to zwraca uwag, poniewa czas powrotu karetki mg by
duszy ni 100 ms. Jeeli wysaoby si sekwencj "\n\r", to kolejny znak mgby zosta
wydrukowany jeszcze w czasie, gdy karetka wracaa na pocztek wiersza, co utworzyoby
rozmazany znak gdzie na rodku strony. Na wszelki wypadek do sekwencji koczcej
wiersz czsto dodawalimy jeszcze jeden znak wymazywania3 (0xFF) lub dwa.
W latach 70. teleteksty zaczy wychodzi z uycia, a systemy operacyjne takie jak UNIX
skrciy sekwencj znakw koca wiersza do prostego "\n". Niestety, inne systemy
operacyjne, takie jak DOS, nadal stosoway star konwencj "\r\n".
Kiedy ostatnio podczas pracy z plikami tekstowymi zdarzyo Ci si zastosowa niewaciw
konwencj? Z problemem tym stykam si przynajmniej raz do roku. Dwa takie same pliki
tekstowe nie s identyczne, nie generuj tej samej sumy kontrolnej, poniewa maj inne
zakoczenia wierszy. Edytory tekstu nie zawijaj poprawnie wierszy albo tworz podwojone
http://en.wikipedia.org/wiki/ASR-33_Teletype.
206
Ebookpoint.pl kopia dla: Jaroslaw Babijczuk siarsko@gmail.com
W NIOSKI
odstpy midzy nimi, gdy zakoczenia wierszy s nieprawidowe. Programy, ktre nie
dopuszczaj pustych wierszy, odmawiaj dziaania, poniewa interpretuj znaki \r\n jako
dwa wiersze. Niektre programy rozpoznaj sekwencj \r\n, ale nie znaj ju \n\r. Mona
tak dugo opowiada.
Dlatego wanie wspomniaem o szczegach. Sprbuj zapisa straszliw logik algorytmu
sortowania za pomoc UML!
Wnioski
Od czasu gdy zaczem zajmowa si oprogramowaniem, narzdzia programistyczne zyskay
wiele moliwoci i stay si bardziej rnorodne. Osobicie uywam tylko niewielkiego
podzbioru tej caej menaerii. Do kontroli wersji kodu rdowego uywam Gita, Trackera
do zarzdzania problemami, Jenkinsa do cigej kompilacji, IntelliJ jest moim IDE, XUnit
suy mi do testw, a FitNesse do testowania komponentw.
Moim komputerem jest MacBook Pro, 2,8 GHz Intel Core i7, z 17-calowym matowym
ekranem, 8 GB pamici RAM, 512-gigabajtowym dyskiem SSD i dwoma dodatkowymi
ekranami.
207
Ebookpoint.pl kopia dla: Jaroslaw Babijczuk siarsko@gmail.com
D ODATEK A
N ARZDZIA
208
Ebookpoint.pl kopia dla: Jaroslaw Babijczuk siarsko@gmail.com
S KOROWIDZ
A
algebra Boolea, 183
algorytm sortowania, 111
analityk biznesowy, 124, 132, 169, 176, 177, 204
analiza
strukturalna, 45
trzech zmiennych, 154
API, 127, 128
testowanie, Patrz: test API
aplikacja mobilna, 61
architekt, 45, 135, 205, 207
architektura sterowana modelami, Patrz: MDA
artefakt, 45
B
backlog, 140, 141
Beck Kent, 98, 141
biblioteka zewntrzna, 101
biznesmen, 116, 117
Blanco John, 60
blokowanie pesymistyczne, 196
bdy, 39, 80, 131, 201
regresyjne, 133
Boehm Barry, 157
Boolea algebra, 183
Bossavit Laurent, 109
Bowling game, Patrz: Gra w krgle
C
Carlin Jim, 186
CASE, 205
CDS, 70
cele, 52
CI, Patrz: system cigej integracji
cig Fibonacciego, 158, 159
Coding Dojo, Patrz: dojo kodowania
Conrad Tim, 167
continuous integration system, Patrz: system cigej
integracji
CppUTest, 202
Craft Dispatch System, Patrz: CDS
Cucumber, 93, 124, 134, 204
cuke4duke, 124
Cunningham Ward, 204
CVS, 196
Czynnik pierwszy, 46
D
De Morgana twierdzenie, 183
debugowanie, 87, 98
czas, 89
DeMarco Tom, 118
209
Ebookpoint.pl kopia dla: Jaroslaw Babijczuk siarsko@gmail.com
S KOROWIDZ
DFD, 45
diagram
przej stanw, 45
przepywu, 45
przepywu danych, 44
UML, 205
Digi-Comp, 182
dojo kodowania, 109, 110
dokument wymaga systemu, 118
dokumentacja, 101, 127
niskopoziomowa, 102
E
Eclipse, Patrz: edytor Eclipse
ECP-18, 184
edytor, 116
Eclipse, 199, 200
Emacs, 199
IntelliJ, 200
TextMate, 200, 202
vi, 199
efekt obserwatora, 117
elektroniczny recepcjonista, 69
Emacs, Patrz: edytor Emacs
Emma, 41
Extreme Programming, Patrz: XP
F
Fibonacciego cig, 158, 159
Finder Ken, 69
FitNesse, 40, 41, 93, 100, 108, 124, 134, 198, 204
Fitzpatrick Jerry, 69
flow, Patrz: przepyw
funkcja, 102
G
Git, 197, 198
gra ping-pong, Patrz: ping-pong
Gra w krgle, 46, 109
gracz zespoowy, 55, 57, 59
Green Pepper, 204
Grenning James, 158
GUI, Patrz: interfejs uytkownika
210
Ebookpoint.pl kopia dla: Jaroslaw Babijczuk siarsko@gmail.com
H
hierarchia dziedziczenia, 43
hiperproduktywno, Patrz: przepyw
Hipokrates, 38
Hoffa Jimmy, 49
I
IDE, Patrz: edytor
idiom nawigacyjny, 110
instrukcja wyboru, 43
IntelliJ, Patrz: edytor IntelliJ
interfejs uytkownika, 127, 128, 205
iteracja, 140, 195
retrospektywa, 141
J
JBehave, 134, 204
Jenkins, 202
jzyk
makr, 116
skryptowy, 116
zobowiza, 71, 72, 74, 75
JUnit, 202, 203
K
karetka, 206
kariera, 43, 44
kata, 46, 109
kod
edytowanie, 199
gotowy, 92, 120, 203
inspekcja, 173
pokrycie testami, 99
struktura, 41, 79
tworzenie, 79, 80, 82, 85, 86, 87, 90, 91, 92, 93, 98,
146, 164
czas, 89
wasno, 172
kompilacja, 98, 107
ciga, 202
nieudana, 99
kontrola jakoci, 39, 41, 132
S KOROWIDZ
L
latajce palce, 157, 158
Lighthouse, 201
Lindstrom Lowell, 159
O
odpowiedzialno, 36, 39, 43, 47, 72, 164
zasada, Patrz: SRP
odwrcenie priorytetw, 145
oprogramowanie, 188
optymalizacja, 168
Osherove Roy, 70, 71
acuch dowodzenia, 43
M
manna skupienia, 142, 143
maszyna stanu, 44
MDA, 205, 207
Mealy George, 44
medytacja, 83
meneder, 115, 118, 169, 176, 177, 195
mentor, 95, 187, 189
metodologia, 189
analizy strukturalnej, 45
Kanban, 45
Lean, 45
projektowania strukturalnego, 45
Scrum, 45, 97
wodospadu, 45
XP, 45
zwinna, 97, 140, 201
Midje, 202
mikrozarzdzanie, 54
mistrz, Patrz: mentor
Model Driven Architecture, Patrz: MDA
Moore Gordon, 44
Moore Michael, 107
Murphy'ego prawo, 153
muzyka, 84, 108, 110
N
narzdzia, 195, 196, 197, 201, 202
CASE, 205
edytowanie kodu, Patrz: edytor
o otwartych rdach, 195
test
integracyjny, 204
jednostkowy, 202
komponentw, 203, 204
Nassi Ike, 44
NUnit, 202
P
PERT, 157
Petriego sie, 45
ping-pong, 111
Pivotal Tracker, 201
planning poker, Patrz: planujcy poker
planujcy poker, 158
poczta gosowa, 69, 70
polimorfia, 43
pomodoro technique, Patrz: technika pomidora
powrt karetki, 206
prawdopodobiestwo, 153
rozkad, 153, 154, 155
prawo
Murphy'ego, 153
wielkich liczb, 159
Prime factor, Patrz: Czynnik pierwszy
problem
pnej wieloznacznoci, 118
przedwczesnej dokadnoci, 118
profesjonalizm, 36
program, Patrz: projekt
Program Evaluation and Review Technique,
Patrz: PERT
programista, 45, 52, 60, 61, 65, 101, 115, 118, 120,
125, 127, 133, 149, 169, 176, 190, 195, 205, 207
czeladnik, 189, 190
gracz zespoowy, Patrz: gracz zespoowy
mistrz, Patrz: mentor
pod presj, 162, 163, 165
praktykant, 189, 190
rzemielnik, 190, 191
szkolenie, 189
wsppraca, 46, 160, 167, 169, 172, 173, 176, 177
zesp, Patrz: programowanie w zespole
programowanie, 48, 80, 86, 89, 90, 93, 98, 142, 144, 146
blokada, 85, 86, 196
ekstremalne, Patrz: XP
211
Ebookpoint.pl kopia dla: Jaroslaw Babijczuk siarsko@gmail.com
S KOROWIDZ
programowanie
lista problemw, 201
czenie edytowanych plikw, 196
metod cigej integracji, 45
narzdzia, Patrz: narzdzia
nauczanie, 182, 186, 187
obiektowe, 61
rozgazienie, Patrz: rozgazienie
sterowane testami, Patrz: TDD
strukturalne, 45
szacowanie, 118, 149, 151, 152, 153, 154, 157, 158,
159, 160, 190
ledzenie problemw, 201
tempo, 177
w parach, 45, 47, 84, 85, 164, 166, 172, 173, 189
w systemie wodospadu, 44
w zespole, 167, 172, 174, 176, 177
projekt
elastyczno, 42
funkcja, 41
iteracja, Patrz: iteracja
otwartordowy, 40
struktura, 41, 45
waciciel, 178
zmiany, 41
projektant, 45
gracz zespoowy, Patrz: gracz zespoowy
projektowanie, 65
fakty, 54
koszty, 54
obiektowe, 45, 150
strukturalne, 45
zasady, 45
SOLID, 45
przeklestwo Santayany, 45
przepyw, 83, 84
przerwy, 85
przysiga Hipokratesa, 38
R
randori, 111
raport Emma, 41
refaktoryzacja, 42, 46, 83, 107, 165, 190
regua
biznesowa, 128, 129
dziury, 146
skauta, 42
rezydentura, 188
212
Ebookpoint.pl kopia dla: Jaroslaw Babijczuk siarsko@gmail.com
S
Santana Carlos, 108
Santayany przeklestwo, 45
scenariusz, 125
Schneiderman Ben, 44
Selenium, 93, 124, 134, 205
sie Petriego, 45
Single Responsibility Principle, Patrz: SRP
skrt klawiszowy, 110
spotkanie
cel, 140
demonstracja produktu, 141
koszt, 138
na stojco, 140
plan, 140
planujce iteracje, 140, 141
retrospektywa iteracji, 141
selekcja, 138
wychodzenie, 139
SRP, 128
staysta, 187
strefa, 83, 84, 85
strona trzecia, 62
struktury wykres, 45
SVN, 196, 197, 198
system
cigej integracji, 110, 129
konstrukcja, 136
kontroli wersji, 129, 195, 202
CVS, Patrz: CVS
Git, Patrz: Git
klasy enterprise, 195
rozproszone, 197
Subversion, Patrz: SVN
SVN, Patrz: SVN
przydzielajcy zadania, Patrz: CDS
testowanie, Patrz: test systemu
szacunek
normalny, 155
optymistyczny, 154
pesymistyczny, 155
szkolenia, 43
S KOROWIDZ
T
tabela
decyzji, 45
przej stanw, 45
tablica Parnasa, 44, 204
TDD, 41, 45, 83, 85, 89, 97, 98, 99, 100, 101, 103, 109,
110, 133, 136, 164, 165, 190
Teamsters, 49
technika
oceny i rozwoju programw, Patrz: PERT
PERT, Patrz: PERT
pomidora, 144
test, 42, 131, 133
akceptacyjny, 41, 93, 100, 120, 125, 127, 129, 133,
134, 141
automatyzacja, 123, 124, 130, 176
bdy, 126
GUI, Patrz: test akceptacyjny interfejsu
uytkownika
interfejsu uytkownika, 128, 129
komunikacja, 122
tworzenie, 124
API, 128
automatyzacja, 133
badawczy, 132
choreografii, 135
hydrauliczny, 135
integracyjny, 135
narzdzia, Patrz: narzdzia test integracyjny
interfejsu uytkownika, 128, 129, 205
jednostkowy, 40, 41, 63, 99, 102, 127, 129, 133, 165
narzdzia, Patrz: narzdzia test jednostkowy
komponentw, 134, 141
narzdzia, Patrz: narzdzia test komponentw
manualny, 123, 136
optymistyczny, 132
pesymistyczny, 132
systemowy, 135
zestaw zautomatyzowany, 42
Test Driven Development, Patrz: TDD
tester, 169, 176, 177, 204
testowanie, 131, 133
TextMate, Patrz: edytor TextMate
Thomas Dave, 109
twierdzenie De Morgana, 183
U
UML, 45, 205
W
warunki kracowe, 132, 134
wasa, 111
Watir, 134, 205
wideband delphi, 157, 158, 159
waciciel projektu, 178
wykres
Nassiego-Schneidermana, 44
struktury, 45
wypalenie zawodowe, 44
wzorzec projektowy, 45, 61, 190
X
XP, 97
Z
zaangaowanie, 72
zarzdzanie czasem, 137, 144, 145, 147
zasada
niepewnoci, 117
pojedynczej odpowiedzialnoci, Patrz: SRP
zesp, Patrz: programowanie w zespole
zobowizanie, 71, 72, 73, 74, 75, 151, 154, 160, 163
ukryte, 153
zone, Patrz: strefa
213
Ebookpoint.pl kopia dla: Jaroslaw Babijczuk siarsko@gmail.com