¿Cuál es la parte más difícil de aprender Ruby on Rails?

Esa es una pregunta bastante abierta, pero supongo que viene desde la perspectiva de un principiante. Los problemas con Rails que afectan, por ejemplo, a una startup que golpea sus primeros problemas de escala, obviamente son muy diferentes.

Los principales obstáculos que he visto en cientos de estudiantes son:

  1. Rubí. Sí, muchos lugares intentan empujarte a Rails sin entender primero a Ruby. Parece que es una buena opción hasta que necesite hacer algo no estándar y luego esté SOL. Saltar a Ruby y sumergirse directamente en Rails le costará una cantidad significativa de tiempo a largo plazo. Es un gran lenguaje. ¡Pruébalo primero! Algunos buenos recursos para comenzar con Ruby incluyen el libro Aprender a programar de Chris Pine [1], el curso Ruby de Codecademy [2] o la pista Ruby de The Odin Project [3] (si desea profundizar).
  2. MVC: el patrón de arquitectura Modelo-Vista-Controlador utilizado por Rails toma un poco de tiempo para entenderlo, pero es muy poderoso una vez que visualiza cómo se ve el flujo de información a medida que viaja a través de la aplicación. Le permite segregar ciertas funciones a secciones particulares de la base del código. Codelearn tiene un aspecto decente en MVC específicamente [4], aunque también puede encontrar diagramas similares en otros lugares. Sin embargo, a veces se trata de algo más que el diagrama … necesita guiar una solicitud a través de todo su ciclo de vida en su cabeza (del cliente al servidor al enrutador al controlador y quizás al modelo para ver al cliente).
  3. Enrutamiento: Sí, realmente debería llamarse “MVC (r)” porque hay una capa de enrutamiento que de alguna manera parece más complicada de lo que realmente es. Recuerdo que tuve muchas dificultades para entenderlo y luego me pregunté por qué fue tan difícil una vez que finalmente lo entendí. Básicamente, se basa en el concepto de enrutamiento “RESTful”, que es la idea de que en realidad solo hay 7 tipos de cosas que debe hacer en una aplicación (por ejemplo, CREAR un usuario, MOSTRAR un usuario, etc.). Comprender cómo especifica una de estas acciones en su controlador al proporcionar la ruta (por ejemplo, `/ users`) y usar el verbo HTTP correcto (por ejemplo, POST) solo requiere un poco de reflexión. Use el comando `rastrillar rutas` generosamente al principio. Ver más sobre esto en TOP [7].
  4. Bases de datos: una vez que comience a programar con Rails un poco, se encontrará con el obstáculo de no entender todo lo que está haciendo Active Record (la gema que maneja todas las interacciones de la base de datos). Es entonces cuando (en realidad, idealmente * antes * de esto) debe recoger una comprensión conceptual de cómo funcionan las bases de datos. Esta es otra de esas cosas en las que necesita invertir un poco de tiempo por adelantado (le recomiendo que aprenda SQL primero), pero lo hará mucho más flexible como programador y mucho menos miedo de lo que está haciendo ActiveRecord. Francamente, no hay muchos recursos excelentes para aprender esto en línea, aunque Coursera tiene una clase [5] en bases de datos (que se vuelve un poco teórica), y TOP ofrece algunos enlaces a otros [6].

Al final, esto es solo un puñado de obstáculos comunes. Ruby es importante, así que pasaría algún tiempo abordando eso antes de comenzar con Rails a menos que estés desesperado por algunas “victorias” tempranas. Learning Rails tiene su parte justa de “espera, ¿QUÉ?” momentos, por lo que es mejor encontrar un amigo o aprender en un entorno compatible para que pueda hacer preguntas “tontas” de manera segura y seguir avanzando en su proceso de aprendizaje. Sin embargo, Rails es un marco increíble, ¡así que quédate con él!

¡Buena suerte!

[1]: https://pine.fm/LearnToProgram/c…
[2]: http://www.codecademy.com/en/tra…
[3]: http://www.theodinproject.com/ru…
[4]: http://www.codelearn.org/ruby-on…
[5]: https://www.coursera.org/course/db
[6]: http://www.theodinproject.com/ru…
[7]: http://www.theodinproject.com/ru…

Depende de dónde vienes. Contestaré desde mi perspectiva particular, a pesar de que se está volviendo cada vez más raro. Probablemente sea más relevante para personas mayores de 40 años.

Antes de hacer Ruby, tenía décadas de experiencia en desarrollo de software, pero principalmente en C, C ++, Java y otros lenguajes compilados de tipo estático. También había hecho algunas secuencias de comandos de Python, JavaScript, Perl y, por supuesto, shell sin compilar, así que estaba familiarizado con el concepto de no tener un compilador. Aun así, me tomó un tiempo “soltar” la “necesidad” de la verificación de tipo que Ruby no hace … y en su lugar abrazar el poder de la escritura de patos.

