¿Por qué debería aprender Scala? ¿Cómo es diferente / único / mejor que otros idiomas? ¿Hay operaciones que solo se pueden realizar en Scala? ¿Qué tan rápido es en comparación con Java / Haskell / Clojure / Lisp, etc.?

Aprenda Scala aquí: Aprenda Scala – Los mejores tutoriales de Scala | Hackr.io

1. Tu código será mejor

Podrá comenzar a utilizar técnicas de programación funcional para estabilizar sus aplicaciones y reducir los problemas que surgen de los efectos secundarios no deseados. Al cambiar de estructuras de datos mutables a estructuras de datos inmutables y de métodos regulares a funciones puras que no tienen ningún efecto en su entorno, su código será más seguro, más estable y mucho más fácil de comprender.

LIBRO

Scala de aprendizaje

Por Jason Swartz

Compra ahora

Su código también será más simple y más expresivo. Si actualmente trabaja en un lenguaje dinámico como Python, Ruby o JavaScript, ya está familiarizado con los beneficios de usar una sintaxis breve y expresiva, evitar la puntuación innecesaria y condensar el mapa, filtrar y reducir las operaciones a líneas simples. . Si está más familiarizado con los lenguajes estáticamente escritos como Java, C # o C ++, podrá eliminar tipos explícitos, puntuación y código repetitivo. También podrá elegir una sintaxis expresiva que rara vez se ve en otros idiomas compilados.

Finalmente, su código será fuertemente tipeado (incluso sin especificar tipos explícitos) y admitirá tanto la herencia múltiple como las capacidades de mezcla. Además, cualquier tipo de incompatibilidades se detectará antes de que se ejecute su código. Los desarrolladores en lenguajes de tipo estático estarán familiarizados con el tipo de seguridad y rendimiento disponible en Scala. Aquellos que usan lenguajes dinámicos podrán aumentar drásticamente la seguridad y el rendimiento mientras permanecen con un lenguaje expresivo.

2. Serás un mejor ingeniero

Un ingeniero que puede escribir código breve y expresivo (como se espera en Ruby o Python) y al mismo tiempo entregar una aplicación segura de tipo y de alto rendimiento (como se espera de Java o C ++) se consideraría impresionante y valioso. Supongo que si lee este libro y retoma la programación Scala, estará escribiendo programas que tienen todos estos beneficios. Podrá aprovechar al máximo las funciones de programación funcional de Scala, ofrecer un código expresivo y seguro de escritura, y ser más productivo de lo que nunca ha sido.

Aprender cualquier nuevo lenguaje de programación es un esfuerzo que vale la pena, porque aprenderá formas nuevas y diferentes de abordar la resolución de problemas y el diseño de algoritmos y estructuras de datos, junto con formas de expresar estas nuevas técnicas en una sintaxis extranjera. Además de esto, adoptar un lenguaje de programación funcional como Scala ayudará a configurar la forma en que ve los conceptos de mutabilidad de datos, funciones de orden superior y efectos secundarios, no solo como nuevas ideas, sino también cómo se aplican a su trabajo de codificación actual y diseños Puede descubrir que trabajar con funciones en línea y tipos estáticos no es necesario para sus necesidades actuales, pero tendrá cierta experiencia con sus beneficios y desventajas. Además, si es posible aplicar estas características de manera parcial a su idioma actual, como el nuevo soporte de expresiones lambda en Java 8, estará listo para manejarlas adecuadamente.

3. Serás un ingeniero más feliz

Esta es ciertamente una declaración audaz de alguien que no has conocido y que no debería presumir saber qué efecto tendrá el desarrollo de Scala en tu cerebro. Solo afirmaré que si su dominio del código mejora hasta el punto de que está escribiendo fácilmente código que funciona mejor, lee mejor, depura mejor y se ejecuta más rápido que antes, y además de todo esto toma menos tiempo para escribir, usted ‘ seré más feliz haciéndolo.

No es que la vida se trate de codificación, por supuesto. El programa de trabajo de los ingenieros de software promedio tampoco implica más de la mitad de su tiempo dedicado a escribir código.

Pero ese tiempo dedicado a escribir código será más divertido y podrá enorgullecerse más de su trabajo. Esa debería ser razón suficiente para aprender algo nuevo.

