Christopher Alexander i żywe programy

Podstawowe cechy żywych struktur

Zdają się potwierdzać to badania Alexandera nad własnościami strukturalnymi żywych przedmiotów. Alexander był przekonany, że postrzeganie życia nie jest tylko zjawiskiem psychologicznym, lecz związane jest z obiektywnymi cechami strukturalnymi. Przez lata porównywał tysiące budowli, dzieł sztuki, przedmiotów codziennego użytku, próbując wyodrębnić cechy, które często występują w żywych obiektach. Po latach znalazł piętnaście takich podstawowych cech. Te cechy to: poziomy skali, silne centra, granice, naprzemienne powtórzenia, pozytywna przestrzeń, dobry kształt, lokalne symetrie, silne splecenie i niejednoznaczność, kontrast, gradienty, nierówność, echo, pustka, prostota i wewnętrzna cisza, nierozłączność.

Na ile cechy te dotyczą również oprogramowania, trudno dzisiaj jednoznacznie odpowiedzieć, niektóre cechy (np. lokalne symetrie) okazują się rzeczywiście mieć duże znaczenie dla jakości struktury programu, inne wymagają jeszcze systematycznych badań. Również samo zjawisko życia w systemach informatycznych i jego związek z jakością i funkcjonalnością czekają na głębsze potraktowanie.

Żywe procesy

Alexander, pomimo wrażenia, jakie może wywoływać pierwsze spotkanie z jego teoriami, jest osobą bardzo praktyczną. Najbardziej interesuje go, jak w praktyce można tworzyć żywe budynki i przedmioty. Związane jest to z chyba najciekawszą dla inżynierów oprogramowania częścią teorii - żywymi procesami. Według Alexandera żywe struktury mogą powstać w wyniku tylko bardzo wąskiej klasy procesów, nazywanych żywymi. Żywe procesy występują powszechnie w naturze. Przykładem może być rozwój rośliny z nasienia lub formowanie się galaktyki. Jest to zagadnienie o tyle istotne dla nas, że praktycznie wszystkie złożone systemy powstają w wyniku takich procesów, a złożoność jest jednym z największych wyzwań związanych z tworzeniem systemów informatycznych.

Czym się wyróżniają żywe procesy? Po pierwsze są holistyczne, to znaczy zawsze działają na całość. Tak jak w przypadku rozwoju kwiatu, od samego początku (nasienia) na każdym etapie mamy do czynienia z całością, która przechodzi przez ciąg specjalnego rodzaju transformacji, nazywanych przez Alexandera transformacjami zachowującymi strukturę. Są to transformacje, które rozwijają istniejącą całość, nie zmieniając jej struktury. Podobnym pojęciem w informatyce jest modny ostatnio refaktoring: zmiana kodu bez zmiany jego zewnętrznego zachowania, czyli transformacja zachowująca funkcję (chociaż nie strukturę). Żywe procesy są wysoce adaptacyjne, to znaczy na każdym etapie następuje maksymalna adaptacja do warunków zewnętrznych i wewnętrznych. Dlatego żywa struktura nie może zostać zbudowana na podstawie gotowego projektu, może zostać tylko wygenerowana, podobnie jak roślina jest generowana z nasienia. Przypomina to trochę niektóre nowe metodyki przyrostowe tworzenia oprogramowania, zwłaszcza z obozu metod zwinnych, choć istnieją też zasadnicze różnice.

To, co robią opisane transformacje, to tak naprawdę wprowadzanie do systemu wspomnianych wcześniej piętnastu podstawowych cech strukturalnych. Co ciekawsze, cechom tym odpowiada piętnaście elementarnych transformacji, każda wprowadzająca odpowiadającą jej cechę. Każda transformacja w żywym procesie jest złożona z transformacji elementarnych. Zatem cały proces tworzenia nawet niezwykle skomplikowanych struktur został sprowadzony (w zasadzie) do wielokrotnego stosowania piętnastu transformacji! Jeżeli porównamy to ze złożonością procesów używanych obecnie przy tworzeniu systemów informatycznych, zwłaszcza dużych, różnica jest szokująca i nie dziwi, że niektórzy uważają, iż może to całkowicie zmienić sposób, w jaki jest tworzone oprogramowanie.