Dicho esto, todavía deseo que la mayoría de los lenguajes de scripting requieran declaraciones de variables, para que un error tipográfico simple no haga que una nueva variable aparezca de la nada y arruine las cosas. Por otro lado, las pruebas unitarias exhaustivas, y especialmente la TDD, e incluso la programación de pares más, realmente ayudan con eso. Afortunadamente, la comunidad de Ruby acepta mucho las pruebas, generalmente TDD, y a menudo emparejamiento, mucho más que las otras en las que tenía mucha experiencia.

La metaprogramación no me desconcertó. Lo había visto en LISP en la escuela, y escribí programas para escribir programas repetitivos (como un programa Pascal para escribir un programa MACRO-11 para generar un fragmento de texto, una letra a la vez), aunque no lo había usado previamente en el mundo real. Sin embargo, YMMV. (Por cierto, recientemente lancé una gema llamada hook_lying_syncer para ayudar con un problema de metaprogramación; vea su listado en RubyGems para más detalles).

Mezclar módulos, en lugar de heredar de clases, también era un concepto nuevo para mí. Pero no tan difícil. Por otro lado, si vienes desde una perspectiva de novato de programación total, es una cosa más para apilar, además de la programación en primer lugar, OO, etc.

Luego está Rails en sí. Su gran énfasis en la “convención sobre la configuración” significa que debe atenerse a las diversas convenciones, o prepararse para una pelea bastante difícil. ¡Por supuesto, esto significa que tienes que saber cuáles son las convenciones! Afortunadamente, hay muchos tutoriales excelentes que cubrirán la gran mayoría de ellos. (La recomendación habitual es el simplemente llamado “El tutorial de Ruby on Rails”, en el Tutorial de Ruby on Rails (3ª ed.). Lo mantiene bien actualizado y está disponible para usar en línea de forma gratuita.) Además, las convenciones hacen Lo correcto para el 99.9% de los casos, pero el sobrante del 0.1% puede ser un oso.

¡Otra cosa con la que no estaba muy familiarizado en el aprendizaje de Rails fue la programación web en general! Había hecho toneladas de cosas cliente-servidor, en ambos lados, pero principalmente con clientes personalizados. Estaba familiarizado con el funcionamiento de HTTP, DNS, TCP / IP y muchos protocolos relacionados, ¡pero nunca antes había programado una aplicación web! (No debe confundirse con un sitio web * *, que sirve páginas estáticas de HTML, con ocasionales pequeños scripts de JavaScript y applets de Java. Había estado haciendo HTML durante quince años y Java y JS durante más de una década). tuvo que aprender todo sobre esas cosas, que la mayoría de los desarrolladores modernos ya sabrían.

Eso es todo lo que puedo pensar de improviso …

Algunas respuestas geniales aquí ya. Agregaré esto:

La parte difícil es aprender a hacerlo “bien”. Y esto es totalmente subjetivo, pero arrojaré mi opinión sobre lo que está bien.

Ruby (y Rails específicamente) tienen excelentes marcos de prueba disponibles. Esto hace que sea realmente fácil comenzar desde cero y TDD (Test Driven Development) un proyecto completo. Esto vale totalmente la pena hacerlo. SIN EMBARGO, y esto es importante, aprende a hacerlo bien. Aprenda a escribir pruebas rápidas que separan las preocupaciones. La mejor parte de escribir excelentes pruebas es que creará un gran código (la mayoría de las veces). Y luego te encontrarás con la parte divertida de descubrir cómo escribir pruebas RÁPIDAS. Porque si su conjunto de pruebas tarda demasiado en ejecutarse, deja de ejecutarlo.

Además de eso, hacerlo bien incluye usar la cantidad adecuada de la magia de Rails, pero evitar depender de ello. Rails hace mucho por ti. Y es excelente para crear prototipos y ponerse en marcha rápidamente. Pero si tiene una aplicación que desea escalar a más de unas pocas docenas de usuarios, debe comenzar a comprender lo que sucede en el interior de su aplicación. Para mi antiguo equipo, eso significaba que teníamos que romper nuestro hábito de depender demasiado de Active Record. Si está haciendo muchas búsquedas de Active Record que ralentizarán su sitio considerablemente.

Una de las partes más difíciles es toda la magia que está sucediendo detrás de la cortina.

Cuando comienzas, toda la magia parece divertida, pero de repente tienes un problema y no puedes descubrir por qué. Está sucediendo mucha magia con estructuras de carpetas, material implícito y convenciones de nombres [0].

Si sobrevives a los primeros errores duros que se deben a esta magia, puedes apreciarlo. Todas las reglas de nomenclatura facilitan unirse a una aplicación existente o hacer que otros contribuyan a la suya.

[0]: Convenciones de nomenclatura de Ruby y Rails

Empecé a aprender Rails en un gran proyecto.

Venía de un backend PHP / C ++ y había una cosa que era realmente difícil de entender: la convención sobre la configuración. Los rieles (y, en general, las aplicaciones / bibliotecas basadas en ruby) se basan completamente en convenciones. Rails es un gran marco, y comprender todas sus convenciones fue realmente difícil para un primerizo.

Después de eso, puedes seguir la respuesta de Erik Trautman, ya que es realmente exhaustiva.