J'ai fait Python en 2003-5, quand j'étais consultant Plone / Zope. Puis en 2006, j'ai commencé à acheter Ruby. Je n'ai jamais regardé en arrière. Je pense que différentes personnes se sentent plus à l'aise avec différents langages de programmation et cultures, mais pour moi, Ruby se sent beaucoup mieux que Python.
Personnellement, je pense que par rapport à Ruby, Python est le cheval de bataille fiable qui se trouve également être un peu staid et fade. Ruby est beaucoup plus amusant. C'est une langue plus jolie et peut être faite pour faire beaucoup de choses amusantes et géniales qui épateront ses pratiquants. J'ai entendu des gens de Python attaquer Ruby pour être trop dangereux, disant qu'il était trop facile de rouvrir des classes et de faire des trucs sauvages et irresponsables comme ça. Mais cela fait partie de ce qui fait que Ruby me ressemble comme une comédie d'aventure-action. Le python, en revanche, ressemble davantage aux meubles Ikea: il est agréable, confortable et fiable - mais il ne vous surprendra jamais et ne vous coupera pas le souffle.
Les deux meilleures choses à propos de Ruby, de mon point de vue, sont les deux choses qui le distinguent nettement de Python. Tout d'abord, Ruby est beaucoup influencé par Perl. Python semble être fier d'être l'anti-Perl. Mais ce que Ruby a emprunté à Perl est d'une grande valeur pratique. Prenez des expressions régulières, par exemple. Dans Ruby, vous pouvez écrire des expressions régulières naturellement, par exemple if mystring =~ /^\s+hello word!/ ...
. En Python, pas tellement, parce que Python est tellement anal à faire en sorte que tout suive une syntaxe uniformément prévisible. Dans Ruby, vous pouvez obtenir STDIN immédiatement avec input = STDIN.read
. En Python, vous devez import sys
et puis
sys.stdin.read()
. Ce ne sont que deux exemples où l'effort de Python pour se distancier de Perl et être si prévisible régulièrement est contrebalancé par la volonté de Ruby de faire ce qui semble bien dans chaque cas.
L'autre chose qui distingue Ruby de Python est que Ruby est beaucoup plus proche de Lisp alors que Python est à peu près un langage de programmation impératif. Je pense que c'est un gros plus en faveur de Ruby.
Il existe de nombreuses fonctionnalités similaires à Lisp de Ruby qui permettent d'en faire plus avec moins de code dans Ruby qu'en Python. Par exemple, chaque instruction et structure de contrôle dans Ruby renvoie une valeur: vous pouvez vous en sortir dans Ruby sans jamais utiliser l' return
instruction. Même les if
instructions évaluent une valeur, vous pouvez donc écrire des trucs comme celui-ci
result = if output == 'hello'
[some code here]
"world"
else
[some other code here]
"there"
end
En Python, il faudrait écrire
if output == "hello":
[some code here]
result = "world"
else:
[some other code here]
result = "there"
Python vous fait taper result =
deux fois. Ce n'est pas très SEC (ne vous répétez pas). Il y a beaucoup d'exemples comme celui-ci où Ruby sera plus SEC que Python en raison de ses qualités de type Lisp. Matz, le créateur de Ruby, est issu d'un milieu Lisp.
Certaines personnes disent que Ruby botte aussi le cul de Python dans la métaprogrammation (aka programmation dynamique). Les gens de Python répondent soit en disant que la métaprogrammation est trop dangereuse, soit en disant que théoriquement, vous pouvez accomplir toutes les choses de métaprogrammation que Ruby peut faire en Python, juste différemment. Mais une chose sur laquelle tout le monde s'accorde est que la métaprogrammation est beaucoup moins courante en Python qu'en Ruby. Et c'est dommage, car la métaprogrammation est un voyage.
Je pense qu'il est probablement vrai qu'en fin de compte, Ruby et Python peuvent tous deux faire le travail. Comparé à C et Java, Ruby et Python sont à peu près la même chose. Ce sont des langues expressives, productives et de haut niveau.
Cela se résume donc à votre personnalité.
Aimez-vous que les choses soient prévisibles, régulières et sûres? Aimez-vous le style de programmation impératif? Voulez-vous peut-être travailler un jour pour Google? Pensez-vous que Perl est une ponte d'enfer chaotique? Restez avec Python.
Prenez-vous un grand plaisir à trouver le moyen le plus concis pour obtenir un résultat de programmation? Vous ennuyez-vous par la régularité et l'uniformité? Aimez-vous avoir la liberté d'écrire du code dans un style qui vous est propre, et avoir beaucoup d'espace pour trouver vos propres trucs sympas? Vous sentez-vous plus une affinité pour Lisp que pour C? Ressentez-vous une grande admiration pour la contribution historique de Perl à la programmation logicielle, mais souhaitez-vous seulement qu'elle soit un peu moins cryptée et laide? Pensez-vous au code comme les autres pensent à la poésie? Essayez Ruby.