Granice Ruby'ego

Wiem, że temat trochę pachnie flamem, więc proszę o powściągliwość - naprawdę ciekaw jestem Waszych opinii i doświadczeń :slight_smile:

Ci z Was, którzy obcowali trochę z Javią wiedzą zapewne kim jest pan Fowler i że wpływ jego książek na powstanie Rails jest nie do przecenienia. Jest to jednocześnie osoba bardzo zafascynowana Rubym, Railsami, zastosowaniem Ruby’ego w DSLach, która jednocześnie jest jednym z moim branżowych guru. Trudno firmowane przez niego ThoughWorks oskarżyć o nieufność i niechęć do wykorzystwania Ruby’ego w praktyce - z tym większą ciekawością obejrzałem tą prezentację

http://www.infoq.com/presentations/fowler-ruby

Przyznam szczerze, ze jestem trochę rozczarowany, ale nie zaskoczony, tym co się w niej pojawia. Choć projekty w Rubym ThoughWorks produkuje, nie są to jednak duże aplikacje (dajmy na to powyżej 10 osób pracujących przez wiele miesięcy) - tutaj w dalszym ciagu niepodzielnie króluje Java. Dotyczy to nawet skomplikowanych aplikacji webowych, które nie mają skomplikowanej domeny biznesowej, takich jak strona Gaurdiana, największego internetowego dziennika w Europie.

Moje osobiste doświadczenia trochę jakby zbiegają się z przekazem prezentacji - nie do końca rozumiem, dlaczego błędne miałoby być założenie, że jeśli chodzi o rozmiar zespołu Rails czy Ruby czy wręcz dynamiczne języki słabo się skalują. Składa się na to bowiem nie tylko kwestia braku podpowiedzi w IDE, co wydaje się głupotą, ale bardzo utrudnia pracę w dużym projekcie, ale także takie rzeczy jak brak pełnej enkapsulacji (tutaj pewnie wielu się ze mną nie zgodzi) czy rzeczy nad którymi ostatecznie można zapanować, takie jak nadmierne otwieranie klas.

Jak to u Was wygląda - czy myślicie, że duże aplikacje, z rozległą logiką biznesową, pisane w duchu Domain Driven Design, mogą w ogóle być pisane w Railsach? Albo innymi słowy, czy Rails wspiera takie aplikacje? Jak pisał kiedyś Radarek - można pisać w Javie w Rubym, więc nie chodzi mi o przepisywanie Javy, tylko aktywne pisanie Ruby way.

Kiedyś czytałem, że przecież Rails wspiera DDD, kreując rich domain model (przepraszam, ale nie wiem jak to przetłumaczyć) poniekąd z automatu, gdyż dodajemy całą logikę biznesową do klas modelu. Ale realnie, czy jakakolwiek separacja warstwy aplikacji, przezentacji i logiki biznesowej występuje w Railsach? Przecież w Rails model może nawet sam się zapisać do bazy - czyli inheretnie wie o tym, że jest z bazy danych.

To są tylko luźne myśli - temat stoowalności Railsów czy Ruby’ego w ogóle w dużych projektach - takich jak choćby te 10 osób przez rok - niech będzie aplikacja webowa - jest bardzo rozległy i chciałbym tym postem kogoś zachęcić do dyskusji, skoro wakacje się konczą i czas wracać do realu :slight_smile:

Ruby oraz Railsy powstały jako technologia dla osób o trochę innym poziomie programistycznym i kulturze programowania (testy, DRY, wygoda) niż np. Java. Tzn. są mniej odporne na głupotę, a przez to – niech Cię, statystyko! – bardziej ryzykowne i wymagające większej “zewnętrznej” (testy!) dyscypliny w pracy zespołu.
Zresztą różnicę łatwo wyhaczyć czytając niedawny wątek na Reddicie o Javie: http://www.reddit.com/r/programming/comments/9dzpu/ask_reddit_why_does_everyone_hate_java/c0ceeto.

Swoją drogą Fowler napisał bardzo ładny, prawdziwy (poparty badaniami) i wyważony tekst o Rubym. Rzadko zgadzam się w 100% z tym co napiszą w internetach, ale mogę pod tym artykułem się właściwie w całości podpisać.
Tylko jednej rzeczy Fowler nie zaznaczył: ekosystem Ruby i Railsów w ciągu ostatniego roku-dwóch nabrał gigantycznego tempa rozwoju i ewolucji, dokumentacja (tutoriale, posty na blogach itd.) robi się lekko outdated po roku i bezużyteczna po dwóch. Więc niewykluczone że część wad i zarzutów wobec naszej ulubionej technologii będzie za rok już nieaktualna :slight_smile: