Aprendiendo Scala, sintiéndose desanimado [cerrado]

9

Vengo de un entorno Java y estoy tratando de aprender Scala. En este momento me siento bastante abrumado, parece que hay mucho más que aprender con Scala, hay muchas maneras diferentes de hacer lo mismo.

Me preguntaba si alguien tiene algún consejo sobre por dónde empezar y cuánto tiempo les llevó sentirse razonablemente competentes en el idioma.

Incluso las pequeñas cosas como para las comprensiones de bucles parecen realmente poderosas, ¡pero es solo otra pieza de sintaxis que debe recordar!

jcm
fuente
Scala es, en la mayoría de los casos, un lenguaje complejo, ¡así que no se desanime! Como anécdota, soy un programador de Haskell bastante competente y pensé que Scala era mucho más complejo :) La mejor manera que he encontrado para aprender algo es alternar entre un libro y un proyecto. Para Scala, sugeriría un compilador y los libros de la escalera, pero cada uno el suyo
Daniel Gratzer, del
¡Gracias por el aliento! ¿Qué es el libro de la escalera?
jcm
lectura recomendada: ¿Dónde comenzar?
mosquito
Probé Scala hace unos años desde una perspectiva de Java y realmente no lo entendí. Recientemente, comencé un curso en coursera.org sobre programación funcional en Scala. Es un enfoque lo suficientemente diferente que mi fondo de Java no se interpuso en el camino. En cambio, estoy (re) aprendiendo a pensar en estructuras de datos inmutables, razonando sobre algoritmos, teoría de conjuntos, teoría de tipos y todas las otras cosas divertidas que no puedo practicar en un trabajo real. No te preocupes Todavía hay una utilidad real de Scala en el mundo real.
BobDalgleish
2
Scala es un gran ecosistema nuevo para aprender (el lenguaje central en sí mismo no es tan grande, son principalmente las bibliotecas y los conceptos). Si te quedas en el extremo menos profundo de las cosas por un tiempo y tomas un concepto a la vez, las cosas realmente comenzarán a juntarse. Las cosas que parecen extrañas sintaxis especial cocinada generalmente caerán en una categoría más genérica de cosas que pueden resumirse en todo el idioma. Pero definitivamente toma algo de juego y lectura para entender cuáles son esas cosas.
KChaloux 03 de

Respuestas:

11

He estado donde estás y casi me rendí un par de veces. Aunque de ninguna manera soy un desarrollador experto de Scala, siento que ahora entiendo bien el lenguaje, lo suficiente para que haya envenenado completamente mi relación con Java.

Lo primero que hice fue pasar unas semanas jugando, leyendo varios blogs e introducciones al idioma. Eso fue un error, no aprendí (o al menos entendí) mucho de lo que era útil, y me sentí completamente fuera de mis profundidades.

Lo segundo fue pasar algún tiempo resolviendo problemas que eran técnicamente simples pero que me obligaron a explorar aspectos específicos de la sintaxis de Scala por mi cuenta:

Si bien esto no me convirtió en un experto de la noche a la mañana, me dio suficiente familiaridad con el lenguaje que ya no me parecía tan imposible.

Con ese impulso de confianza, finalmente hice lo que debería haber comenzado: obtener la Programación en Scala por Martin Odersky e intentar leer un capítulo completo cada dos días. Es un libro bien escrito y completo, y si ya tiene una sólida experiencia en programación, no debería resultar demasiado desalentador. No es necesario que su primera lectura sea demasiado dolorosa: omita las partes marcadas como opcionales, asegúrese de comprender los conceptos pero no se atasque en los detalles (en particular, creo que los capítulos de las colecciones son excesivos y pueden ser desnatada). Saber que existe un concepto y dónde leer una explicación completa de cómo funciona es de gran ayuda.

Una alternativa a la lectura del libro es asistir a la clase de Coursera: es mucho menos completa, pero cubre la mayoría de los puntos cruciales y se divide en unidades manejables y lógicas. Por otro lado, no sé si es posible acceder a las lecciones una vez que la clase está completa, y también descubrí que estaba mucho menos comprometido mientras escuchaba a alguien (incluso alguien tan obviamente inteligente y conocedor como Martin Ordesky) que Al leer un libro.

Otro problema con Scala es la cantidad de vocabulario que debe ingerir: ¿parámetros de nombre? para la comprensión? ¿cierre? Si se siente abrumado por esto, descubrí que una buena mezcla del Glosario de Scala y las búsquedas de desbordamiento de pila específicas me ayudaron mucho (busque respuestas de Daniel Sobral y Travis Brown). De hecho, fui tan lejos como para crear un mazo Anki con el glosario, y creo que fue de gran ayuda.

Finalmente, esto es probablemente obvio, pero código, código, código. Encuentre un proyecto paralelo en el que pueda trabajar, incluso si es algo trivial. Lo que hice fue escribir un rastreador de Amazon muy simple que me enviaba un tweet cada vez que un autor en el que estaba interesado lanzaba un nuevo libro. Me tomó más tiempo de lo que probablemente debería, pero es cuando me enamoré del idioma.

Si llega tan lejos, probablemente no necesite más ayuda, pero una buena sugerencia, una vez que haya llegado a comprender el lenguaje, es profundizar en los conceptos subyacentes. Usted está familiarizado con OOP, intente leer sobre programación funcional. Puedo decir con absoluta certeza que le sorprenderá. La programación funcional en Scala debería lanzarse pronto (ish), pero la edición de acceso temprano ya es excelente. Otra respuesta sugiere la Programación funcional para desarrolladores de Java , con la que no estoy familiarizado, pero me inclino a creer que es bueno (¿cuándo no ha valido la pena leer un libro de O'Reilly al menos?).

Espero que esto no sea demasiado largo y obvio, y sinceramente te deseo lo mejor. Scala tiene sus fallas, pero es un lenguaje maravilloso y llevará su cerebro en direcciones que nunca supo que existían. Y estaré buscando tu "Aprendizaje Haskell, sintiéndome desanimado" en un año :)

Nicolas Rinaudo
fuente
3

Scala es una forma muy diferente de pensar para Java, ¡así que no se desanime! Probablemente comenzaría con la Programación funcional para desarrolladores Java para que pueda entrar en la forma funcional de pensar.

¿Hay un grupo de usuarios de Java y / o Scala cerca? Siempre es más fácil aprender un nuevo idioma con un colega.

¡Mucha suerte y sigue perseverando!

Martijn Verburg
fuente
Además, recomendaría echar un vistazo a Scala Frameworks o Toolkits en relación con las áreas de su interés. En mi experiencia, tener un proyecto en el que te gusta trabajar facilita las cosas. Echa un vistazo a Lift o Play Framework, por ejemplo, cuando estás en desarrollo web o Akka si lo tuyo son las aplicaciones concurrentes o distribuidas.
juwi