Ruby on Rails? Ano, prosím!

Centi mi doporučil k přečtení článek dxg o frameworku Ruby on Rais a jeho nevýhodách a hrozbách. Tímto bych si dovolil s ním krapet polemizovat.

Základní chybu v přístupu autora vidím v tom, že si vybral jeden rys jazyka Ruby a snaží se jím charakterizovat celý framework Rais. Tento přístup volí většina odpůrců Rails. Nakonec mě docela rozesmálo, že sám autor píše v PHP a přitom přiznává, že PHP nevěří, ale je to dobrý jazyk. Rozporuplné.

Jak už bylo zmíněno v diskusi na rubyonrails.cz, k problému dynamičnosti Ruby existují dva přístupy. Buď se na to díváte jako na slabinu jazyka nebo naopak jako na výhodu. Každý programátor to vidí jinak. Pokusím se nyní obhájit názor, že se jedná o výhodu.

Ruby má oproti statickým jazykům tu výhodu, že neexistuje rozdíl mezi „compile-time“ (přesněji spíše write-time, protože mluvíme o interpretovaném jazyku) a „run-time“. U statickýh jazyků jsme zvyklí na to, že jakmile je třída jednou nadefinovaná, již ji nejde „zvenku“ měnit. Toto v Ruby neplatí. Metody a třídy lze za běhu upravovat, měnit a přidávat. Dáte-li takovýto nástroj od ruky běžnému PHPkáři nebo jakémukoli programátorovi, který nevidí dva řádky kódu dopředu, stane se přesně ta katastrofa, kterou dxg popisuje. To je jako když dáte člověku pistoli, rozumný člověk ví, že když vystřelí do davu pravděpodobně někoho zabije nebo minimálně zraní, malé dítě neznalé širších souvislostí a následků použití střelné zbraně, to pravděpodobně bude chtít vyzkoušet a stane se něco špatného. Stejně je to i u programátorů. Důvod proč Ruby asi nikdy nepřeválcuje Javu, PHP a .NET je ten, že nutí programátora přemýšlet jinak, v širších souvislostech a to hlavně pokud se jedná o využívání dynamických aspektů jazyka. Tím ovšem nechci říct, že žádný Rails programátor nikdy nešlápne vedle, pokud se ale drží konvencí Rails a hlavně důkladně testuje, je na chybu upozorněn a může si ji uvědomit a hlavně opravit. Ještě se mi nestalo, aby si navzájem nějaké komponenty pod rukama měnili metody v základních třídách, Ruby programátoři holt musí vědět co dělají a jaké mají jejich akce následky. Pokud už něco zásadního změní je slušné to udělat bezkonfliktně a upozornit.

Na závěr bych se ještě pozastavil u kódu, který dxg používá jako příklad. Konkrétně u věty:

„i v PHP lze podobný přístup napodobit . . . Když si nadefinuji odpovídající třídy, mohu v PHP také psát: . . .“

Ano! Když si nadefinuješ odpovídající třídy. Ale to já nechci dělat. Já chci efektivně programovat aplikaci a ne definovat pomocné třídy abych mohl efektivně programovat.

Důvod proč mám framework Rails tak rád, je že dynamičnosti Ruby plně, ale přitom ohleduplně, využívá a přidává další koncepty jako je DRY, Convention over Configuration, integrovaná podpora pro TDD a Agilní přístupy všeobecně, REST a další. Samozřejmě, většiny techto rysů se dá dosáhnout v každém prostředí, na Rails mám rád to, že vše přichází „out-of-the-box“, pěkně otestované a zintegrované dohromady. Pokud si dxg myslí, že Rails představují pro progmátora vězení, dobře mu tak, pro mě jsou Rails luxusní hotel, kde se můžu soustředit na svoji práci (vývoj aplikace) a prostředí mi vychází maximálně vstříc.

(Poznámka: Ruby on Rails zbožňuju a psát v Rails je pro mě radost. Normálně pracuji v Javě a dá se to snést. Taky už jsem vyzkoušel pár jazyků, ale do Ruby jsem se skutečně zamiloval)

Komentáre

 

Podla mna David pekne a vyvazene zhrnul nedostatky RoR. Urcite sa nad problemom hlboko zamyslel, kym napisal takto ladeny clanok. Celkom chapem jeho pohnutky, mna by podobne angazovany system tiez asi trochu obmedzoval (moja specializacia je C/CPP a multithreadove prostredie)

A vobec sa mu necudujem, ze zablokoval komentare:)

 

Osobně vidím RoR jako průkopníka nového směru. Konečně si i programátoři začali uvědomovat že nejde jen o to jestli v určitém jazyce něco jde nebo nejde naprogramovat, ale že důležité je i to jak rychle to jde naprogramovat, jak to bude čitelné a jak snadno to půjde změnit. Změna je to sice relativně nenápadná, ale myslím že bude mít (a v jistých směrech už má) dalekosáhlé následky.

Myslím si že Ruby se neprosadí do širšího užívání, tak jako se neprosadil Smalltalk, ale dopad Ruby a RoR na jiné jazyky a frameworky bude enormní – stačí se podívat na nově vznikající frameworky, skoro všechny RoR tak či onak kopírují. Dost fandím jazyku Groovy s frameworkem Grails, zatím to sice není žádný trhák, ale kompatibilita bytekódu s Javou je velmi silná zbraň.

 

Koukám že dgx na mě tam dokonce odkazuje, tak aby to nevypadalo že píšu každý týden něco jiného – pochopitelně souhlasím že možnost modifikace objektů za běhu je zlo a že to budou lidi zneužívat. Přínos Ruby není v tom že by to byl kdovíjak skvělý jazyk, ale v tom že IMHO naznačuje cestu ze softwarové krize.

 

