Minha estadia no Nubank

Ultimamente eu tenho estudado muito de programação funcional, principalmente em Clojure. E nada melhor para estudar uma linguagem do que se aventurar num emprego em que se usa ela, certo? 

Foi assim que eu fiz o processo seletivo no Nubank. E passei, e comecei a trabalhar em maio.

Muitas coisas foram diferentes para mim nessa pequena jornada. A primeira empresa em que o atendimento ao cliente está muito próximo do dia a dia, a primeira empresa com muitos funcionários, a primeira empresa que opera com muito investimento, a primeira empresa que usa intensivamente micro serviços, e a primeira empresa em que eu, de fato, fui demitido (e não que eu pedi demissão). 

Apesar de tudo, eu já tinha meus planos de sair. Mas isso não vem ao caso, nem vem ao caso as circunstâncias que levaram ao acontecido. O importante é o que fica, e as coisas que eu aprendi. 

Pela primeira vez na vida eu trabalhei com microserviços, e pela primeira vez eu consegui ver a vantagem real de uma linguagem funcional nesse processo. Há muito tempo atrás, no mundo de Ruby, uma implementação chamada Maglev prometeu entregar persistência de objetos Ruby completos, inclusive exceptions. O Maglev mesmo nunca foi muito utilizado, mas essa ideia de persistir exceptions e sessions e depois reproduzir o bug simplesmente pegando a session e replicando os passos que causaram o erro ficaram na minha mente. 

Quando eu trabalhei com microserviços, era exatamente isso que eu fazia – cada ponto de entrada em um serviço era um conjunto de dados, e como a maior parte das coisas era imutável, se algo dava erro a mensagem era rejeitada, e depois podíamos simplesmente chamar o mesmo entrypoint com a mesma mensagem, e garantir que a mesma exception ocorreria. Se fosse algum erro de comunicação com banco de dados ou com outro entrypoint, nada de errado ocorreria – e aqui entra a segunda coisa diferente.

Para suportar todas essas características, todos os entrypoints tinham que ser indepotentes – ou seja, se uma mesma mensagem fosse enviada para ele duas, três, ou quatro vezes, o entrypoint se compraria como se tivesse recebido apenas uma. O importante aqui é não depender de um id de mensagem ou qualquer coisa assim – é importante que a mensagem inteira seja responsável por ser indepotente.
(more…)

Empregos, Linguagens, e Identidade

Quando eu comecei esse blog, eu dei o subtítulo de “diário de um rubyista”. Quase imediatamente eu mudei para “diário de um desenvolvedor de sistemas”, e agora estou mudando de novo.

Existe um motivo pra isso, assim como existe um motivo para um monte de coisas que fazemos e que não nos damos conta. Conforme o tempo foi passando, muitas coisas mudaram na minha vida pessoal e profissional, e me fizeram repensar minha própria identidade.

Talvez esse pareça ser um assunto muito filosófico pra um blog técnico, mas de qualquer maneira, acho importante que ele seja mencionado. Eu conheço muita gente que se deixa definir pela linguagem que usa. Há vários blogs online que, por exemplo, se recusam a aceitar críticas da sua linguagem preferida, de seu framework, num nível que parece irracional. Na verdade, Martin Fowler já falou sobre isso num artigo simples chamado keep your identity small. E é sobre isso que eu vou falar.

Muitas coisas aconteceram desde que comecei a escrever nesse blog – a ideia original dele era divulgar coisas interessantes, intermediárias para avançadas, para um público que fala português – e esse último detalhe é importante também. Por que meus subtítulos do blog foram “diário de um rubyista”, quando não era esse o intuito do blog, é algo que eu não sabia dizer – até agora.
(more…)

Retrospectiva 2010

Demorei um pouco mais do que eu gostaria para escrever esse post mas, vamos lá: retrospectiva do ano todo. Este será um post bem pessoal, mas como sempre, nem só de código vive uma pessoa: junto, há uma turbulência de sentimentos que acabam influenciando a vida toda e a de quem estiver próximo.

Em 2010, tudo indicou que seria um péssimo ano. E, na maior parte, ele foi realmente muito ruim, mas com todas essas coisas ruins, algo de bom surgiu no meio das frustrações.

Foi um ano de rubys e aprendizados. Logo no começo do ano, perdi um cargo de chefia que significava muito mais do que eu imaginava, e isso me inspirou a escrever artigos e palestras. Me inscrevi no AgileBrazil, aonde fui palestrante e acredito que deu para mostrar muita coisa boa que foi feita em meu trabalho, muito embora esse trabalho não seja reconhecido pelos próprios gestores. Logo depois, participei pela primeira vez do FISL, também como palestrante. Pouco antes, ingressei no Grupo de Usuários de Ruby, o GURU-SP, e para minha surpresa fui reconhecido no FISL, e pouco tempo depois no RubyConfBR (por sinal, um dos melhores eventos que já fui).

Em todos esses eventos, mais do que Ruby, acabei aprendendo outras coisas bem interessantes. Me meti a usar CouchDB em alguns experimentos caseiros, comecei a me aventurar bem mais com JavaScript e até a gostar da linguagem, e aprendi um pouco mais sobre as técnicas de desenvolvimento de sistemas complexos, embora infelizmente eu não tenha tido oportunidade ainda para aplicar os conhecimentos em um sistema realmente complexo. Como certas coisas insistem em não mudar, mesmo estudando muito mais do que eu imaginava, nesse ano, ainda assim não consigo gostar de Java, mas é a vida…
(more…)