Entonces, esto es lo que Scala tiene en Java:

1) Scala es mucho menos detallado.
Este ya se ha señalado, pero es cierto: para hacer cualquier cosa en Java, debe escribir mucho. Para hacer lo mismo en Scala, se requiere escribir mucho menos. Un ejemplo de esto es en la parametrización de genéricos. En Java, tienes que hacer algo como esto:

List list = new ArrayList()

(Actualización: con Java 7, simplemente puede escribir:

List list = new ArrayList<>()

Esto es aún más detallado que Scala. Gracias Paul Christopher Peacock por señalar esto)

Cuando llegue al final, debería poder inferir que si un lado está especificando un parámetro de cadena, el otro lado debería hacerlo. Esto no sucede en Java. Lo hace en Scala.

Otro ejemplo viene en la forma de la palabra clave “objeto”. Use eso para declarar una clase, y la clase es automáticamente un singleton. Oh, cómo eso ahorra tiempo.

2) Scala tiene mucho mejor soporte para programación funcional.
Esto forma parte del primer punto, pero vale la pena escindirlo en su propia rama. Scala tiene soporte para varias construcciones de FP, como las comprensiones for. Si alguna vez usó Python, son casi exactamente como las comprensiones de listas, lo que significa que si desea crear una lista y completarla utilizando una línea de código, en realidad es bastante trivial hacerlo.

Hay problemas que también tienen un poco más de sentido cuando se ven a través de un filtro FP en lugar de uno OOP. Scala admite la flexibilidad de pensar mucho mejor que Java.

3) El modelo de concurrencia de Scala no es una pesadilla.
Puede usar Java multihilo si lo desea. Sin embargo, siempre he odiado, odiado el sistema de subprocesos múltiples de Java, encontrándolo realmente desagradable. Scala también ofrece la opción de utilizar el modelo de concurrencia del actor. Es una característica robada de Erlang, y gracias a Dios por ello. La mayoría de las personas encuentran que el envío de mensajes entre actores es mucho más fácil de entender, y por lo tanto implementar, que los hilos y bloqueos de Java. Y dado que la industria tiende a la concurrencia en estos días, cualquier cosa que facilite la implementación es algo bueno.

4) Scala tiene mixins
Los mixins son una forma nerfed de herencia múltiple que brinda muchos de los beneficios sin clavarte el Diamante de la Muerte y otros problemas similares que con frecuencia vienen con la herencia múltiple. Es una característica del lenguaje que le permite a uno evitar tener que codificar patrones de diseño, nuevamente, ahorra tiempo.

En cuanto a la velocidad, Scala compila a bytecode de Java. Esto significa que se ejecuta más o menos tan rápido como Java y puede usar clases escritas en Java tan fácilmente como puede usar las escritas en Scala. Esto a su vez significa que hay una gran cantidad de bibliotecas de terceros que puedes usar en Scala, aunque el lenguaje aún no es muy popular.

Scala es bastante útil si está trabajando con herramientas de Big Data como Apache Spark. También es compatible con Hadoop y otros marcos similares. Scala funciona bien en la web, tiene un increíble soporte de concurrencia en comparación con Python y Java torpe, y tiene equivalentes de biblioteca e incluso puertos para Java ya que ambos se ejecutan en la JVM.

Algunas razones por las que yo, en mi carrera en ciencia de datos, uso Scala:

  • Apache Spark está construido con Scala
  • Se ejecuta en la JVM (uno de los entornos más maduros para un lenguaje de programación)
  • Puede ejecutar bibliotecas Scala y Java
  • Compatibilidad cruzada con Java
  • Sintaxis limpia y concisa. Juro que la primera vez que escribí Scala, se sintió mágico en comparación con Java o Python.
  • Es una gran transición de OOP tradicional a FP. Sin embargo, tenga en cuenta que Scala es un lenguaje funcional de objetos.
  • Construido con la concurrencia en mente. Martin Odersky diseñó Scala para ser un “lenguaje escalable”, de ahí Scala. Va con las ideas de paralelismo masivo y programación reactiva.

La mayoría de las características del lenguaje que están presentes en Scala no son exclusivas y se pueden encontrar en otros idiomas. Lo que hace que Scala tenga éxito es la forma en que se combinan estas características.

