Solución:
@Anantha Durante los últimos diez años, la mayoría de las universidades han enseñado a sus estudiantes Java como primer idioma. He oído hablar de un número sorprendentemente alto de casos en los que incluso sigue siendo el único idioma que los estudiantes pueden aprender mientras están en la universidad, a menos que aprendan algo más por su cuenta, es decir.
Desde el punto de vista del lenguaje, las tres características más características de Java son
- es imperativo
- está orientado a objetos
- es basura recolectada
Las características 1 y 2 lo hacen muy similar a una amplia gama de lenguajes de la familia Algol / C y C ++. Todos estos lenguajes comparten similitudes en su paradigma o incluso utilizan exactamente el mismo.
C #, por ejemplo, a pesar de sus diferencias sintácticas, Windows como sistema operativo principal de destino y .NET framework como “biblioteca de clases”, es muy fácil de aprender para un programador de Java. Eso se debe a que ambos lenguajes comparten el mismo paradigma de programación.
Scala, por otro lado, a pesar de ejecutarse en la JVM, proporciona una fácil interoperabilidad con las API de Java, es lo que comúnmente se conoce como un lenguaje de paradigmas múltiples. El lenguaje proporciona una integración sintáctica profunda de las características del lenguaje de programación funcional, pero estructura el código de una manera orientada a objetos.
El concepto de programación funcional, especialmente una vez que ingresa al código más allá de los tutoriales triviales, resulta ser difícil para los desarrolladores que solo tienen experiencia con lenguajes OO imperativos. Mi experiencia personal al ayudar a otros desarrolladores a ponerse al día con Scala et al es que es de gran ayuda enseñarles Scheme primero;) Es un dialecto Lisp agradable, pequeño y limpio. Ayuda a transmitir conceptos funcionales avanzados. Si decides intentarlo, te recomiendo que eches un vistazo a “The Little Schemer” y “The Seasoned Schemer”. Una vez que haya terminado con ambos libros, apuesto a que le resultará más fácil examinar la sintaxis de Scala y ver sus conceptos con mayor claridad.
En pocas palabras: en mi humilde opinión, no es Scala lo que es duro para aprender, el paradigma de programación funcional es la razón por la que la mayoría de los desarrolladores, que solo han estado expuestos a lenguajes imperativos, tienen dificultades para ponerse al día.
Hay dos preguntas aquí:
- ¿Es más difícil aprender Scala que Java?
- ¿El código escrito en Scala tiende a ser más complicado que el código escrito en Java?
La primera pregunta es más fácil de responder: el lenguaje Scala es más rico que Java. En particular, su sistema de tipos es más expresivo que Java, lo que significa que se pueden expresar más errores lógicos como errores de tiempo de compilación. Sin embargo, para explotar estas capacidades, es necesario familiarizarse con las diferentes construcciones del lenguaje (tipos dependientes, clases de casos, anotaciones de varianza, vistas, por nombrar algunos). Dominarlos lleva tiempo y es por eso que Scala es más complicado de aprender que Java.
La segunda pregunta es más complicada. Los defensores de Scala afirman que estas nuevas construcciones facilitan la escritura de programas correctos y que el código resultante es más simple. Otros dicen que el poder adicional de Scala no supera la complejidad de comprender la semántica de sus construcciones (por ejemplo, eche un vistazo a esta charla. Busque “Scala”). Esta es una manifestación de una disputa más amplia: la de los lenguajes tipados estáticamente versus dinámicamente.
Scala es complejo porque te da flexibilidad. Una y otra vez, no tener suficiente flexibilidad hace que sea difícil hacer algunas tareas, pero demasiada flexibilidad es como demasiado dinero, te permite cometer errores realmente grandes.
Scala está orientado a objetos y es funcional. Ambos tipos de lenguaje alguna vez se consideraron bastante complejos por separado (aunque la orientación a objetos ahora es más común), pero juntarlos abre todo tipo de nuevas puertas. ¡Algunas de esas puertas parecen atajos a la “misión cumplida”! Algunas de esas puertas tienen leones detrás. La programación funcional le da toda la cuerda para hacer el trabajo, ahorcarse y atar su vecindario en nudos durante años. Depende de usted no lastimarse en un lenguaje de programación funcional.
La clave para el éxito de Scala es reconocer que debe ser un programador orientado a objetos exitoso, un programador funcional exitoso y luego aprender a mezclar los dos de manera que lo lleve a su objetivo. Eso es mucho trabajo. Quizás en el futuro, la gente sepa cuál es el “mejor” enfoque para aprender Scala, pero por ahora, el único enfoque conocido es ser bueno en dos enfoques diferentes de programación, Y ser bueno al mezclarlos.