Sobre o serviço
TraduzidoSou um desenvolvedor Clojure e crio serviços de backend funcionais e aplicações de processamento de dados que rodam na JVM. No cerne do meu trabalho estão estruturas de dados imutáveis, funções puras e um estilo composicional onde um programa é construído a partir de pequenas partes claramente nomeadas que você pode realmente raciocinar. Como Clojure é um Lisp, minha principal ferramenta é o REPL: eu desenvolvo um programa interativamente, avalio expressões diretamente em dados ao vivo e refino o design à medida que avanço, em vez de adivinhar tudo de antemão e depurar depois. É uma disciplina distinta, diferente de trabalhar com Java, Scala ou Elixir, e eu a encaro como uma arte própria, não como Java com parênteses.
Em multithreading, uso honestamente as ferramentas que a linguagem oferece: átomos, refs, agentes e canais core.async — por tarefa, não por moda. Eu construí serviços REST e HTTP streaming no Ring e reitit, descrevi dados via spec e Malli, trabalhei com Postgres via next.jdbc e HoneySQL, processei grandes volumes com transdutores e sequências preguiçosas para que a memória permaneça estável. Eu me preocupo com a integração cuidadosa com o ecossistema JVM ao redor, tratamento de erros sensato e implantações entediantes de uma boa maneira. Se o código se espalhou em um estado emaranhado, eu o trago de volta a um núcleo limpo e bordas finas com efeitos.
Se você tem um serviço que deve ser correto sob carga, um pipeline de dados que deve permanecer manutenível, ou um projeto Clojure preso na metade, eu o pegarei e o farei avançar. Eu escrevo testes que corrigem comportamentos, documento pontos complexos e deixo um processo REPL saudável para que a próxima pessoa seja produtiva desde o primeiro dia.
— Serviços de backend em Clojure e ClojureScript para JVM
— APIs REST e streaming no Ring, reitit e core.async
— Modelagem e validação de dados via clojure.spec e Malli
— Trabalhando com Postgres via next.jdbc, HoneySQL e pooling de conexões
— Multithreading com átomos, refs, agentes e canais
— Transdutores, sequências preguiçosas, processamento de grandes volumes
— Desenvolvimento orientado a REPL, testes e refatoração para funções puras
Em multithreading, uso honestamente as ferramentas que a linguagem oferece: átomos, refs, agentes e canais core.async — por tarefa, não por moda. Eu construí serviços REST e HTTP streaming no Ring e reitit, descrevi dados via spec e Malli, trabalhei com Postgres via next.jdbc e HoneySQL, processei grandes volumes com transdutores e sequências preguiçosas para que a memória permaneça estável. Eu me preocupo com a integração cuidadosa com o ecossistema JVM ao redor, tratamento de erros sensato e implantações entediantes de uma boa maneira. Se o código se espalhou em um estado emaranhado, eu o trago de volta a um núcleo limpo e bordas finas com efeitos.
Se você tem um serviço que deve ser correto sob carga, um pipeline de dados que deve permanecer manutenível, ou um projeto Clojure preso na metade, eu o pegarei e o farei avançar. Eu escrevo testes que corrigem comportamentos, documento pontos complexos e deixo um processo REPL saudável para que a próxima pessoa seja produtiva desde o primeiro dia.
— Serviços de backend em Clojure e ClojureScript para JVM
— APIs REST e streaming no Ring, reitit e core.async
— Modelagem e validação de dados via clojure.spec e Malli
— Trabalhando com Postgres via next.jdbc, HoneySQL e pooling de conexões
— Multithreading com átomos, refs, agentes e canais
— Transdutores, sequências preguiçosas, processamento de grandes volumes
— Desenvolvimento orientado a REPL, testes e refatoração para funções puras