Úlohy se dají řešit buď dobře nebo rychle. Vy je musíte řešit dobře a rychle.
Doc. RNDr. Zdeněk Kluiber, Csc.,PhD.
Dagi mi svým posledním článkem nahrál na příspěvek, který jsem chtěl už napsat dlouho. Je o jisté schizofrennosti práce programátorů. Programátoři musí stále plnit protichůdné požadavky. Máme psát jednoduchý znovupoužitelný kód. Máme psát kód, který je čistě napsaný a přitom výkonný. Máme programovat dobře a přitom rychle. Všechno jsou to požadavky, které jdou proti sobě. Kód může být buď jednoduchý nebo znovupoužitelný. Může být snadno pochopitelný nebo výkonný.
Obvykle samosebou volíme kompromis. Píšeme kód, který je více méně jednoduchý a v rámci možností znovupoužitelný. Ale ta touha po dokonalosti tu stále je. Často se přistihnu při myšlence, že kdybych měl dost času, zkušeností a talentu, tak bych tyto protichůdné požadavky skloubil dohromady. To je samozřejmě nesmysl. Čím dál tím více zjišťuji, že hlavní náplní mé práce je hledání kompromisů. Musím zvolit návrh v závislosti na požadavcích. Pokud jsou velké nároky na výkon, musí jít stranou dokonalost návrhu. Pokud je nejdůležitějším požadavkem konfigurovatelnost, musí jít stranou jednoduchost.
Uvedu to na jednoduchém příkladu (není moc původní, přivedl mě na něj kolega). Máme vymyslet formát souboru, pro přenos informací o zákaznících. Aby to nebylo tak jednoduché, tak každý zákazník může mít několik adres a několik telefonních čísel. První co mě napadne, je jednoduchý XML formát, kde bude vždy údaj o zákazníkovi a v něm budou vnořeny seznamy adres a telefonních čísel. To by byl čistý, snadno znovupoužitelný formát. Všechno se ale změní, když zjistím, že těch zákazníků mám milión a tento soubor budu generovat na základě dat v databázi. Potom mě tento návrh donutí udělat přes milión dotazů do databáze, pokaždé když budu chtít vyexportovat data. (Za předpokladu, že se mi to všechno nevejde do paměti).
Za těchto okolností se asi budu více přiklánět k tomu, že nejdříve vygeneruji seznam zákazníků, potom seznamy adres a telefonních čísel a spojím je pomocí nějakého klíče. To mi zmenší počet nutných dotazů na tři. Jenom ten formát bude mnohem méně elegantní a rozšířitelný. Bude prostě víc relační než objektový.
V tomto příkladě mě ani nenapadá žádné kompromisní řešení. Buď kladu větší důraz na výkonnost nebo na čistotu návrhu i když vnitřně tak nějak toužím po obojím.
Tato schizofrenie se potom projevuje i na našich požadavcích. Chceme programovací jazyk, který nám dá svobodu, ale zároveň nám bude co nejvíce pomáhat a kontrolovat nás. Chceme technologie, které jsou jednoduché a zároveň obecné a rozšířitelné. Obvykle si neuvědomujeme, že to co chceme, nemůže existovat. Podle mě je při výběru technologie důležitá možnost výběru podle požadavků. Pokud vím, že chci dělat něco jednoduchého, tak chci mít možnost to udělat jednoduše. Pokud vím, že chci dělat něco specifického, chci aby mi to daná technologie umožnila. Chci dát své schizofrenii prostor. Pokud jsem nucen dělat jednoduché věci složitě nebo se nemohu odchýlit od předem vytyčeného směru tak přestávám být schizofrenní, začínám být maniodepresivní.
Hledani kompromisu je jedna z nejtezsich veci vubec ;-). A my kompromisy hledat musime… Bohuzel kompromisy velmi casto vedou k polovicatym resenim, se kterymi se tezko smirujeme. Tedy alspon ja.
A co kdybys to do toho XML jen zapsal ve spravnem poradi:
a) udelam query na zakazniky – order by zakaznik id
b) udelam query na adresy – order by zakaznik id
c) udelam query na telefonni cisla – order by zakaznik id
Potom vsechny tri result sety najednou ctu a zapisuju vysledek primo do XML souboru.
IMHO dobreho programatora poznate prave podle toho, ze neni schizofrenni 😉
To Lukas Barton: Ano, podobná řešení jsou možná. Potom ale dostanu pěkně ošklivý kód. Tvoje řešení například vyžaduje držet zároveň tři otevřená JDBC připojení. Takže zas musím volit kompromis mezi čistotou kódu a výkoností.
Lukasi B, ja si myslim ze tady vubec nejde o ten priklad s XML, ale mozna jsem neco nepochopil, treba pointu tohoto clanku…
🙂 Lukáš se ještě musí učit … udržet si nadhled na informacemi… 😉
Ale úvaha v článku je hodně zajímavá. Rozhodně si ji budu pamatovat!