Я делал Python в 2003-5 годах, когда был консультантом Plone / Zope. Затем в 2006 году я начал собирать Ruby. Я никогда не оглядывался назад. Я думаю, что разные люди чувствуют себя более комфортно с разными языками программирования и культурами, но для меня Ruby чувствует себя намного лучше, чем Python.
Лично я считаю, что по сравнению с Ruby Python - это надежная рабочая лошадка, которая также выглядит немного уравновешенной и мягкой. Руби намного веселее. Это более симпатичный язык, и его можно заставить делать много забавных и забавных вещей, которые продолжают удивлять его практиков. Я слышал, что Python люди нападают на Ruby за то, что он слишком опасен, говоря, что слишком легко заново открывать классы и делать дикие и безответственные вещи, подобные этому. Но это часть того, что заставляет Руби чувствовать себя как комедийный приключенческий роман для меня. В отличие от этого, Python больше похож на мебель Ikea: он приятен, удобен и надежен, но никогда не удивит вас и не унесет дух.
С моей точки зрения, две лучшие вещи в Ruby - это две вещи, которые резко отличают его от Python. Во-первых, на Ruby большое влияние оказывает Perl. Кажется, что Python гордится тем, что является анти-Perl. Но то, что Ruby позаимствовал у Perl, имеет большую практическую ценность. Возьмите регулярные выражения, например. В Ruby вы можете писать регулярные выражения, например if mystring =~ /^\s+hello word!/ ...
. В Python не так уж и много, потому что Python настолько анально заставляет все следовать единому предсказуемому синтаксису. В Ruby вы можете сразу получить STDIN input = STDIN.read
. В Python вы должны import sys
и тогда
sys.stdin.read()
. Это всего лишь два примера, когда попытка Python дистанцироваться от Perl и быть настолько предсказуемо регулярной, перевешивается готовностью Руби делать то, что кажется правильным в каждом случае.
Другая вещь, которая отличает Ruby от Python, заключается в том, что Ruby намного ближе к Lisp, тогда как Python в значительной степени является императивным языком программирования. Я думаю, что это большой плюс в пользу Руби.
Есть много Lisp-подобных возможностей Ruby, которые позволяют делать больше с меньшим количеством кода в Ruby, чем в Python. Например, каждая структура оператора и элемента управления в Ruby возвращает значение: в Ruby вы можете обойтись без использования return
оператора. Даже if
заявления оцениваются как значения, так что вы можете написать что-то вроде этого
result = if output == 'hello'
[some code here]
"world"
else
[some other code here]
"there"
end
В Python вы должны написать
if output == "hello":
[some code here]
result = "world"
else:
[some other code here]
result = "there"
Python заставляет вас печатать result =
дважды. Это не очень сухо (не повторяйте себя). Есть много подобных случаев, когда Ruby будет более СУХИМ, чем Python, из-за его свойств, подобных Лиспу. Мац, создатель Ruby, пришел из Lisp.
Некоторые люди говорят, что Ruby также пинает задницу Python в метапрограммировании (он же динамическое программирование). Люди Python отвечают либо тем, что метапрограммирование слишком опасно, либо тем, что теоретически вы можете выполнить все вещи метапрограммирования, которые Ruby может в Python, просто по-другому. Но одна вещь, с которой все согласны, заключается в том, что метапрограммирование гораздо менее распространено в Python, чем в Ruby. И это очень плохо, потому что метапрограммирование - это путешествие.
Я думаю, что это правда, что в конце концов Ruby и Python могут выполнить свою работу. По сравнению с C и Java Ruby и Python - одно и то же. Это выразительные, продуктивные языки высокого уровня.
Так что все сводится к вашей личности.
Вам нравится, чтобы все было предсказуемо, регулярно и безопасно? Вам нравится императивный стиль программирования? Вы хотите когда-нибудь поработать на Google? Считаете ли вы, что Perl - это хаотическое порождение ада? Придерживайтесь Python.
Получаете ли вы большое удовольствие, находя абсолютно краткий способ достижения некоторого результата программирования? Вам скучно от регулярности и единообразия? Вам нравится иметь свободу писать код в собственном стиле, и у вас есть много места, чтобы придумывать свои собственные интересные трюки? Чувствуете ли вы сродство с Лиспом больше, чем с С? Чувствуете ли вы восхищение эпохальным вкладом Perl в программирование программного обеспечения, но только желаете, чтобы он был немного менее загадочным и безобразным? Вы думаете о коде, как другие люди думают о поэзии? Попробуйте Руби.