para - Aprendiendo Haskell con miras a aprender Scala
scala para mac (6)
He leído algunas preguntas, como Scala vs Haskell, sobre los méritos de ambos idiomas o sobre qué aprender, pero ya sé que me gustaría aprender sobre Scala. Era un programador de Java en la universidad y ahora uso principalmente PHP.
Quiero aprender Scala, ya que parece una mejora en Java para proyectos personales y también me gustaría aprender un lenguaje funcional para mejorar mi conocimiento como programador.
Me pregunto si sería una buena idea aprender Haskell como una introducción a la programación funcional, ya que es puramente funcional, así que lo aprendería apropiadamente en lugar de ir al azar usando elementos funcionales en Scala sin saber por qué.
También me gustaría usar Haskell para proyectos personales, etc., ya que se ve genial, pero realmente no veo muchas aplicaciones del mundo real de él, parece más utilizado para material académico, por lo tanto, quiero aprenderlo para obtener la comprensión funcional y luego seguir adelante a Scala.
El riesgo de comenzar directamente desde Scala, sin haber jugado primero ningún lenguaje de programación puramente funcional, es que probablemente se sentirá atraído por las soluciones de procedimiento con demasiada frecuencia.
Sin embargo, no probaría Haskell como una introducción a la programación funcional: no es particularmente difícil, su sintaxis es sorprendentemente escueta, pero definitivamente es muy peculiar (incluso en el peculiar mundo de la programación funcional) y creo que deberías probar con una idioma que puede exportar más fácilmente a Scala, como Racket o Scheme simple.
Para entender mejor lo que quiero decir, mira la lista de comprensiones en Haskell, Scala y Scheme.
Hablando como alguien que vino de Java, y para quien Scala fue una droga de entrada para Haskell, creo que esta es una gran idea (¡primero conoce a Haskell)!
Haskell es conceptualmente un lenguaje mucho más simple que Scala, y si su objetivo es aprender cómo programar funcionalmente, no puede evitar hacerlo si comienza con Haskell. Por diseño, Scala admite un tipo de "modo heredado" de codificación en el que no tienes que cambiar mucho tus hábitos Java (o PHP) si no quieres hacerlo. Creo que esta es una decisión estratégica - ¡y buena! - destinada a aumentar la adopción entre incondicionales crueles de Java.
¡Pero ese no eres tú! De hecho, estás interesado en aprender algo nuevo ... ¿por qué no ir por todas partes? Aprender programación funcional en un entorno puro, sin el desorden y la tentación de retroceder en los viejos hábitos, cristalizarán los conceptos en su cerebro.
Entonces, por supuesto, regrese a Scala y aprenda cómo difiere de Haskell; es a la vez más débil en algunos aspectos y más fuerte en otros, pero entonces estará en mejores condiciones para apreciar estas diferencias.
Primero conocí a Haskell y luego a Scala y nunca me arrepentí. Obtendrá una apreciación mucho más profunda de FP si primero aprende Haskell. Entenderá los conceptos que hay detrás de FP y por qué son importantes. Se tomará gran parte de Scala de Haskell (en mi humilde opinión). Tendrá más sentido cuando tenga el fondo Haskell. No te asustes! Tus esfuerzos serán recompensados.
Vine a Scala desde un fondo Java. Inicialmente solo me enfoqué en Scala como una mejor Java. Con el paso del tiempo empecé a usar más y más conceptos funcionales en Scala. Eventualmente llegué a un punto en el que sentí que necesitaba una comprensión más pura de la programación funcional. Fue en este punto que me fui y conocí a Haskell.
Cuando me volví a Scala, me resultó mucho más fácil usar un estilo funcional y algunos de los conceptos con los que luché anteriormente tenían mucho más sentido.
No tienes que aprender Haskell para convertirte en un buen desarrollador de Scala, pero creo que una vez que llegas a cierto nivel en Scala, tener una comprensión más profunda de los conceptos de programación funcional realmente ayuda.
Yo no haría eso. Si vas directamente a Scala (tu objetivo final), ahorras tiempo. De todos modos, aprenderá programación funcional, pero como Scala es "menos puro", podrá comenzar a escribir programas en Scala utilizando algunos constructos similares a Java, lo que simplificará la transición.
Incluso si ingresas a Haskell, tus primeros programas serán de menor calidad funcional que los posteriores, ya que solo la práctica mejora eso. Al iniciar Scala, tus primeros programas serán de "menos calidad" como lo fueron tus primeros programas en Java o PHP, pero con la práctica mejorarás. Pasar tiempo en tareas no relacionadas esperando que PUEDAN ayudar, puede hacer que pierdas ese tiempo.
Concéntrate en tu objetivo Si eso es Scala, ve por ello.
ACTUALIZACIÓN: creo que this puede ser relevante para la pregunta. Plantea un punto sobre la productividad (entregar software) frente a la búsqueda de "conocimiento puro".
Para mí, quiero aprender Scala y programación funcional; y, por lo tanto, simplemente, estoy aprendiendo a Scala. Mi material de estudio es Programming Scala . Después de leer el capítulo inicial sobre syntx y otras cosas, me salté el capítulo que trata sobre cosas OO y pasé al capítulo 8, que cubre las cuestiones de programación funcional. Ahí me dejo luchar con FP.
Leí this código scala, que está escrito en formato FP y lo analizo. Desea aprender Scala para "... una mejora en Java para proyectos personales". y Haskell para FP introductoria. Por lo tanto, parece que, en primer lugar, desea ser productivo con su proyecto de Java y luego comprender FP como un efecto secundario. Para ser productivo, debes dominar el idioma. Hay mucho que aprender y dominar el idioma, y la única manera de dominarlo es que debe escribir el código en ese idioma. A medida que aprende / usa Scala, no puede evitar que FP salga bien aunque lo desee. He estado leyendo los blogs de Scala (el libro también) y los autores siempre hacen todo lo posible para dar explicaciones cuando se trata del concepto de FP. No tiene que preocuparse por no agarrar FP siguiendo la ruta Scala. Sí, puedes inspirarte así Haskell cuando estás aprendiendo a Scala. O, como ha señalado anteriormente , puede profundizar en más FP cuando ya es productivo con Scala.
¿Quieres ir al punto A, por qué no ir directamente al punto A? Si vas por la ruta del punto B (Haskell), deberás posponer tu productividad como mencionó .