Oto Buchta napsal(a): > b) trošku mi to připomíná schizofrenii jednoho známého webdesignéra. > Dostal za úkol vyvinout velkou JavaScriptovou aplikaci. Vyvíjel ji na > MACovi a safari a za pár měsíců byla téměř hotová. Chybělo posledních > pár bezvýznamných nedodělků, když dostal za úkol rozchodit aplikaci i > na ostatních prohlížečích. Chrome mu zabral den (používá také WebKit), > Opera fungovala, s ohnivou liškou se mořil dva týdny a MSIE nedal > vůbec. Qůli MSIE pak musel tuto aplikaci celou přepsat... Prostě "bad > by design", neboli jak říkáme tu u nás - z hovna tatar neuděláš. Velmi > obdobně to skončilo s NetScapem (mozilla byl kompletní přepis, skoro > všechno se zahodilo). Ve světě Javy tu máme dva exemplární příklady > kompletního přepisu qůli výkonnosti: Xerces a Axis.
Tady patrne zaspal architekt, ktery si mel na zacatku rici, v jakych prohlizecich ta aplikace pobezi a podle toho vybrat, v cem se to bude implementovat. A i kdyz tam MSIE nepatril, tak mel mit v seznamu rizik portaci na MSIE a byt na ni pripraven. Dobry architekt se stara o rizeni rizika. > Čitelnost je samozřejmě VELICE důležitá. Nelze ji ale prosazovat za > každou cenu. Mohu-li pro numerický výpočet hodnoty použít Newtona, > proč místo toho používat čitelnější půlení intervalu? Proč třídit > prostým hledáním prvků od největšího po nejmenšího, když jsou tu > bublina, QuickSort či MergeSort? Pouzivani efektivnich algoritmu je samozrejme spravne. Ani tato zasada ovsem neni zadna mantra. Kdyz budes vyhledavat v serazenem poli 100 celociselnych hodnot, tak je jedno, zda to bude sekvencne ci binarnim pulenim. A pokud bys mel to binarni puleni sam programovat, tak je lepsi pouzit sekvencni vyhledavani, protoze je to kratsi a je mene pravdepodobne, ze v tom udelas chybu. Jinak ale: EFEKTIVNI ALGORITMY SAMOZREJME ANO. Citelnosti jsem mel na mysli citelnost na urovni prikazu. Tj. napr. misto y = x++ + ++x; psat radeji x++; y = 2*x + 1; x++; nebo y = 2*x + 3; x += 2; > Při klasické iteraci for (int i=0; i<N, i++) se > provádí v každém kroku porovnání oproti hodnotě (odečet plus test na > znaménko), kdežto při for (int i=N-1; i>=0; i--) se provede odečet > pouze jednou a pak v každém kroku pouze test na znaménko. Naučil jsem > se to na superpočítačích a tak nějak mi to zůstalo, i když vím, že v > současné době to má pouze mizivý vliv na rychlost, pokud vůbec. Tohle je priklad "optimalizace", kterou povazuji spise za skodlivou. Kdyz vidim v kodu for (int i=N-1; i>=0; i--) tak si ptam "proc to programator prochazi odzadu?". Tj. z meho pohledu to citelnost snizuje a dopad na vykonnost je skutecne bezvyznamny. >> Snazit se odhadnout, kde bude potreba optimalizace, je >> hadani a i ti, kteri rozumeli mailu Ladi Thona v tomto vlaknu, by meli >> uspesnost takoveho hadani pravdepodobne nizkou. > > Nesouhlas. Stačí k tomu léta praxe v roli archtekta a k tomu navíc > praxe v roli oponenta kódu :-D (Oponent Kódu je úžasná vymoženost. > Každý první pátek v měsíci dostane oponent od kolegy kód napsaný za > poslední měsíc, přes víkend si tím prolistuje a v pondělí ráno si na > max hoďku (bohatě stačí, ale qůli pochopení API musí být oba ze > stejného týmu) spolu sednou a prodebatují onen kód. Má to čtyři úžasné > dopady: kód se dokumentuje, píše pokud možno čitelně (dyk já budu taky > dělat oponenta, takže vím, jaký kód bych chtěl vidět), člověk má > zpětnou vazbu (a proč jsi to napsal takto blbě?) a hlavně roste > truckfactor. Obzvláště ve velkém týmu, kde každý maká jak barevný > pouze na tom svém kusu kódu, je to velmi užitečné.) Z toho co pises se bohuzel nedovidame, jak Ti praxe v roli oponenta kodu pomaha ve vyhledavani "horkych" bodu v programu. >> Navic, dokud neni potreba >> optimalizovat, nema smysl nejakou optimalizaci delat. > > Člověku, který toto prohlásí, patří vytahat za uši. A možná i > preventivně každé pondělí ráno. Odpovim Ti znamym citatem z roku 1974 (slovy: devatenactsetsedmdesatctyri): "We should forget about small efficiencies, say about 97% of the time: premature optimization is the root of all evil." Z.T. -- Zdenek Tronicek FIT CTU in Prague Navrhujete API? http://java.cz/article/evoluceapi