FAQ Elixir: Tudo o que você precisa saber para fazer a escolha certa.

Mesmo depois de anos de mercado utilizando o Elixir em produção, várias questões ainda são levantadas sobre essa linguagem de programação. Neste artigo vamos responder todas as dúvidas para te ajudar a entender se Elixir é a escolha certa para o seu projeto.

Ao iniciar o desenvolvimento de um novo produto digital, os primeiros questionamentos que nos vêm à mente são: qual tecnologia escolher? E essa tecnologia atenderá a todos os requisitos necessários? 

Pensando nisso, criamos uma série de artigos aqui no blog, para explorar as linguagens e frameworks que conhecemos e utilizamos aqui na ateliware. Assim, podemos compartilhar a nossa experiência para te ajudar na hora de tomar uma decisão de escolha como essa.

Este artigo é o primeiro da série e para começar falaremos sobre Elixir

Resolvi então compilar neste texto os principais questionamentos que já percebi sobre Elixir ao longo de mais de 3 anos trabalhando com essa linguagem. 

1. O que é Elixir?

O Elixir é uma linguagem de programação dinâmica que utiliza o paradigma funcional, concorrente por padrão e é executada na máquina virtual do Erlang (BEAM). 

Criada em 2011, em um projeto de pesquisa do brasileiro José Valim, atualmente está na versão 1.10. O foco principal da linguagem é fornecer, de forma produtiva, ferramentas para construir aplicações distribuídas e de fácil manutenção.

2. Quais os principais benefícios do Elixir?

Não podemos falar sobre os benefícios do Elixir, sem antes explicar o que é a BEAM, também conhecida como máquina virtual do Erlang. 

Ela faz parte do core do OTP (erlang open telecom platform) e é responsável por executar o código compilado do Erlang e do Elixir que, em conjunto do runtime do erlang, trazem alguns benefícios como padrão para o Elixir: 

Execução distribuída

O código Elixir é executado em pequenas threads, chamadas de processos. Esses processos e são totalmente isolados e trocam informações através de mensagens:

current_process = self()

# Spawn an Elixir process (not an operating system one!)
spawn_link(fn ->
  send(current_process, {:msg, "hello world"})
end)

# Block until the message is received
receive do
  {:msg, contents} -> IO.puts(contents)
end


Tolerante a falhas

Na comunidade erlang existe um conceito chamado "let it crash" ou, em português, “deixe falhar”. A única certeza que temos de um código que é executado em produção é que as coisas podem dar errado. Para isso, o Elixir implementa uma feature de supervisão do código que está sendo executado:


children = [
  TCP.Pool,
  {TCP.Acceptor, port: 4040}
]
Supervisor.start_link(children, strategy: :one_for_one)


Ferramentas para desenvolvimento

Além das ótimas funcionalidades que a linguagem traz por padrão, por se aproveitar da BEAM, vale destacar também a quantidade de ferramentas que fazem parte do dia a dia de desenvolvimento:

  • Mix - Ferramenta de build;
  • Hex - Gerenciador de pacotes;
  • Iex - Execução interativa do elixir;
  • ex_unit - Framework de testes unitários;
  • ex_doc - Geração de documentação;
  • Phoenix - Framework de desenvolvimento web;
  • Ecto - Interação com banco de dados.

2. Para que necessidades o Elixir se destaca? 

Existem alguns pontos e diferenciais que fazem com que o Elixir se destaque frente a outras linguagens de programação. Posso dizer que Elixir ganha cada vez mais espaço em aplicações que precisam de:

  • Crescimento e escala - Se a sua aplicação será acessada por milhares ou milhões de usuários você pode se aproveitar dos benefícios de confiabilidade e escalabilidade da BEAM;
  • Gerenciamento de grande quantidade de requisições simultâneas - Se você não tem milhões de usuários, mas tem um número menor que faz uso intenso do seu produto, você precisa de um sistema que suporte concorrência;
  • Mantenabilidade do código - Uma das vantagens ao escrever código em Elixir é conseguir manter o código simples. O resultado disso é que muitas empresas escolhem o Elixir pela possibilidade de ter um codebase de fácil manutenção, desde a correção de bugs até o desenvolvimento de novas funcionalidades.