La mayoría de las personas comienzan a usar Scala como una mejor versión del lenguaje principal que usaban anteriormente (Java, C #, Ruby, Python, etc.). Y, de hecho, no es difícil demostrar que Scala tiene serias ventajas sobre ellos. Por ejemplo, es mucho más conciso que Java o C #, más eficiente y seguro para escribir que Ruby y Python, etc. Dado el enfoque correcto, es bastante fácil de aprender y, como estoy argumentando en esta publicación de blog, generalmente Tarda un par de días en ser productivo con Scala.

Una vez que las personas confían en el uso del lenguaje, comienzan a resolver problemas más complejos y descubren funciones Scala más avanzadas. Con el tiempo, naturalmente gravitan hacia un estilo más funcional y comienzan a usar cosas como clases de tipos, conceptos de teoría de categorías, etc. (para más detalles, vea mi artículo Programación funcional en Java 8, Kotlin y Scala). Un día, se dan cuenta de que detrás de la sintaxis convencional, hay un Haskell completo y ha estado allí todo el tiempo.

Dadas las preguntas que hace en el comentario, probablemente lo aleje de Scala hacia un lenguaje más simple. Scala puede ser abrumador y desalentador incluso para ingenieros profesionales, y mucho menos para personas sin experiencia.

Ok, sigues leyendo? Aquí hay algunas razones posibles:

  1. Si le interesan los lenguajes de programación como un área de estudio en sí misma, Scala es básicamente un basurero gigante de casi todas las características del lenguaje de programación que alguien haya pensado. Desde implicidades hasta notaciones tanto para la covarianza y contravarianza genéricas como para las mixinas, inferencia de tipos, coincidencia de patrones y clases de casos, control de acceso de grano fino, sobrecarga del operador y mucho más, Scala le ofrece todo lo que puede. A veces violentamente.
  2. Desea escribir código de máximo rendimiento sobre plataformas como Spark. Debido a que Spark está escrito en Scala, Scala es la forma más elegante de escribir trabajos de Spark. Claro que puedes hacerlo en Java, pero vincular Java a las clases de colección de Scala no es muy divertido. Puede hacerlo en Python, pero hay un precio de rendimiento que pagar, así como un precio en expresibilidad, mecanografía y concisión de sintaxis.
  3. Desea escribir plataformas usted mismo. Scala es un lenguaje excelente para el hardcore entre nosotros para escribir marcos extremadamente sofisticados. Permite la composición de la lógica de algunas maneras extremadamente poderosas.
  4. Los derechos de fanfarronear. 🙂

Scala es un mejor Java. Final de la línea.

Una cosa genial de Scala es el hecho de que se integra muy bien con Java. Si ya está trabajando en una base de código escrita en Java, parte del equipo puede comenzar a trabajar con Scala y aún usar las clases de Java ya escritas.

La sintaxis de Scala es menos pesada que la de Java. No tiene que escribir sus captadores / establecedores triviales cada vez. Puede usar nombres de métodos especiales (sobrecarga de operadores a la C ++) cuando hace que su código sea más limpio. Además, la coincidencia de patrones es increíble, querrás usarla en todas partes.

Scala le facilitará el aprendizaje progresivo de conceptos de programación funcional. Puede comenzar a escribir código imperativo y OO al principio, y comenzar a usar una programación cada vez más funcional, que a menudo hará que sus programas sean más seguros y más fáciles de razonar.

Si viene de idiomas interpretados, puede considerar los beneficios de rendimiento de Scala. Se compila para ejecutarse en JVM, que es un entorno de ejecución altamente optimizado y multiplataforma. Tiene acceso completo a todas las clases expuestas por la biblioteca estándar de Java y Scala le ofrece algunas cosas más.

En mi opinión, si conoces a Scala, honestamente, no hay muchas razones para seguir usando Java.

Scala no es la respuesta para cada pregunta. No hay lenguaje. La velocidad depende de la elección del algoritmo, el hardware utilizado, los datos aplicados: el compilador y la biblioteca de tiempo de ejecución son solo dos de los cinco factores para determinar la velocidad.

La velocidad es menos importante que el tamaño en muchos escenarios. Por ejemplo, si necesita aplicar una transformación sofisticada a múltiples transmisiones de video en una máquina virtual de x86-64 bits de 64GB, Scala probablemente funcionará muy bien y podría superar todas o la mayoría de las otras opciones. Sin embargo, si solo tiene una máquina virtual de 512 MB, Python probablemente sería una mejor opción porque el programa Scala y sus dependencias no dejarían mucho espacio para los almacenamientos intermedios de datos.

En general, los programas grandes que no tienen restricciones de memoria y tienen un poderoso soporte para la multitarea probablemente mostrarían que los programas Scala que necesitan procesar grandes cantidades de datos funcionan bien … si están programados adecuadamente, por supuesto.

Estos conceptos se discuten y se proporciona mucho código de trabajo en el curso Intermediate Scala. Para obtener más información, visite GetScala.com

Indica dónde es diferente, único, mejor que otros idiomas.

Si conoce Java, entonces elegir una base de código Scala es simple, ya que comparten mucho. Scala es “Java + Mejor soporte de FP + Bits confusos + Mejoras menores de lenguaje”.

¿Por qué la industria debería elegirlo?

Vea mi punto anterior, esto significa que tenemos una ruta de progresión rápida para que los desarrolladores senior de Java se conviertan en desarrolladores senior de Scala. Sin embargo, la misma ruta no existe para Haskell / Clojure / Lisp.

Ser capaz de emplear fácilmente a las personas es una buena cosa ™.

Sabes, Scala es una especie de lenguaje de programación de élite. Porque heredó casi todas las fuertes ventajas de JVM (excepto el tiempo de compilación, porque todavía es más largo que en Java, pero muy pronto el compilador Dotty resolverá esto).

Además de esto, Scala es un lenguaje funcional, por lo tanto, puede ser muy impresionante y conciso. Use las funciones como la unidad de código más pequeña.

Un ecosistema para el desarrollo es asombroso. Hay muchos frameworks web (framework de juego, finatra, scalatra, lift), controladores de bases de datos (ReactiveMongo, Slik, …) y otras herramientas y libs que hacen que el proceso de desarrollo sea tan simple. No te olvides de todas las bibliotecas Java, porque funcionan bien con Scala.

El último punto que quiero destacar es un BigData. El nuevo líder en este campo es Spark. Está escrito en Scala, así que como ves, esta es otra gran ventaja.

Describí tendencias y hechos más positivos en mi artículo sobre Scala vs Java. Y, por cierto, los desarrolladores de Scala tienen salarios más altos =)

