¿Qué debe saber un desarrollador de Python mientras aprende Ruby? [cerrado]

16

He sido programador de Python durante aproximadamente 18 meses, que consiste en una pasantía y algunos proyectos paralelos, y me considero bastante cómodo en el lenguaje.

Sin embargo, parece haber mucha atención en Ruby en el campo de la programación, pero ya no hay mucha en Python.

Entonces, al aprender Ruby, ¿habrá cosas pitónicas que sean solo malas prácticas en Ruby? ¿Qué debo tener en cuenta y qué debo evitar?

CJ
fuente
44
Siempre he considerado como programador de Ruby si debería aprender Python porque es de lo que todos hablan: P
Earlz
A pesar del zumbido, parece que Python todavía se usa el doble que Ruby (según TIOBE al menos -> tiobe.com/index.php/content/paperinfo/tpci/index.html ).
Daniel Scocco
10
En lugar de ser un "programador de Python" o un "programador de Ruby", debes tratar de ser un gran programador. Luego, puede usar el idioma que desee y pasar a otros nuevos cuando sea el momento adecuado.
BlackJack

Respuestas:

31

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 sysy 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 returndeclaración. Incluso las ifdeclaraciones 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.

dan
fuente
11
"Y eso es muy malo, porque la metaprogramación es un viaje" ... Y al igual que un viaje, será genial para una noche, pero eventualmente te levantas por la mañana y olvidas lo que has hecho. Creo que la metaprogramación se enfatiza demasiado en Ruby, y prefiero Ruby a Python. La mayoría de las soluciones de Ruby a los problemas de sintaxis es "puede solucionarlo con la meta programación"
Earlz
23
¿Qué? result = "world" if output=="hello" else "there"es Python perfectamente válido (y tres caracteres más cortos).
Tim Pietzcker
3
@Tim OK, gracias por corregirme. Pero, ¿puede hacer lo mismo con una declaración if / elsif / elsif / else, es decir, if / elif / elif / else en Python? ¿Puedes hacer lo mismo incluso si hay varias declaraciones dentro de la cláusula if o else?
dan
1
Espera, ¿Python no tiene un operador ternario?
PP.
3
"Matz, el creador de Python, vino de un fondo Lisp". espera ... AFAIK Matz es el creador de Ruby ...
Eimantas
6

Depende.

Para mí, Python es mucho más fácil de entender que Ruby, además de que ambos idiomas tienen un propósito diferente.

Python es más un lenguaje clásico con muchas cosas elegantes de bajo nivel, manteniéndolo limpio y fácil en comparación con C, por ejemplo. Python no tiene la ambición de Ruby, que para mí tiene muchas más funciones de alto nivel.

Aprender Ruby no te hará daño, descubrirás cosas nuevas, pero ten en cuenta que Python está más cerca de los paradigmas de programación simples que hicieron el éxito de C, con muchos impulsores de productividad. Ruby es más para las personas que quieren ir más allá en los conceptos de programación en general: Scheme y todos esos lenguajes "superiores".

jokoon
fuente
3

Respuesta corta: sí y sí.

Aprender un nuevo idioma casi siempre es útil, y es especialmente útil para Ruby, ya que Rails sigue siendo muy popular. Y sí, conocer bien Python hará que sea más fácil recoger a Ruby. Tienen algunas diferencias sintácticas y diferentes convenciones para nombrar, pero también hay muchos puntos en común.

No es una gran inversión de tiempo, y siempre es beneficioso tener más herramientas en su caja de herramientas, ¡así que adelante!

(Utilicé Python durante unos 10 años y recogí Ruby el año pasado. Actualmente trabajo a tiempo completo en el proyecto RoR)

shang
fuente
2

Todo tiene un nicho. Por ejemplo, Python (django) es un ciudadano de primera clase en GoogleApp Engine, mientras que es el idioma o la opción para muchos proyectos bioinformáticos. Python tiene mucho valor de mercado (obtengo una serie de perspectivas de empleo no solicitadas simplemente porque he hecho mucho con Python), pero Ruby también lo tiene en diferentes áreas. Como sin duda has escuchado aquí muchas veces, siempre te ayudará a aprender más idiomas, así que sí, aprende Ruby. ¿Será complicado? Será mucho menos complicado que aprender COBOL, ya que los idiomas y los marcos disponibles son similares entre sí. Un ejemplo son las gemas de Ruby y la pepita de Python .

Recuerde que los idiomas son herramientas y cada herramienta como un propósito. Cuantas más herramientas conozca, más rápido, más fácil y más correctamente podrá construir la casa del árbol.

Arcege
fuente
Quería responder en la misma línea, espero que no te
importe
2

¿Debo aprender rubí? Si.

Siempre vale la pena aprender un nuevo idioma (especialmente si aplica un paradigma de programación diferente al que usted conoce) y, a veces, puede hacerlo más competente incluso cuando programa en otros idiomas. Por ejemplo, tomé la mayoría de la programación funcional que conozco de Lisp y la aplico cuando la necesito a Python y Ruby.

¿Va a ser difícil? Si has aprendido Python, también puedes aprender Ruby.

También es útil si ahora está buscando trabajo, muestra que tiene curiosidad sobre la tecnología y que puede aprender cosas por su cuenta.

Hay una buena comparación entre Ruby y Python en c2.com .

Trasplazio Garzuglio
fuente