Outro ponto positivo, por coincidência ou não, é que todas as vantagens do Elixir citadas na lista acima se encaixam perfeitamente em aplicações web ou api's. 

É claro, existem também outras ferramentas muito robustas para o desenvolvimento web. Mas isso é tópico para outro artigo!

3. É fácil escalar aplicações utilizando Elixir?

Particularmente eu não acredito que aplicação alguma seja fácil de escalar. Mas com o Elixir conhecemos alguns casos de uso que nos indicam que escalar é sim possível. 

O primeiro é o caso da Bleacher Report, uma empresa de notícias esportivas que serve mais de 1,5 bilhões de páginas por mês e reduziu de 150 servidores para apenas 5 utilizando o Elixir. O segundo caso é do Discord, um aplicativo de chat para gamers que, com o Elixir no seu cinto de ferramentas, tem a capacidade de gerenciar mais de 11 milhões de usuários simultâneos.

Além disso, recomendo este vídeo em que o criador do Phoenix Framework explica como mantém mais de 1 milhão de requisições simultâneas utilizando o Elixir.

4. Quem está usando o Elixir?

Várias empresas ao redor do mundo já adotaram o Elixir para melhorar sua produtividade ao construir aplicações distribuídas. Alguns exemplos são:

  • Pinterest - Suporte a mais de 30k de eventos por segundo e mais de 200 milhões de usuários por mês;
  • PepsiCo - Desenvolvimento da plataforma de e-commerce;
  • Moz - Diminuíram o tempo de resposta de mais de 800 ms para menos de 50 ms.

Ficou interessado? Você pode conferir uma lista com mais de 400 empresas que utilizam o Elixir em produção.

5. Qual a popularidade entre os desenvolvedores?

Pode se dizer que o Elixir está no mainstream das tecnologias, justamente pela quantidade de features que são oferecidas por padrão. Outros pontos positivos são o paradigma funcional da linguagem, os conceitos de imutabilidade e a programação mais declarativa. Todos eles trazem mais clareza na hora de ler um código escrito. 

Além disso, a comunidade é muito ativa e dificilmente você ficará na mão na hora de resolver um problema.

Trago como dica um padrão que eu mesmo sigo: antes de procurar no Stackoverflow faço minhas buscas no Fórum do Elixir e geralmente encontro mais rápido a solução para os meus problemas. 

Outra questão bastante positiva é que, pelo Elixir ter uma inspiração no Ruby, muitos desenvolvedores que programam nessa linguagem têm buscado aprender o Elixir também.

A cada dia que passa a adoção do Elixir aumenta mais.

6. Quando Elixir não é a melhor opção?

Assim como todas as linguagens o Elixir não é bala de prata. Ela não foi feita para cobrir todos os casos de uso possíveis, por mais que possa parecer. Existem, principalmente, algumas situações em que o uso do Elixir não é o ideal: 

  • Processamento computacional pesado - Não é algo que o core team do Erlang/Elixir está muito preocupado. Além disso, já existem ótimas ferramentas utilizando Python, Matlab ou R;
  • Deep Learning - Existem algumas ferramentas rodando em Elixir, mas existem ferramentas de Deep Learning mais robustas e validadas em Python, por exemplo;
  • Mobile apps - Hoje o Elixir não é uma linguagem viável para desenvolvimento mobile. Seria muito legal utilizar o Elixir para desenvolver aplicativos! Quem sabe no futuro?

Espero ter conseguido compartilhar com você um pouco do que aprendi ao longo dos anos trabalhando com Elixir e ter esclarecido dúvidas que surgem no momento da decisão de tecnologia em um novo projeto. 

Aproveito e deixo a indicação de alguns livros que usei no processo de aprendizagem que são ótimos para aprofundar o conhecimento:

Se você ficou com alguma dúvida mesmo após a leitura, entre em contato com a gente.
Até a próxima!


Peterson Santos

Founder & CEO at ateliware | Artesão de software, interessado em programação, open source, produtos digitais e internet.

Hipercolaboração na prática: como criar um ecossistema de inovação

Inovação ou morte!? Mude para não ficar pelo caminho.

Estudar a distância e ser “multitarefa”