RICHARD: a co JRuby? mas ruby kod primo pod JVM. JIT kompilace pro casto pouzivany kod a podobne ficury..

Tvrdit ze moznost modifikace obektu je zlo je uplne zcestne. Je to svoboda, dovoluje ti to premyslet nad psanim kodu jinak. Osobne me Ruby pohled na OOP vyhovuje a musim rict ze ho dokonce zboznuju. Samozrejme ze se to da pouzit spatne, ale to zlo neni v tom prostredku, je v tom jak se pouzije, je to na programatorovi. „Its the whole sharp knives in the kitchen problem…“

Dxg pise, ze Rails neni pouzitelne pro projekty s vice kodery. To je blbost, kdyz bude kod prasit jeden clovek sam sobe, tak se v tom taky zacne za chvili zdracet a se s vym programem se nedomluvi a je jedno jestli pise v Ruby nebo Jave.

 

JBOSS: Mě to ale nezajímá z ideologického pohledu („každá věc se dá zneužít ale my to neuděláme protože jsme klaďasové“) ale z pohledu empirického („tuto věc zneužívá průměrně 15% lidí, ztáty tím vzniklé jsou o 5% větší než vzniklý zisk“).

Jinak řečeno – pokud mám dva stejně silné jazyky / frameworky z nichž jeden porušuje princip zapouzdření a druhý ne, volím skoro automaticky ten druhý, protože sichr je sichr.

 

Neprogramuji webove aplikace, ale nejaky nastroj pro tyto veci sam pro sebe potrebuji take. Kdyz jsem objevil Rails a Django, stravil jsem cely vikend V SOKU, ze se snad konecne budou psat snadno i obycejnym smrtelnikum. Moje domena je prave C# a delam vicemene spis embedded aplikace pro WindowsCE a NETCF a musim rict, ze s tou kritikou nekterych spatnych vlastnosti JAZYKA Ruby souhlasim na 100%. To ale neznamena, ze by byl ve spojeni s Rails k nicemu. Zacinal jsem v DOSu na TurboPascalu 6.0 z jehoz manualu jsem pochopil „inside“ jak funguji principy OOP a proc je to fajn. Nicmene bylo nutne psat APLIAKCE a ne se babrat s lowlevel koodovanim a porad neco dlouze kompilovat … a tehdy mne kamarad upozornil na cesky PC-FAND, coz bylo uz pred 15 lety na DOSu (a predtim dokonce jeste na CP/M kde to pan Gert Klotzer vymyslel) a pro tluste sitove klienty v podstate to same co je dnes Rails a Django pro web. Verte nebo neverte :-). Na zaklade dost zkriplovaneho pascalu slouziciho jako lepidlo pro nekolik malych deklarativnich DSL (schema databaze / modely vcetne vsemoznych deklarativnich rules HNED na teto urovni = ORM, sablony formularu a tiskovych sestav, neco jako batch transakce nad modely (zadne ugly SQL:-), uzivatelske role, propojeni modelu se sablonami pres editacni kontroler, take s moznymi surovymi/admin generickymi pohledy=MVC, cela apliakce poslepovana onim pascal-like interpreterem. V tomto nastroji se dalo o tabulkach uvazovat jako o tridach a o zaznamech jako o perzistentnich instancich jejich objektu. Programovani ve stylu rychlych cyklu „pokus/omyl“, s tim, ze VSECHNA data mohou byt a jsou implicitne perzistentni v integrovane relacni databazi, nad kterou je mozne kdykoliv spustit pri ladeni surove admin formulare a kdykoliv je mozne upravit „zaziva“ modely, pridavat pole, menit jejich format (ovsem jeste zadny auto refactoring)… Bohuzel nemel tento nastroj prakticky ZADNY MARKETING (na rozdil or Rails, ty jsou zda se mi HODNE o marketingu a BYZNYSU kolem nich:-), takze nikdy nepokracoval ve Windows a s nim take umrel (ackoliv jeste dnes na tom dobre funguji relativne hodne slozite aplikace, konkretne treba DOSovske „UCTO“). A muzu vam rict, ze znam osobne minimalne jednoho cloveka, ktereho ZAVISLOST na takto snadnem poskytovani aplikaci zakaznikum dokonce i osobne znicila, nakonec skoncil na JINYCH drogach… Vsechno, co je potencionalne RYCHLE strasne prijemne, vyvolava zavislost, ze ktere je strasne tezke se vymanit. Ja od dob FANDu vlastne tak stale hledam podobne snadny nastroj, respektive, alespon se stale snazim neco na ten zpusob spachat v posledni dobe pro NETCF, tedy stale hlavne pro spis mensi „tluste“ aplikace; to mi samozrejme docela komplikuje zivot, protoze je vetsinou treba psat rychle aplikace pro zakazniky nez vymyslet frameworky, ale diky te ziskane zavislosti si jaksi „nemuzu pomoct“. Tot jen me asi vic nez 2 centy k teto zalezitosti. Mym vzorem ja prave take Anders Hejlsberg, autor TurboPascalu, VisualJ++ (ktera byla mimochodem proti SUN jave brutalne rychlejsi) a pozdeji z ni vzesleho C# a dnes pracujici na eliminaci posledniho velkeho softwaroveho kostlivce (SQL:-) prostrednictvim veci jako je LINQ :-). Ostatne, budte si jisti, ze IronRuby budne na .NET virtualni masine drasticky rychlejsi nez puvodni Ruby, krome toho mame uz ted IronPython, veci se opravdu zacinaji hybat a to je nakonec dobre :-). Jen je potreba „neztratit stopu“, jak pravi klasik…

 

Pridaj komentár

Komentáre môžu pridávať iba prihlásení užívatelia.