15-150: Princípios da Programação Funcional

Um curso de Carnegie Mellon sobre programação funcional em Standard ML está recebendo elogios como um recurso raro e bem estruturado para aprender conceitos modernos de PF, como tipagem forte, imutabilidade e funções de ordem superior. Os comentaristas debatem a escolha de SML em vez de linguagens mais populares como Haskell, OCaml ou Lisp, argumentando que uma linguagem pequena, estável e fortemente tipada ajuda os alunos a se concentrarem nas ideias centrais em vez de ferramentas e recursos avançados. O debate também destaca temas mais amplos: a escassez de bons materiais de ensino de PF, as tensões entre ideais funcionais puros e preocupações práticas como logging e efeitos colaterais, e o valor de expor estudantes de CS a múltiplos paradigmas além de Python e POO.

Ênfase na Programação Funcional na Educação em CS

  • Muitos acolhem um curso de PF em nível universitário e gostariam que PF fosse ensinada de forma mais ampla e mais cedo do que POO.
  • Vários descrevem currículos em que os alunos aprendem múltiplos paradigmas e linguagens (C, C++, assembly, Haskell/Scala/Racket, Java, Python, etc.) e elogiam essa amplitude.
  • Alguns recomendam que futuros alunos procurem explicitamente programas que ensinem PF e sistemas de baixo nível, e não apenas Python.

Escolha entre Standard ML e Outras Linguagens

  • Standard ML é defendida como pequena, estável e bem adequada para ensinar conceitos centrais de PF sem ferramentas ou “inchaço” da linguagem.
  • Razões históricas na CMU também importam; SML é uma linguagem de pesquisa com raízes lá.
  • Críticos argumentam que SML é prolixa, menos prática do que OCaml/F#/Haskell e difícil de instalar; os defensores dizem que sua simplicidade supera a falta de uso na indústria.
  • Tipagem estática, tipos algébricos de dados, pattern matching e verificação de tipos forte são citados como vantagens didáticas-chave em relação a Lisps.
  • Há debate sobre PF “pura” versus “impura” e sobre se Lisps carecem de transparência referencial; outros observam que TR depende de como você usa a linguagem, não da linguagem em si.

Materiais do Curso, Exercícios e Slides

  • As aulas são elogiadas pela clareza, energia e slides de alta qualidade.
  • Os trabalhos/labs oficiais não são públicos devido à autoria compartilhada e a preocupações com integridade acadêmica; alguns exercícios antigos e um “livro” de apoio em SML existem.
  • Há interesse em novos conjuntos de exercícios publicamente disponíveis, mas isso é apontado como algo que consome muito tempo.

Questões Práticas de PF: Efeitos Colaterais, Logging, IO

  • Uma reclamação recorrente: em PF pura (especialmente Haskell), pequenos efeitos colaterais como logging “infectam” tipos com IO e complicam refatorações.
  • As respostas sugerem:
    • Usar linguagens de PF mais pragmáticas (OCaml, F#, Erlang).
    • Abraçar a impureza quando útil (“functional core, imperative shell”).
    • Usar mónadas/classes de tipos (MonadIO, classes de tipos para logging, ST) ou auxiliares de depuração (por exemplo, trace) para gerenciar efeitos.
  • Alguns veem a disciplina da mónada IO como poderosa; outros a acham desajeitada.

Aprendendo PF e Algoritmos em Grafos

  • Alunos têm dificuldade com algoritmos em grafos e estruturas circulares em Haskell; eles acham código de grafos puramente funcional mais lento e complexo.
  • As sugestões incluem:
    • Traduzir algoritmos imperativos de forma mais direta no início.
    • Estudar estruturas de dados funcionais (por exemplo, no estilo de Okasaki), bibliotecas de grafos algébricos e store-passing style.
    • Usar comunidades de PF (por exemplo, Discords específicos de linguagens) para obter ajuda.

PF, Teoria vs. Prática e LLMs

  • Alguns temem que o ensino de PF penda demais para a teoria e não o suficiente para linguagens práticas/industriais; outros priorizam a clareza conceitual em vez da aplicabilidade imediata.
  • As opiniões divergem sobre se os entusiastas de PF carecem de perspectiva do mundo real; outros contrapõem que PF é valiosa em produção e ao trabalhar em conjunto com código gerado por IA devido a sistemas de tipos fortes.
  • Um comentarista sugere que LLMs tornam a programação menos relevante; outros argumentam que programação/PF continua valiosa, como a matemática фундаментal.