13. Czego się dziś nie dowiem?
Która kombinacja wzorców, xDD, języków,
frameworków i paradygmatów gwarantuje
sukces
14. Dowiem się za to jak nie oszaleć...
Pracując z monolityczną, odziedziczoną, masą
kodu, który zbliża się do granic wytrzymałości,
by za chwilę zapaść się pod własnym ciężarem,
tworząc czarną dziurę, która pochłonie
wszystkich żywych programistów w okolicy
32. Czas?
Kilka „extra feature” na które wszyscy czekali?
Nadmierna wiara w siłę sprawczą technologii?
Projekty często postrzegane jak czysto
techniczne?
Ignorancja?
Arogancja?
52. publicenumQuadrant{
/**
* low complexity, little changes - simple utilities.
* /
tools,
/**
* simple yet frequently touched area of your code. Core of it, yet done well
* and expanding. New features grow, new classes are extracted, complexity
* is kept at bay. Keep it that way!
* /
breedinggrounds,
/**
* Ugly files but stable - written once for specific purpose, which they
* fulfill well enough. High complexity makes them risky to touch, but is
* there any need to?
*
* Ugly Stables also because of Hercules and Augias's stables... ;-)
* /
uglystables,
/**
* Code fitting here is fraught with complexity and changed often. Meaning,
* you either didn't got the client's needs right and need to make lotsa
* changes now, or you mis-designed and now have to work around it.
* Or there's simply a number of bugs...
* /
designflaw
}
55. #fetch all jobs
jobs_rsp=requests.get(
"https://primitive.ci.cloudbees.com/job/roadrunner/api/python")
#all buildsurls
build_urls=[x['url'] for x ineval(jobs_rsp.content)['builds']]
pairs=[]
for build_url inbuild_urls:
build=eval(requests.get("%sapi/python" %(build_url)).content)
result=build['result']
changeSetItems=build['changeSet']['items']
if changeSetItemsandnotresult=='SUCCESS':
affectedPaths=build['changeSet']['items'][0]['affectedPaths']
for i initertools.permutations(affectedPaths,2):
pairs.append(i)
counter =collections.Counter(pairs).most_common(5)
for pair incounter:
printpair
63. „aka” refactoring
kompulsywny „refactoring” to zło
unikaj „historyjek” typu „zrefaktoryzować X”
zanim zaczniesz, zastanów się czy warto
nie pytaj o pozwolenie, raczej proś o przebaczenie
nadaj „technical debt” znaczenie
70. … musisz mieć jasno określony cel …
… strategia dobrana do potrzeb i możliwości …
… daj sobie przestrzeń na zmianę zdania …
nie daj się znowu sparaliżować „big design (tm)”
… gdyż twój cel może się zmienić ...
73. procesy wsadowe (batch) odseparowane
moduły komunikują się ze sobą asynchronicznie
Użytkownicy widzą system jako jedność
i komunikują się synchronicznie
Jedyne co współdzielimy w systemie to mentalny
model
mvn clean install < 60 sekund
74. Każdy moduł musi dziedziczyć
kontekst i ograniczenia
Może też wprowadzać specyficzne, lokalne
ograniczenia w kontekście poszczególnych
modułów
78. Czy wiesz jak twoi użytkownicy korzystają z
systemu?
Czy wiesz że twój „kluczowy” klient nie korzysta
już z systemu od 5 lat?
Czy wiesz że „killer feature” nie zachwycił
rynku a ty ciągle utrzymujesz ten kod?
81. Nie inwestuj w drogie narzędzia
Będziesz czekał miesiącami na „approval”
A potem narzędzie i tak zawiedzie twoje
oczekiwania :)
Zainwestuj w kreatywność
82. Tylko proszę bez „wykomentowania” kodu
Twój SCM będzie pamiętał
… po prostu wyrzuć to...
85. System's resilience is often sacrificed for purposes
of
short-term productivity and stability.
86. Productivity and stability are the
usual excuses for turning creative human beings
into mechanical adjuncts
to production processes.
87. Or for establishing bureaucracies and theories
of knowledge that
treat people as if they were only numbers.
Donella Meadows, thinking in systems a primer