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.