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.