Co powinien wiedzieć deweloper Python podczas nauki języka Ruby? [Zamknięte]


16

Jestem programistą Python przez około 18 miesięcy, składając się z jednego stażu i kilku pobocznych projektów, i uważam się za całkiem swobodnie w języku.

Wygląda jednak na to, że Ruby skupia się na programowaniu, ale na Pythonie już niewiele.

Czy podczas uczenia się języka Ruby pojawią się rzeczy w języku Python, które są po prostu złymi praktykami w języku Ruby? Na co mam uważać, a czego unikać?


4
Zawsze uważałem się za programistę Ruby, jeśli powinienem nauczyć się języka Python, ponieważ to wszystko, o czym wszyscy mówią: P
Earlz

Pomimo szumu wydaje się, że Python jest nadal używany dwa razy częściej niż Ruby (według TIOBE przynajmniej -> tiobe.com/index.php/content/paperinfo/tpci/index.html ).
Daniel Scocco,

10
Zamiast być „programistą Python” lub „programistą Ruby”, powinieneś spróbować być świetnym programistą. Następnie możesz użyć dowolnego języka i przejść do nowego w odpowiednim czasie.
BlackJack,

Odpowiedzi:


31

Zrobiłem Python w latach 2003-5, kiedy byłem konsultantem Plone / Zope. Potem w 2006 roku zacząłem zbierać Ruby. Nigdy nie oglądałem się za siebie. Myślę, że różni ludzie czują się bardziej komfortowo z różnymi językami programowania i kulturami, ale dla mnie Ruby czuje się znacznie lepiej niż Python.

Osobiście uważam, że w porównaniu do Ruby, Python jest niezawodnym koniem roboczym, który bywa również nieco spokojny i nijaki. Ruby to dużo więcej zabawy. Jest to ładniej wyglądający język, który można zrobić, aby robić wiele zabawnych i funkowych rzeczy, które wciąż zachwycają swoich praktyków. Słyszałem, że ludzie Python atakują Ruby za to, że są zbyt niebezpieczni, mówiąc, że zbyt łatwo jest ponownie otwierać klasy i robić dzikie i nieodpowiedzialne rzeczy. Ale to część tego, co sprawia, że ​​Ruby czuje się jak romans z komedii przygodowej. Natomiast Python przypomina bardziej meble Ikea: jest przyjemny, wygodny i niezawodny - ale nigdy Cię nie zaskoczy i nie odetchnie.

Dwie najlepsze rzeczy w Ruby, z mojej perspektywy, to dwie rzeczy, które wyraźnie go odróżniają od Pythona. Po pierwsze, na Ruby duży wpływ ma Perl. Python wydaje się być dumny z bycia anty-Perlem. Ale rzeczy, które Ruby pożyczyła od Perla, mają wielką wartość praktyczną. Weźmy na przykład wyrażenia regularne. W Ruby możesz naturalnie pisać wyrażenia regularne, np if mystring =~ /^\s+hello word!/ .... W Pythonie nie tak bardzo, ponieważ Python jest bardzo analny w kwestii tego, aby wszystko było zgodne z jednoznacznie przewidywalną składnią. W Ruby możesz natychmiast otrzymać STDIN input = STDIN.read. W Pythonie musisz import sysi wtedy sys.stdin.read(). To tylko dwa przykłady, w których wysiłek Pythona, aby zdystansować się od Perla i być tak przewidywalnie regularnym, jest przeważony przez gotowość Ruby do zrobienia tego, co wydaje się właściwe w każdym przypadku.

Inną rzeczą, która odróżnia Ruby od Pythona, jest to, że Ruby jest znacznie bliższy Lispowi, podczas gdy Python jest prawie imperatywnym językiem programowania. Myślę, że to duży plus na korzyść Ruby.

Istnieje wiele podobnych do Lispa funkcji Ruby, które pozwalają na więcej pracy z mniejszym kodem w Ruby niż w Pythonie. Na przykład każda instrukcja i struktura kontrolna w Ruby zwraca wartość: możesz uciec w Ruby, nigdy nie używając returninstrukcji. Nawet ifinstrukcje oceniają na wartość, dzięki czemu możesz pisać takie rzeczy

result = if output == 'hello'
           [some code here]
           "world"
         else
           [some other code here]
           "there"
         end

W Pythonie musiałbyś pisać

if output == "hello":
  [some code here]
  result = "world"
else:
  [some other code here]
  result = "there"

Python sprawia, że ​​piszesz result =dwa razy. To niezbyt SUCHE (nie powtarzaj się). Jest wiele takich przypadków, w których Ruby będzie bardziej SUCHA niż Python ze względu na swoje cechy podobne do Lisp. Matz, twórca Ruby, pochodził z Lisp.

Niektórzy mówią, że Ruby kopie także tyłek Pythona w metaprogramowaniu (inaczej programowanie dynamiczne). Ludzie Pythona odpowiadają albo twierdząc, że metaprogramowanie jest zbyt niebezpieczne, albo mówiąc, że teoretycznie możesz wykonać wszystkie czynności związane z metaprogramowaniem, które Ruby może w Pythonie, po prostu inaczej. Ale wszyscy zgadzają się, że metaprogramowanie jest znacznie mniej powszechne w Pythonie niż w Ruby. A to źle, ponieważ metaprogramowanie to podróż.

Myślę, że prawdopodobnie prawdą jest, że pod koniec dnia Ruby i Python mogą wykonać zadanie. W porównaniu do C i Java, Ruby i Python są prawie tym samym. Są to ekspresyjne, produktywne języki wysokiego poziomu.

Sprowadza się to do twojej osobowości.

