DEV Community

Marcio Frayze
Marcio Frayze

Posted on

Por que decidi aprender (e ensinar) Clojure

Em 2017 comecei a me aprofundar no universo da Programação Funcional. Este paradigma já ganhava bastante popularidade e cada vez mais as principais linguagens de programação orientadas a objetos incluíam recursos inspirados neste paradigma, inclusive a linguagem que eu mais utilizava: Java.

Após o lançamento da versão 8 da JDK, em março de 2014, passou a ser cada vez mais comum ouvir as pessoas desenvolvedoras Java usando termos como: programação funcional, streams, optional, map, flat map, etc. Mas muitas pessoas em meu entorno ainda ignoravam estes novos recurso e, confesso, demorei para adotar essas novidades. As ideias pareciam muita interessantes, mas colocá-las em prática se mostrou mais difícil do que eu esperava.

Depois de muita tentativa e erro, resolvi me aprofundar nos conceitos. O livro Functional Thinking me ajudou a dar os primeiros passos na direção correta.

Em paralelo decidi que iria aprender uma linguagem funcional mais pura ao invés de tentar aplicar o paradigma funcional em uma linguagem orientada a objetos. Depois de pesquisar bastante, optei por aprender Elm. O fato de ser uma linguagem funcional pura e imutável me chamou atenção. Alem disso, ela é focada no desenvolvimento de webapps e, até então, eu não havia encontrado nenhuma solução para desenvolvimento de páginas web que me agradasse.

Depois de passar por todo Guia de introdução à linguagem Elm e ler o livro Elm in Action, já me sentia bastante confortável em desenvolver webapps neste paradigma. Gostei tanto de Elm que iniciei um projeto para ensinar programação para iniciantes usando esta linguagem e disponibilizei as primeiras aulas no site elm.dev.br.

Mas havia um problema sério que ainda precisava encarar: Elm é uma linguagem concebida para desenvolvimento de webapps e funciona muito bem para isso, mas eu buscava uma solução de uso geral, que pudesse ser utilizada também no desenvolvimento de backends. Por isso voltei a estudar as alternativas.

Elm é uma linguagem estaticamente tipada e inspirada em Haskell. O passo natural seria utilizar Elm no frontend e Haskell no backend. E foi o que tentei fazer. Li com certa dificuldade o livro Learn You a Haskell for Great Good! (disponível gratuitamente aqui) e aprendi muita coisa legal. Mas criar um backend completo usando Haskell mostrou-se um passo maior do que eu conseguiria dar naquele momento. Resolvi então procurar outras alternativas...

Durante todo esse processo a palavra Lisp não saía da minha cabeça! De tempos em tempos esbarrava em algum vídeo de alguma pessoa influente na comunidade falando sobre ela (como este vídeo ou este twit do John Carmack, fundador da id Software). Parecia algo místico. E o fato do Nubank ter adotado Clojure trouxe um estudo de caso bastante real e pragmático do uso de um dialeto de Lisp no Brasil.

Até então estava postergando estudá-la pois estava priorizando linguagens estaticamente tipadas e os dialetos mais famosos de Lisp são linguagens dinâmicas. Mas no começo de 2021 resolvi finalmente dar uma chance. Escolhi a linguagem Clojure e comecei a ler o livro Getting Clojure. Ao contrário dos meus estudos de Haskell, consegui ler este livro em poucos dias! Em paralelo comecei a fazer as aulas da Formação Clojure da Alura, que me ajudaram a ver mais na prática como programar nesta linguagem. Foi uma boa combinação: no livro eu aprendia mais a fundo os conceitos da linguagem e no curso revisava estes conceitos e aprendia a parte um pouco mais prática.

Principais características de Clojure

Lisp não é uma linguagem de programação, mas uma família de linguagens com diversos dialetos. Os dialetos mais famosos incluem a Common Lisp, Clojure, Scheme e Racket. Desta forma, após decidir que iria aprender Lisp, precisaria escolher um de seus dialetos.

Clojure se destacou para mim por duas razões:

  • ela utiliza a máquina virtual do Java, possibilitando interoperabilidade com aplicações Java (que como disse no início do artigo, é a linguagem que costumo utilizar no backend).
  • ela utiliza predominantemente o paradigma funcional. Alguns dialetos de Lisp (como o Common Lisp, por exemplo) são multiparadigma, mas como minha intenção era me aprofundar no universo da programação funcional, fazia mais sentido adotar um dialeto que desse preferência para este paradigma.

A experiência de programar em Clojure foi bastante libertadora. Praticar TDD junto com o REPL Driven Development (técnica bastante difundida dentro da
comunidade Clojure) faz com que o ciclo de feedback seja muito rápido. O fato de Clojure ser uma linguagem dinâmica também contribui para isso.

Outra característica de Clojure é ser uma linguagem impura, ou seja, podemos efetuar efeitos colaterais a qualquer momento. A principal vantagem disso é que torna a linguagem mais fácil de aprender (embora traga junto uma série de outros problemas que não acontecem em linguagens mais puras, como Elm ou Haskell). Escrevi um artigo sobre Funções Puras onde explico melhor este tema. Também gravei um vídeo explicando o que são Função Puras.

Embora seja uma linguagem impura, ela incentiva uma série de boas práticas que fazem com que os potenciais problemas dessa abordagem sejam significativamente reduzidos.

Como dar os primeiros passos em Clojure

Todas essas características que citei ao longo do artigo fazem com que Clojure, embora tenha uma aparência um pouco intimidadora no começo, seja na verdade bastante fácil de utilizar. Por isso escolhi também esta linguagem para compartilhar com outras pessoas desenvolvedoras os fundamentos básicos da programação funcional.

Para quem gosta de livros, recomendo iniciar pelo Getting Clojure, que como disse é uma ótima forma de entender os princípios básicos por trás do Clojure, ou se preferir uma opção gratuita pode começar pela versão online do livro Clojure for Brave and True. Outra opção mais focada nos fundamentos do paradigma e que aborda outras linguagens além de Clojure é o livro Functional Thinking, do Neal Ford. Gravei um podcast onde falo um pouco sobre esta obra. Estes 3 livros são em inglês. Se quiser uma leitura em português a editora Casa do Código tem disponível o livro Programação Funcional: Uma introdução em Clojure.

Se preferir estudar através de cursos online, você pode se inscrever no meu curso Clojure: Introdução à Programação Funcional. Ou pode fazer os cursos da Formação Clojure da Alura.


E você, qual seu paradigma preferido? Já tentou programar utilizando o paradigma funcional? Quais foram suas principais dificuldades? Compartilhe suas experiências nos comentários!

Se você gostou deste texto talvez goste dos meus outros artigos, vídeos e podcasts disponíveis em segunda.tech.

Discussion (4)

Collapse
aristotelesbr2 profile image
Aristóteles Coutinho • Edited on

Fiz o curso do Frayze. Muito bom. Curtindo Clojure!

Collapse
marciofrayze profile image
Marcio Frayze Author

Obrigado pelo comentário Aristóteles! 😄

Collapse
dev_jessica_felix profile image
Jéssica Félix

Eu estou me animando muito de estudar por causa dos seus posts, de verdade!

Collapse
marciofrayze profile image
Marcio Frayze Author

Fico feliz em ouvir isso Jéssica! 😄