Ruby - garść faktów na zachętę
12 komentarzy | Kategorie: Ruby | trackbackTagi: introduction ruby
Na początek...
Od roku 2003 lawinowo zdobywa nowych zwolenników, głównie za sprawą popularnego frameworku do tworzenia aplikacji webowych o nazwie Ruby on Rails, tworzonego przez grupę programistów pod kierownictwem Davida Heinemeiera Hanssona. W roku 2005 według statystyk sklepu Amazon dwie najpopularniejsze książki na temat Ruby i Ruby On Rails były najlepiej sprzedawanymi pozycjami z kategorii Programowanie.
Źródło: http://pl.wikipedia.org/wiki/Ruby_(język_programowania)
To nie będzie łatwe...
Stawiam sobie cel. Chcę przekonać Cię do wspaniałego języka jakim jest Ruby. Zdaję sobie sprawę, że nie będzie to łatwe. Dlaczego miałbyś uczyć się kolejnego języka? Zapewne znasz już 2-3 (albo i więcej), a nauka kolejnego to wg Ciebie strata czasu. Być może należysz do ludzi, którzy na widok czegoś nowego od razu reagują negatywnie. Niestety takie podejście jest bardzo powszechne. Nieraz słyszę "nie podoba mi się ten język", "składnia jakaś taka dziwna", "to mi nie pasuje, albo tamto". Zamiast postępować w ten sposób nastaw się pozytywnie. Tym bardziej, że szybki rozwój branży IT (skoro czytasz ten tekst to zakładam, że jesteś z nią w jakiś sposób związany, a najprawdopodobniej jesteś programistą :-)) zmusza nas do bycia elastycznymi, gotowymi do zmiany technologii w jakiej pracujemy, do porzucania starych przyzwyczajeń i przyswajania nowych. Wczoraj pisałeś w C, dzisiaj piszesz w Javie, jutro będziesz pisać w... Rubim?:) Nawet jeśli upierasz się, że Ruby nie jest dla Ciebie, to wciąż uważam, że powinieneś poznać choć trochę Rubiego. Dlaczego? Ponieważ jeśli uważasz, że coś jest złe, to musisz wiedzieć dlaczego... Inaczej mówiąc jeśli się czegoś nie lubi to trzeba wiedzieć z jakiego powodu :-). No dobrze, jeśli czytasz jeszcze ten tekst to prawdopodobnie dobrze się nastawiłeś - jest cień nadziei, że dasz mi szansę. Postaram się jej nie zmarnować :-).
Liczą się tylko fakty...?
Najczęściej teksty wprowadzające zawierają krótki przegląd języka, w którym autor pokrótce przedstawia jego cechy i porównuje go do innych języków. Oczywiście porównania mają na celu pokazanie wyższości danego języka nad innymi. Mógłbym i ja postąpić w ten sposób, ale uważam, że to się nie sprawdza. Zapewne będą ludzie, których takie porównanie zachęci, ale większość i tak machnie ręką twierdząc, że ich język i tak to ma, ale w trochę innej formie. Oczywiście każdy język ma coś specyficznego dla niego (przykładowo dla Rubiego bloki czy też mixiny), ale tak naprawdę dopóki nie zacznie się używać tych specyficznych konstrukcji, dopóty najprawdopodobniej nie będą żadnym argumentem przemawiającym na jego korzyść. Mimo wszystko w drugiej częśći artykułu postaram się zwrócić uwagę na te specjały, które powodują, że Ruby jest wyjątkowy. W pierwszej części chciałbym przytoczyć kilka dosyć istotnych faktów, które mogą dać Ci jakieś pojęcie o tym języku. Zauważyłem bowiem, że ludzie oczekują konkretów, liczb, faktów. Kto tego używa, na jaką skalę. Kiedy mówię im "Ruby jest super, słyszałeś o tym frameworku Ruby on Rails? Tam wszystko jest takie proste..." to pierwsze co słyszę jest "a kto tego używa? Jakaś duża aplikacja, strona internetowa? Może jakiś fajny program jest w tym napisany?". Na te pytania postaram się zaraz odpowiedzieć.
Ale kto tego używa?...
Jak podaje strona domowa Rubiego język ten jest używany przez Centrum Badań NASA, grupę badawczą w Motoroli, Open Domain Server. Znane (i przede wszystkim często odwiedzane) strony, które zostały napisane z użyciem frameworka Ruby on Rails to na przykład A list apart, 43 things ("1,010,846 people in 12,565 cities are doing 958,679 things including..."), Basecamp ("over 1,000,000 people signed up worldwide"), ODEO, a także Twitter (momentami ponad 10k req/s!).
Martin Fowler - brzmi znajomo? Jeśli nie to czym prędzej nadrób zaległości! Napisał on m.in.:
(...) and it soon became my preferred scripting language (...)
When I ask the question "do you think you're significantly more productive in Ruby rather than Java/C#", each time I've got a strong 'yes'. This is enough for me to start saying that for a suitable project, you should give Ruby a spin. Which, of course, only leaves open the small question of what counts as 'suitable'.
But overall these experiences, from trusted colleagues mean I'm increasingly positive about using Ruby for serious work where speed, responsiveness, and productivity are important.
Źródło: http://www.martinfowler.com/bliki/EvaluatingRuby.html
Ruby coraz bardziej popularny...
Na stronie TIOBE można zobaczyć ranking języków (sposób w jaki taki ranking powstaje jest opisany na stronie). Ruby obecnie zajmuje 10 pozycję i ma największy przyrost spośród wszystkich języków! Rok 2006 był bardzo udanym rokiem dla Rubiego - skok aż o 11 pozycji!. Rosnącą popularność języka obrazuje poniższy wykres, zaczerpnięty ze wspomnianej strony.
Zwróćcie uwagę na dość znaczny spadek zainteresowania (można przypuszczać, że na rzecz Rubiego lub Pythona) takich języków jak Java czy Php. Pozwolę sobie jeszcze raz przytoczyć fragment cytatu z pierwszego akapitu: "W roku 2005 według statystyk sklepu Amazon dwie najpopularniejsze książki na temat Ruby i Ruby On Rails były najlepiej sprzedawanymi pozycjami z kategorii Programowanie.".
To tylko początek...
Rosnące zainteresowanie tym językiem to początek jego wielkiej kariery. Wiedzą to także takie wielkie firmy jak Sun i Microsoft! Ta pierwsza już jakiś czas temu zatrudniła zespół odpowiedzialny za JRuby, czyli interpreter Rubiego napisany w Javie. Ta druga zaś oznajmiła ostatnio o wydaniu 'dotnetowej' implementacji Rubiego, zwanej IronRuby. Takie postępowanie nie jest bynajmniej przypadkowe. Owe firmy zdają sobie sprawę o sile języków dynamicznych, stąd decyzja o inwestycji. Przykładowo JRuby pozwala na korzystanie z ogromnego zaplecza bibliotek, których Java dorobiła się przez lata (a których Rubiemu czasem brakuje). Łącząc to z prostotą pisania w tym języku otrzymujemy zabójczą mieszankę.
Otwórz oczy!
Przytaczając kolejne przykłady wykorzystania Rubiego, staram się otworzyć o czym tym, którzy mówią, że Ruby to niszowy język, a co za tym idzie - niewart uwagi. Tak nie jest, co mam nadzieję udowodniłem. W kolejnych artykułach postaram się pokazać dlaczego Ruby jest wyjątkowy, co wyróżnia go od innych języków. Do następnego razu. Stay tuned! :-)
Ciekawe czy Sun zdecyduje się na dołączenie JRuby do Javy 7 SE, tak jak zrobili to z Rhino (JavaScript) w JSE6? Byłoby fajnie :)
Podejrzewam, ze się zdecyduje. Alex Miller zawarł to we wpisie poświęconym Javie 7 (informacje te są nieoficjalne, ale…):
Poza tym Sun bardzo poważnie traktuje JRubiego, którego developerów zatrudnił do pracy nad NetBeans.
Tym nie mniej – świetny wpis. I design bloga toże :-).
Ruby ma też kompilator dla .NET ;-)
Niemniej jednak nawet jeżeli chciałbym napisać w nim webaplikację to napotykam ten sam problem co z Pythonem czy JSP. Pokażcie mi hostingi – ja znam jeden. A PHP (co prawda głównie 4) jest wszędzie praktycznie…
Problem z hostingiem wynika chyba cały czas z jednak małej popularności w porównaniu z PHP.
Brak hostingów o niczym nie świadczy – Java jest bardzo poważną platformą (dużo poważniejszą niż PHP...), a jednak ciężko o hosting.
Myślę, że firmy hostingowe to nie buce. Na pewno można się z nimi dogadać. Zmiana wersji PHP (lub MySQL) na najnowszą to kłopot, ale doinstalowanie jednego języka? Warto popróbować, a nuż się uda. :-)
Heh, bo JSP to nie jest platforma dla forum i księgi gości, tylko dla supe-hiper-webaplikacji. „Enterprise” przysłowiowy.
A Ruby… a w sumie nie wiem do czego się nadaje, ale pewnie i do tego i do tego :-)
Problem z hostingiem istnieje – nie ma co ukrywać. Powodów jest kilka. Po pierwsze Ruby wymaga trochę więcej zasobów niż Php. Nie czarujmy się – Ruby jest obecnie najwolniejszy z czołowych języków dynamicznych (ale ten problem jest bliski rozwiązania – YARV.)
Jeśli mówimy o Ruby i hostingu to zapewne mamy na myśli Railsy. A Railsy do sprawnego działania potrzebuje czegoś więcej niż potrzebuje Php. Wynika to ze sposobu działania – Railsy działają jak aplikacja (a nie jak skrypt który jest przetwarzany za każdym razem jak Php), a więc wymagają dostępu do shella itp. Jak widać choćby po dreamhoście, nawet na dzielonym serwerze da się coś takiego udostępnić. To było po drugie.
Po trzecie Ruby nie ma tylu lat doświadczeń co Php, przez które zostały opracowane gotowe schematy konfiguracji a administratorzy nauczyli się, że ustawianie register_globals jest złe itp.
Na dzień dzisiejszy jeśli myślimy o pisaniu czegoś w Ruby/Rails to praktycznie musimy być gotowi na serwer dedykowany. Mnie osobiście aż tak nie przeszkadza – przynajmniej nie ma jeszcze tego efektu co z Php, że masa „dzieciaków” próbuje w tym pisać i po 1 skrypcie zwie się programistami. Tam gdzie pojawiają się firmy z potrzebami znajdą się i pieniądze na serwer.
Na to postaram się odpowiedzieć w kolejnym wpisie.
Jedno mogę powiedzieć na pewno – jeśli jakieś rozwiązanie informatyczne gorąco poleca Radarek, to znaczy, że jest ono polecenia godne :)
Radarek to trzeźwo myślący praktyk i nie obawiam się o przesadną miłość, czy ideologiczne zacietrzewienie.
Kończąc szczere łubu-dubu…
Polecam polecenia Radarka ;)
@Ktos:
„Niemniej jednak nawet jeżeli chciałbym napisać w nim webaplikację to napotykam ten sam problem co z Pythonem czy JSP. Pokażcie mi hostingi – ja znam jeden.”
Python jest względnie często spotykany, ale zazwyczaj jako cgi (czyli nie do końca to co by się chciało mieć ;) ).
Tak, ale nie można zapominać o problemach RoR z wydajnością, zwłaszcza gdy tworzymy średniej wielkości serwis ie nie możemy sobie pozwolić na utrzymanie farmy kilkunastu serwerów – podczas gdy inne rozwiązanie pozwoliłoby zmniejszyć ich ilość przy takim samym obciążeniu. W benchmarkach wydajności które swego czasu przeglądałem prowadzą frameworki do Pythona – m.in. Django, niektóre frameworki pod PHP (CI) wypadały również korzystniej od RoR. Czy można o tym zapominać? Gdzieś czytałem fajne stwierdzenie – „Język programowania jest jak dziewczyna, kolejny jest lepszy, bo.. Ty jesteś lepszym programistą” :)
Niestety nie mogę się zgodzić z tym co piszesz.
Wydajność. Można powiedzieć, że to już mit. Wersja 1.9, oparta na maszynie wirtualnej YARV, jest około 3x (a czase nawet więcej) szybsza od wersji 1.8. Mało tego. Powstały (albo powstają) kolejne implementacje języka. I tak JRuby w wersji 1.1b jest szybszy od klasycznego MRI, a będzie jeszcze szybszy. Rubinius (choć jeszcze nie da się go używać w produkcji) także w niektórych testach wychodzi lepiej.
Mało tego. Dzięki takiej a nie innej architekturze railsów (działa jako aplikacja, a nie interpretowany za każdym razem skrypt) przy większych aplikacjach (czyli czymś więcej niż Hello World”) railsy jak najbardziej mogą być szybsze od php (tak, python jest szybszy, ale co z tego?).
Kiedy szybkość była decydującym wyznacznikiem? Nigdy. Dlatego nie programuje się dzisiaj w asm, a nawet do C rzadko się sięga (a byli i tacy ludzi co pisali w C skrypty CGI...). Procesory ciągle stają się szybsze (lub wielordzeniiowe) więc nie widzę powodu by uważać Rubiego za „wolny język”.
Weź jeszcze pod uwagę wydajność swojego umysłu. Cenisz bardziej siebie czy bezduszną maszynę? Ruby jest przede wszystkim dla człowieka. I czuję to w 100%, bo odkąd tylko zacząłem w nim programować, jestem w błogim stanie :).
Dla średniej wielkości serwisu nie potrzebujesz żadnej farmy serwerów. Jeden serwer z 2-3 instancjami mongrela. Tylko tyle i aż tyle.
„Gdzieś czytałem fajne stwierdzenie – „Język programowania jest jak dziewczyna, kolejny jest lepszy, bo.. Ty jesteś lepszym programistą” :)”
Po części jest to prawdą. Ale patrząc z perspektywy czasu ile nauczył mnie język to Ruby nie ma sobie równego. PHP to śmiech na sali :).
Mineło póltora roku i sam widzę, jak hostingów dla Railsów jest coraz więcej.
Za granicą można spotkać darmowe.
Po za tym trzeba wziąść pod uwagę pewną rzecz.
Nawet jeśli hosting dla Railsów jest droższy, należy pamiętać, że są ogromne oszczędności kosztów dla firm webdesignerskich w kwestii czasu pracy programistów i możliwości zrealizowania wiekszych ilości projektów w skali roku.
Jakby na to nie patrzeć – Ruby ostatecznie okazuje się tańszy.