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 sys
i 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 return
instrukcji. Nawet if
instrukcje 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.