5 pontos por GN⁺ 2024-05-23 | 1 comentários | Compartilhar no WhatsApp
  • Try Clojure é uma página de experiência de 5 minutos para avaliar imediatamente expressões em Clojure no navegador
  • O conteúdo digitado no REPL à direita é executado em um read-eval-print loop
  • Você pode digitar diretamente expressões de exemplo como (+ 1 2) ou clicar em trechos de código para inseri-los automaticamente
  • Use (help) para verificar os comandos e, quando estiver tudo pronto, digite (start) para iniciar a experiência
  • Esta página foi criada com Clojurescript, e as informações de produção incluem Elia Scotto, Michiel Borkent e a comunidade Clojure

Clojure executado diretamente no navegador

  • Try Clojure foi projetado para proporcionar uma experiência curta com Clojure com a mensagem “Got 5 minutes?”
  • No REPL à direita, a symbolic expression em Clojure inserida pelo usuário é avaliada
  • O fluxo da experiência é simples
    • Digite diretamente expressões como (+ 1 2)
    • Clique em trechos de código para inseri-los automaticamente
    • Use (help) para verificar os comandos
    • Inicie com (start)

Informações de produção

  • A página inclui uma citação de Rich Hickey: “If you want everything to be familiar, you'll never learn anything new.”
  • Try Clojure foi criado com Clojurescript, e Elia Scotto é indicado como criador
  • Também há agradecimentos a Michiel Borkent e à comunidade Clojure

