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. :-)

Jo anička... kuba (10. 3. 2007 - 22:50) Sbalit(1)
Ještě že tě to suse má :-)
Ať se dílo podaří.. m4r3k (10. 3. 2007 - 23:53) Sbalit(1)
Ať se dílo podaří. :-) Mistra foo jsem neznal, takže díky za odkaz.
Mne se tedy nejvetsi lekce z qk (11. 3. 2007 - 1:01) Sbalit(4)
Mne se tedy nejvetsi lekce z prehlednosti kodu dostala v principech prekladacu. Ve flexu sem jen nejak nasazel ty vyrazy. V bisonu sem si rikal jak pekne obraty tam pouzivam...Ale potom se zacalo do bisonu vkladat cim dal vic kodu a najednou mi me krasne obraty zase neprisli tak skvele, kdyz sem stravil skoro pulku casu jenom pochopenim co muj zapis znamena, abych mohl dopsat dalsi vec. A nakonec to dopadlo tak, ze kod byl i celkem dobre citelny, krasne rozdelen do malych uhlednych dobre popisujicich funkci, ktere si delaji to svoje na malym kousku. Ostatne to mne privedlo k tomu si tenhle semestr zapsan Umeni programovani - dokonaly kod (vsiml sem si ze sem david Majda chodi tak splh! splh! :) ... a primluvil bych se k tomu probrat vliv extremniho programovani na citelnost kodu).
Dokonalý kód David Majda (11. 3. 2007 - 18:03) Sbalit(3)
Na šplhání pozor, narozdíl od účasti a vypracovaných úkolů ti zápočet nezařídí ;)

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").
Dokonaly kod? Jejda! :-) anicka (11. 3. 2007 - 19:47) Sbalit(2)
Dokonaly kod? Jejda! :-) Koukam, ze temno a rekurze nejsou jedine mystikou zavanejici predmety na matfyzu...
PqYrFOJNSpZRsjNRHBs ecgkyawru (16. 10. 2009 - 20:25) Sbalit(1)
nHFL8c <a href="http://dvtpjqqhscap.com/">dvtpjqqhscap</a>, [url=http://qolchosdqcpd.com/]qolchosdqcpd[/url], [link=http://zuralgeldlqd.com/]zuralgeldlqd[/link], http://tvgjzdsqmukj.com/
Personalistika Satai (11. 3. 2007 - 8:47) Sbalit(1)
Ty bys byla skvělý konzultant pro personalisty. Programátor by přinesl kus kódu a ty bys ukázala palcem nahoru nebo dolu ;)
Zverejneni preprocesoru maertien (20. 3. 2007 - 21:09) Sbalit(3)
2anicka - Bylo by mozne zdrojaky tve implementace C preprocesoru nekde vyvesit? Docela by mne zajimalo, jak to resis :-)
Az to budu mit hotove, tak anicka (20. 3. 2007 - 23:02) Sbalit(2)
Az to budu mit hotove, tak urcite jo. Ale jeste zbyva ta skutecna prace: zatim mam hotovy jen tokenizator a reseni includu, ted se zrovna rvu s ukladanim definovanych maker. No... a pak jeste hash a dva hashe a nahrazovani tech maker... a pak dam vedet :-)
Dekuji :-) Tesim se. maertien (20. 3. 2007 - 23:46) Sbalit(1)
Dekuji :-) Tesim se.