Podsumowanie prologowego wyzwania

Jak zapowiadałem pod koniec października, moim celem na listopad była nauka języka programowania Prolog. Czytałem książki i opracowania, pisałem kod, szukałem realnych zastosowań tej technologii. Czas nie pozwolił mi na zgłębienie w ciągu miesiąca tyle wiedzy, ile bym pragnął, jak również nie udało mi się opublikować wszystkich wpisów w zamierzonym okresie. Naocznym rezultatem mojego wyzwania są zatem jedynie trzy artykuły:

W niniejszym podsumowaniu chciałbym zaś podzielić się kilkoma swoimi refleksjami dotyczącymi Prologa oraz informacjami, które mogą okazać się przydatne dla innych osób, chętnych poznać ten język w praktyce.

Czym zaskoczył mnie Prolog?

Przyznaję, że pierwsze skrypty w Prologu zacząłem pisać już po przeczytaniu dwóch czy trzech początkowych stron z jakiegoś PDF-a. Robiłem to oczywiście zdecydowanie „na czuja”, w związku z czym dałem się złapać w typowe dla niedoświadczonych pułapki, wynikające z posiadania zaledwie szczątkowego zrozumienia tego, jak interpretowane są zapisy klauzul. Do pułapek tych należy między innymi sposób definiowania relacji symetrycznych i przechodnich, co wytłumaczyłem w osobnych wpisach.

Jest to o tyle warte wspomnienia, że wiąże się z ważną cechą Prologa, która bardzo przypadła mi do gustu. Cechą tą jest prostota. Trudno rzucać się na programowanie w jakiejś technologii po zaledwie paru chwilach spędzonych z podręcznikiem, jeśli dana technologia wydaje się skomplikowana, zawiera wiele słów kluczowych, czy niuansów, bez których trudno jest pisać poprawne składniowo aplikacje. Ale Prolog taki nie jest. Zamiast wielości konstruktów zastosowano ciekawe rozwiązania, które sprawiają, że składnia zdecydowanie nie budzi przerażenia. Można nawet powiedzieć, że w porównaniu z innymi współczesnymi językami programowania jest ona bardzo uboga.

Jako przykład można tu wspomnieć definiowanie zmiennych i stałych: nazwy zmiennych muszą zaczynać się wielką literą, nazwy stałych – małą lub być pisane w cudzysłowie. Prosta reguła, dzięki której uniknięto konieczności używania słów typu var, const itp. Przejrzystości trudno też odmówić semantyce Prologa oraz wbudowanemu systemowi typów, który mimo nieskomplikowanych zasad jest niezwykle elastyczny.

Kolejną rzeczą, którą uważam za zaletę tego języka jest jego ekspresyjność. Programy w Prologu rzeczywiście mogą brzmieć niemal jak zdania w języku naturalnym, nie powinno zatem dziwić, że to właśnie Prolog jest często wykorzystywany jako język bazowy do tworzenia nowych języków dziedzinowych (ang. domain-specific languages). W takich opartych na Prologu technologiach eksperci z zakresu konkretnych dziedzin dosyć łatwo, bez konieczności posiadania dobrych umiejętności programistycznych, są w stanie zapisywać swoją wiedzę. Wykorzystując funkcjonalność definiowania własnych operatorów, zamiast relację lubienia wyrażać klauzulą likes(John, Jessica)., możemy zapisywać ją np. tak: John likes Jessica.Na mnie robi wrażenie, a kropka na końcu powyższego przykładu tylko je potęguje.

Skąd się uczyć?

Pomimo faktu, że Prolog nie należy do najpopularniejszych języków, nie jest na szczęście aż tak niszowy, aby jakąkolwiek trudnością było znalezienie odpowiednich materiałów do nauki. Wybór stron internetowych, książek i innych tutoriali to oczywiście kwestia osobistych preferencji. Nie będę zatem przekonywał o wyższości któregokolwiek ze źródeł (zwłaszcza, iż raczej brak mi kompetencji do poważnego recenzowania materiałów nt. tej technologii, tj. wygłaszania krytycznych uwag pod kątem merytorycznym), ograniczę się jedynie do wskazania tych, z których sam korzystałem:

Niezastąpiony podczas codziennych starć z praktyką kodowania w Prologu jest oczywiście StackOverflow, a pod tagiem prolog można znaleźć wiele ciekawych i przydatnych wątków.

Dlaczego Prolog jest niszowy?

Wśród refleksji, które kołowały w mej głowie podczas kontaktu z tym językiem pojawiło się m.in. pytanie na temat jego niszowości. Co wpłynęło na to, że Prolog nie zyskał na popularności? Czy chodzi tu wyłącznie o jego odmienność? Oto obraz, jaki wyłania się spośród opinii wypowiadających się na ten temat programistów (źródło: Hacker News):

  • trudno jest wyjść poza banalne przykłady i zacząć używać Prologa do poważnych zastosowań.
  • nawet tak trywialne zadania jak czytanie pliku tekstowego albo dostęp do bazy danych są w Prologu trudne do zrealizowania
  • niewielu ekspertów, a co za tym idzie, wysokie koszty utrzymania projektu, który używa Prologa
  • technologia ta jest bardzo złożona od strony implementacyjnej
  • nawet wiedząc niemal wszystko o składni i semantyce języka wiele osób nie wie co z tym dalej zrobić. Zrozumienie Prologa to długi proces, wymagający mentoringu
  • brak odpowiedniej liczby bibliotek, abstrakcji i ustalonych praktyk kodowania
  • wysiłki zgromadzonej wokół Prologa społeczności (w większości akademickiej) zostały skierowane na artykuły roztrząsające teoretyczne zagadnienia, zamiast na stworzenie tego, co każdy
  • język potrzebuje od strony programistów.
  • brak sensownego IDE i innych narzędzi programistycznych, trudność debuggowania

Widać zatem, że w odczuciu użytkowników Prologa istnieją spore braki w całej „otoczce” tej technologii. Z wieloma zarzutami trudno się nie zgodzić, ale warto przy tym zauważyć, że mało kto narzeka na sam język i jego projekt. A to pozwala wierzyć, że czasami zastosowanie Prologa rzeczywiście może się opłacać.

Podsumowanie podsumowania

Co dało mi to listopadowe wyzwanie? Poznałem podstawy Prologa i utwierdziłem się w przekonaniu, że jest to ciekawy język, z którym chcę jeszcze w przyszłości mieć do czynienia. Na pewno postaram się lepiej zrozumieć jak w Prologu tworzone są prawdziwe aplikacje (takie, o których pisałem tutaj), z chęcią zaangażowałbym ten język również w którymś z własnych projektów. Jedno jest pewne: przede mną jeszcze duużo pracy, aby nauczyć się płynnie i swobodnie porozumiewać z komputerem w języku Prolog. Szukających samorozwoju na gruncie informatyki serdecznie zachęcam zaś do zapoznania się z Prologiem, jak również do podzielenia się własnymi przemyślenimi związanymi z jego nauką, użyciem i przyszłością.

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *