simbolos - ¿Es adecuado Haskell como primer idioma?
instalar haskell en ubuntu (11)
Bueno, la existencia de SICP sugiere que los lenguajes funcionales se pueden usar como material introductorio. Scheme es quizás más accesible que Haskell, sin embargo.
Haskell parece tener una reputación de ser "difícil" de aprender, pero la gente tiende a olvidar que la programación imperativa clásica también es difícil de aprender. Muchas personas luchan al principio con el concepto de asignar un valor a una variable , y un sorprendente número de programadores nunca se sienten cómodos con los indicadores y las referencias indirectas.
Las conexiones entre Haskell y las matemáticas abstractas en realidad no importan tanto como la gente a veces asume, pero para alguien interesado en las matemáticas de todos modos, mirar las analogías podría proporcionar una bonificación interesante.
He tenido exposición previa a lenguajes imperativos (C, algunos Java) sin embargo, diría que no tenía experiencia en programación. Por lo tanto: tratándome como un no programador, ¿sería adecuado Haskell como primer idioma?
Mis intereses en Pure Mathematics and CS parecen alinearse con la intención de la mayoría de los tutoriales de Haskell, y aunque puedo reconocer inherentemente el valor actual y futuro de la industria de la programación imperativa, encuentro el potencial de la programación funcional (en la medida en que parezca tal cambio de paradigma) fascinante.
Supongo que mi pregunta se puede resumir de la siguiente manera: ¿un no programador tendría que entender la programación imperativa para apreciar y utilizar completamente la programación funcional?
Algunas referencias:
Digo dubitativamente "sí", excepto por el hecho de que, al aprender, encontrar a alguien como mentor o tutor sería una tarea mucho menos desalentadora si eliges un lenguaje más imperativo para comenzar a programar. ¿Puedo sugerir R o Python (con NumPy y SciPy) en su lugar?
Diría que es adecuado como primer idioma, y que haber aprendido primero un lenguaje imperativo probablemente solo interferiría con el proceso de aprendizaje (ya que primero se requiere mucho desaprendizaje).
Como advertencia, agregaría que un principio de lenguaje funcional probablemente sería mejor entendido por alguien con una formación matemática, ya que los conceptos son matemáticos abstractos.
Sé que muchas escuelas sí lo enseñan como primer lenguaje funcional , pero no como primer idioma.
Ha habido al menos un estudio sobre los efectos de enseñar Haskell a los programadores principiantes:
- Los riesgos y beneficios de la enseñanza de la programación puramente funcional en el primer año . Manuel MT Chakravarty y Gabriele Keller. Journal of Functional Programming 14 (1), págs. 113-123, 2004.
Con el siguiente resumen:
Argumentamos que enseñar programación puramente funcional como tal en los cursos de primer año es perjudicial tanto para el plan de estudios como para promover el paradigma. En cambio, necesitamos enfocarnos en los objetivos más generales de enseñar técnicas elementales de programación y conceptos esenciales de computación. Apoyamos este punto de vista con la experiencia adquirida durante varios semestres de enseñanza de clases de primer año grandes (hasta 600 estudiantes) en Haskell. Estas clases consistieron en estudiantes de informática y estudiantes de otras disciplinas. Sistemáticamente hemos reunido los comentarios de los estudiantes mediante la realización de encuestas después de cada semestre. Este artículo aporta un enfoque para el uso de los lenguajes funcionales modernos en los cursos de primer año y, en base a esto, aboga por el uso de los lenguajes funcionales en este contexto.
Entonces, sí, puedes usar Haskell, pero debes enfocarte en técnicas elementales, generales y conceptos esenciales, en lugar de programación funcional per se.
Hay una serie de libros populares para programadores principiantes que también lo convierten en un objetivo atractivo para la enseñanza de estos conceptos elementales, que incluyen:
- "Programación en Haskell"
- "El arte de la programación funcional"
Además, Haskell ya se enseña ampliamente como primer idioma. - pero recuerde, la clave es centrarse en los conceptos básicos como se ilustra en Haskell, no enseñar el lenguaje grande y rico que es el propio Haskell.
Iré en contra de la opinión popular y diré que Haskell NO es un buen primer lenguaje de programación para el programador por primera vez. No creo que sea tan accesible para un principiante puro como idiomas imperativos como Ruby.
La razón de esto es que las personas no piensan en el mundo de manera funcional. Cuando ven un automóvil conduciendo por la calle, ven el mismo automóvil, con un estado cambiante en constante cambio. No ven una serie de autos inmutables ligeramente diferentes.
Si revisa otras preguntas de SO , verá que Haskell casi nunca se menciona como una buena opción para un principiante.
Sin embargo, si usted es matemático o ya sabe lo suficiente sobre programación para comprender el valor de la programación funcional, creo que Haskell es una buena elección.
Para resumir, creo que Haskell es perfecto para ti, pero no es una buena opción para el principiante típico.
EDITAR: Gracias por los comentarios perspicaces. El punto de Owen de que la gente piense de manera multiparmatrimonial es muy cierto. Esto fortalece mi creencia de que un lenguaje multi-paradigma como Ruby sería más fácil de aprender, y tiene el beneficio adicional de exponer al estudiante al pensamiento imperativo y funcional. Haskell no es decididamente multi-paradigma.
Chuck mencionó el sofisticado sistema de tipos de Haskell, que es otro gran punto. Aunque personalmente prefiero los lenguajes estáticos, el uso de un lenguaje dinámico permite a los principiantes ignorar esa pieza del rompecabezas hasta que son lo suficientemente curiosos como para descubrir lo que sucede entre bastidores. El sistema de tipos de Haskell, aunque es elegante, está en tu cara desde el primer día.
No.
Es muy fácil que un programa haskell98 se entienda claramente. LYAH es un gran tutorial para personas sin experiencia, pero que trata de evitar que un alumno tropiece con extensiones x, yz no puede ser complicado. Pronto comienzan a explorar y se sienten abrumados con conceptos avanzados de programación / matemática que son mucho más difíciles de entender pero que necesitan ser entendidos para leer el código de otros.
Si cada pieza de haskell estuviera escrita en haskell''98 / ''10, probablemente diría que sí.
Por un lado, creo que Haskell es agradable como primer idioma, pero supongo que, para cualquier persona seriamente interesada en la programación, debe aprenderse en paralelo con C o después de C (o una asamblea). C es necesario para aprender lo que sucede debajo de la campana, cuáles son los costos de hacer esto y aquello, y finalmente apreciar la utilidad de un mayor nivel de abstracción y administración automática de recursos. Creo que al estar expuesto tanto a C (como un lenguaje imperativo de bajo nivel) como a Haskell (como un lenguaje funcional de alto nivel), la mayoría de los estudiantes encontrarán a Haskell práctico y expresivo.
Por otro lado, creo que la programación es una artesanía. Es una actividad práctica, y es importante aprender la alegría de crear algo nuevo, útil o interesante. Entonces necesitas hacer las cosas. Y la forma más fácil para esto es usar un lenguaje que tenga herramientas para sus problemas, es decir, bibliotecas para sus formatos de datos, algoritmos para su clase de problemas. Y en este punto, Python (o Ruby) puede ser una mejor opción, porque Hackage aún se queda atrás de PyPI en muchas áreas (y, por ejemplo, ¿cuántos días necesita enseñarle a un novato a manipular una imagen, o trazar gráficos en Haskell? )
Entonces, mi opinión es que es necesaria cierta exposición a la programación imperativa de bajo nivel (a OOP, probablemente, no). Entonces puedes entender el valor de Haskell. Pero para hacer las cosas, y para volverse productivo rápidamente, Python es una mejor opción para los principiantes. Haskell requiere algunas semanas antes de que se convierta en su herramienta.
Sí lo es. Real World Haskell es una excelente manera de entrar en él http://book.realworldhaskell.org/
Si no ha tenido ninguna experiencia en absoluto, de hecho será más fácil para usted ser productivo en la programación funcional, especialmente en la programación funcional PURE. Soy un inmigrante de imperativo a la función, tuve que lidiar con tener que olvidar el 80% de lo que aprendí para ser productivo en Haskell.
Por el contrario, es más fácil pasar de funcional a imperativo más adelante.
Sin abordar necesariamente la cuestión como tal, agregaría: si usted encuentra la persistencia de Haskell demasiado difícil, no se desanime.
Hay otros lenguajes de programación, incluso funcionales, que se enlazan tarde.
Once razones para usar Haskell como matemático
No puedo escribirlo mejor que eso. Pero para resumir:
- Haskell es declarativo y las matemáticas son el último lenguaje declarativo, lo que significa que el código escrito en Haskell es notablemente similar a lo que escribirías como una declaración matemática.
- Haskell es de alto nivel, sin necesidad de conocer detalles sobre cachés, administración de memoria y todas las demás cosas de hardware. También eso significa programas cortos que siempre es bueno.
- Haskell es ideal para cálculos simbólicos, álgebra, lógica ...
- Haskell es lindo :)
Para responder a su pregunta: no tendrá problemas para comenzar con un lenguaje funcional como matemático sin experiencia en programación. En realidad, es la mejor opción, no tendrás que reparar el daño cerebral que obtendrías de C / Java / lo que sea.
También debería verificar Mathematica. Algunas personas tienden a desagradarlo ya que es un producto comercial de código cerrado, pero creo que es un entorno bastante bueno para hacer matemáticas.