Uwaga: wpis kontrowersyjny, czytanie grozi trwałym kalectwem umysłowym.
Zdarza mi się w pracy i poza nią obmyślać różne architektury, projekty itd., na niższym czy to wyższym poziomie. Na różnych etapach, szczególnie projektowania, trzeba sobie pomóc jakoś ogarnąć całość. A ponieważ obraz jest wart tysiąca słów, naturalnym wyborem są różnego rodzaju diagramy i schematy. A skoro diagramy, to oczywiście - UML. I tak docieramy do sedna tego całkowicie subiektywnego wpisu, którego głównym celem jest wylanie moich żali "na papier". Ostatnio zdałem sobie sprawę, że ja po prostu... nie lubię UML-a.
A czemu? Poniżej wypunktowane argumenty, które starałem się wypisać zaczynając od najważniejszego. Otóż według mnie UML:
- przeszkadza w myśleniu - zamiast myśleć nad problemem, myślę jaki diagram użyć, jaką kreskę i strzałkę postawić, czy przerywaną czy nie i co to właściwie znaczy.
- ogranicza moją kreatywność - kilka typów diagramów i klocków nie może opisać całego wszechświata. A nie mogę użyć swoich pomysłów jak zilustrować jakąś koncepcję, bo nie przewiduje tego standard.
- jest narzędziem do fazy projektowania - całość tej precyzyjnej notacji jest niepotrzebna bo i tak w mniejszym lub większym stopniu zdezaktualizuje się w trakcie implementacji. Gotowe rozwiązanie najlepiej udokumentuje kod i co najwyżej kilka ogólnych schematów - a do tego precyzja UML-a nie jest potrzebna. Zatem projektując tracimy czas na precyzyjne rysunki, notacje itd. na które potem ktoś raz spojrzy i nikt nigdy nie zaktualizuje.
- jest narzędziem komunikacyjnym, nie technicznym, choć takie udaje - nie kompilujemy (prawda?) go do kodu, nie musi być ultra precyzyjny więc nie powinniśmy tracić czasu na ultra precyzyjne opisy. Ale wtedy czuję się nieswojo, bo skoro nie muszę być ścisły, to czemu muszę się ograniczać do narzuconych notacji i elementów?
- narzuca konieczność modelowania całego rozwiązania - podczas gdy często nie mamy pojęcia jak powinno ono wyglądać - to szczególnie częste jeśli próbowalibyśmy projektować rozwiązanie na poziomie diagramu klas. Lądujemy ze wstępnym diagramem, który potem developer wyrzuca do kosza i pisze wszystko po swojemu, albo mozolnie dokumentujemy zmiany, tracąc na to czas (nie życzę...).
- może dawać nam fałszywe poczucie dobrej dokumentacji - myślimy, że jeżeli wszystko jest opisane w UML to mamy dobrą dokumentację i co gorzej, dobrą metodykę projektowania - tymczasem jest to tylko "język" przekazania pewnych bardziej skomplikowanych aspektów systemu. Np. diagram zawierający dziesiątki banalnych klas z oczywistymi relacjami nie wnosi nic wartościowego. UML nie służy do dokumentowania kodu!
- ma małą siłę ekspresji - widzieliście wzorce projektowe opisane za pomocą UML-a? Bez dodatkowego, długiego opisu słownego nic nie są warte.
- czyni projekty nudnymi - nie ważne czy projektujesz soft do maszyny do szycia czy do rakiety kosmicznej, wszystko wygląda tam samo.
Oczywiście wiem, że UML jest ważny i przydatny. Tak jak można nie lubić angielskiego, ale trudno się bez niego obyć w świecie IT, podobnie trudno sobie wyobrazić deva bez minimalnej wiedzy UMLa. Największą jego zaletą jest bycie lingua franca, każdy trochę zna standard i domyśli się znaczenia diagramu. W przeciwieństwie do bazgrołów, które sam postanowię narysować. Bo choć mogą mi się wydawać bardzo przejrzyste i intuicyjne, może tak nie być dla wszystkich innych.
Zatem - czy namawiam na wyrzucenie UML-a do kosza? Nie, jeśli nie mamy lub nie chcemy stosować swoich bazgrołów, UML może się sprawdzić jako narzędzie do uproszczonych szkiców przekazujących ideę, ale bez wgłębiania się w poprawność notacji, super zgodności ze standardem itd. Czyli dokładnie to czym jest UmlAsSketch w UML 2. Ale można też się zainteresować tym jak w trochę bardziej ogarnięty sposób wykonywać nasze bazgroły. Dokładnie o tym jest książka The Art of Visualising Software Architecture. Pogląd o promowanym przez autora książki podejściu można poznać w jego artykule Simple Sketches for Diagramming Your Software Architecture.
A Wy co o tym sądzicie? Ciekaw jestem jaki jest Wasz stosunek do UMLa? Zachęcam do dyskusji!