15-150: Principios de la programación funcional
Un curso de Carnegie Mellon sobre programación funcional en Standard ML está recibiendo elogios como un recurso poco común y bien estructurado para aprender conceptos modernos de FP como la tipificación fuerte, la inmutabilidad y las funciones de orden superior. Los comentaristas debaten la elección de SML frente a lenguajes más populares como Haskell, OCaml o Lisp, y sostienen que un lenguaje pequeño, estable y fuertemente tipado ayuda a los estudiantes a centrarse en las ideas centrales en lugar de en herramientas y funciones avanzadas. El hilo también aborda temas más amplios: la escasez de buenos materiales de enseñanza de FP, las tensiones entre los ideales funcionales puros y preocupaciones prácticas como el logging y los efectos secundarios, y el valor de exponer a los estudiantes de CS a múltiples paradigmas más allá de Python y OOP.
Énfasis en la programación funcional en la educación en CS
- Muchos aplauden un curso de FP a nivel universitario y desearían que FP se enseñara más ampliamente y antes que OOP.
- Varios describen planes de estudio en los que los estudiantes aprenden múltiples paradigmas e lenguajes (C, C++, assembly, Haskell/Scala/Racket, Java, Python, etc.) y elogian esa amplitud.
- Algunos recomiendan a los futuros estudiantes buscar explícitamente programas que enseñen FP y sistemas de bajo nivel, no solo Python.
Elección de Standard ML frente a otros lenguajes
- Se defiende Standard ML como pequeño, estable y bien adaptado para enseñar conceptos centrales de FP sin “bloat” de herramientas o del lenguaje.
- También importan razones históricas en CMU; SML es un lenguaje de investigación con raíces allí.
- Los críticos sostienen que SML es verboso, menos práctico que OCaml/F#/Haskell y difícil de instalar; los defensores dicen que su simplicidad supera la falta de uso industrial.
- Se citan la tipificación estática, los tipos de datos algebraicos, el pattern matching y la verificación fuerte de tipos como ventajas clave para la enseñanza frente a los Lisp.
- Surge debate sobre la FP “pura” frente a la “impura” y sobre si los Lisp carecen de transparencia referencial; otros señalan que la TR depende de cómo uses el lenguaje, no del lenguaje en sí.
Materiales del curso, ejercicios y diapositivas
- Las clases reciben elogios por su claridad, energía y la alta calidad de las diapositivas.
- Los trabajos prácticos/labs oficiales no son públicos debido a la autoría compartida y a preocupaciones de integridad académica; existen algunas tareas antiguas y un “libro” de apoyo en SML.
- Hay interés en nuevos conjuntos de ejercicios disponibles públicamente, pero se señala que esto llevaría mucho tiempo.
Cuestiones prácticas de FP: efectos secundarios, logging, IO
- Una queja recurrente: en FP pura (especialmente Haskell), pequeños efectos secundarios como el logging “infectan” los tipos con IO y complican el refactorizado.
- Las respuestas sugieren:
- Usar lenguajes de FP más pragmáticos (OCaml, F#, Erlang).
- Aceptar la impureza cuando sea útil (“functional core, imperative shell”).
- Usar mónadas/clases de tipos (MonadIO, clases de tipos para logging, ST) o ayudas de depuración (por ejemplo, trace) para gestionar los efectos.
- Algunos ven la disciplina de la mónada IO como poderosa; otros la encuentran torpe.
Aprender FP y algoritmos de grafos
- A los estudiantes les cuestan los algoritmos de grafos y las estructuras circulares en Haskell; encuentran que el código de grafos puramente funcional es más lento y complejo.
- Se sugieren:
- Traducir los algoritmos imperativos de forma más directa al principio.
- Estudiar estructuras de datos funcionales (por ejemplo, al estilo de Okasaki), bibliotecas de grafos algebraicos y store-passing style.
- Usar comunidades de FP (por ejemplo, Discords específicos de lenguaje) para pedir ayuda.
FP, teoría vs práctica y LLMs
- Algunos temen que la enseñanza de FP se incline demasiado hacia la teoría y poco hacia lenguajes prácticos/industriales; otros priorizan la claridad conceptual sobre la aplicabilidad inmediata.
- Las opiniones difieren sobre si a los entusiastas de FP les falta perspectiva del mundo real; otros responden que FP es valiosa en producción y al emparejarla con código generado por IA gracias a los sistemas de tipos fuertes.
- Un comentarista sugiere que los LLM hacen que programar sea menos relevante; otros argumentan que programar/FP sigue siendo valioso, de manera similar a las matemáticas fundamentales.