5 puntos por GN⁺ 2024-05-23 | 1 comentarios | Compartir por WhatsApp
  • Try Clojure es una página de prueba de 5 minutos donde puedes evaluar expresiones de Clojure directamente en el navegador
  • Lo que escribes en el REPL de la derecha se ejecuta mediante un ciclo read-eval-print loop
  • Puedes escribir directamente expresiones de ejemplo como (+ 1 2) o hacer clic en fragmentos de código para insertarlos automáticamente
  • Usa (help) para ver los comandos y, cuando estés listo, escribe (start) para comenzar la experiencia
  • Esta página fue creada con Clojurescript y en la información de creación aparecen Elia Scotto, Michiel Borkent y la comunidad de Clojure

Clojure que se ejecuta al instante en el navegador

  • Try Clojure está diseñado para que pruebes Clojure rápidamente con el mensaje “Got 5 minutes?”
  • La symbolic expression de Clojure que el usuario escribe en el REPL de la derecha es evaluada
  • El flujo de la experiencia es simple
    • escribir directamente expresiones como (+ 1 2)
    • hacer clic en fragmentos de código para insertarlos automáticamente
    • usar (help) para revisar los comandos
    • comenzar con (start)

Información de creación

  • La página incluye una cita de Rich Hickey: “If you want everything to be familiar, you'll never learn anything new.”
  • Try Clojure fue creado con Clojurescript y Elia Scotto aparece como creador
  • También incluye agradecimientos a Michiel Borkent y a la comunidad de Clojure

