Poslední rok se vcelku intenzivně věnuju vývoji inteligentního softwaru na zpracovávání životopisů. Vývoj takového systému se od klasického vývoje velmi liší v několika aspektech a důraz na revoluční změny je asi nejmarkantnějsí. V klasickém vývoji napíšete jednoduchý modul, který v průběhu života různě rozšiřujete a optimalizujete. Největší zásah do existujících modulů spočívá maximálně v rozdělení na několik menších tříd. Modul se tedy v průběhu života mění evolučně.

U inteligentních systému probíhá vývoj jinak. Na začátku máte ucelenou představu o jeho funkčnosti. Napsaný modul pak slouží po určitý, většinou velmi krátký, čas a na konci jeho životního cyklu je celý kód zahozen a nahrazen jinou verzí, která funguje na naprosto jiných základech. Jednou napsaný modul se už většinou příliš nemění.

Jako takový příklad bych mohl uvést detekci duplicitních životopisů v mém systému. V první verzi jsem za duplicitní považoval pouze ty životopisy, které mají stejné URL. Jednoduchá myšlenka, která vystačila na prvních pár týdnů provozu. Naivní řešení nevydrželo dlouho a tak jsem ho jednoduše zahodil. K detekci jsem pak začal používat MD5 hashe obsahu životopisů, což odstranilo naprosto stejné kusy. V součastné době i tahle varianta přestává stačit a tak experimentuju s pokročilejší metodou na bázi podobnosti n-gramů dokumentu.

Poučení je následující: vývoj je dobré vést tak, že vytvoříte základní workflow samostatných modulů, přičemž nezáleží na tom jak dobře jednotlivé moduly fungují. Během vývoje se pak zaměřujete na jednotlivé části, kdy nevyhovující modul zahodíte a nahradíte novým, fungujícím na jiném principu. Nesnažte se tvořit chytrá řešení hned od rýsovacího prkna, protože reálný provoz vám překazí všechny počáteční doměnky. Já jsem takhle skoro dva měsíce tvořil modul fungující na bázi konečných automatů s vlastním skriptovacím jazykem, s vidinou, že se to přece bude muset hodit. Nehodilo.