Por que trabalhar com Elixir acelerou meu crescimento técnico

stone
stonetech
Published in
3 min readMar 9, 2020

Há cerca de dois anos, teve início minha primeira experiência profissional fora da faculdade, com um grande desafio: trabalhar no que viria a ser a Conta Stone, a primeira conta de pagamentos criada em Elixir, com a finalidade de facilitar a vida financeira dos empreendedores do país. Ainda programava apenas com linguagens imperativas ou orientadas a objetos. Contudo, alguns de nossos desenvolvedores já usavam Elixir — uma linguagem brasileira, criada em 2011, que funciona sobre a plataforma Erlang. Me interessei pela oportunidade de aprender algo novo e, assim, minha jornada com Elixir começou.

Para quem vinha desenvolvendo código de forma fluente em Python, foi necessário dar um passo para atrás. Afinal de contas, quando uma das primeiras frases que se estuda é “Elixir não tem atribuições”, você precisa parar tudo para absorver a profundidade da mudança. Logo mais, descobri o pattern matching e o poder que ele traz. Hoje em dia, sinto falta disso em qualquer outra linguagem que uso.

Após o primeiro atrito, provindo do pattern matching, veio o segundo grande choque: estamos em uma linguagem funcional, então não utilizamos loops e não guardamos estado em variáveis. Com isso, é necessário aprender a usar maps e reduces e funções afins. Felizmente, a documentação da biblioteca padrão de Elixir é extensa, concisa e inclui exemplos para praticamente todas as funções que expõe.

“Como guardamos estado, então?” — foi a minha próxima pergunta. A partir daqui, Elixir força o programador a crescer tecnicamente. Por funcionar na BEAM, a máquina virtual Erlang, Elixir também segue o paradigma de que os programas são conjuntos de processos que conversam entre si nessa máquina virtual. Então, para utilizar GenServers e Agents e conseguir guardar estado, aprendi conceitos de Sistemas Operacionais, como concorrência e resolução ou tratamento de impasses. Esses aprendizados não foram uma barreira, mas algo natural.

Com Pattern Matching, GenServers e conhecimentos sobre o paradigma funcional, a última coisa que faltava aprender para desenvolver sistemas em Elixir eram Supervisores. A plataforma Erlang fornece uma forma de criar árvores de supervisão de processos (pense em um gerente comandando funcionários ou outros gerentes). Caso um processo seja destruído, seja porque levantou uma exceção ou porque chamou algum processo que não estava vivo, o supervisor se encarrega de reiniciá-lo.

Como não dependemos de estado (ou conseguimos reconstruí-lo sem problemas), isso garante que a aplicação sempre volta a um estado estável e consistente. Isso traz mais uma filosofia de Erlang/Elixir que muda completamente a forma de programar: “Let it crash”, ou seja, deixe o programa morrer. Não é necessário programar de forma defensiva porque uma exceção levantada por um processo não mata sua aplicação instantaneamente.

Desde seu lançamento, a Conta Stone tem crescido muito, tão rápido quanto a quantidade de RAM que o Chrome consome. Isso é muito gratificante, porque permite ver seu trabalho tendo um impacto positivo na vida das pessoas, dos empreendedores. Portanto, Elixir não foi apenas mais uma linguagem de programação para colocar no currículo. Com ela, aprendi conceitos muito importantes sobre concorrência, mudei minha forma de pensar programas em geral (mesmo fora da plataforma Erlang) e posso dizer que trabalhar com um time que usa Elixir me proporciona um crescimento técnico exponencial.

Paulo Valente

*Engenheiro Eletrônico e de Computação formado pela UFRJ em 2019, Paulo Valente trabalha com Elixir desenvolvendo desde o princípio, em 2018, a Conta Stone, conta de pagamentos da Stone — atualmente uma das cinco maiores empresas de adquirência do país.
twitter.com/polvalente

--

--

stone
stonetech

Somos incansáveis na busca das melhores soluções para potencializar o empreendedor.