Piękno w kodzie zaklęte

"Programy mogą urzekać pięknem swej logiki" - napisał Edsger W. Dijkstra we wstępie do książki "Umiejętność programowania". Spośród całego natłoku różności, którymi karmiono mnie w czasie, gdy byłem adeptem pierwszego roku informatyki na studiach uniwersyteckich, to zdanie pozostało do dziś żywe w mojej pamięci.

"Programy mogą urzekać pięknem swej logiki" - napisał Edsger W. Dijkstra we wstępie do książki "Umiejętność programowania". Spośród całego natłoku różności, którymi karmiono mnie w czasie, gdy byłem adeptem pierwszego roku informatyki na studiach uniwersyteckich, to zdanie pozostało do dziś żywe w mojej pamięci.

Romantyczny zachwyt nad dziełem W. Dijkstry nie wytrzymał konfrontacji z rzeczywistością. Całą dbałość o piękno programów, mówiąc brzydko, "szlag trafił" już w chwili, gdy trzeba było oddać zaliczenie pierwszej pracowni programowania. W grę wchodziło bowiem dotrzymanie terminu - było to tak naprawdę ważniejsze niż program. A jak wiadomo, czas to - oprócz budżetu - najważniejszy czynnik decydujący o losach projektów w "prawdziwej" informatyce. Piękno algorytmów w zderzeniu z tymi dwoma (jakże nieeleganckimi) ograniczeniami gdzieś pryska. Czy tak być musi, pozostaje kwestią otwartą. Na pewno zbyt wielu programistów za dużo koduje, a za mało myśli.

W. Dijkstra pisał o pięknie i elegancji, płynącej z rzadkiego połączenia siły i prostoty. Elegancja algorytmów nie jest jedynie tematem próżnych rozważań akademików. Piękny kod to na ogół lepszy kod. Jest bardziej efektywny, łatwiej go modyfikować i poznawać. Niestety, elegancja jest tym, o czym często zapominają twórcy oprogramowania.

Małe jest piękne?

David Galentner, profesor informatyki na uniwersytecie w Yale, w książce Machine Beauty - Elegance and the Heart of Technology zauważył: Piękno jest znacznie ważniejsze w informatyce niż gdziekolwiek indziej w świecie technologii, bo oprogramowanie jest tak bardzo skomplikowane. Piękno jest najlepszą obroną przez złożonością. To największy problem informatyki, że zmiana skali na ogół przynosi utratę piękna. Nie da się go automatycznie pomnożyć.

Elegancja w informatyce ma wiele wspólnego z jasnym rozumowaniem, o którym Dijkstra napisał, że może zachwycić nie mniej niż adagio Mozarta. Być może to, co eleganckie w informatyce, właśnie z jasnego rozumowania się wywodzi. Elegancji w programowaniu można się uczyć przez naśladownictwo, praktyczne ćwiczenie i zapamiętywanie dobrych wzorców. Tak samo jak w poznawaniu gry na instrumencie w szkole muzycznej. Wielu najbardziej znanych innowatorów, którzy przeobrazili informatykę i odcisnęli piętno na rozwoju komputerów, brało inspiracje z wyrazów elegancji w innych obszarach aktywności człowieka, zwłaszcza sztuki. Dla tych, którzy dbają o estetykę tworzonych programów, informatyka zawsze będzie źródłem ekspresji artystycznej.

Kwiaty i programy

W czasie moich studiów dane mi było jeszcze raz przeżyć autentyczny zachwyt nad pięknem abstrakcyjnych formuł. Stało się to w chwili, gdy trafiła do mnie piękna, kolorowa książka The Algorithmic Beauty of Plants, napisana przez Aristida Lindemayera i Przemysława Prusinkiewicza. Przedstawiono w niej L-systemy, za pomocą których można algorytmicznie kodować rozwój roślin i innych form biologicznych. Urzekła mnie niewiarygodna wręcz zwięzłość opisu form tak delikatnych i koronkowych, jak prawdziwe kwiaty. Lindemayer do ich opisu zastosował gramatyki - podstawowe narzędzie służące do tworzenia języków programowania i przez to leżące u podstaw informatyki. W L-systemach opracowanych przez Lindemayera rozwój i kwitnięcie konwalii dało się zapisać w postaci kilku prostych transformacji. To do tej książki może odnosić się zdanie Antoine'a Saint-Exupery: Twórca osiąga doskonałość nie wtedy, gdy do jego dzieła nie można już niczego dodać, ale wtedy, gdy nie można już niczego usunąć.

Eleganckie rozwiązania w informatyce zdobywają uznanie użytkowników. Tak stało się z World Wide Web, arkuszem kalkulacyjnym, kryptografią klucza publicznego czy PalmPilotem. Eleganckie algorytmy, o których pisał Dijkstra, zaszyte są w wielu popularnych programach. Jeśli piękno będzie nadal obecne w informatyce, to wciąż będzie ona po części sztuką.

Piękno nie jest celem, jaki stawiany jest przed informatyką. Zapewne dlatego tak często gubi się elegancję, której poszukują raczej na uniwersytetach niż w firmach programistycznych. Dopóki jednak przy tworzeniu programów potrzebna będzie jasność rozumowania, dopóty elegancja nie zaginie.

W celu komercyjnej reprodukcji treści Computerworld należy zakupić licencję. Skontaktuj się z naszym partnerem, YGS Group, pod adresem [email protected]

TOP 200