1 comentarios

 
GN⁺ 2024-05-23
Opiniones de Hacker News
  • Me alegra que esto haya vuelto. Una versión de hace muchísimo tiempo me hizo probar Clojure, y esa elección terminó siendo la decisión con mayor impacto en mi carrera.
    Incluso hoy uso Clojure casi todos los días, tanto en el trabajo como en casa; a veces Clojure estándar, y a veces Babashka, que es excelente como reemplazo de ejecutores de tareas tipo Make o scripts de Zsh.
    Go también es una segunda opción potente cuando necesito compilar a un binario único, pero Clojure se siente más cómodo gracias a su flujo de desarrollo basado en REPL, que se siente como conversar con el programa más que el ciclo típico de escribir-compilar-ejecutar.
    Si a eso se suma que corre sobre la JVM, queda un conjunto de herramientas con el que se puede terminar el trabajo de forma agradable. Si tienes aunque sea un poco de interés en Lisp y la programación funcional, te recomiendo mucho probarlo; y si usas VSCode, el plugin Calva ayuda muchísimo.

    • La “razón por la que desapareció por un tiempo” es que su creador, Anthony Grimes (https://github.com/Raynes), falleció hace 7 años: https://www.reddit.com/r/Clojure/comments/5gyyxw/clojure_ope...
    • Siempre me sorprende la gente que, aun usando lenguajes muy expresivos como Clojure, Rust o TS, pasa fácilmente a Go.
      Cambiar a un lenguaje menos expresivo me resultó doloroso y molesto; recuerdo que, al pasar de Python a Java 5, el código para expresar lo mismo se volvió entre 3 y 5 veces más largo.
      Quizás la clave esté en usar los lenguajes menos expresivos solo para escribir cosas pequeñas, como scripts de shell, pequeñas funciones en C para rendimiento o interfaces de funciones externas, o utilidades pequeñas en Go.
    • Lo que siempre me impidió aprender Clojure fue la “j” del nombre. Tuve tantas malas experiencias con el JDK y la JVM que, si no se refiere a JavaScript, quiero estar a unos mil kilómetros de cualquier cosa que tenga una “J”.
  • Si te encuentras con Clojure por primera vez y quieres experimentar con algo útil de inmediato, recomiendo mucho el runtime Babashka para scripting: https://babashka.org
    Es divertido y accesible, y es una de las partes más pulidas del ecosistema de Clojure.
    A diferencia de Clojure completo sobre la JVM, arranca muy rápido, así que es una buena puerta de entrada; los principiantes pueden trabajar de una forma parecida a la interactiva con herramientas de vigilancia/recarga de archivos que ya les resulten familiares, como nodemon.
    Más adelante conviene pasar a una configuración plenamente interactiva usando una conexión REPL desde el editor, pero para principiantes es un flujo poco familiar y puede ser engorroso de configurar.

    • Si ya estás listo para llevar la diversión a la web, mira Biff: https://biffweb.com
    • Lo mejor de Babashka es que hoy en día realmente viene con baterías incluidas.
      Tenía que crear una pequeña UI para mostrar estadísticas de una app de trabajo y lo usé junto con HTMX; fue una muy buena experiencia.
      Babashka trae integrado casi todo lo necesario para una app web básica, y con HTMX puedes hacer cargas dinámicas en la página sin lidiar con un frontend en JavaScript.
      Además, puedes levantar nREPL con bb --nrepl-server y conectar un editor como Calva para desarrollar scripts de forma interactiva, así que vale la pena echarle un vistazo si necesitas una UI web sencilla.
  • En una línea similar también está https://www.maria.cloud/
    Está más orientado a enseñar programación a principiantes absolutos, pero creo que las operaciones básicas al estilo paredit y la evaluación por formularios se acercan mucho más al desarrollo guiado por REPL que se usa en la práctica.
    Escribir directamente en una ventana de terminal del REPL tiene una ergonomía muy mala; normalmente es más realista enviar el formulario bajo el cursor a algún proceso REPL usando algo como Calva en VSCode o CIDER en Emacs.

  • La mejor razón para aprender Clojure es Reagent, y me parece, por mucho, la mejor forma de usar React: https://reagent-project.github.io/
    shadow-cljs facilita el uso de librerías de npm: https://github.com/thheller/shadow-cljs
    Como configuración base, terminé quedándome con un backend en Go y un frontend en Reagent: https://github.com/nathants/aws-gocljs

    • Reagent es bueno y lleva alrededor de 10 años, pero React en sí ya es complejo, y sentí que encima agregaba demasiada complejidad adicional, así que me pasé a un wrapper delgado de React
      Quería ver con más claridad qué pasa internamente e interoperar de forma más simple con componentes nativos de React
      Parece que se está poniendo al día con el soporte experimental de React 18, pero Reagent quedó rezagado respecto del flujo más reciente de React y quizá no aproveche todos los beneficios de optimización de rendimiento
      Todavía usa class components y no hooks, y también preocupa que la conversión en tiempo de ejecución de Hiccup pueda afectar el rendimiento
      Dicho eso, en la mayoría de los casos probablemente no sea un problema perceptible, y si no haces nada muy sofisticado, debería estar bien. Extraño el modelo de UI-as-data de Hiccup, así que quizá algún día vuelva a Reagent
      Para manejo de estado recomiendo mucho re-frame: https://day8.github.io/re-frame/
      Al principio puede parecer abrumador, pero la documentación es excelente y, una vez que lo entiendes, el modelo queda muy claro
      También hay alternativas como Helix(https://github.com/lilactown/helix) o UIx(https://github.com/pitch-io/uix), y también refx(https://github.com/ferdinand-beyer/refx), que elimina casi por completo la dependencia de Reagent
      O puedes agregar código de interoperabilidad a UIx/Helix para conectarlo con re-frame: https://github.com/pitch-io/uix/blob/master/docs/interop-wit...
    • Un backend en Elixir también encajó bien gracias a la potencia de la BEAM VM
    • Me pregunto si en esa configuración hay code splitting o generación de sitios estáticos
      En 2024 no se puede servir un archivo HTML vacío, porque arruina la optimización para buscadores; si no fuera por eso, me gustaría probarlo
  • Disfruté muchísimo el tiempo en que usé Clojure y lo recomiendo mucho: https://eli.thegreenplace.net/2017/clojure-the-perfect-langu...

  • Clojure for the Brave and True, de Daniel Higginbotham, es un recurso realmente excelente para aprender Clojure, y lo recomiendo mucho
    Se puede leer gratis en línea: https://www.braveclojure.com/clojure-for-the-brave-and-true

    • Siento que el estilo es demasiado verboso, pero entiendo que haya gente a la que le guste ese enfoque
      El verdadero problema de este libro no es Clojure, sino que empieza enseñando Emacs
      Hoy en día probablemente muchos principiantes vienen de VSCode, y para ellos eso se vuelve una gran distracción
    • La serie Clojure from the ground up de Aphyr también me gusta mucho: https://aphyr.com/posts/301-clojure-from-the-ground-up-welco...
    • Si no tienes experiencia con Emacs, quizá te convenga usar el plugin Calva en VSCode
  • Hace unos años, un colega me recomendó leer History of Clojure aunque no fuera a probar Clojure, pero lo fui postergando: https://dl.acm.org/doi/pdf/10.1145/3386321
    Luego vi Rich Hickey - Greatest Hits https://changelog.com/posts/rich-hickeys-greatest-hits, leí History of Clojure y enseguida empecé a aprenderlo
    Clojure es uno de los lenguajes más divertidos para construir cosas y también uno de los más bellos
    No tanto por la sintaxis en sí, sino por la manera en que te permite expresar ideas mediante buen diseño y composición, lo que estimula la mente de una forma muy satisfactoria
    Si todavía estás buscando esa herramienta brillante que te encaje perfecto y nada te ha convencido, vale la pena probar Clojure. De los lenguajes que he visto hasta ahora, está entre los más concisos y a la vez potentes

    • Hace unos meses, al aprender Common Lisp, tuve una sensación parecida
      Me pregunto si aprender Clojure aporta algo adicional sobre eso, o si en general es bastante similar
  • Me pregunto si existe una versión de Clojure que se compile con algo como LLVM
    Se siente parecido a lo que Scala Native originalmente intentaba ser, pero en la práctica no logró consolidarse así
    Me gusta la programación funcional, pero en 2024 el ecosistema Java se siente demasiado viejo y cuesta tolerarlo

    • Hay un trabajo en curso para implementar el runtime de Clojure con Clang/LLVM, y también apunta a funciones interesantes como hot reloading
      Se puede ver en https://jank-lang.org/
      Todavía no alcanzó la paridad de funciones con el Clojure completo de la JVM, pero sigo de cerca su desarrollo
    • El comentario destacado por ahora apunta a https://babashka.org/, pero eso está basado en GraalVM, no en LLVM
      En realidad, probablemente eso no sea un gran problema
    • Saldrá pronto: https://jank-lang.org
    • https://jank-lang.org/
  • Enlaces relacionados:
    Try Clojure – An interactive tutorial in the browser - https://news.ycombinator.com/item?id=30423856 - febrero de 2022, 93 comentarios
    Try Clojure in your browser - https://news.ycombinator.com/item?id=3366526 - diciembre de 2011, 26 comentarios
    Try Clojure - https://news.ycombinator.com/item?id=1359682 - mayo de 2010, 60 comentarios

  • Clojure está ganando popularidad en México, y en Brasil parece que podría haber una tendencia similar por Nubank
    Es un lugar al que los científicos de la computación quieren ir a trabajar, y al parecer trabajan principalmente con Clojure
    Creo que contrataron a algunos miembros clave del lenguaje, y recuerdo que en algún momento también adquirieron la empresa de José Valim, el creador de Elixir
    Aun así, sigue pareciendo una empresa que usa principalmente Clojure

    • Nubank adquirió en 2020 Cognitect, la consultora detrás de Clojure, y también adquirió Platformatec, que era la empleadora de José Valim
      Esta última fue para obtener la experiencia de Platformatec en gestión de proyectos (https://building.nubank.com.br/tech-perspectives-behind-nuba...), y hasta donde sé no hay código Elixir corriendo en Nubank
      En el “otro lado” de los pipelines ETL hay Python, pero en las áreas de cara al usuario, hasta donde sé, el backend es Clojure y las apps de Android e iOS son TypeScript
    • A menudo me cruzo con usuarios de Clojure cuyos nombres parecen del mundo sinoparlante
      Me pregunto si Clojure en China también es una tendencia significativa