Novidades

A Revolução da Linguagem de Programação Haskell: Mais Admirada do que Utilizada

Na minha primeira experiência profissional após a faculdade, fui encarregado da tarefa de reescrever a funcionalidade de autocompletar de uma página de pesquisa. O código original, encapsulado em uma base de código decadente, era uma monstruosidade nauseante que ninguém queria mexer. O plano era reescrevê-lo em TypeScript – um dialeto de JavaScript – recorrendo a uma biblioteca que incorporava algumas funcionalidades úteis de uma linguagem chamada Haskell.

A Origem de Haskell: Entre o Estudo e a Prática

Haskell. O nome soava como o de uma arma – uma lâmina bem afiada, como um cimitarra ou uma katana. O plosivo forte de sonoridade alemã em seu nome, como em Nietzsche ou Kafka, acrescentava uma ponta ameaçadora. Tudo o que eu sabia sobre essa linguagem era que era desafiadora e destinada a PhDs em matemática.

Antes de se tornar uma linguagem de programação, Haskell era um conjunto de conceitos teóricos. Em 1977, o cientista da computação John Backus proferiu uma palestra influente intitulada “A Programação Pode ser Libertada do Estilo de Von Neumann?”. Ele argumentou que as linguagens existentes estavam se tornando inchadas e ineficazes, sendo um chamado para evoluir a “programação funcional” de uma esoteria matemática para uma ferramenta prática.

Os paradigmas de programação estão principalmente divididos em “programação imperativa” e “programação funcional”. Embora a dicotomia não seja clara, já que um número crescente de linguagens suporta ambos os estilos, pode ser suficiente dizer que na programação imperativa você escreve o código como uma série de passos, linha por linha, enquanto na programação funcional você define funções matemáticas e deixa a máquina se preocupar com os passos. Em termos de funcionalidade e uso reais, a programação imperativa é a abordagem muito mais comum.

A Gênese de Haskell e Sua Natureza Distinta

Antes de Haskell, os pesquisadores acadêmicos haviam implementado certos conceitos funcionais nas linguagens com as quais trabalhavam. Mas no final da década de 1980, um grupo de cientistas da computação se uniu para fundi-los em uma única linguagem. Batizaram-na em homenagem ao lógico-matemático Haskell Curry, cujo trabalho é fundamental para a teoria das linguagens de programação. O comitê Haskell utilizou a matemática de alto nível para limpar o excesso confuso da programação imperativa, esculpir uma nova estrutura sob a orientação da lógica avançada e soldar tudo com técnicas modernas de compilação. Dessa forja escaldante, surgiu o Haskell 1.0.

Haskell simplesmente parecia diferente de tudo que eu já tinha visto. Símbolos assustadores (>>=, <$>,:<:, <|>) proliferavam. A sintaxe era quase ofensivamente concisa. O código da sequência de Fibonacci, que pode ocupar várias linhas em outras linguagens, pode ser escrito em uma única linha mais curta do que a maioria das frases deste artigo: fibs = 0 : 1 : zipWith (+) fibs (tail fibs). Poderíamos muito bem encerrar cada programa Haskell com “QED.”

O Desafio e a Apreciação de Haskell

Sempre que me aventuro a aprender uma nova linguagem, o primeiro programa simples que tento escrever é um analisador JSON, que converte um formato de dados comum usado em aplicações web em uma estrutura manipulável pelo computador. Enquanto o analisador que me lembro de ter escrito em C resultou em uma monstruosidade programática abrangendo mais de mil linhas, senti um frisson de prazer quando Haskell me permitiu realizá-lo em menos de cem.

Ao mesmo tempo, entendi imediatamente porque Haskell era – e ainda é – considerada uma linguagem mais admirada do que utilizada. Mesmo um de seus conceitos mais básicos, o de “mônada”, deu origem a uma indústria de explicadores, analogias e vídeos. Uma explicação notoriamente inútil o suficiente para ser completada automaticamente pelo Google é: “Uma mônada é apenas um monóide na categoria dos endofuntores.”

O Legado e a Apreciação de Haskell

O que muitos não entendem é que utilizar Haskell raramente é uma decisão pragmática. É uma decisão intelectual, até mesmo estética. Em sua essência, Haskell tem mais em comum com os filmes de Charlie Kaufman do que com outras linguagens de programação: altamente cerebral, encantadoramente peculiar e estranhamente elegante; apreciado por aqueles que conhecem e julgado por desconhecidos como pretensioso. Haskell é, poder-se-ia dizer, um clássico culto.

A razão pela qual Haskell nunca ganhou uma adoção generalizada exemplifica uma verdade paradoxal na engenharia de software: Grandes linguagens de programação nem sempre são ótimas para programar.

Haskell não é inerentemente mais difícil de aprender do que algo como C, mas as duas linguagens apresentam desafios diferentes. Escrever em C é como engenharia de precisão, exigindo a atenção de um habilidoso relojoeiro. Mas o código Haskell é, na verdade, expressões matemáticas moldadas como código. C é uma linguagem quintessencial de engenheiro. Haskell é de um matemático puro.

Os talentos de um bom engenheiro e de um bom matemático nem sempre se sobrepõem. O segredo nem tão bem guardado da indústria é que a maioria dos programadores não são tão bons em matemática ou lógica quanto se poderia pensar. Isso é em grande parte aceitável. Afinal, muitos médicos seriam péssimos biólogos moleculares, poucos advogados são filósofos legais e a grande maioria dos MBAs não sabe absolutamente nada sobre econometria. Mas isso significa que poucos programadores realmente podem dominar Haskell. Isso inclui a mim, é claro, cujas pernas enfraquecem ao ver expressões como “F-coalgebra” e “metaprogramação de classes de tipos.”

Ainda assim, quando penso em Haskell, uma frase sobre a prosa de Martin Amis me vem à mente: “a primazia que ele dá ao estilo sobre a matéria.” Os programadores Haskell são supremacistas do estilo, e não há nada do que se desculpar. Em uma indústria frequentemente obcecada com utilidade e expediente, a comunidade Haskell não deve se sentir obrigada a apresentar evidências de sua utilidade. Em vez disso, deve simplesmente retorquir: Qual é o problema com exercícios intelectuais inúteis?

O Legado e o Impacto de Haskell no Panorama da Programação

Porque a questão sobre exercícios inúteis é que eles não permanecem inúteis por muito tempo. Mesmo quando os “programadores da indústria” evitavam Haskell, os designers de linguagem tomaram nota. Nos últimos anos, um paradigma no estilo Haskell entrou na moda por causa do tesouro de benefícios que oferece: tornar determinadas categorias de bugs impossíveis por design, tornar a correção de um programa mais comprovável e possibilitar a computação paralela fácil. Algumas das atualizações mais esperadas apresentadas nas novas versões de linguagens imperativas são inspiradas na programação funcional. No final, o apelo de Backus contra von Neumann foi ouvido. A programação foi libertada.

Fonte: Sheon Han
https://www.wired.com/story/inside-the-cult-of-the-haskell-programmer/