Seria pytań od programisty .NET migrującego na RoR

Witam,

pozwólcie, że na wstępnie trochę o sobie napiszę: jestem programistą .NET od ~5 lat, pracowałem w projektach webowych (w tym też ASP.NET MVC), klasy enterprise i desktopowych. O jakiegoś czasu przymierzam się do przesiadki ( w domowych projektach ) na Ruby On Rails…

ale tu mam kilka pytań:

  • Ostatnio bardzo zainteresował mnie temat noSQL, w szczególności baza danych neo4j oraz MongoDB. Do tej ostatniej znalazłem odpowiedniego mappera i myślę, że nie powinienem mieć z nią problemów. Natomiast do neo4j istnieje ‘binding’ tylko pod jruby`iego. Chciałbym zatem zapytać o kompatybilność tego JRUBY z Railsami 3 i innymi frameworkami ( rspec, cucumber itp.)

  • Czy jesteście zadowoleni z ActiveRecord czy raczej wolicie DataMappera ?

  • Jak ma się sprawa IoC w Railsach i czy to ma wogóle jakiś sens ?

  • czy tworzycie bardziej rozbudowaną warstwę modelu czy też wrzucacie logikę biznesową do kontrolerów ?

  • Aha, i jescze chciałbym zapytać od czego zacząć. Sprawdziłem takie strony jak,rails casts, rails envy, peepcode… czy jest coś jeszcze ciekawego w sieci ?

  • Postawiłem sobie na wirtualnej maszynie takie oto środowisko developerskie zbudowane z Suse Linux, RubyMine oraz Git. Czy potrzebuje czegoś jeszcze ?

p.s. IronRuby odpada bo nie jest to język wspierany przez visual studio.
Pozdrawiam

Cześć :wink:
Odpowiem na szybko na wybrane.

AFAIK AR jest powszechniej używany - stabilne, działające rozwiązanie.

Model biznesowy <- logika biznesowa - wydaje mi się, że obie nazwy do siebie pasują :wink: Ogólnie stosujemy zasadę Fat Model - Thin Controller, choć ostatnio na forum rozgorzała dyskusja, co robić z bardzo grubymi modelami.

Po północy, z zamkniętymi oczami mogę polecić http://guides.rubyonrails.org/

Wywal Ruby mine (jeżeli chcesz poznać ekosystem - IDE w tym Ci nie pomoże - dyskutowano wielokrotnie na tym forum), zainstaluj RVM (ruby version manager) i za jego pomoca wybraną wersję Ruby:

  • dla railsów 2.3.x -> ruby 1.8.7
  • dla railsów 3.x -> ruby 1.9.2-head
    Do tego jakiś lekki edytor kodu - vim/emacs? Linuksiarze, możecie coś polecić?

Również :wink:

PS. Witamy!

Railsy 3 działają na jruby. Jruby jest chyba najbardziej dojrzałą implementacją rubiego zaraz po MRI, nie powinieneś mieć większych problemów.

W przypadku ActiveRecord’a 3.0 różnice są coraz mniejsze, więc w dużej mierze to kwestia gustu i przyzwyczajenia.

DataMapper szczyci się tym, że można go stosować nie tylko do SQLowych baz danych. Możesz na przykład podpiąć adapter do mongodb (chociaż ja nie jestem zbyt wielkim fanem takich bajerów, jeżeli nie musisz połączyć w jednej aplikacji kilku baz danych, to najlepiej wybrać narzędzie dedykowane do np. wspomnianego mongo, takie jak MongoMapper).

Czasami się stosuje, na przykład w przypadku pluginów obsługi plików (takich jak paperclip). Stworzone jest API, a pod spodem możesz wpiąć “backendy” do obsługi różnym systemów (fs, amazon, ftp itd.). Wszystko zależy od sytuacji.

W modelu. Najlepiej jak kontrolery mają maksymalnie jedną czy dwie linie kodu (nie licząc wywołań typu respond_to). W taki sposób najłatwiej jest testować kod i ograniczyć ilość copypasty.

Sevos napisał o dyskusji na temat dużych modeli, żebyś tego źle nie zrozumiał, sprecyzuję trochę: chodziło o duże klasy, które mają 1000 czy 2000 linii, ale przerzucanie kodu do kontrolerów na pewno nie jest dobrym sposobem na ich odchudzenie :wink: Najlepiej dzielić wtedy taką klasę na kilka mniejszych.

Internety są dość duże, na pewno coś znajdziesz :wink:

Sevos podał linka do rails guides, to jest bardzo dobry punkt zaczepienia, ale jeżeli chcesz się zająć railsami 3, to celuj w edgeguides: http://edgeguides.rubyonrails.org/

Zanim już totalnie zmigrujesz do Rails weź tylko pod uwagę jak mały jest ten rynek w Polsce i jakie to niesie za sobą konsekwencje.

Dlatego warto projektów i pracodawców szukać też za granicą :wink:

UPDATE:

Po przemyśleniu sytuacji na polskim rynku: abstrahując już od tego, że projekt z zagranicy będzie prawdopodobnie bardziej opłacalny, ostatnio nie widzę, żeby były jakieś problemy ze znalezieniem roboty. W tym momencie jest chyba trochę tak, że dużo firm potrzebuje doświadczonych railsowców, a że ich zasoby są skończone - raczej nie trzeba się martwić, że ciężko będzie znaleźć zatrudnienie.

Że kompetenty programista Ruby zarabia więcej (często o wiele więcej) od kompetentnych programistów PHP czy C#/.NET.
Jak na razie popyt bardzo przerasta podaż. Jeśli jesteś dobry z Ruby i Rails, mieszkasz (bądź możesz zamieszkać) w Warszawie i szukasz pracy, mogę obudzony w środku nocy wymienić trzy firmy, które szukają i potrzebują takich ludzi.

Owszem projekt z zagranicy jest bardziej opłacalny zwykle dlatego sporo firm w w naszym kraju robi właśnie takie projekty i dają one dużo satysfakcji.

Ponieważ jednak chcę pomieszkać jeszcze w Polsce, nie mam ochoty być freelancerem oraz nie mam ochoty pracować zdalnie (lubie jednak kontakt z ludźmi w pracy) to bądźmy szczerzy, że dużego wyboru nie ma. Ja także potrafię wymienić firmy z Warszawy (z której właśnie się wyprwoadziłem do Wrocławia :slight_smile: ), które szukają i chętnie przyjmą ludzi do pracy, ale ile jest takich firm poza stolicą?

Lubię mówić, że programista .net czy javy znajdzie pracę w każdej wsi a fakt programowania w Ruby niejako determinuje gdzie możesz mieszkać :slight_smile:

Nie czarowałbym też, że programiści Rails zarabiają dużo więcej od programistów .net czy javy. Nie wiem skąd takie dane (i na jakiej próbie statystycznej one bazują). Na pewno zarabiają porządznie i nie zauważyłem by jakakolwiek firma skąpiła w tym temacie, ale też nie gloryfikowałbym tych zarobków.

Jeśli zaś polegać na jakimś badaniu to czy powinniśmy rzucać się zaraz hurtem do nauki Perla ? (bardzoo retoryczne pytanie).
http://praca.wp.pl/kat,18453,title,Ile-zarabiaja-pracownicy-IT,wid,12186330,wiadomosc.html?P[page]=3

Nie wiem na ile wiarygodne jest to badanie i czy aby tak duże różnice nie wynikają po prostu z tego, że dla niektórych języków liczba respondentów była bardziej reprezentatywna ?

Na pewno moge powiedzieć, że przy rekrutacji na programistę Ruby jeśli zostanie się zaproszonym na rozmowę to zwykle firmy są skłonne poświęcić dużo czasu, żeby sprawdzić co naprawdę umiesz i sporo zależy od umiejętności. Wydaje mi się, że w innych (“dojrzałych”) technologiach liczą się już tylko lata doświadczenia ale to mi się tylko wydaje, bo nie mam w tej materii osobistych doświadczeń.

Niewątpliwie kultura Ruby/Rails to zupelnie inna kultura niż .net w rozumienie kultury pisania oprogramowania, projektów jakich można się spodziewać, relacji wewnątrz firm i między pracownikami.

To tylko takie moje luźne spostrzeżenia nieco odbiegające od głównego wątku, ale liczę na ciekawą dyskusję.

W takim Krakowie jest (na oko) 3-4 razy więcej firm rubiowych (lub “romansujących” z ruby) niż w Wawie.

Możesz pokazać mi w którym miejscu pisałem w ogóle o zarobkach javowców?

Swięta racja, panie. Społeczność i ekosystem (co przekłada się na kulturę pisania kodu oraz kulturę pracy) są co najmniej równie zachęcające jak sama technologia, jeśli nie bardziej :slight_smile:

Wymieniłeś tylko php i .net. Jave sobie sam dopisałem :slight_smile:

Wracając do sedna, koledzy ładnie odpowiedzieli, parę uzupełnień.

Co do samego języka, to warto przeczytać “książkę z kilofem”: http://pragprog.com/titles/ruby/programming-ruby
Ciekawe blogi:
http://rubyquicktips.tumblr.com/
http://planetrubyonrails.com/

Bardzo ładnie przygotowane środowisko pracy. Nie zgodzę się z Sevosem, zostaw RubyMine, akurat to IDE, naprawdę nie przeszkadza w poznawaniu Railsów i na głowę bije inne podobne produkty.

Powodzenia.

Edit
Ponieważ zapewne jesteś z Gdyni, polecam również udać się na spotkanie Rubistów z Trójmiasta:
http://rubyonrails.pl/forum/f17-TRUG

Oczywiście na trug zapraszamy :slight_smile:

Niestety dopiero po wakacjach, bo raczej nie zapowiada się by na uczelni coś szybciej się zorganizować dało. A i chyba wszyscy w rozjazdach wszelakich, więc sensu nie ma za bardzo.

Witam,
Bardzo dziękuję za ciepłe przyjęcie :slight_smile:

Obecnie przerabiam sobie książkę Agile Web Development with rails. ( to już 3 podejście do tej pozycji, ale tym razem idzie jak należy ).

Co do używania vima albo emacsa to mnie nigdy nie przekonacie :slight_smile: 5 lat z Visual Studio robiło swoje.

W moim środowisku pracy wymieniłem Suse na Ubuntu - kwestia kompatybilności sterowników do karty graficznej. Pod Suse, ATI widocznie nie jest za bardzo lubiane :frowning: Aha… no i linux jest teraz moim głównym systemem, a windowsa odpalam z virtual boxa.

Czy ktoś z was korzysta z http://heroku.com/ ?
Mam taką koncepcję, aby założyć sobie tam konto w celach developerskich. Dają między innymi gita, mongodb + narzędzia administracyjne do tego. Zaoszczędziło by mi to wiele czasu na konfiguracji tych zabawek u siebie. ( Jak wspominałem wcześniej, Git`a mam zainstalowanego, ale stanąłem na instalacji ViewGita )

