Lingwistyka komputerowa

Data: 2019-03-04
Autor: Sebastian Konkol
Lingwistyka komputerowa

Co pewien czas nachodzi mnie defetystyczny nastrój. Przyglądam się zmaganiom inżynierów informatyki z materią ich działań i odnoszę wrażenie, że klęska jest nieuchronna. Chwilę później zwykle wpadam na pomysł, jak sobie poradzić z takim, czy innym problemem, więc nastrój mi przechodzi – pozostają doświadczenia. Ostatnio rzecz dotyczyła spojrzenia na środowisko informatyczne od strony sprawności i skuteczności komunikacji pomiędzy systemami informatycznymi w środowisku typowym dla współczesnych firm.

Teoria komunikacji, poza wymaganiem istnienia nadawcy, odbiorcy i kanału komunikacji, dla zapewnienia skuteczności aktu komunikacji nakłada oczekiwania na sam komunikat. Musi on być tak samo zrozumiały dla nadawcy i dla odbiorcy, na poziomie syntaktycznym (struktura komunikatu) i semantycznym (znaczenie używanych terminów). Próba dogadania się z francuzem po angielsku jest ciekawym przeżyciem. Rozumiemy to doskonale na gruncie komunikacji między ludźmi. Kiedy jednak myślimy o komunikacji między systemami informatycznymi wygląda to trochę tak, jakby odcięło nam część mózgu – miejsce zrozumienia teorii komunikacji zajmuje wiara w magię, w wyniku której bez najmniejszego wysiłku z naszej strony „głupie maszyny” się dogadują, choć nie mają szans się zrozumieć.

Dlaczego nie mają szans? Niby wszystkie wymieniają bity i bajty. Niby systemy operują pojęciem klienta czy produktu. Ale każdy tego klienta ma zdefiniowanego nieco inaczej. Każdy system ma swoje wyobrażenie danych – zarówno struktury jak i znaczenia – i akceptuje komunikację tylko w swoim narzeczu. Problem się nawarstwia, kiedy próbujemy systemy „skomunikować”, czyli integrować. Każdy z nich „gada” innymi metodami. Do czego prowadzi taka sytuacja wśród ludzi wiemy – Wieża Babel, Stary Testament.

„Ale przecież radzimy sobie z tym!” Owszem i kosztuje to coraz więcej wysiłku. Im więcej języków, tym więcej potrzeba tłumaczy, a każdy tłumacz to moc obliczeniowa i czas. Im dłuższe łańcuchy tłumaczy, tym więcej zniekształceń w efekcie głuchego telefonu między tłumaczami. Im więcej języków, tym bardziej ograniczone możliwości, a ewentualna zwinność umiera zanim się jeszcze narodzi. A najgorsze jest to, że uznajemy tę sytuację za naturalną (sic!) – tak naturalną, że zakładamy, że te wszystkie tłumaczenia „jakoś się dadzą zrobić”. W efekcie konstytuujemy Wieżę Babel i z całych sił nie dostrzegamy konsekwencji – wolimy wierzyć, że to „jakieś tam technikalia”…

Czy zastanawialiście się kiedyś, dlaczego większość projektów integracyjnych ponosi tak widowiskowe klęski? Problem wcale nie tkwi w technologii. Problem tkwi w tym, że powołanie przedsięwzięcia integracyjnego lokuje odpowiedzialność za konsekwencje Wieży Babel w tym projekcie, a właśnie na tym terenie ujawniają się wszystkie problemy komunikacyjne. Zadziwiająco często te problemy sprowadzają się do braku możliwości przetłumaczenia jednego narzecza na drugie. Zła integracja. Wyrok zapadł.

Jeśli wzniesiemy się ponad pojedyncze systemy, patrząc ku formom o większej sile wyrazu – wzorce, pryncypia, idiomy (sic!) – sytuacja jest jeszcze trudniejsza. Obowiązujący obecnie kult programistów nie pomaga w respektowaniu takich rzeczy. Programista robi tak, jak chce – a każdy po swojemu. To jest bardzo „edżajlowe” w sensie procesu wytwórczego oprogramowania – oraz bardzo tragiczne, jeśli chce się cokolwiek zrobić z danymi. Wszak nikt „prawdziwie edżajlowy” nie zawraca sobie głowy niczym, czego wartość wykracza poza trwający właśnie sprint, a zasady, pryncypia czy wzorce to zabawa tylko dla zgrzybiałych starców, nie błyskotliwych młodych programistów…

Jeśli ktokolwiek myśli poważnie o zwinności i adaptacyjności, musi zapewnić sobie przestrzeń działania. Jeden zbiór definicji danych, jeden zbiór API, jeden zbiór procesów to zapewne utopia, ale minimalizacja narzeczy to konieczność. Oznacza to konieczność zmniejszenia „edżajlowości” wytwarzania systemów i zbalansowania z chęcią użytkowania danych czy integracji systemów. Wspólny język to podstawa skuteczności i efektywności komunikacji – jak między ludźmi, tak między systemami.

Pozostaw komentarz