Es probable que no haya un enfoque único para el aprendizaje de Scala, pero describiré cómo lo aprendí y explicaré las ventajas y desventajas de cada enfoque.
(Nota: el número o el orden de los elementos en cada lista de pros / contras no pretende sugerir la importancia de cada elemento o el mérito general del enfoque.)
Coursera: Principios de Programación Funcional en Scala
Mi primera exposición a Scala fue en la clase Coursera, que tomé en 2012 porque había un grupo de Meetup / estudio en mi área. (En ese momento, estaba teniendo problemas para elegir mi primer lenguaje funcional para aprender y el grupo de estudio me ayudó a tomar la decisión).
Ha pasado un tiempo desde que lo tomé, por lo que el contenido puede haber cambiado sustancialmente.
Pros :
- El curso le ofrece un recorrido guiado rápido de los conceptos de lenguaje y programación funcional, que es esencial si ya no está familiarizado con la programación funcional.
- Cubre las partes del lenguaje que utilizará con mayor frecuencia y le permitirá codificar con bastante rapidez. Me encontré explorando el lenguaje en el REPL (bucle de lectura-evaluación-impresión – una consola interactiva para ejecutar fragmentos de código), que es de gran ayuda para reforzar su comprensión del lenguaje y los conceptos.
- El grupo de estudio también fue muy útil para mí personalmente. Hubo personas con diferentes niveles de experiencia con Scala, por lo que algunas personas pudieron compartir ejemplos de aplicaciones de los conceptos en las conferencias de esa semana. Ayudar a otras personas cuando están luchando también refuerza los conceptos que entiendes, lo que lleva a un mayor dominio.
- Lo encontré divertido y aumentó mi interés en el idioma.
Contras :
Como el curso funcionó bien para mi estilo de aprendizaje (y ha pasado un tiempo desde que lo tomé), tengo pocas quejas, pero puedo compartir los aspectos negativos que he escuchado de otras personas:
- No del todo autosuficiente; idealmente debería ser emparejado con un libro y / o experiencia del mundo real para el dominio.
- Una de las quejas más comunes es sobre la voz de Odersky, ya que su tono monótono puede calmar a algunas personas para dormir. Resulta que me resulta atractivo, aunque jugaría las conferencias a una velocidad de 1.25x o 1.5x. De hecho, aquellos de nosotros de nuestro grupo de estudio que nos mantuvimos en contacto a menudo hacíamos impresiones de él mucho después de que el curso hubiera terminado.
- También he escuchado a gente decir que parte del material es demasiado académico o puede ser bastante difícil. Estos problemas pueden aliviarse discutiendo el material con otras personas. Obtener una nueva perspectiva sobre algo que parece demasiado académico puede revelar aplicaciones inesperadas o al menos impulsar la resolución creativa de problemas en el futuro. El material difícil se puede tratar de varias maneras, pero en particular recomiendo aplicar estrategias del curso “Aprender a aprender”.
- No es lo que opinas, por lo que puedes terminar el curso y sentirte un poco abrumado cuando hay muchas maneras de lograr algo.
Leer: Programación en Scala
Leí mucho del libro de Odersky en mi viaje al trabajo (~ 45 minutos), comenzando en algún momento durante la clase Coursera.
En general, el libro fue extremadamente valioso para pasar de una familiaridad superficial con la sintaxis a la comprensión fundamental de las construcciones dentro del lenguaje. Raramente me encontré confundido acerca del lenguaje a partir de entonces, lo que significa menos batallas con el compilador y luchando para entender el código de otras personas (a menos que, por supuesto, la lógica en sí sea confusa).
Pros :
- El libro es extremadamente completo, y abarca la motivación y los detalles en profundidad de cada función del idioma. Cada capítulo agregó mucha claridad al lenguaje, ya que lo usaría día a día y me proporcionaría una base para abordar nuevas técnicas.
- En particular, la forma en que el libro cubre la motivación de las características influyó en la forma en que experimentaría al decidir cómo modelar algo utilizando Scala. Esto es extremadamente valioso con un lenguaje como Scala porque hay muchas maneras de hacer muchas cosas, pero entender la motivación del lenguaje te ayuda a entender las ventajas y desventajas de los enfoques que permiten.
- El libro tampoco es demasiado ideológico; no se adhiere estrictamente a técnicas funcionales puras, inmutables, referencialmente transparentes. Le muestra cómo usar Scala como Java, mientras que lo dirige hacia conceptos funcionales que hacen que el lenguaje sea más seguro, divertido y expresivo.
- Finalmente, encontré el libro muy legible, a pesar de ser muy largo. Esto es bastante subjetivo, pero he escuchado que otras personas que han leído varios libros en lenguaje de programación también lo elogian.
Contras :
- Es grande, pesado y largo. No es ideal para ponerse al día rápidamente y no es divertido cargar con él si prefiere imprimir sobre ebooks.
- Contiene un recorrido guiado rápido por el idioma, pero probablemente haya mejores recursos condensados (por ejemplo, Scala para el impaciente). No obtenga este libro a menos que tenga la intención de leer al menos 12–15 capítulos.
- No enfatiza los conceptos funcionales utilizados en las bibliotecas influenciadas por Haskell (scalaz, gatos, etc.) que a menudo desconciertan a las personas que no se han tomado el tiempo para aprenderlos. Sin embargo, esto no es un requisito para el principiante.
- No abiertamente criticado, aunque tiene un estilo distinto. Si examinas los ejemplos de código, puedes elegir el estilo para el que Scala fue diseñado (aunque no fue diseñado estrictamente para un solo estilo).
Trabajo: usar Scala en el trabajo
Comencé un trabajo que utilizaba exclusivamente a Scala en el backend. Fui contratado por la compañía que albergaba el grupo de estudio antes de que terminara el curso, así que pude poner en práctica lo que aprendí. He trabajado en Scala durante casi un año desde entonces.
El lugar de trabajo lo obliga a aprender y comprender, ya que necesita establecer un cierto nivel de confianza en su código antes de liberarlo a la naturaleza. Es increíblemente útil para refinar su comprensión de un idioma.
Muchas personas preguntan “cómo puedo aprender Scala” porque necesitan usarlo en el trabajo, pero algunas personas simplemente tienen curiosidad. Si no puede usarlo en el trabajo, puede probar un proyecto, ya sea una idea nueva o la transferencia de una biblioteca existente de otro idioma a Scala.
Pros :
- Experiencia en el trabajo trabajar con un idioma es extremadamente práctico. Si tiene éxito aplicando algún concepto una vez, es probable que lo encuentre útil nuevamente en el futuro.
- Puede haber una mayor variedad de problemas que resolver y, por lo tanto, amplía la amplitud de su comprensión del idioma.
- El código escrito en el trabajo debe ser mantenible, por lo que te obliga a explorar cómo escribir Scala limpio.
- El lugar de trabajo puede exponerlo a un código de opinión, enseñándole soluciones bien conocidas para problemas comunes, lo que lo hace más productivo.
- Hay muchos ejemplos negativos si tiene un ojo perspicaz para el código incorrecto, que le enseña lo que no debe hacer. Tenga en cuenta que no debe sobregeneralizar ejemplos negativos; ser conscientes del contexto
- La programación de pares en el trabajo es una excelente manera de aprovechar el conocimiento de otras personas sobre el lenguaje y el código base en el que está trabajando.
Contras :
- No puedo enfatizar esto lo suficiente, ¡aprender en el trabajo no es suficiente por sí solo! El lenguaje requiere estudio. Todos los idiomas se benefician del aprendizaje tanto de abajo hacia arriba como de arriba hacia abajo, pero esto es especialmente cierto para los idiomas poderosos. Es difícil mirar el código del mundo real y distinguir el lenguaje central de las abstracciones creadas a partir de él sin un conocimiento existente del idioma.
- Aprender del código del mundo real significa adoptar potencialmente los malos hábitos de otras personas. Trate de ser reflexivo, haga preguntas, comprenda si vale la pena copiar algo que vea.
Leer: Programación Funcional en Scala.
Leí la mayor parte del “Libro Rojo” de Chiusano y Bjarnason el año pasado para aumentar mi comprensión del estilo de Scala influenciado por Haskell.
Dependiendo de su situación, puede ser más o menos esencial para aprender Scala, pero es valioso y recomendable para cualquier persona interesada en la programación funcional.
Pros :
- Se proporcionan excelentes motivaciones para usar código puro, sin efectos secundarios.
- Muchos ejercicios, que son invaluables para comprender cómo resolver nuevos problemas en un estilo funcional.
- Más conciso y de opinión que el libro de Odersky. Si desea una filosofía similar a la de Python de (idealmente) una forma de hacer cualquier cosa, entonces este libro será más atractivo para usted.
Contras :
- No es una guía completa para el idioma. Solo le enseñará las características del lenguaje necesarias para sus enfoques funcionales para la resolución de problemas.
- No reflejará la mayoría del código del mundo real, ya que hay un montón de código de estilo de Scala-como-un-mejor-Java por ahí. Si está trabajando en una base de código como esa, esto no le ayudará a ponerse al día. Sin embargo, si está trabajando en una base de código que hace un uso intensivo de gatos o scalaz, querrá leer este libro.
Aprendizaje continuo: blogs, bibliotecas, idiomas relacionados y más libros
Siempre he tenido curiosidad por las partes y aplicaciones de Scala que aún no había utilizado. Incluso si lee una publicación de blog y nunca pone su contenido en práctica, ayuda a resolver problemas de manera creativa. De hecho, puede ser valioso mirar los idiomas que influyen en Scala o sus bibliotecas populares para comprender mejor sus motivaciones.
Pros :
- Puede ser un compromiso de tiempo bajo.
- A menudo es relevante para el mundo real.
- Te expone a pequeñas y grandes variaciones en los estilos de resolución de problemas.
- Es donde aprendes ideas de imagen más grande, como la filosofía de “dejarlo ir” de Akka.
Contras :
- Nuevamente, existe la posibilidad de copiar malas prácticas de otras personas.
- Puede llevar a la tentación de usar una técnica porque es emocionante, incluso cuando no es una buena opción para el problema en cuestión.