No Nu Engineering Meetup #15, a programação funcional saiu do rótulo de nicho e virou prática concreta. Alberto Souza, Engenheiro de Software no Nubank e criador do ecossistema Dev + Eficiente, abriu a noite conectando paradigmas a decisões de design do dia a dia. 

Rafael Ferreira, Programador Python Sênior, educador na Rocketseat e fundador da iniciativa Programador Lhama, apresentou uma visão de arquitetura funcional que nasce na teoria e desemboca em código testável e previsível. Marcelo Arbore, Diretor de Engenharia na Oracle Brasil com mais de quinze anos de experiência em nuvem híbrida e distribuída, trouxe um experimento unindo Clojure, Datomic e Oracle 23AI para busca vetorial e aplicações com dados multimodelo. 

Este post organiza as principais ideias e costura o tema com dúvidas recorrentes de quem olha para o Nubank e pensa que não se encaixaria por não conhecer linguagens funcionais.

Antes de tudo, uma boa pergunta

Essa pergunta aparece com frequência em entrevistas, eventos e comentários de blog: “preciso saber Clojure para trabalhar no Nubank?”. A resposta é tão direta quanto a pergunta. Não. O que buscamos é curiosidade, fundamentos sólidos e vontade de aprender. 

A linguagem é uma ferramenta a serviço dos princípios de engenharia que valorizamos. Essa discussão já apareceu em conversas com a comunidade, como na entrevista que Alex Miller deu ao Hammock Podcast.  Lá, ele falou de jornadas de aprendizado e posicionou as escolhas de linguagem como meios, não fins. Você pode explorar essa conversa aqui.

Check our job opportunies

O que é programação funcional e por que ela importa

A programação funcional é uma abordagem que favorece estruturas imutáveis, funções puras e composição previsível. Com ela, temos mais clareza sobre o que muda e onde muda. 

Em termos práticos, isso significa que as transformações de dados retornam novos valores em vez de atualizar variáveis no lugar; que efeitos colaterais ficam concentrados; e que o caminho dos dados pode ser lido como um pipeline. 

Uma introdução acessível a esse modo de pensar está no texto Functional programming with Clojure, que mostra como princípios se traduzem em decisões de design que facilitam teste, paralelismo e manutenção.

Como isso se traduz em Clojure no Nubank

Clojure é a nossa linguagem principal em muitos sistemas. A escolha dialoga com a ênfase em imutabilidade e com o uso de bancos orientados a histórico, como o Datomic. 

Essa história já foi contada por aqui em Clojure’s journey at Nubank, onde detalhamos razões técnicas e culturais para adotar o ecossistema. A decisão não cria um clube exclusivo. Ela cria um ambiente que incentiva foco em regras de negócio, clareza de efeitos e experimentação responsável. 

Para quem quer mergulhar nos bastidores, a série especial Clojure turns 15 registra debates sobre evoluções da linguagem e seu impacto no nosso dia a dia.

Chegar sem saber Clojure é possível

Muita gente que entrou no Nubank nunca havia programado em Clojure. Alberto Souza, durante sua fala, contou como aprendeu do zero e como princípios funcionais passaram a influenciar seu código em outras linguagens. 

A mensagem central é libertadora. Paradigmas não são dogmas, eles são lentes. Você pode levar imutabilidade, coesão e funções puras para Java, Python e JavaScript, do mesmo jeito que traz conceitos de coesão e modelagem orientada a domínio para o Clojure. 

No Hammock Podcast, exploramos essa jornada pessoal e técnica no episódio Journeys in Code: Clojure, Datomic e crescimento pessoal. A conclusão é que aprender a linguagem vem com o contexto certo, com pares por perto e com problemas interessantes para resolver.

Do quadro branco ao código em produção

As três apresentações do meetup mostram como a teoria se traduz em prática.

Alberto destacou como a imutabilidade simplifica a depuração e reduz bugs ao concentrar mutações em pontos únicos do fluxo. Rafael apresentou padrões de arquitetura funcional em Python, como o “service handle” e o “tagless final”, que isolam efeitos e mantêm a previsibilidade do sistema. 

E Marcelo, por sua vez, demonstrou um experimento unindo Clojure, Datomic e Oracle 23AI para construir um serviço de busca vetorial com embeddings, uma prova de que o paradigma funcional pode coexistir com tecnologias modernas de dados e IA.

Essas abordagens refletem uma filosofia de engenharia orientada à simplicidade e clareza. Cada decisão, da função pura ao pipeline declarativo, é pensada para manter o sistema compreensível a longo prazo.

Aprendizado como parte do trabalho

Quando dizemos que não é preciso conhecer Clojure para participar dos nossos processos seletivos, falamos também sobre como apoiamos o aprendizado desde o primeiro dia. O onboarding técnico é estruturado para isso: combinar contexto de produto, pares experientes e um ambiente seguro para fazer perguntas, explorar e errar.

Ao longo das primeiras semanas, quem entra tem contato com conceitos do ecossistema funcional e aprende na prática, por meio de pair programming, revisões de código e mentorias. A curva de aprendizado existe e é compartilhada.

O que muda na prática

Trabalhar em um ambiente orientado à programação funcional não é apenas mudar a sintaxe, mas transformar a forma de pensar.

  • Previsibilidade: estados são controlados, e bugs de concorrência diminuem drasticamente.
  • Testabilidade: funções puras facilitam automação e testes de unidade.
  • Legibilidade: pipelines declarativos tornam fluxos de dados mais claros.
  • Evolução: coesão deliberada reduz impacto de mudanças no longo prazo.

Esses princípios atravessam linguagens e paradigmas e explicam por que a engenharia funcional é uma mentalidade que molda o jeito de construir produtos no Nubank.

A programação funcional é um convite a pensar de forma mais clara sobre dados, efeitos e evolução de sistemas. No Nubank, criamos um ambiente que estimula aprendizado contínuo, colaboração e experimentação segura. Se você se identifica com essa maneira de construir, este é um ótimo ponto de partida para a sua jornada.

Check our job opportunies