Por que você também deve aprender Elixir?

Nos últimos meses tenho adentrado no mundo da programação funcional e mais especificamente estudado a linguagem Elixir, então, li esse artigo (https://mixandgo.com/learn/why-you-too-should-learn-elixir) e como me identifiquei com o pensamento do autor resolvi fazer uma “tradução livre/adaptação” para ajudar os brasileiros a, quem sabe, se interessarem mais pelo assunto. Sem mais delongas, vamos lá!

Por que você deveria aprender Elixir?

Bem, se você pretende ser contratado por uma grande empresa e receber um pagamento gordo, eu tenho certeza que já se interessou por essa linguagem.

Dando uma pequena olhada na web, se torna óbvio ver que não há muitas oportunidades de emprego para Elixir (pelo menos por enquanto). Então por quê você deveria aprender?

Bem, a questão não é que aprender Elixir não vai te dar um emprego melhor amanhã. É por conta de que ela pode te fazer um programador melhor e isso é muito mais importante para sua carreira.

Isso é especialmente verdade se você tem programado em uma linguagem orientada a objetos como o Ruby, por exemplo.

Como o Elixir pode te fazer um desenvolvedor melhor?

Se você trabalhou somente com linguagens orientadas a objeto, Elixir vai explodir sua cabeça pois ela vai te forçar a aprender um novo paradigma.

Isso vai te dar uma nova perspectiva sobre programação em geral. Entretanto, a melhor parte é que você vai transformar a forma como codifica, inclusive em qualquer outra linguagem orientada a objetos.

O que é Elixir?

Elixir é uma linguagem de programação funcional desenvolvida pelo brasileiro José Valim. Ela é muito parecida com Ruby e você não precisa ser um desenvolvedor Ruby pra achar que ela é uma linguagem extremamente fácil de ler.

Ela também é uma linguagem alternativa para a Máquina Virtual do Erlang (Erlang Virtual Machine — BEAM)

Ahh, e se você é um entusiasta Ruby on Rails, você deve saber que Elixir tem um framework web parecido, chamado Phoenix.

O que é Erlang?

Erlang não é só uma linguagem, Erlang é uma plataforma de desenvolvimento open-source, de propósito geral.

Ela foi criada pela Ericsson para a indústria de telecom e tem sido fantástica desde 1986.

Ela suporta concorrência de forma nativa, é distribuída (pode ser executada em diferentes máquinas ao mesmo tempo), possui tolerância a falha (se recupera de erros automaticamente)e orgulha-se de si mesmo com “nove-noves” de disponibilidade tendo apenas uma média de 31ms de downtime por ano.

Elixir vs. Ruby

A primeira coisa que eu gostaria de mencionar como princípio geral é que você não deve fazer tudo em uma única linguagem. Você não deve escolher uma “melhor” linguagem. Cada linguagem tem os seus pros e contras.

Elixir não é uma versão melhorada do Ruby. Ela não é uma substituta do Ruby. Ela é uma nova linguagem com objetivos diferentes.

Comparada ao Ruby, Elixir oferece uma melhor performance, visto que é uma linguagem compilada, possui melhor escalabilidade e alta disponibilidade.

O código que você escreve em Elixir é muito explícito, ou seja, é menos mágico. Eu acho isso muito refrescante, vindo do mundo Ruby.

E o principal recurso, na minha opinião, é que ela usa todos do cores da CPU, ou seja, você pode rodar testes em paralelo (de verdade!).

Vamos ver alguns exemplos de código Ruby e Elixir.

# Definindo um método em Rubydef hello  "result"end# Definindo um método em Elixirdef hello do  "result"end# Um Hash em Ruby{a: 1}# Uma map em Elixir%{a: 1}# Um array em Ruby[1, 2, 3, 4]# Uma tupla em Elixir{1, 2, 3, 4}# Chamando um método em um objeto em Ruby"hello".reverse# Chamando uma função em ElixirString.reverse("hello")# Uma lambda em Ruby -> x { x * x }# Uma função anônima em Elixirfn(x) -> x * x end# Usando uma função each em Ruby[1, 2].each { |i| puts i }# Usando uma função each em ElixirEnum.each([1, 2], &(IO.puts &1))# Definindo um módulo em Rubymodule Exampleend# Definindo um módulo em Elixirdefmodule Exampleend

Com você pode observar, existem similaridades entre o Ruby e o Elixir. Mas não deixe que isso te dê a impressão que você pode usar Elixir como usa o Ruby, pois são linguagens completamente distintas.

Elixir para negócios

Existem algumas razões para você adotar Elixir em seu negócio.

Se você está construindo aplicações que precisam ter alta disponibilidade (lembre-se dos nove-noves de disponibilidade), Elixir é uma excelente escolha.

Outro recurso legal é a capacidade de resposta. Sua aplicação pode responder a requisições independente de quantos clientes estão conectados.

Ela nunca quebra. Mesmo que você tenha uma código com erro em alguma linha, o restante da aplicação continua funcionando.

Código Elixir é fácil de crescer e manter, e isso significa baixo custo.

Elixir para Rubystas

Por ser uma linguagem funcional, Elixir torna fácil escrever testes. Isso ocorre porque o estado é imutável e você trabalha com funções que apenas recebem e retornem dados (na maioria das vezes).

A qualidade do código é alta, não apenas por ser fácil escrever mais e melhores testes, mas porque ele tem um compilador que informa qualquer coisa que esteja com problemas.

Como um Rubysta, é muito fácil escrever código Elixir por causa da sintaxe que é muito familiar.

Eu achei os doctests fantásticos. Doctests são testes para a sua documentação. Então, se você tem exemplos em sua documentação, eles rodam como uma parte da sua suíte de testes e garantem que seus exemplos não estejam errados.

E o mais importante, Elixir te ensina uma nova forma de pensar sobre programação em geral. Entender programação funcional como um programador OO não é uma tarefa fácil, mas vale o esforço.

Quando escolher Elixir

Elixir é uma excelente escolha se você quer usar Erlang mas odeia a sintaxe dessa linguagem.

Outra boa razão é se você quer construir sistemas altamente distribuídos ou ainda sistemas que rodam em múltiplas CPUs/máquinas.

Parece haver uma tendência hoje de se construir sistemas de chats, e isso o Elixir faz bem por se tratar de uma aplicação de baixa latência.

Como falado anteriormente, sistemas altamente confiáveis são também onde o Elixir brilha. Se você precisa de uma aplicação disponível o tempo todo, Elixir é provavelmente sua melhor escolha.

Quando NÃO escolher Elixir

Se você precisa construir aplicações que dependam de muito processamento de números, Elixir pode não ser sua melhor escolha. Nesse caso talvez seja melhor escolher uma linguagem como C ou C++, que são melhores para cálculos intensivos na CPU.

Elixir não tem um ecossistema diverso (pelo menos por enquanto). Por exemplo, a quantidade de repositórios para Elixir hoje é de 36.000, enquanto para Ruby é de 1.500.000, e Javascript 5.000.000.

Você pode pensar que Elixir é excelente para paralelismo, mas não é. Ela foi projetada para ter tolerância a falhas, não paralelismo.

Também existe uma curva de aprendizado que você terá que levar em consideração. Aprender Elixir não é uma tarefa fácil. Ele inicia com programação funcional (que já é um assunto bem vasto), e continua com a plataforma OTP, e então o BEAM, além do Phoenix.

Por que aprender programação funcional?

Aqui uma razão nas palavras de Joe Armstrong (autor da Erlang)

O problema com as linguagens orientadas a objeto é que elas têm todo esse ambiente implícito que carregam consigo. Você queria uma banana, mas o que você conseguiu foi um gorila segurando a banana e toda a floresta.

Entretanto existem outras razões, como:

Concorrência

Programação funcional torna a concorrência possível prevenindo a condição de corrida (onde dois programas “correm” para pegar o mesmo valor) e “deadlocks”, onde um programa fica esperando indefinidamente, para o outro escrever um valor.

Teste

Imagine um mundo em que não há “mocks”. Como seria seu teste se não usasse mocks? Programação funcional te dá isso.

Enquanto você provavelmente não sair dos mocks, eles podem ser bem menos em seus testes desde que a maioria das funções não tenham efeitos colaterais (ou seja, apenas dados entrando e saindo).

Debugging

Debugar é muito mais fácil quando você não tem um estado global. Você pode olhar para os argumentos de uma função e lá mesmo você terá seu estado.

Não é necessário ir a fundo na aplicação para descobrir porque as coisas são do jeito que são.

Se você nunca viu a palestra “Solid Ground” de Saša Juric antes, certifique-se de adicioná-la à sua lista de observação. É alucinante.

Fácil de entender

Programas funcionais são feitos de pequenas funções que executam operações simples e bem definidas com os dados que são passados para elas.

Você então compõe programas grandes usando essas pequenas funções, como peças de lego.

Como resultado, programas grandes são muito mais fáceis de ler e entender.

Resumindo…

Na minha opinião, o mais importante em aprender o Elixir é a questão de aprender um novo paradigma de programação pois programação funcional, mais do que nunca, veio pra ficar.

É claro que pode-se aprender esse paradigma em muitas outas linguagens, mas, se você vem do Ruby, assim como eu, tenho certeza que o caminho será um pouco mais tranquilo por se tratar de uma linguagem inspirada no velho e bom Ruby.

É isso, gente! Espero que tenham gostado, e como sempre, se tiverem qualquer dúvida ou sugestão não deixem de comentar logo abaixo.

Ahhh, e é claro, se você puder, curta nossa página no Facebook ou ainda siga-nos nas redes sociais e cadastrem-se em nossa newsletter semanal! 😉

Um forte abraço e até a próxima!


UPDATE!

Olha isso, gente! Acabo de lançar um curso de Programação Funcional usando Elixir. Aos interessados, deem uma lida nesse post onde explico a importância de conhecer o Paradigma Funcional. 😉

Programação Funcional