mais lidos
Life at Nu
Conheça a sede do Nubank em Pinheiros, São Paulo/Brasil jan 11
Design
A nova aparência do Nubank: conheça nossa nova logo maio 17
Culture & Values
Como os valores e a cultura da Nu moldam os produtos que criamos ago 7
Carreiras
Reunimos grandes mentes de diversas origens que permitem a discussão e o debate e melhoram a resolução de problemas.
Saiba mais sobre nossas carreiras



A programação funcional é uma abordagem de resolução de problemas com ideias focadas em excelente cobertura de testes, maior encapsulamento de código, reutilização e manutenção de sistemas. Clojure não tem apenas um paradigma atraente, é também uma linguagem de programação funcional consolidada, com total interoperabilidade com Java e uma bela pilha para completar.
Além disso, quando pensamos em escalabilidade, e na rapidez com que o Nubank teve que se organizar e não perder o controle da qualidade dos serviços que estavam sendo criados, uma arquitetura bem definida e de alto padrão, a ser utilizada em conjunto com Clojure, foi extremamente útil para garantir o sucesso da decisão da linguagem e do design de uma cultura para entregar código de forma mais frequente e confiável.
O que é Programação Funcional?
Programação funcional é um estilo de programação que segue o Paradigma Funcional, e para quem não sabe, paradigmas são abordagens para resolução de problemas, e o que os diferencia é a forma como idealizam a solução para um problema.
Conheça nossas oportunidades
Conceitos e diretrizes de programação funcional
Imutabilidade
Este é o conceito de não modificar nenhuma variável durante a execução, de forma que tenhamos apenas variáveis salvas como somente leitura, então assim que você criar uma variável com um valor não modificável, caso precise utilizá-la, uma nova poderá ser criada usando o valor da outra mais as outras entradas que você deseja fornecer.
Imutabilidade é a ideia central da programação funcional
Funções de Primeira Classe
Esta é a ideia de que uma função nesta linguagem não tem restrições ou limitações e pode ser tratada como uma variável.
Funções Puras
São funções nas quais você tem apenas um único resultado possível com base em uma entrada, então você sempre pode fazer uma previsão. Por exemplo, na função matemática “x + 2 = y”, se “x” for 2, “y” sempre será 4, e isso é exatamente o que é uma função pura.
Composição de Funções
Como o nome diz, você pode usar a composição de funções para obter o resultado tencionado conforme desejar.
Expressões
As funções sempre devem retornar algo. A programação funcional não aprova a criação de funções de instrução, que possuem resultados nulos, com procedimentos realmente difíceis de controlar e prever o que está acontecendo dentro dela.
Recursões
Sem Laços, então a iteração é feita com base no princípio de que não temos variáveis mutáveis e a recursão usará o último resultado para aplicar o seguinte sem quebrar a ideia, e também evitando efeitos colaterais que são bastante comuns em interações de laço.
Por que o Nubank optou por usar Clojure como sua principal linguagem de programação?
Quando o Nubank foi fundado, precisávamos de uma linguagem poderosa para nos ajudar a construir a melhor aplicação de tecnologia financeira e queríamos que ela fosse a melhor em termos de qualidade, consistência e velocidade de desenvolvimento. E todas essas ideias foram refletidas em Clojure. Houve algumas coisas que avaliamos como vantagens:
Linguagem objetiva
Clojure é direto ao ponto e muito sucinto para criar cenários complexos, qualidades que o tornam uma linguagem de poucas palavras. Isso nos permitiu codificar mais em menos tempo.
Incrível cobertura de testes! Equipes de Garantia de Qualidade não foram necessárias.
Testar enquanto codificamos
Pudemos ter uma infraestrutura pré-configurada para executar os testes ao mesmo tempo em que a modificávamos, com quase 100% de cobertura de teste de unidade mais teste de integração. E tudo isso garantiu a qualidade do serviço e do que foi feito, então não precisamos de mais gente para validar esses cenários para nós.
Interoperabilidade Java
Para quem não conhece muito bem Clojure, a linguagem é construída em cima da JVM (Java Virtual Machine) para que possamos utilizar tudo nesse ambiente, como bibliotecas Java, frameworks ou qualquer outra implementação com Java. Em todo caso, é um benefício ter esta vasta tecnologia disponível se precisarmos dela.
Comunidade incrível e documentação de qualidade
Clojure tem um ótimo espaço comunitário, no qual as pessoas estão envolvidas na discussão e evolução da linguagem, então é muito fácil começar e descobrir onde você precisa aprender sobre ela. Além disso, as pessoas que estavam no Nubank quando tudo era apenas uma miragem tinham um grande envolvimento e carinho com Clojure, então foi uma decisão fácil de tomar.
Como o Nubank escalou tão bem usando Clojure?
O Nubank cresceu extraordinariamente nos últimos anos e a evolução do nosso crescimento consistente na parte de engenharia se deve à organização e arquitetura técnica que suavizaram esse processo de crescimento.
Hoje, a arquitetura de microsserviços do Nubank conta com cerca de 1000 microsserviços escritos em Clojure. Além disso, todos os microsserviços possuem a mesma estrutura de pastas baseada em nossa arquitetura de software definida, a Arquitetura Diplomata. Assim, é fácil entender como funcionam os microsserviços e onde encontrar as coisas. Dito isso, isso facilita a escalabilidade, pois podemos mover engenheiros entre equipes, e eles só precisam aprender o contexto do negócio e como isso é organizado na arquitetura de microsserviços; no entanto, os serviços em si são simples e muito fáceis de manipular.
Ter convenções de código, arquitetura de software, cultura de testes e uma ótima infraestrutura já preparada para aceitar tudo isso permite que equipes e empresas cresçam de forma mais otimizada, focando muito mais na resolução de problemas do que em manter o funcionamento baseado em pessoas.
Conheça nossas oportunidades