Como mi primer lenguaje de programación, decidí aprender Haskell. Soy un estudiante de filosofía analítica, y Haskell me permitió crear rápida y correctamente programas de interés, por ejemplo, transductores para el análisis sintáctico del lenguaje natural, probadores de teoremas e intérpretes. Aunque solo he estado programando durante dos meses y medio, encontré la semántica y la sintaxis de Haskell mucho más fáciles de aprender que los lenguajes imperativos más tradicionales, y me siento cómodo (ahora) con la mayoría de sus construcciones.
Sin embargo, programar en Haskell es como una brujería y me gustaría ampliar mis conocimientos de programación. Me gustaría elegir un nuevo lenguaje de programación para aprender, pero no tengo tiempo suficiente para elegir un lenguaje arbitrario, dejarlo y repetir. Así que pensé en plantear la pregunta aquí, junto con varias estipulaciones sobre el tipo de idioma que estoy buscando. Algunos son subjetivos, otros están destinados a facilitar la transición de Haskell.
- Sistema de tipo fuerte. Una de mis partes favoritas de la programación en Haskell es escribir declaraciones de tipos. Esto ayuda a estructurar mis pensamientos sobre las funciones individuales y su relación con el programa en su conjunto. También facilita el razonamiento informal sobre la corrección de mi programa. Me preocupa la corrección, no la eficiencia.
- Énfasis en la recursividad en lugar de la iteración. Utilizo construcciones iterativas en Haskell, pero las implemento de forma recursiva. Sin embargo, es mucho más fácil comprender la estructura de una función recursiva que un procedimiento iterativo complicado, especialmente cuando se utilizan combinadores y funciones de orden superior como mapas, pliegues y vinculación.
- Es gratificante aprender. Haskell es un lenguaje gratificante para trabajar. Es un poco como leer a Kant. Mi experiencia hace varios años con C, sin embargo, no lo fue. No estoy buscando C. El lenguaje debería imponer un paradigma conceptualmente interesante, que en mi opinión totalmente subjetiva, los C-likes no lo hacen.
Sopesar las respuestas : estas son solo notas, por supuesto. Solo me gustaría responder a todos los que dieron respuestas bien formadas. Usted ha sido muy útil.
1) Varias respuestas indicaron que un lenguaje fuerte, tipado estáticamente que enfatiza la recursividad significa otro lenguaje funcional. Si bien quiero seguir trabajando enérgicamente con Haskell, camccann y larsmans señalaron correctamente que otro lenguaje de este tipo "facilitaría demasiado la transición". Estos comentarios han sido muy útiles, ¡porque no estoy buscando escribir Haskell en Caml! De los asistentes de prueba, Coq y Agda parecen interesantes. En particular, Coq proporcionaría una sólida introducción a la lógica constructiva y la teoría de tipos formales. He pasado un poco de tiempo con predicados de primer orden y lógica modal (Mendellsohn, Enderton, algunos de Hinman), por lo que probablemente me divertiría mucho con Coq.
2) Otros Lisp muy favorecidos (Common Lisp, Scheme y Clojure). Por lo que he recopilado, tanto Common Lisp como Scheme tienen un excelente material de introducción ( On Lisp y The Reasoned Schemer , SICP ). El material en SICP me hace inclinarme hacia Scheme. En particular, Esquema a través de SICP cubriría una estrategia de evaluación diferente, la implementación de la pereza y la oportunidad de enfocarse en temas como continuaciones, intérpretes, computación simbólica, etc. Finalmente, como otros han señalado, el tratamiento de código / datos de Lisp sería completamente nuevo. Por lo tanto, me estoy inclinando mucho hacia la opción (2), un Lisp.
3) Tercero, Prolog. Prolog tiene una gran cantidad de material interesante, y su principal dominio es exactamente el que me interesa. Tiene una sintaxis simple y es fácil de leer. No puedo comentar más en este momento, pero después de leer una descripción general de Prolog y leer un poco de material introductorio, se clasifica con (2). ¡Y parece que el retroceso de Prolog siempre está siendo pirateado en Haskell!
4) De los lenguajes convencionales, Python parece el más interesante. Tim Yates hace que los idiomas suenen muy atractivos. Aparentemente, Python se enseña a menudo a estudiantes de primer año de informática; por lo que es conceptualmente rico o fácil de aprender. Tendría que investigar más.
¡Gracias a todos por sus recomendaciones! Parece que Lisp (Scheme, Clojure), Prolog o un asistente de prueba como Coq o Agda son los principales idiomas que se recomiendan.