1 comentários

 
GN⁺ 2024-05-23
Opiniões do Hacker News
  • Fico feliz que isso tenha voltado. Uma versão bem antiga me levou a experimentar Clojure, e essa escolha acabou sendo a decisão de maior impacto na minha carreira.
    Até hoje uso Clojure quase todos os dias, no trabalho e em casa; às vezes Clojure padrão, às vezes o excelente Babashka como executor de tarefas no estilo Make ou substituto para scripts Zsh.
    Go também é uma forte segunda opção quando preciso compilar para um único binário, mas Clojure é a linguagem em que me sinto mais à vontade graças ao fluxo de desenvolvimento baseado em REPL, que parece mais uma conversa com o programa do que o ciclo tradicional de escrever-compilar-executar.
    Somando a isso o fato de rodar sobre a JVM, vira um conjunto de ferramentas que permite terminar o trabalho com prazer. Se você tem qualquer interesse em Lisp e programação funcional, recomendo muito experimentar; se usa VSCode, o plugin Calva ajuda bastante.

    • O “motivo de ter ficado fora do ar por um tempo” é que seu criador, Anthony Grimes (https://github.com/Raynes), faleceu há 7 anos: https://www.reddit.com/r/Clojure/comments/5gyyxw/clojure_ope...
    • Sempre acho curioso ver pessoas que usam linguagens de alta expressividade como Clojure, Rust e TS migrarem facilmente para Go.
      Mudar para uma linguagem menos expressiva foi doloroso e irritante para mim; lembro que, ao sair de Python para Java 5, o código para expressar a mesma coisa ficava de 3 a 5 vezes mais longo.
      Talvez o ponto central seja usar linguagens menos expressivas apenas para escrever coisas pequenas, como scripts de shell, pequenas funções em C para desempenho ou interface com funções externas, ou pequenos utilitários em Go.
    • O que sempre me impediu de aprender Clojure foi o “j” no nome. Tive tantas experiências ruins com o JDK e a JVM que, se o “J” não significar JavaScript, quero ficar a uns mil quilômetros de distância.
  • Se você está tendo o primeiro contato com Clojure e quer experimentar algo útil de imediato, recomendo muito o runtime Babashka para scripting: https://babashka.org
    É divertido e acessível, além de ser uma das partes mais polidas do ecossistema Clojure.
    Diferentemente do Clojure completo na JVM, ele tem tempo de inicialização muito rápido, o que o torna um bom ponto de entrada; iniciantes podem trabalhar de forma quase interativa com ferramentas de observação/recarregamento de arquivos que já conhecem, como o nodemon.
    Mais adiante, vale migrar para uma configuração totalmente interativa usando uma conexão REPL no editor, mas esse fluxo pode ser pouco familiar para iniciantes e também trabalhoso de configurar.

    • Se estiver pronto para levar a diversão para a web, dê uma olhada no Biff: https://biffweb.com
    • O melhor do Babashka é que hoje ele realmente vem com as pilhas incluídas.
      Usei com HTMX para criar uma pequena UI que mostrava estatísticas de um app de trabalho, e a experiência foi muito boa.
      O Babashka já inclui praticamente tudo de que você precisa para uma aplicação web básica e, com HTMX, dá para fazer carregamento dinâmico nas páginas sem lidar com um frontend em JavaScript.
      Além disso, você pode subir um nREPL com bb --nrepl-server e conectar um editor como o Calva para desenvolver scripts de forma interativa, então vale conferir se precisar de uma UI web simples.
  • Um site em uma linha parecida é https://www.maria.cloud/
    Ele é mais voltado a ensinar programação para iniciantes absolutos, mas acho que as operações básicas no estilo paredit e a avaliação por formulário ficam muito mais próximas do desenvolvimento guiado por REPL usado na prática.
    Digitar diretamente em uma janela de terminal REPL tem uma ergonomia muito ruim; em geral, é mais realista usar algo como o Calva no VSCode ou o CIDER no Emacs para enviar o formulário sob o cursor a algum processo REPL.

  • O melhor motivo para aprender Clojure é Reagent, e acho que é de longe a melhor forma de usar React: https://reagent-project.github.io/
    shadow-cljs facilita o uso de bibliotecas npm: https://github.com/thheller/shadow-cljs
    Acabei ficando com uma configuração padrão de backend em Go e frontend em Reagent: https://github.com/nathants/aws-gocljs

    • Reagent é bom e já existe há uns 10 anos, mas senti que o React em si já é complexo e que havia complexidade extra demais em cima dele, então migrei para um wrapper fino do React
      Eu queria ver com mais clareza o que acontece por baixo e interoperar de forma mais simples com componentes React nativos
      Parece que ele está acompanhando o suporte experimental ao React 18, mas o Reagent ficou para trás em relação ao fluxo mais moderno do React e talvez não consiga aproveitar todos os benefícios de otimização de desempenho
      Ele ainda usa class components e não hooks, e também há a preocupação de que a conversão em tempo de execução do Hiccup possa prejudicar o desempenho
      Dito isso, na maioria dos casos provavelmente não será um problema perceptível, e deve ficar tudo bem se você não estiver fazendo nada sofisticado. Sinto falta do modelo de UI-as-data do Hiccup, então talvez eu volte ao Reagent um dia
      Para gerenciamento de estado, recomendo muito re-frame: https://day8.github.io/re-frame/
      No início pode parecer intimidador, mas a documentação é excelente e, depois que você entende, o modelo fica muito claro
      Também há alternativas como Helix(https://github.com/lilactown/helix) ou UIx(https://github.com/pitch-io/uix), além do refx(https://github.com/ferdinand-beyer/refx), que praticamente remove a dependência do Reagent
      Ou você pode adicionar código de interoperabilidade ao UIx/Helix para acoplar o re-frame: https://github.com/pitch-io/uix/blob/master/docs/interop-wit...
    • Um backend em Elixir também funcionou bem graças ao poder da BEAM VM
    • Fico curioso se nessa configuração há code splitting ou geração de site estático
      Em 2024 não dá para enviar um arquivo HTML vazio, porque isso estraga a otimização para buscas; se não fosse por isso, eu gostaria de experimentar
  • Gostei muito do período em que usei Clojure e recomendo fortemente: https://eli.thegreenplace.net/2017/clojure-the-perfect-langu...

  • Clojure for the Brave and True, de Daniel Higginbotham, é um material realmente excelente para aprender Clojure, e recomendo muito
    Dá para ler gratuitamente online: https://www.braveclojure.com/clojure-for-the-brave-and-true

    • Acho o estilo de escrita prolixo demais, mas entendo que há pessoas que gostam desse estilo
      O verdadeiro problema do livro não é Clojure, e sim que ele começa ensinando Emacs
      Hoje deve haver muitos iniciantes vindo do VSCode, e para eles isso vira uma grande distração
    • Também gosto muito da série Clojure from the ground up, da Aphyr: https://aphyr.com/posts/301-clojure-from-the-ground-up-welco...
    • Se você não tem experiência com Emacs, talvez seja melhor usar o plugin Calva no VSCode
  • Alguns anos atrás, um colega recomendou que eu lesse History of Clojure mesmo que eu não fosse tentar Clojure, mas acabei adiando: https://dl.acm.org/doi/pdf/10.1145/3386321
    Então, depois de ver Rich Hickey - Greatest Hits https://changelog.com/posts/rich-hickeys-greatest-hits, li History of Clojure e comecei a aprender imediatamente
    Clojure é uma das linguagens mais divertidas para construir coisas e também uma das mais bonitas
    Não é tanto pela sintaxe em si, mas pela forma como ela permite expressar ideias por meio de bom design e composição, o que estimula a mente de um jeito muito agradável
    Se você ainda está procurando aquela ferramenta brilhante que se encaixe perfeitamente e nada até agora fez sentido para você, vale a pena experimentar Clojure. Entre as linguagens que já vi, ela está entre as mais concisas e, ao mesmo tempo, poderosas

    • Tive uma sensação parecida alguns meses atrás ao aprender Common Lisp
      Fico curioso se aprender Clojure acrescenta algo além disso, ou se no geral é parecido
  • Fico curioso para saber se existe uma versão de Clojure que compile para algo como LLVM
    Parece algo parecido com o que o Scala Native originalmente pretendia ser, mas, na prática, ele não se consolidou assim
    Eu gosto de programação funcional, mas, em 2024, o ecossistema Java parece tão antiquado que fica difícil de aguentar

    • Há um trabalho em andamento para implementar o runtime do Clojure com Clang/LLVM, tendo também como objetivo recursos interessantes como hot reloading
      Pode ser visto em https://jank-lang.org/
      Ainda não alcançou paridade completa de recursos com o Clojure na JVM, mas acompanho o desenvolvimento de perto
    • O comentário principal no momento aponta para https://babashka.org/, mas isso é baseado em GraalVM, não em LLVM
      Na verdade, isso provavelmente não é um grande problema
    • Deve sair em breve: https://jank-lang.org
    • https://jank-lang.org/
  • Links relacionados:
    Try Clojure – An interactive tutorial in the browser - https://news.ycombinator.com/item?id=30423856 - fevereiro de 2022, 93 comentários
    Try Clojure in your browser - https://news.ycombinator.com/item?id=3366526 - dezembro de 2011, 26 comentários
    Try Clojure - https://news.ycombinator.com/item?id=1359682 - maio de 2010, 60 comentários

  • Clojure está ganhando popularidade no México, e imagino que o Brasil tenha uma tendência parecida por causa do Nubank
    É um lugar onde cientistas da computação querem trabalhar, e parece que trabalham principalmente com Clojure
    Acho que eles contrataram alguns dos principais membros da linguagem e, se bem me lembro, em algum momento também adquiriram a empresa de José Valim, criador do Elixir
    Ainda assim, ela parece continuar sendo uma empresa que usa principalmente Clojure

    • O Nubank adquiriu em 2020 a Cognitect, consultoria por trás do Clojure, e também adquiriu a Platformatec, que era a empregadora de José Valim
      A segunda aquisição foi para obter a expertise da Platformatec em gestão de projetos (https://building.nubank.com.br/tech-perspectives-behind-nuba...); até onde sei, não há código Elixir rodando no Nubank
      Há Python no “outro lado” dos pipelines de ETL, mas, nas áreas voltadas para o usuário, até onde sei, o backend é Clojure e os apps Android e iOS são TypeScript
    • Costumo encontrar usuários de Clojure com nomes que parecem ser do universo sino-falante
      Fico curioso para saber se Clojure na China também é um movimento significativo