pondělí 19. května 2008

Před předpisem protřepat

Kolikrát jsem to jenom zažil, jednou, dvakrát, třikrát? Na mou ti duši opravdu nevím, ale bylo to nespočetněkrát. Že nevíte o čem to mluvím? Nevadí, určitě jste takovou situaci zažili, stačí jenom trochu zavzpomínat. Přijdete k nějakému kusu kódu a máte prostě tu neodolatelnou potřebu jej z gruntu přepsat. Nemáte k tomu vlastně ani žádné závažné důvody, kromě toho, že o tom prohlásíte, že je to kus nepoužitelného exkrementu, který ten břidil před vámi pěkně zprasil. Je to úchylka eufemisticky nazvaná nemoc z povolání. Jste přece programátoři a ti musí stavět a to nejlépe na zelené louce.

Tak až vás to zase popadne, tak si přečtěte článek Joela Spolskyho Things You Should Never Do, Part I, který je sice datem vydání osm let starý, ale obsahem nadčasový (tímto zároveň prosím své kolegy ať mi pošlou výše uvedený link, až mě to zase chytne).

There's a subtle reason that programmers always want to throw away the code and start over. The reason is that they think the old code is a mess. And here is the interesting observation: they are probably wrong. The reason that they think the old code is a mess is because of a cardinal, fundamental law of programming:

It's harder to read code than to write it.

...When you throw away code and start from scratch, you are throwing away all that knowledge. All those collected bug fixes. Years of programming work.

Ten článek opravdu doporučuji přečíst. No a jaké máme možnosti, když ne všechno to přepsat? Opět si pomůžu jedním článkem a to konkrétně 3 Options for Rebuilding Your Software Without Risking Death. Ony tři možnosti jsou ve zkratce:

  • Prototype and expand
  • Incremental
  • Buy

a kterou z nich preferujete vy? Já vzhledem k těm pár prototypům, co byly za nevelké libosti jejich vývojářů převedeny do produkce, se tak nějak intuitivně přikláním k možnosti inkrementálního nahrazeni.

In the incremental approach, you replace big components of your software with more modern components, or you refactor the existing code. However, you do this in a series of steps that leave you with a releasable and saleable product after each step. This is often compared to "rebuilding the plane in the air".

Na závěr bych rád dodal, že tímto článkem nezastávám názor, že v některých případech není kompletní přepis tím nejlepším řešením. Takže když přepis, tak všeho s mírou...