Na spotkaniu “Truga” chętnie się zjawię.

Pozdrawiam

Też tak kiedyś myślałem. :wink:

Do małych aplikacji, które się zmieszczą na jednym “dynosie”, tak. Do produkcyjnych aplikacji, nie (ze względu na cenę).

Nie do końca rozumiem. Chcesz pisać aplikacje odpalając je tylko na heroku? Sądzę, że są lepsze sposoby utrudniania sobie życia :wink:

Deploy na heroku pustej aplikacji wygląda w ten sposób:

  1. Tworzysz aplikację
  2. Dodajesz tam gita (czyli tak czy siak musisz mieć gita u siebie zainstalowanego)
  3. Dodajesz heroku jako zdalne repozytorium
  4. Robisz git push heroku master (czyli “pchasz” swoje zmiany do zdalnego repozytorium)
  5. Heroku ustawia wszystko i odpala aplikację

Później żeby zrobić jakąkolwiek zmianę w aplikacjia:

  1. Zmieniasz to co chcesz
  2. Robisz commit w gicie
  3. Pchasz to do repozytorium heroku
  4. Heroku restartuje aplikacje

Nie masz dostępu do ssh, linii poleceń, ftp. Heroku jest dobre, żeby pokazać komuś aplikację, ale nie żeby to było jedyne środowisko developerskie :slight_smile: Jeżeli po każdej zmianie musiałbyś robić commit do gita, to będzie to droga przez mękę.

Masz Ubuntu, więc wystarczy Ci linia poleceń z komendą git, na razie olej inne narzędzia.

Postaw sobie środowisko do rubiego i railsów (możesz poczytać o rvm jeżeli chcesz inną wersję rubiego niż systemowa), ściągnij mongodb (wystarczy ściągnąć binarkę, rozpakować i uruchomić plik mongod) i rób na początku wszystko lokalnie. Nie ma sensu się zastanawiać nad hostingiem i deploymentem jeżeli nie masz jeszcze aplikacji :slight_smile: