Zen a umění programovat
Způsobů, jak si osvojit umění programování je spousta. Moje cesta k tomuto cíli se podobá cestě renesančního malíře, který první rok zametal dílnu, druhý rok míchal barvy... a teprve po několika dalších letech dostal do ruky štětec. Sice ještě neuměl malovat, ale jinak o malování věděl první poslední... kromě jiného znal vlastnosti jednotlivých barev a uměl se dívat. A něco mi říká, že kdyby mistr Foo přijímal žáky, učil by je programovat podobně, jako se to učím já.Než jsem se začala živit péčí o distribuční balíčky v openSUSE, nějak jsem ťukat kód dovedla, ale když se dnes na svá dílka z té doby podívám, nezbývá mi než přiznat si, že to byla fakt bída. Během posledních dvou let jsem se ke skutečnému programování nedostala, ale když to teď zas zkouším, je to o hodně jiné než dřív. Jakto? Zřejmě proto, že jsem celou dobu každý den pečlivě zametala dílnu.
Správce distribučních balíčků je ten, kdo se jako jeden z prvních potkává s chybami v nových verzích software a spravuje je. Programováním se to nazvat nedá: prostě jen sedíte, v jednom okně textový editor, v druhém debugger, ve třetím shell s grepem v pohotovosti... a hledáte a hledáte. Zezačátku je to docela dřina, ale když několik měsíců opravujete každý den jednu chybu, nakonec se dostanete do stavu, kdy už jste skoro všechny chyby viděli. Když se vám podaří nahlášenou chybu zreprodukovat (což bývá největší dřina a noční můra), další práce připomíná relaxaci. Stačí jen systematicky postupovat vpřed s vědomím, že chybu dříve či později objevíte.
Samozřejmě jsem za ty dva roky něco málo kódu rozsáhlejšího než kratičký patch napsala. Většinou to byly shellové nebo perlové skripty, které mi usnadňují práci, sem tam nějaký maličký jednoúčelový céčkový prográmek slepující pár funkcí z nějaké knihovny (o tom, v které knihovně co hledat s časem získají správci balíčků vynikající přehled). Na to, napsat si nějaký opravdový prográmek v céčku ale nebyl čas - a vlastně jsem ani neměla důvod to zkoušet.
Konečně nastala změna. Začala jsem ve škole chodit na céčko a jako zápočtový domácí úkol dostala napsat céčkový preprocesor (naštěstí ne kompletní, ale i tak je to práce jak na kostele). Nejdřív jsem se lekla. Pak jsem si sbalila do batůžku výtisk céčkové normy a po tramvajích začala zkoumat, co to vlastně všechno obnáší. Potom jsem si sepsala specifikaci. Lekla jsem se podruhé. A protože mě v pátek nemoc zahnala do postele, přitulila jsem se k freye a začala jsem tu obludu programovat.
Je to docela legrace: Sice nedělám většinu chyb, které dělají skoro všichni (a když přece, tak je rychle najdu), ale zato vyrábím bugy, které by nikdo normální neudělal. Pod rukama mi roste kód tak kostrbatý, že kdybych takový dostala do ruky v nějakém balíčku, tak autora prokleju (už jsem si vypěstovala celkem přesný odhad, jak velká čuňačina je program, když se jen letmo a zdálky mrknu na jeho strukturu): Prostě skoro jak policajt, umím kód mnohem lépe číst než psát. Takže přepisuju a přepisuju (a raduju se, že z toho pomaličku leze něco rozumného). A občas se strašně vztekám, ale jinak mě to moc baví.
Momentálně mám hotové jen vysekávání komentářů a část rozkládání na tokeny a jsem mile překvapená, že to ještě pořád většinou nepadá, správně reaguje na chyby, a že jsem se v tom ještě úplně nezamotala. Uvidíme, co budu říkat, až toho kódu bude desetkrát tolik, a každý kousek ještě třikrát přepíšu. Ale myslím, že se mi to bude líbit pořád.
Jeden critical bug jsem ale ještě nevyřešila: zatím nevím, jak se donutím, abych v pondělí nechala hackování své nové pěkné hračky a chopila se koštěte. Inu, snad to spraví mistr Foo a jeho zenová hůl. :-)
Jestli se dostanu přímo k extrémnímu programování a dašlím metodikám, ještě nevím - záleží jak zbyde čas ke konci semestru. Ale něco o test-driven development, kontinuální refaktorizaci a souvisejících věcech si nejspíš řekneme. Vlastně na to trochu narazím už na příštím semináři na jednom konkrétním příkladu (s pracovním názvem "příběh jedné funkce").