Czy lubisz być przewidywalny, regularny i bezpieczny? Czy podoba Ci się imperatywny styl programowania? Czy chcesz kiedyś pracować dla Google? Czy uważasz, że Perl jest chaotycznym spawnem piekła? Trzymaj się Pythona.

Czy czerpiesz ogromną przyjemność ze znalezienia najbardziej zwięzłego sposobu na osiągnięcie jakiegoś wyniku programowania? Czy nudzi Cię regularność i jednolitość? Czy lubisz swobodę pisania kodu we własnym stylu i masz dużo miejsca na wymyślanie własnych fajnych sztuczek? Czy bardziej czujesz do Lisp niż do C? Czy czujecie wielki podziw dla wkładającego epokę wkładu Perla w programowanie, ale pragniecie tylko, aby mogło być nieco mniej tajemnicze i brzydkie? Czy myślisz o kodzie, tak jak inni myślą o poezji? Wypróbuj Ruby.


11
„A to szkoda, bo metaprogramowanie to wycieczka” ... I podobnie jak wycieczka, świetnie sprawdzi się na noc, ale w końcu obudzisz się rano i zapomnisz, co zrobiłeś. Myślę, że w Ruby metaprogramowanie jest zbyt mocno zaakcentowane i wolę Ruby od Pythona. Większość rozwiązań Ruby dotyczących problemów ze składnią to „można to obejść dzięki meta programowaniu”
Earlz

23
Co? result = "world" if output=="hello" else "there"jest całkowicie poprawnym Pythonem (i trzy znaki krótszym).
Tim Pietzcker,

3
@ Tym razem OK, dziękuję za poprawienie mnie. Ale czy możesz zrobić to samo z instrukcją if / elsif / elsif / else - tj. Jeśli / elif / elif / else w Pythonie? Czy możesz zrobić to samo, nawet jeśli w klauzuli if lub else znajduje się wiele instrukcji?
dan

1
Zaraz, Python nie ma trójskładnikowego operatora?
PP.

3
„Matz, twórca Pythona, pochodził z Lisp.” czekaj ... AFAIK Matz jest twórcą Ruby ...
Eimantas

6

To zależy.

Dla mnie python jest zdecydowanie łatwiejszy do złapania niż ruby, a oba języki mają inny cel.

Python jest bardziej klasycznym językiem z mnóstwem fantazyjnych rzeczy na niskim poziomie, dzięki czemu jest czysty i łatwy w porównaniu do na przykład C. Python nie ma ambicji Ruby, która dla mnie ma znacznie więcej funkcji na wysokim poziomie.

Nauka języka Ruby nie zaszkodzi, odkryjesz nowe rzeczy, ale pamiętaj, że Python jest bliższy prostym paradygmatom programistycznym, które odniosły sukces w języku C, z dużą ilością czynników zwiększających produktywność. Ruby jest bardziej dla ludzi, którzy chcą pójść dalej w zakresie ogólnych koncepcji programistycznych: Schemat i wszystkie te „lepsze” języki.


3

Krótka odpowiedź: tak i tak.

Nauka nowego języka jest prawie zawsze przydatna, szczególnie dla Ruby, ponieważ Rails jest nadal bardzo popularny. I tak, znajomość Pythona ułatwi podniesienie Ruby. Mają pewne różnice składniowe i różne konwencje w nazewnictwie, ale jest też wiele wspólnego.

To nie jest wielka inwestycja i zawsze warto mieć więcej narzędzi w swoim zestawie narzędzi, więc idź!

(Używam Pythona od około 10 lat, aw zeszłym roku wybrałem Ruby. Obecnie pracuję na pełny etat w projekcie RoR)


2

Wszystko ma niszę. Na przykład Python (django) jest obywatelem pierwszej klasy w GoogleApp Engine, podczas gdy jest językiem lub wyborem wielu projektów bioinformatycznych. Python ma dużą wartość rynkową (dostaję wiele niezamówionych perspektyw pracy po prostu dlatego, że dużo zrobiłem z Pythonem), ale Ruby też - w różnych obszarach. Jak bez wątpienia słyszałeś tutaj wiele razy, zawsze pomoże ci nauczyć się więcej języków, więc tak, ucz się Ruby. Czy to będzie skomplikowane? Będzie to o wiele mniej skomplikowane niż nauka języka COBOL, ponieważ dostępne języki i frameworki są do siebie podobne. Jednym z przykładów są klejnoty Ruby i pip pipona .

Pamiętaj, że języki to narzędzia, a każde narzędzie jako cel. Im więcej narzędzi znasz, tym szybciej, łatwiej i bardziej poprawnie możesz zbudować domek na drzewie.


Chciałem odpowiedzieć w ten sam sposób, mam nadzieję, że nie masz nic przeciwko edycji ...
Dimitrios Mistriotis,

2

Czy powinienem nauczyć się ruby? Tak.

Nauka nowego języka jest zawsze warta (szczególnie jeśli wymusza inny paradygmat programowania niż te, które znasz), a czasem może sprawić, że będziesz bardziej biegły, nawet podczas programowania w innych językach. Na przykład podjąłem większość programowania funkcjonalnego, które znam z Lisp, i stosuję je, kiedy jest mi potrzebne, w Pythonie i Ruby.

Czy to będzie trudne? Jeśli nauczyłeś się języka Python, z pewnością możesz nauczyć się języka Ruby.

Jest to również przydatne, jeśli teraz szukasz pracy, pokazuje, że interesujesz się technologią i możesz uczyć się samodzielnie.

Istnieje dobre porównanie między Ruby i Python na c2.com .

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.