O knjizi
Obrasci koji oblikuju softverske projekte
Konvejev zakon. Bruksov zakon. Gudhartov zakon. Hajramov zakon. Ako dovoljno dugo
radite u razvoju softvera, verovatno ste se već susreli sa ovim pravilima, čak i pre nego što
ste znali kako se zovu. Videli ste neuspešno ponovno pisanje sistema. Radili ste u timu koji
postaje sve veći, ali sve sporiji.
Ovi obrasci se u softverskim projektima pojavljuju više od pedeset godina. Iskusni inženjeri
ih poznaju, ali su ih naučili na teži način – kroz neuspešne projekte, probijene rokove i noćna
debagovanja. Te lekcije nikada nisu bile na jednom mestu. Živele su u akademskim
radovima iz šezdesetih, u blog postovima koji se jednom podele i zaborave, u diskusijama i
pregledima koda.
Ova knjiga ih sve stavlja na jedno mesto.
63+ zakona i principa, svaki sa sopstvenim poglavljem. Svako poglavlje pokriva odakle
zakon potiče, kako zaista funkcioniše, kako izgleda u praksi i kako se povezuje sa drugim
zakonima u knjizi. Taj poslednji deo je ključan – neki od ovih principa se međusobno
pojačavaju, a drugi su u direktnom sukobu. Odeljci „Povezani zakoni“ kroz celu knjigu
pokazuju gde su te veze. To je važno jer je u praksi inženjerstvo pitanje kompromisa, ne
pravila.
Šta knjiga donosi
Svaki zakon – jasno i strukturisano
• Šta zakon govori. Jasna definicija svakog principa sa objašnjenjem suštine i
mehanizma delovanja.
• Odakle potiče. Istorijski kontekst i poreklo – ko je prvi formulisao zakon i u kojim
okolnostima.
• Zašto je važan. Praktična relevantnost u savremenom softverskom inženjerstvu.
• Primeri iz prakse. Kako zakon izgleda u stvarnim softverskim projektima, sa
konkretnim scenarijima.
• Povezani zakoni. Kako se principi međusobno dopunjuju, ali i kako ponekad dolaze
u direktan sukob. Inženjerstvo je pitanje kompromisa, ne pravila.
Struktura: sedam samostalnih celina
I. Arhitektura i složenost (8 zakona)
Kako nastaju složeni sistemi, zašto se apstrakcije raspadaju pod pritiskom stvarnosti i zašto
arhitektura nikada nije samo dijagram.
Galov zakon · Zakon propusnih apstrakcija · Teslerov zakon · CAP teorema · Hajramov
zakon · Efekat drugog sistema · Zablude distribuiranog računarstva · Zakon neželjenih
posledica · Zavinskijev zakon
II. Ljudi, timovi i organizacije (10 zakona)
Zašto arhitektura sistema često liči na organizaciju koja ga pravi, zašto dodavanje ljudi u
zakasneli projekat može dodatno da ga uspori i zašto se problemi u komunikaciji brzo
pretvaraju u probleme u kodu.
Konvejev zakon · Bruksov zakon · Danbarov broj · Ringelmenov efekat · Prajsov zakon ·
Patov zakon · Peterov princip · Bas faktor · Dilbertov princip
III. Vreme, procene i planiranje (6 zakona)
Procene greše zato što ne zavise samo od vremena za pisanje koda. Zavise od
neizvesnosti, komunikacije, promena zahteva, skrivenog rada i ljudske sklonosti ka
potcenjivanju složenosti.
Hofštaterov zakon · Parkinsonov zakon · Pravilo devedeset-devedeset · Gudhartov zakon ·
Gilbov zakon · Knutov princip optimizacije
IV. Kvalitet, održavanje i evolucija (10 zakona)
Softver nije završen kada počne da radi. Tada počinje njegov pravi život – greške,
održavanje, testiranje, tehnički dug i postepeno propadanje sistema koji se ne neguje.
Marfijev zakon · Postelov zakon · Teorija razbijenih prozora · Izviđačko pravilo · Tehnički
dug · Linusov zakon · Kerniganov zakon · Piramida testiranja · Paradoks pesticida ·
Lemanovi zakoni evolucije softvera · Stardžeonov zakon
V. Skaliranje, performanse i rast (4 zakona)
Rast sistema ne donosi samo veći broj korisnika. Donosi nova ograničenja, uska grla i
probleme koji nisu bili vidljivi dok je sistem bio mali.
Amdalov zakon · Gustafsonov zakon · Metkalfov zakon
VI. Kodiranje i principi dizajna (6 zakona)
Svakodnevni inženjerski principi koji pomažu da kod ostane razumljiv, održiv i dovoljno
jednostavan.
DRY (Ne ponavljaj se) · KISS (Neka bude jednostavno) · YAGNI (Neće ti trebati) · SOLID
principi · Zakon Demeter · Princip najmanjeg iznenađenja
VII. Donošenje odluka i kognitivne pristrasnosti (13 zakona)
Mentalni modeli i pristrasnosti koje utiču na procene, rasprave, arhitektonske izbore i
menadžerske odluke.
Daning-Krugerov efekat · Henlonova britva · Okamova britva · Zabluda nepovratnih troškova
· Mapa nije teritorija · Pristrasnost potvrde · Gartnerov ciklus i Amarin zakon · Lindijev efekat
· Razmišljanje iz prvih principa · Inverzija · Paretov princip (80/20) · Kaningamov zakon
Prateći zakoni unutar poglavlja
Mnoga poglavlja pokrivaju i prateće zakone i modele koji se pojavljuju unutar glavnih tema.
U knjizi ima više nego što sadržaj na prvi pogled sugeriše.
Boksov zakon (George Box) · Spotifaj model · Pravilo dve pice · Efekat Mrtvog mora · Efekat
kobre · Sindrom prevaranta · i drugi
Predgovori
• dr Rebeka Parsons (Dr. Rebecca Parsons) – bivša direktorka za tehnologiju,
Thoughtworks
• Edi Osmani (Addy Osmani) – direktor inženjeringa, Google Cloud AI
Pohvale
„Divno kompaktna knjiga prožeta teško stečenim lekcijama mudrosti. Možete provesti
decenije otkrivajući ove zakone kroz ožiljke iskustva, ili možete dozvoliti Milanu da
vam otključa njihove tajne za jedan vikend.“
Marten Dalmijn – autor knjige Driving Value with Sprint Goals
„Ova knjiga pruža katalog delotvornih modela razmišljanja za dizajn sistema,
organizacionu dinamiku, upravljanje projektima i druge aspekte softverskog
inženjerstva. Ona neće donositi odluke umesto vas, ali će vam pružiti jasnoću da ih
donosite promišljeno.“
Vlad Hononov – autor knjiga Balancing Coupling in Software Design i Learning
Domain-Driven Design
Kome je knjiga namenjena
• Programerima koji žele da bolje razumeju zašto projekti uspevaju ili propadaju
• Softverskim arhitektama koji donose dugoročne tehničke odluke
• Tehničkim liderima koji vode timove
• Menadžerima koji planiraju rokove, kapacitete i prioritete
• Iskusnim inženjerima koji žele da imenuju obrasce koje već poznaju
• Mlađim programerima koji žele da brže steknu rečnik i način razmišljanja seniora
Nije samo o kodu
Polovina knjige pokriva ljude, organizacije i način na koji donosimo odluke – ne samo
tehnologiju. Ovo nije tutorijal za kodiranje i neće vas naučiti programski jezik ili radni okvir.
Softverski projekti retko propadaju zbog jednog pogrešnog reda koda. Mnogo češće
propadaju zbog pogrešnih pretpostavki, loše komunikacije, potcenjene složenosti, nejasnih
prioriteta, loših procena i odluka koje su delovale razumno samo dok posledice nisu postale
vidljive.
Zakoni softverskog inženjerstva pomažu da te obrasce prepoznamo ranije. Ova knjiga ne
obećava jednostavne recepte. Ona daje jezik, okvir i mentalne modele pomoću kojih
možemo bolje da razumemo projekte, timove, sisteme i odluke koje svakodnevno donosimo.
Tehnologije se menjaju. Obrasci ostaju iznenađujuće postojani.