sábado, 8 de novembro de 2014

Programação Funcional - Minha História

I'm a Haskeller 
Já faz um tempo (mais de 4 anos) que eu não crio um post, praticamente desde quando eu entrei como desenvolvedor Java na minha atual empresa. No ano passado, enquanto eu trabalhava no então cliente do governo como outsourced, minhas bases imperativas começaram a se abalar ao prestar manutenção em seu código altamente entrópico. Havia várias boas práticas que poderiam ser aplicadas àquele sistema, módulo por módulo, ele poderia ficar melhor. Mas não demora muito para chegar alguém sem muita vontade de ler o código do outro e trazer mais caos ao sistema. Talvez seja a "melhoria" que não era tão boa ou a preguiça intelectual de alguns desenvolvedores, talvez seja uma especificação pobre, talvez seja uma péssima arquitetura, talvez um cliente ou a alta gerência que entubou frameworks horríveis. Esse é um jogo que ninguém tem toda a razão mas ninguém está de todo errado. Apontar o dedo é algo muito improdutivo e só cria inimigos amargos. Mas há um culpado muito esquecido chamado paradigma imperativo, baseado nas máquinas de Von Neumann. O que há de errado com as máquinas de Von Neumann? Basicamente nada, todos os computadores que existem no mundo hoje são implementações desse conceito, são máquinas de Von Neumann. E as linguagens de programação abstraíram esse conceito, na forma do que hoje é chamado de paradigma imperativo. E é a consequência do uso desse paradigma que trouxe efeitos nefastos. Ele permite a criação de estados mutáveis e compartilhados, basicamente os dados (variáveis) podem não ser locais a uma única função e por isso outra função (que pode estar sob responsabilidade de outro desenvolvedor ou do mesmo) pode modifica-los e mais outras funções podem depender deles. Parece uma bagunça não é? Mas é exatamente isso, um convite ao caos. Por mais que alguém tente organizar as coisas, o caos não é ilegal nesse sistema. A consequência é o indeterminismo, um sistema/componente que é alimentado com os mesmos dados e produz resultados diferentes. Determinismo em uma sociedade é algo ruim, mas na computação é o indeterminismo que é um grande passivo e seu custo aumentou muito com as arquiteturas paralelas e concorrentes. Durante esse tempo eu estudei Scala e li com mais profundidade sobre a programação funcional. Até então eu deixei-a de lado porque eu acabava revertendo ao modo imperativo que a linguagem Scala permitia, então eu acabava ficando com um Java bonitinho. Foi aí que eu descobri uma realidade maior 'a programação funcional é um paradigma, que vai ser cada vez mais adotado'. Do próprio criador de Scala e surfando na internet, eu encontrei o pináculo das linguagens funcionais, Haskell.  Sendo um linguagem puramente funcional, eu não podia reverter ao imperativo. Mas para quem trabalha em fábricas de software, ainda estamos presos (na maioria das vezes) à tecnologia que o cliente escolheu. O que acontece é que não são só os frameworks que estão obsoletos, é o paradigma vigente, a programação imperativa. E ao contrário do que se pensa, a programação funcional pode ser aplicada mesmo em linguagens consideradas não funcionais, inclusive pré Java 8. Nos próximos posts, mostrarei a revolução que a programação funcional traz às linguagens que não nasceram funcionais. Aconselho aprender Haskell, pois essa linguagem é a vanguarda da programação funcional, e mostra muitos conceitos de como superar as limitações Von Neumann. Enquanto isso, alguns artigos e palestras:
I'm a Haskeller

Nenhum comentário:

Postar um comentário