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

Odpovedet emailem