¿Cuál es la mejor manera de aprender Haskell como alguien con una sólida formación matemática pura?

Honestamente, no creo que sea tan diferente de cómo otras personas aprenden Haskell.

Comience con los mismos recursos básicos para principiantes: tutoriales, Learn You a Haskell , Real World Haskell, etc. Estos lo pondrán al día con los conceptos básicos: efectivamente, le brindan el vocabulario que necesita para interactuar con el mundo de Haskell.

Una vez que tenga los conceptos básicos, que debería poder hacer sin siquiera terminar ninguno de los libros, el siguiente paso es comenzar a trabajar en algo. Esa es la mejor manera de entender realmente no solo el cómo sino también el por qué de la programación de Haskell.

Aquí es donde puede optimizar su enfoque de aprendizaje para su formación matemática. Creo que hay dos cosas principales que podrías hacer de manera diferente:

  • Elija un proyecto que esté más orientado matemáticamente. Una de las cosas buenas de Haskell es que hace que sea bastante natural expresar y trabajar con abstracciones matemáticas, por lo que podría intentar construir una biblioteca para su subcampo favorito. Es especialmente adecuado para cosas más algebraicas como, bueno, álgebra abstracta.

    También puedes elegir un proyecto que use matemáticas que sabes para hacer algo genial. Dependiendo de sus preferencias, esto podría ser todo, desde algún tipo de aprendizaje automático hasta hacer una simulación física o incluso un juego.

  • Aprende la teoría. Leer papeles Especialmente trabajos teóricos. Las “Perlas funcionales” y las actas de las conferencias ICFP y POPL son particularmente buenas. Puede comenzar con un libro como Tipos y lenguajes de programación y comenzar desde allí para tener una buena idea de la teoría detrás de los lenguajes de programación y los tipos que informan profundamente tanto el diseño de Haskell como lenguaje y el diseño de sus mejores bibliotecas. Tal vez incluso aprender un poco de teoría de categorías, ¡puede ser divertido!

    Si comienza con algo de la teoría, puede usarla para informar el proyecto en el que desea trabajar. Podría implementar un lenguaje de programación o un asistente de prueba, por ejemplo. Esta es una excelente manera de comprender las complejidades de Haskell y el diseño práctico del proyecto, mientras aprovecha su experiencia matemática y, supongo, su curiosidad natural.

Vale la pena visitar el camino de Haskell a la lógica, las matemáticas y la programación.

Pruebe esta página en edx.org, comenzando pronto. Enseñado por este chico Erik Meijer (informático)

Depende de tus antecedentes. Tenía una formación bastante sólida en lógica matemática, así que pude leer la Introducción Gentil a Haskell y volver a implementar una versión ingenua del Preludio ese mismo día. Aprendí todas las cosas para principiantes, incluidas las mónadas, en aproximadamente una semana.

Si tiene que aprender a leer un programa funcional desde cero, podría llevar mucho más tiempo.

Repase un tutorial básico y luego haga algunos proyectos divertidos con una base matemática:

* Solucionador de Sudoku y luego un generador
* Solucionador de laberintos y luego un generador
* etc.

Luego optimice sus soluciones con algunos conceptos más avanzados de programación funcional. Luego, y realmente recomiendo dar los primeros pasos hasta allí, comenzar haciendo algunos experimentos con la programación de E / S, que generalmente es desagradable en los lenguajes FP.

More Interesting

¿Cómo se usa la teoría de juegos en la IA?

¿Qué algoritmos se pueden usar para resolver este problema de optimización?

Cómo hacer un simulador de máquina de turing para realizar la suma binaria

¿Cómo sabe la CPU que estamos usando el complemento de uno o el complemento de dos para representar números negativos?

Tienes 25 caballos y quieres elegir los 3 caballos más rápidos de esos 25. En cada carrera, solo 5 caballos pueden correr al mismo tiempo porque solo hay 5 pistas. ¿Cuál es el número mínimo de carreras requeridas para encontrar los 3 caballos más rápidos sin usar un cronómetro?

¿Cuántos arreglos de piezas de ajedrez en un tablero de ajedrez hay, suponiendo que las piezas lleguen a sus posiciones mediante movimientos legales?

Soy un desarrollador, pero me falta mi habilidad matemática. Con un BSc en CS y un MSc en IS, ¿qué debo saber y cómo puedo identificar dónde necesito ayuda?

¿Qué es una máquina de Turing no determinista?

¿Cómo escribimos código para verificar si el año es bisiesto o no en Verilog, sin usar el operador de módulo?

Si una solución correcta a la Hipótesis de Riemann, P = NP, o la Teoría de campo unificada se presentara de forma anónima, ¿cuántas personas podrían ser consideradas sospechosas?

¿Cuál es el problema P vs NP?

¿Existe un término en matemáticas como 'real-complete' para describir una función que mapea todos los elementos de un conjunto (número real por ejemplo) a otro conjunto, o 'posibilidad-completa' para describir un algoritmo que maneja todas las posibilidades de entrada? ?

¿Cómo hago para hacer investigación de pregrado en CS?

¿Qué es la justicia fuerte y la justicia débil en los métodos formales?

Me siento cómodo resolviendo problemas matemáticos. Sin embargo, cuando tengo que programar y derivar la respuesta para esos problemas, tengo dificultades para traducir mis pasos matemáticos en código. ¿Qué me recomiendan hacer para superar este problema?