Te daré la droga. Aquí está.

Si piensa en programar matemáticamente y quiere poder usar un estilo de programación funcional tipado estáticamente para su trabajo diario , aprenda Scala.

Claro que veo aparecer clojure e incluso conciertos de haskell, pero Scala parece haber alcanzado una masa crítica. Las organizaciones grandes tienen equipos que lo usan, como otros han mencionado que hay chispa y akka y otras bibliotecas geniales.

En cuanto a lo que el lenguaje trae a la mesa que no estaba allí, bueno, eso me resulta realmente difícil de responder. ¿Qué aporta Java a la mesa? ¿Qué trajo C ++? Podría decirse que puede hacerlo todo en C, sin embargo, puede ser doloroso y aunque tendrá un control de nivel más bajo, con menos abstracción fuera de la caja viene más frustración desalentadora.

Del mismo modo, paralelismo y concurrencia, los gustos que akka y futuros y actores aportan a la biblioteca estándar de scala ciertamente se pueden lograr con Java, pero es un poco más doloroso.

He oído decir que los idiomas son secuencialmente adecuados o adecuados para la concurrencia. Creo que esta clasificación tiene mucho sentido, y puede encajar scala en algún lugar de ese espectro [ensamblaje, …, Java, Scala, …, haskell, erlang]

La confusión parece abundar, incluso entre los ingenieros más experimentados de las compañías más competitivas sobre esto porque siempre pueden decir “¡puedes escribir la concurrencia en un lenguaje más secuencialmente adecuado y será más rápido!”. dificultades de la JNI salvaron Java.

Ya que el fenómeno anterior es real, Scala se siente condenado a “escribirlo en Java”, especialmente en organizaciones grandes donde la gente no quiere pensar en un paradigma diferente o apoyar algo nuevo.

Pero debido a que es comparable con las bibliotecas y tecnologías empresariales convencionales, y es una sintaxis más tersa, les dará mucho dinero a las startups. Cuando los drones entren con Java, esos empleados podrán seguir adelante …