Żywe procesy w praktyce

Żywe procesy nie są tylko przedmiotem rozważań teoretycznych. Alexanderowi udało się zdefiniować i zastosować takie procesy w praktyce w wielu projektach, od domków letniskowych po campusy uniwersyteckie i duże osiedla. Procesy takie nie są też nowością, w ten sposób powstają złożone systemy w naturze (jest to też zgodne ze współczesną teorią złożoności). Również dawniej ludzie powszechnie je stosowali, dopiero w XX w. zostały wyparte przez dominujące obecnie mechaniczne procesy.

Zaproponowane przez Alexandera procesy są zasadniczo różne od większości obecnie stosowanych procesów. Jak przejść na nowe procesy? Jeżeli ktoś uczestniczył we wprowadzaniu zupełnie nowego procesu w firmie, wie czym to się zazwyczaj kończy. Alexander proponuje stopniowe przejście. Pomysł opiera się na sekwencjach generatywnych, czyli krótkich, w dużej mierze niezależnych procesach, które mogą być stopniowo włączane do istniejącego procesu. W przypadku tworzenia oprogramowani mogłyby to być procesy na przykład tworzenia klasy, nadawania nazwy zmiennym, tworzenie prototypów interfejsu użytkownika itp. Innymi słowy sekwencja generatywna jest czymś w rodzaju najlepszej praktyki, z tym, że definiuje żywy proces. Sekwencje takie mają pełnić rolę puli genów, które w naturalny sposób są włączane do projektów, adaptowane i kopiowane w innych projektach.

Na chwałę Boga

Prace Alexandera łączą dwa elementy bardzo istotne dla inżynierii oprogramowania: spojrzenie systemowe i docenienie znaczenia czynnika ludzkiego. Obecnie, gdy zagubiliśmy się w gąszczu metod i technologii, duże znaczenie może mieć też proponowana przez Alexandera wizja celu. Wizja, w której programista może przestać być bezosobowym kółkiem w maszynie, a najgłębsze ludzkie uczucia i pragnienia odzyskują rację bytu.

Alexander pisze, że gdybyśmy mieli możliwość spytać rzemieślnika z wczesnego okresu chrześcijaństwa, co robi i jaki jest cel jego pracy, gdy tworzy kościół, kolumnę lub okno, odpowiedziałby, że robi to wszystko "na chwałę Boga". Jeżeli zapytalibyśmy XV-wiecznego sufiego, co robi i jaki jest cel jego pracy, gdy tka dywan lub maluje mozaikę, odpowiedziałby coś w rodzaju: "że chce się «upić» Bogiem, próbuje zatracić siebie i zjednoczyć z Bogiem". Po wielu wiekach ich dzieła cały czas zachwycają. Czy w XXI w. możliwy jest tak silny związek pracy z najgłębszą istotą i pragnieniami człowieka? Czy możliwe jest, żeby praca programisty rozwijała jego człowieczeństwo? Alexander twierdzi, że tak. Warto przynajmniej spróbować.

The Nature of Order zawiera mnóstwo elementów, które można bezpośrednio odnieść do inżynierii oprogramowania, choć jako całość może być to trudne do objęcia, zarówno ze względu na prezentowane treści (Alexander tworzy nawet nową kosmologię), jak i objętość (ponad 2000 stron). Dostosowanie tych teorii do wytwarzania oprogramowania wymaga jednak solidnej i systematycznej pracy, ale potencjał jest ogromny.

Zainteresowani udziałem w pracach nad dostosowaniem teorii Christophera Alexandera do inżynierii oprogramowania mogą skontaktować się z autorem artykułu: mailto:[email protected]


TOP 200