This blog is no longer being maintained, please go to The missing link of Agile instead

Thursday, June 12, 2008

XML considered harmful

Albo udziela mi się nastrój sesji, albo po prostu od czasu do czasu muszę na coś ponarzekać.. mam jednak nadzieję, że do powstania poniższego 'ranta' przyczynił się raczej 'przewlekłe uprzedzenie' do formatu XML.

Kilka dni temu napisałem w Scali małą aplikację do generowania danych testowych i wypełniania nimi bazy danych. Wybór Scali także jako formatu specyfikacji danych bynajmniej nie był spowodowany niechęcią do XML'a. Powodem mojej decyzji był najzwyklejszy w świecie pragmatyzm. Potrzebowałem języka ekspresywnego, zwięzłego i elastycznego (1) - piwo dla osoby, która udowodni obecność w XML'u choćby jednej z wymienionych cech. Najwyraźniej mówi się o tym zbyt rzadko, bo tęże technologię wybrał autor rozwiązania na którym w dużej mierze się oparłem (2). Podczas gdy specyfikacja w Scali:

  • zajmuje 2x mniej linii kodu (3)

  • jest o niebo czytelniejsza

  • udostępnia dodatkową funkcjonalność (niemożliwe do zapisu w XML !)


Wydaje się, że jedynym powodem dla którego wybieramy XML'a w każdym-kolejnym-projekcie jest jego popularność. Tej "zalety" z całą pewnością nie można mu zarzucić: Ant, Maven, Spring, Web-Service'y itd., etc... lista z pewnością zajęłaby więcej niż drugie wydanie "Object-oriented software construction" Meyer'a. Nie zdziwił bym się nawet gdyby od jutra tabelki wartości odżywczych na opakowaniach zaczętoby zapisywać w XML'u...

Z czasem okazuje się, że zrozumienie builda ant'owego dla większego projektu graniczy z cudem (jego maintenance wymaga wielkiego męstwa i odwagi), a edycja xml'i spring'owych bez plugin'a zasługuje na medal. Żeby XML wciąż spełniał nasze oczekiwania zaczyna się go wypełniać dodatkowymi elementami - np. OpenLaszlo i JavaScript - po czym okazuje się, że stosowany przez nas format danych to Java z duża ilością operatorów relacyjnych i jeszcze bardziej rozwlekłą składnią (a jednak się da !).

To zabrzmi jak truizm, ale: XML nie jest najlepszym rozwiązaniem dla wszystkich problemów.. powiem więcej, sądzę, że w 80% przypadków (liczba dobrana celowo) mógłby być z ogromną korzyścią dla projektów zastąpiony inną technologią. Pomyśleć tylko o projektach na użytek własny, specyfikacjach (do generacji kodu, translacji), projektach wymagających dużej ekspresywności (Ant vs Gant !!).

Życzę wszystkim programistom, by przy wyborze technologii towarzyszyło Wam hasło: "Wszędzie gdzie można wykorzystać XML'a, użyć można n+1 technologii bardziej wydajnych/wygodnych/seksownych (niepotrzebne skreślić)."

1. Przyjmuję, że w ocenie elastyczności uwzględnia się także proces parsowania języka.
2. Porównanie wyłącznie w celach dramatycznych - nie ma na celu krytyki autora aplikacji.
3. Zastosowałem standardowe wcięcia - priotytem dla obu formatów była czytelność.

1 comment:

  1. Może to wina późnej pory, a może rzeczywiście nie widzę tego w Twoim poście, jednak nie wiem dlaczego uznałeś XMLa za tak zły "język". Przede wszystkim celem XMLa nie jest pisanie czegokolwiek ale opisywanie czegoś. Dodatkowo schematy umożliwiają walidację XMLa itd itd. XML jest moim zdaniem jednym z najbardziej elastycznym formatem opisu obiektów i przechowywania danych jaki został wymyślony. To że zajmuje 2x więcej linii kodu wynika z jego specyfiki. Do czytania plików XML nie korzysta się z notatnika, tylko np. z XML Stylus. A co do dodatkowej funkcjonalności ... hmm ... nie wiem o czym piszesz (albo nie zauważyłem tego w tekście).

    XML nie jest taki zły jak Ci się wydaję :-)

    ReplyDelete