Archive for the ‘Uncategorized’ Category

Feature branching

Tuesday, July 5th, 2011

Před chvílí jsem dokoukal povídání Mika Masona a Martina Fowlera o dělání větví pro vlastnosti (feature branching). Do teď jsem si myslel, že to je dobrá věc, ale trochu mé přesvědčení zviklali.

O co jde? Některé týmy postupují tak, že pro každou novou vyvíjenou věc založí novou větev. Ta se začlení do hlavní vývojové větve, až když je daná věc hotová. Má to spoustu výhod a až dodnes mě nedošlo, že to s sebou nese i pár zásadních problémů. Pro nezkreslenou informaci se koukněte na to video, má jen jedenáct minut. Já tu shrnu jen to, co mi přišlo jako nejzásadnější.

Feature branching ohromně komplikuje refaktoring. Když si všimnete zatuchlého kódu, můžete ho refaktorovat, ale dost si tím zkomplikujete merge. Pokud totiž uděláte větší refaktoring, je velká šance, že se dotknete kódu, na kterém dělá někdo jiný. Dostanete se do situace, s kterou vám ani Git nepomůže. Strávíte pěkných pár chvilek ručním mergem a je tu pak dost velká pravděpodobnost, že příště si ten refaktoring dvakrát rozmyslíte. A to je špatně.

Když nad tím tak přemýšlím, potkalo mě to minulý týden. Udělal jsem ve své větvi refaktoring a začlenil jsem ho do hlavní větve. Kolega ale stále žil ve své větvi, mé geniální změny si proto nevšiml a svůj kód udělal o poznání hůře, než by mohl. Vůbec mě napadlo, že by to mohlo být způsobeno nějakou systematickou chybou.

Neříkám, že přestanu feature branching dělat, ale rozhodně se nad ním pořádně zamyslím.

Jak na Git

Sunday, June 26th, 2011

V posledních pár měsících jsem se pral s verzovacím systémem Git. Teď už mám dojem, že jsem mu přišel na kloub, tak se chci podělit o to, jak se mi to povedlo. Snad to nezakřiknu.

Nakonec u mě zabral následující postup.

  1. Přečíst si knihu ProGit (anglicky nebo česky)
  2. Několik týdnu se pokoušet s Gitem pracovat, rvát si vlasy z hlavy, říkat si, že už jsem asi na ty počítače starý.
  3. Přečíst si knihu znovu a dosáhnout osvícení.

Rozhodně se tu nechystám Git popisovat, přečtěte si tu knihu. Jenom tu popíšu svůj mentální model toho, jak to celé pracuje. Musím vás varovat, že tento model se může lišit od reality, ale mě zatím pomáhá. Schválně budu ignorovat oblast změn (staging, index), budu se věnovat hlavně revizím, kolem kterých se všechno v Gitu točí.

Revize (alias snímek neboli commit) vznikne, když commitneme nějaké změny. Je důležité si uvědomit, že revize obsahuje obraz našeho projektu v okamžiku jejího vzniku. Takže to není popis rozdílů, ale opravdu snímek všech souborů tak jak v čase vytváření revize vypadaly. Interně to je samozřejmě pořešeno tak, aby to bylo rychlé a diskově nenáročné, navenek se ale Git opravdu tváří tak, že má hromadu snímků stavu projektu.

Každá taková revize má navíc jednoznačný identifikátor (hash) a také informaci o tom, které revize jí předcházely.

Toto už stačí, aby to všechno fungovalo. Máme hromadu revizí, které jsou uspořádány v jakémsi orientovaném grafu a my po tom grafu můžeme dle libosti skákat, dělat změny a vytvářet z nich nové revize. Abychom se v tom neztratili, mohou na jednotlivé revize ukazovat pojmenované identifikátory jako jsou větve a tagy. Je tu speciální identifikátor HEAD, který ukazuje na místo v grafu v které se právě nacházím. Všechny tyto identifikátory, ale nejsou nic jiného, než odkazy na revize.

Takže například kouzelný příkaz

git reset --hard <<revize>>

mi převede (téměř) všechny soubory v projektu do stavu v dané revizi a změní hodnotu odkazu HEAD. Tento příkaz si zapamatujte, ohromě se hodí, když se dostanete do potíží. Například když se vám nepovede merge a Git vám automaticky ty nepovedené změny commitne. Nemusíte mazat a naklonovat znovu celé úložištěm jako jsem to jednou v panice udělal já. Stačí se uklidnit, uvědomit si co je Git zač, najít číslo revize v které to bylo ještě v pořádku a vrátit se do ní. Docela bezpečné je vracet se do origin/master, to ukazuje na revizi, kde byl vrchol hlavní větve ve zdrojovém úložišti při poslední synchronizaci. Nepovedené změny sice někde v Gitu zůstanou hnít, ale to zas tak nevadí.

Toliko můj mentální model Gitu. Možná se ještě zmíním o tom, v čem se mi Git líbí. Zajímavé je například vyzobávání třešínek (cherrypick). To je funkce, která mi umožní vyzobnout si změny provedené v jedné revizi a aplikovat je na jinou revizi. Úžasná funkce, pokud potřebuje zároveň aplikovat jednu změnu do víc větví.

Mocná i když trochu nebezpečná zbraň je také přeskládání (rebase), které vám například umožní přehrát změny provedené v jedné větvi nad jinou větví. Dokonce vám to umožní přeházet pořadí revizí, slučovat revize dohromady, rozdělovat jednu revizi na víc atp. Ve skutečnosti se samozřejmě revize nemění, jenom se vytvoří nové, které se jen tváří jako ty původní s příslušnými změnami. Na přeskládání ale pozor, můžete tím naštvat své spolupracovníky, jejichž revize vycházejí z těch původních, nepřeskládaných.

Jinak mohu Git jen doporučit. Výsledek stojí za to, pokud přežijete dvojí přečtení jedné krátké knihy a čtrnáct dnů utrpení.

Jak je to s tou inovací

Tuesday, March 1st, 2011

Chci jen velmi krátce reagovat na Jírův článek inovace bez legrace. Začnu něčím, co je tak evidentní, že si to mnoho lidí ani neuvědomuje.

Cílem většiny podniků je vydělávání peněz, IT je pro ně jenom nutné zlo. Ano, ušetří dost nákladů, ale obvykle nepřináší naprosto žádnou konkurenční výhodu! Proto nemá pro banku smysl si psát vlastní framework. Bude jí to stát hromadu peněz a co za ně dostane? Více zákazníků? To sotva. Jedině snad mlhavou naději na budoucí úsporu. Pokud se banka pohybuje v konkurenční prostředí, tak musí nějak nalákat klienty. Může to být lepším prodejem, marketingem nebo nedejbože lepšími službami či cenami. Rozhodně to nebude lepším IT. Tady jsem schválně hodně přísný. Ano vím, že IT může dobře podpořit procesy, takže se náklady opravdu sníží a tím se mohou snížit i ceny. Ale to IT je tam jen prostředek, kdyby to šlo bez něj, rádi by si to bez těch ajťáků obstarali. Vím i o úspěchu eBanky, která lákala zákazníky právě na technologii. Ale podívejte se, jak skončila.

Tím se ovšem nesnažím říci, že pokusy o inovaci nemají smysl. Mají. Ale pro IT firmy, konzultanty a podobné. Pro ty je naopak IT prostředkem pro zisk, takže by měli inovovat co to dá. Banka by si ale měla počkat, až si za ni vyláme zuby někdo jiný a pak by měla převzít úspěšné inovace. Neměla by si do baráku pouštět žádný framework, který není vyzkoušen na někom jiném!

Rozloučím se odkazem na článek, který napsal Joel Spolsky In Defense of Not-Invented-Here Syndrome. V tom problém přesně vystihl. Ocituji to nejdůležitější

Pokud je něco jádrem vašeho podnikání, dělejte to sami ať to stojí co to stojí

Nebo ještě lépe

Vyberte si vaše hlavní podnikatelské schopnosti a cíle a ty řešte interně. Pokud jste softwarová firma, psaní skvělého kódu je vaše cesta k úspěchu. ... Pokud jste farmaceutická firma, napište si software pro výzkum léků, ale nevytvářejte vlastní účetní software.

Pro zájemce ještě přikládám slavný a kontroverzní článek IT does not matter.