8 Linguagens Funcionais para Aprender em 2020 | Alexandre Lucchesi
8 Linguagens Funcionais para Aprender em 2020
Sabe o que o WhatsApp, o filtro anti-spam do Facebook, o LinkedIn e o Nubank têm em comum? Todos eles usam pelo menos uma linguagem de programação funcional.
Se você gosta de programação funcional, você está com sorte!
Hoje em dia existem muitas linguagens de programação que suportam esse paradigma, para qualquer plataforma que você quiser, desde Web, mobile e até mesmo sistemas embarcados.
Neste artigo eu resumi as 8 linguagens de programação que eu considero mais promissoras para você mergulhar no paradigma funcional em 2020!
Clojure é um dialeto do Lisp para a Java Virtual Machine (JVM).
É uma linguagem dinâmica, multi-threaded e muito flexível, principalmente pelo uso de macros, que dentre outras permitem manipular o próprio código Clojure. Sim, você pode transformar a AST do Clojure, em Clojure. 🤯
Executar sobre a JVM também tem seus benefícios. Por ser a base de muitas linguagens populares — como Java, Kotlin e Scala — a JVM é uma tecnologia que vem sendo otimizada há décadas. Além disso, rodar sobre a JVM torna Clojure interoperável com essas linguagens, dando acesso a um vasto conjunto de bibliotecas já consolidadas e facilitando sua adoção.
É claro que não podemos esquecer do ClojureScript, que é um compilador de Clojure para JavaScript. Se você estiver desenvolvendo para a Web, com o ClojureScript você pode usar Clojure tanto no backend quanto no frontend.
No Brasil, Clojure começou a se popularizar depois da adoção do Nubank, mas muitas empresas ao redor do mundo têm tido sucesso com a linguagem.
Scala combina orientação a objetos e programação funcional em uma linguagem estática, concisa e de alto nível, que pode ser executada na JVM ou compilada para JavaScript, tendo assim os mesmos benefícios do Clojure.
Uma das maiores vantagens do Scala é a flexibilidade para definir abstrações: classes, métodos, lambdas, parâmetros implícitos, extensões — qualquer primitiva que você precisar para modelar sua solução estará disponível. Nas mãos de um bom programador, isso é uma arma poderosíssima.
Dentre as linguagens funcionais, Scala é uma das mais populares, sendo amplamente usada por empresas no Brasil e no mundo, como LinkedIn, Twitter e o próprio Nubank. Ela também é a base de projetos open-source famosos como o Apache Spark e o Akka. Se seu objetivo for conseguir um emprego, Scala é uma das linguagens mais seguras da lista.
Haskell é uma linguagem de programação puramente funcional que permite a construção de soluções concisas, rápidas, elegantes e seguras.
Programadores gastam menos tempo criando código do que mantendo código. A introdução de bugs ao editar uma base de código existente é rotina mesmo na vida de programadores experientes, e é exatamente nesse limbo que Haskell brilha, na refatoração de código.
"Se compila, funciona" é um mantra na comunidade Haskell. Ele é um pouco exagerado (às vezes, não funciona), mas ele faz alusão a uma característica marcante do Haskell: seu sofisticado sistema de tipos — famoso por evitar uma série de bugs em tempo de compilação, tendo influenciado, inclusive, o design de muitas linguagens de programação modernas, como Scala, Rust, Swift, C#, Elm, etc.
Se você quiser entender com profundidade o paradigma funcional, aprender Haskell vale muito a pena. Isso porque Haskell não é somente uma linguagem funcional. Haskell é uma linguagem puramente funcional. Essa característica desafiará suas habilidades como programador e fará você pensar sobre programação de uma forma diferente de tudo que você já viu.
Durante muito tempo, Haskell foi vista como uma linguagem acadêmica, usada apenas por pesquisadores, teóricos e entusiastas de linguagens de programação. Mas essa imagem tem mudado nos últimos anos, com o aumento do interesse por programação funcional, por iniciativas como o Commercial Haskell e o sucesso do Haskell em grandes projetos, como o Sigma (filtro anti-spam do Facebook) e o semantic (ferramenta de análise de código-fonte do GitHub).
Rust é uma linguagem de programação focada em três coisas: segurança, desempenho e concorrência.
Ela possui um compilador bem rigoroso na checagem de variáveis e nos endereços de memória que você referencia, que ajuda a prevenir uma série de bugs que em outras linguagens só seriam capturados em tempo de execução, muitas vezes em um crash.
Por exemplo, os seguintes problemas de memória e concorrência, comuns em uma linguagem como C/C++, são impossíveis de acontecer em Rust: buffer overflow, uso de ponteiro depois do free, duplo free, condições de corrida, mutex obrigatório não usado e integer overflow.
Como a maioria dessas checagens são feitas em tempo de compilação, a penalidade de desempenho é mínima e por isso a linguagem Rust é muito promissora em áreas que sempre foram dominadas pelo C/C++, como sistemas embarcados, Internet das Coisas (IoT) e sistemas operacionais.
Erlang é uma linguagem projetada para permitir a construção de sistemas em tempo real não-críticos que sejam altamente escaláveis e com alta disponibilidade. O ambiente de execução do Erlang tem suporte nativo para concorrência, distribuição e tolerância a falhas.
Para alcançar esses objetivos, o Erlang contempla características únicas, como hot-swapping de código, que permite que você faça atualizações em tempo real ao comportamento do programa (sem precisar reiniciá-lo), e um modelo de troca de mensagens baseado em workers e supervisors.
Ela é muito usada nas áreas de telecomunicações, finanças, comércio eletrônico e mensagens instantâneas, mas Erlang é uma linguagem de propósito geral, que não se restringe a esses domínios. O OTP (Open Telecom Platform) é uma coleção de bibliotecas open-source que você pode usar para criar os mais diversos tipos de aplicação.
A linguagem por trás do WhatsApp e de inúmeras outras aplicações que usamos todos os dias e nem imaginamos se chama Erlang.
Elixir é uma linguagem dinâmica projetada para a construção de aplicações escaláveis e manuteníveis. Criada em 2011 pelo brasileiro José Valim, ela opera sobre a máquina virtual do Erlang (BEAM), famosa pela execução de sistemas de baixa latência, sistemas distribuídos e sistemas tolerantes a falhas.
A sintaxe do Elixir é bem parecida com a do Ruby. Para muitos, o Phoenix é o novo Ruby on Rails e o Ecto, o novo ActiveRecord. No comparativo Elixir for Rubyists (em inglês), o autor afirma que o "Elixir é um Erlang vestido de Ruby". Para quem gosta de Ruby, recomendo também o artigo Como aprender Elixir me tornou um melhor desenvolvedor de Ruby.
Por essa similaridade e pelos benefícios de concorrência, escalabilidade e tolerância a falhas, muitas consultorias têm optado pelo Elixir como alternativa ao Ruby. No site Elixir Companies você pode ver uma lista de empresas que usam Elixir em produção.
Swift é uma linguagem multi-paradigma, criada pela Apple em 2014, que traz uma abordagem moderna para o desenvolvimento de software com foco em programação segura, desempenho e padrões de projeto.
Apesar de ser conhecida pelo uso em plataformas Apple, Swift foi projetada para ser uma linguagem de propósito geral, servindo para programar desde softwares de sistema (compiladores, game engines, etc) até aplicações mobile, desktop e serviços em nuvem.
Erik Meijer, um guru da programação funcional, recomendou no Twitter o Swift para quem é iniciante nesse paradigma:
At this point, @SwiftLang is probably a better, and more valuable, vehicle for learning functional programming than Haskell.
— Erik Meijer (@headinthebox) October 17, 2015
A novata da lista também é uma aposta para quem gosta de Inteligência Artificial. Com o projeto Swift for TensorFlow e após a contratação de Chris Lattner (criador do Swift) pelo Google em 2017, muitos apostam que Swift surfará a próxima onda do deep learning.
Elm é uma linguagem puramente funcional criada para construir o frontend de aplicações Web de maneira declarativa, sendo uma alternativa ao React, Angular, Vue.js, ClojureScript e outras linguagens que compilam para JavaScript.
A maior diferença entre Elm e essas outras linguagens é que Elm possui uma linguagem e ecossistema próprios, não replicando nem tentando consertar os problemas do JavaScript.
Se você tem alguma experiência com JavaScript, você deve reconhecer as frases: Uncaught ReferenceError: foo is not defined e Uncaught TypeError: bar.quux is not a function. Esses erros nunca aconteceriam em Elm, porque a linguagem foi projetada para que exceções em tempo de execução sejam impossíveis de acontecer.
Elm tem muitas vantagens para desenvolvimento frontend, mas as principais são: tipagem forte e estática, não tem null nem undefined, imutabilidade total, puramente funcional, zero runtime exceptions, reativa por definição.
E aí, gostou de alguma?
Então marca aqui embaixo quais são as linguagens que você quer aprender em 2020 e me conta se tiver alguma que eu deixei de fora da lista.