čtvrtek 9. února 2006

Optimalizace kódu versus efektivita vývoje

Když jsem se nedávným spotem o neoptimalizovaném kódu dotknul tohoto tématu, přinejmenším jsem tušil, že se najdou vývojáři, kteří použijí okřídlenou citaci Funguje to? Pokud ano, tak do toho dejte ruce pryč.. Tento postoj víceméně odpovídá prvnímu pravidlu optimalizace, které zní Neoptimalizujte!. Kdy tedy optimalizovat a kdy hledět především na efektivitu vývoje?

Neoptimální kód je extrém do jedné strany, ale je tu i extrém do druhé strany, který představuje tak optimalizovaný kód, že mu po pěti minutách od napsání nerozumí ani samotný tvůrce. Takže máme extrémy, mezi kterými kód osciluje. Vychýlení jedním či druhým směrem je dáno mnoha faktory, o které v tomto textu primárně neběží.

To pravé umění psaní kódu je půvabné v tom, že se nesnažíme vyprodukovat vrcholně optimální kód, ale kód objektově zapouzdřený. Zapouzdřenost nám snadno umožňuje výměnu jednotlivých částí kódu beze změny jejich okolí. Příklad: potřebujeme zoptimalizovat třídění pole. Prostě vyměníme objekt, který implementuje vlastní třídící algoritmus. Optimalizace kódu je díky zapouzdřenosti neinvazivní, tedy změna algoritmu neovlivní okolní kód.

Efektivita vývoje není optimalizací ovlivněna neboť optimalizace je provedena záměnou jednoho objektu za druhý a to lze udělat kdykoliv. Odpověď na otázku, kdy optimalizovat a kdy hledět především na efektivitu vývoje, je velice prostá: Efektivní vývoj a optimalizace se nevylučují ba naopak vzájemně se doplňují. Optimalizace je součástka, kterou lze do efektivního vývoje vždy začlenit.