Hice Python en 2003-5, cuando era consultor de Plone / Zope. Luego, en 2006, comencé a recoger a Ruby. Nunca he mirado hacia atrás. Creo que diferentes personas se sienten más cómodas con diferentes lenguajes y culturas de programación, pero para mí, Ruby se siente mucho mejor que Python.
Personalmente, creo que en comparación con Ruby, Python es el caballo de batalla confiable que también resulta ser un poco serio y soso. Ruby es mucho más divertido. Es un lenguaje de aspecto más bonito, y se puede hacer que haga muchas cosas divertidas y funky que siguen cautivando a sus practicantes. Escuché que personas de Python atacan a Ruby por ser demasiado peligroso, diciendo que es demasiado fácil volver a abrir clases y hacer cosas salvajes e irresponsables como esas. Pero eso es parte de lo que hace que Ruby se sienta como un romance de comedia de acción y aventura para mí. Python, por el contrario, se parece más a los muebles de Ikea: es agradable, cómodo y confiable, pero nunca te sorprenderá y te dejará sin aliento.
Las dos mejores cosas sobre Ruby, desde mi punto de vista, son las dos cosas que lo distinguen claramente de Python. Primero, Ruby está muy influenciado por Perl. Python parece estar orgulloso de ser el anti-Perl. Pero el material que Ruby tomó prestado de Perl es de gran valor práctico. Tome expresiones regulares, por ejemplo. En Ruby, puedes escribir expresiones regulares naturalmente, por ejemplo if mystring =~ /^\s+hello word!/ ...
. En Python, no tanto, porque Python es muy anal sobre hacer que todo siga una sintaxis predecible de manera uniforme. En Ruby, puedes obtener STDIN inmediatamente con input = STDIN.read
. En Python, tienes que import sys
y luego
sys.stdin.read()
. Estos son solo dos ejemplos en los que el esfuerzo de Python para distanciarse de Perl y ser tan previsiblemente regular se ve frustrado por la voluntad de Ruby de hacer lo que se siente bien en cada caso.
La otra cosa que distingue a Ruby de Python es que Ruby está mucho más cerca de Lisp, mientras que Python es prácticamente un lenguaje de programación imperativo. Creo que esta es una gran ventaja a favor de Ruby.
Hay muchas características similares a Lisp de Ruby que hacen posible hacer más con menos código en Ruby que en Python. Por ejemplo, cada declaración y estructura de control en Ruby devuelve un valor: puede escapar en Ruby sin usar nunca la return
declaración. Incluso las if
declaraciones se evalúan a un valor, por lo que puede escribir cosas como esta
result = if output == 'hello'
[some code here]
"world"
else
[some other code here]
"there"
end
En Python deberías escribir
if output == "hello":
[some code here]
result = "world"
else:
[some other code here]
result = "there"
Python te hace escribir result =
dos veces. Eso no es muy SECO (no te repitas). Hay muchos casos como este en los que Ruby estará más SECO que Python debido a sus cualidades similares a las de Lisp. Matz, el creador de Ruby, provenía de un fondo Lisp.
Algunas personas dicen que Ruby también patea el culo de Python en la metaprogramación (también conocida como programación dinámica). Las personas de Python responden ya sea diciendo que la metaprogramación es demasiado peligrosa, o diciendo que teóricamente, puedes lograr todas las cosas de metaprogramación que Ruby puede hacer en Python, de manera diferente. Pero una cosa en la que todos están de acuerdo es que la metaprogramación es mucho menos común en Python que en Ruby. Y eso es muy malo, porque la metaprogramación es un viaje.
Creo que probablemente sea cierto que, al final del día, Ruby y Python pueden hacer el trabajo. En comparación con C y Java, Ruby y Python son más o menos lo mismo. Son lenguajes expresivos, productivos, de alto nivel.
Entonces se reduce a tu personalidad.
¿Te gusta que las cosas sean predecibles, regulares y seguras? ¿Te gusta el estilo imperativo de programación? ¿Quieres trabajar algún día para Google? ¿Crees que Perl es un engendro caótico del infierno? Quédate con Python.
¿Te complace encontrar la manera más concisa de lograr algún resultado de programación? ¿Te aburres de la regularidad y la uniformidad? ¿Te gusta tener la libertad de escribir código en un estilo propio y tener mucho espacio para inventar tus propios trucos geniales? ¿Sientes más afinidad por Lisp que por C? ¿Sientes una gran admiración por la contribución de Perl a la programación de software, pero solo deseas que sea un poco menos críptico y feo? ¿Piensas en el código como otras personas piensan en la poesía? Prueba Ruby.