Scala es una prueba de que la JVM no es la fuente de todo el dolor de Java. Scala no es el lenguaje ideal para aplicaciones de uso general, pero si se ve obligado a trabajar con JVM, tiene más sentido usar scala que usar java, y si necesita interactuar con jarras arbitrarias, tiene más sentido usar scala que usar versiones basadas en JVM de lenguajes que no sean JVM (como jtcl).

La industria, en resumen, no debería elegir scala. Pero, en la medida en que la industria ya está encerrada en Java, Scala tiene mucho sentido como alternativa.

Como ingeniero de Java que probó Groovy, Python, Ruby y NodeJS, me resulta muy útil mirar a mi alrededor y ver qué / cómo están haciendo los vecinos. Ayuda a comprender las tendencias y comparar enfoques. Pero..

Hay una gran diferencia entre jugar con un idioma y usarlo para la producción. Fue agradable jugar con todas estas plataformas, pero cuando se trata de crear productos de larga vida, siempre vuelvo a Java. El problema con todos estos lenguajes sofisticados es su comunidad: la mayoría de las personas prefieren escribir códigos sofisticados y presumir de ellos en lugar de crear productos. Esto tiene enormes implicaciones ya que la mayoría de las bibliotecas construidas alrededor de las plataformas están escritas para verse bien en lugar de funcionar.

Me sentí muy frustrado cuando mis pruebas de Test Kitchen (Ruby) dejaron de funcionar un viernes por la noche (¡eso le sucedió a todo el mundo que lo usó!) Solo porque una de las dependencias se actualizó automáticamente. El mismo nivel de frustración fue cuando un chico informó a mi proyecto de código abierto que mi código Python dejó de funcionar porque la dependencia se eliminó (!) Del repositorio central.

Otra cosa que noté cuando tuve que escribir / mantener una aplicación Groovy es que no fue realmente más rápido escribir o leer el proyecto. Puede ser más fácil escribir fragmentos de código, ¡pero no los proyectos!

Como ingeniero de software que construye productos, quiero asegurarme de que la plataforma que uso no se rompa por sí sola y que no me vean obligado a cambiar mi código solo porque algunos menores no pudieron mantener la compatibilidad con versiones anteriores, o siguieron alguna tendencia elegante nacida ayer.

Entonces, aunque recomiendo encarecidamente mirar Scala, no recomendaría elegir la plataforma solo por la exageración que la rodea. Hubo años en que la gente estaba loca por crear lenguajes basados ​​en JVM. La mayoría de ellos murieron, mientras que Java sigue siendo la opción más popular para las empresas basadas en productos.

Scala, hace mucho calor ahora. Scala

(Es bueno aprender idiomas populares, especialmente aquellos como Scala que tienen formas distintas de escribir código. Aprendes cómo las personas en ese mundo hablan y piensan, en términos de código, y es posible que te guste el idioma y disfrutes codificando en él)

No puedo pensar en razones tan convincentes como para que la gente necesite conocer Scala. Tampoco es obvio que la industria deba usarlo.

Sin embargo, si como yo, usas mucho la JVM, el tiempo que tardes en aprender Scala se verá recompensado rápidamente, ya que tendrás acceso al rico ecosistema de las bibliotecas de Java a través de un lenguaje potente.

Al mudarme a Scala desde Java, encontré que mi código era más limpio y conciso. El mayor beneficio ha sido que incluso los programas complejos que escribo a menudo funcionan correctamente desde el principio. Esto lo atribuyo al paradigma funcional no desordenado.

Si eres un programador de Java y quieres pasar más tiempo con familiares y amigos, debes aprender Scala.

Un argumento para aprender Scala es que es un super conjunto de todos los demás idiomas. Toma prestado todo de cualquier otro idioma.

Puedes hacer funcional. Puedes hacer imperativo. Puedes hacer herencia múltiple. Puede hacer una metaprogramación limitada (macro). Su sistema de tipos es probablemente el más avanzado.

Learning Scala mejora la comprensión de otros idiomas. Porque puede comparar / contrastar y comprender por qué un idioma decide eliminar ciertas funciones.

Un argumento en contra es que el lenguaje es bastante complejo de aprender / escribir.