Clojure/conj 2024
After last year's regular posts about my Clojurists Together-funded work on clojure-doc.org and other projects, and the end of my monorepo/polylith series, I've mostly taken a break from blogging -- and from my open source work, to be honest. I've been focusing on my day job and on some personal stuff.
I attended Clojure/conj 2024 last month and wanted to write about the event and the talks I attended. It's been eleven years since Conj was last at the George Washington Masonic Memorial in Alexandria, and I'd forgotten what a climb it is, up that hill! My watch says I got over 9,000 steps each day going back and forth from the hotel to the venue.
I took the red eye from San Francisco and the Metro from Dulles to near the hotel, so I was pretty tired by the time I got there, Wednesday morning. The sun didn't even come up until the train was nearly into Reagan National Airport, so it wasn't even a scenic journey (I used to be good at timezones and handling jetlag but I'm getting old!).
I bumped into friends old and new at the hotel, including Peter "pez" Stromberg and Paula Gearon, and managed to get into my room early to nap for a while and freshen up before the start of the Unsessions.
I caught the end of "Taking Notes with Logseq" which felt a bit like a product pitch, but it has evolved quite a bit since I last used it: I switched to Obsidian but maybe I'll give Logseq another look.
Then it was the core Clojure team's "Clojure 1.12 Q&A" session which was fascinating. Because I'd adopted each alpha release as it came out, I didn't really have a sense of just how many new features were in 1.12 as a whole -- it is a huge release! It was great to hear from Alex, Fogus, and Jarrod about some of the behind-the-scenes stuff, and to hear the reaction from a room full of Clojurians for whom much of this was all new. I got the opportunity to ask the whole room who was using virtual threads in production: just one hand went up -- and they said they'd had plenty of issues with them. This made me feel better about our mostly failed attempts to use virtual threads at work -- it's not just us!
I got caught up in hallway conversations and missed the next slot, but made sure I sat in on Wesley Matson's "AI coding tools" unsession. I've been using GitHub Copilot in VS Code more and more, as well as Windows Copilot, but I wanted to hear more about how other folks were using AI in their development workflows. It was great to hear some comparisons of the different models and the breadth of ways folks were leveraging these models. Probably the most useful tip was that I can accept a Copilot suggestion "word by word" instead of it being all or nothing -- that's going to save me a lot of time! -- but it also inspired me to start relying more on using AI as a "pair programmer" and learn how and when it can really add value. [VS Code got an update since Conj that enables a code review mode, which I'm finding very helpful, as it suggests improvements in naming and docstrings!]
I had planned to attend the refactoring unsession but lack of sleep was catching up with me so I went back to the hotel for a nap before heading out to Sweet Fire Donna's for dinner with Mike Miller. Good ol' BBQ and fabulous cornbread. Then to the bar to hang out and chat with folks until it closed at 10 pm.
Generally, none of the unsessions are recorded so it's worth trying to attend these in person -- they usually have some real gems in them, so it was good to see them return this year.
Two of the unsessions were recorded and have been posted to YouTube: "Clojure 1.12 Q&A" and "AI coding tools". These were done as part of the setup and test of the A/V equipment so they're a bit rough.
Thursday started the conference proper and the first three talks I attended were all testing related, with an emphasis on data-first: "Tools that Enable Data-Driven and Containerized Testing of Multi-Service Networked Systems" by Joel Martin, "Introducing a lightweight, data-first Clojure interpreter for tracing code" by Steven Lombardi, and "Breaking the bank with test.contract" by Allen Rohner. All three talks were very thought-provoking and showcased how Clojure's mindset can be applied in unusual ways to address complex problems in testing.
I skipped the lightning talks to do some work back at the hotel and then tried to avoid the lunchtime rush by going to Pasara Thai, right by the hotel, late enough that I thought most conference folks would have eaten already. I was wrong -- the restaurant didn't know what had hit them and was packed!
I've since watched three of those lightning talks on YouTube and they were all great: "ClojureScript Has It All! (Except Maybe for Types)" by Kamil Waheed, "When Your Disney Playlist Saves Your Tech Career" by Wendy Rudolph, and "Developers aren't paid to code" by Wesley Matson.
Back at the Masonic Memorial, I really enjoyed "Portal - Exploring new Workflows with Visual Tools" by Chris Badahdah. I've been using Portal for a while and rely on it heavily, so it was great to see how Chris and others are using it in their workflows, and to really see some of the things it is capable of.
Next was "Transducing Healthcare: Clojure Transducers as Clinical Features" by Derek Schatzlein and Jack Mocherman. It was a really interesting talk about how they use Clojure (and Datomic) to handle huge amounts of complex and irregular data in the healthcare industry, and support a variety of near real-time clinical services (but it seemed a bit light on the "transducers" part of the title!).
The first day closed out with "From JVM to JS: Implementing Math Functions in
ClojureScript" by Paula Gearon, showing how she ported the Clojure 1.11
clojure.math
namespace to ClojureScript, how she navigated the contribution
process (so many people, so much time), and some of the real nitty-gritty
details of implementing IEEE floating point math in ClojureScript. As a
former mathematician (can you really be a "former" mathematician?), I found
this talk absolutely fascinating! The experience report of dealing with the
open source processes was also very engaging (and hopefully sets people's
expectations in a way that will encourage more folks to contribute to Clojure
and ClojureScript).
I went to IndoChen for dinner with a number of the Clojure Camp folks. It was really good to meet them face-to-face, instead of just on Discord and Zoom, and to learn more about them and their experiences beyond just the tech stuff. And then, of course, back to the hotel bar to hang out and chat with folks until it closed at 10 pm!
Friday started with a short "Welcome" from Rich Hickey that emphasized the fun aspects of Clojure and its community, as well as how the conference showcases the ideas of Clojure, not just the code. He encouraged everyone to get out there and talk about Clojure to non-Clojure folks, to share our enthusiasm and our ideas, and to help grow the community.
"Immutable Values in the Big Wide World" by Tim Ewald and Paul deGrandis took us on a journey through distributed systems, and showed how Clojure's mindset can be applied to improve performance and scalability, in our new world of near-infinite cheap storage and massive compute nodes, unlike the systems of old that used to constrain our systems thinking.
"Real-World AI Integration: An Experience Report on Enhancing Engineering Workflows" by Carin Meier and Marlon Silva talked about how Nubank is using AI tooling to improve their engineering processes. As with Wesley's unsession, this focused more on AI as a "pair programmer" helping with design rather than just generating code.
I skipped the SciClojure talk to head out to the Ethiopian restaurant, Hawwi, which I really wanted to try without the rush of the lunchtime crowd. The food was great and as I was nearly done eating, over a dozen Clojurians appeared so I sat with them and chatted for a while before we all headed back for the final afternoon of talks.
As I had expected, we got back too late for the last lightning talk and Cam Saul's experience report about Metabase (so I must watch that on YouTube!), and also missed the beginning of "Teaching Clojure Together", which was an inspiring talk by Jordan Miller and Rafal Dittwald about the evolution of Clojure Camp which provides a community space for learning Clojure as a group and also offers one-to-one mentoring. I was involved for a while and it is a great initiative that I hope I'll find time to return to in the coming months. If you're new to Clojure and want a fun, friendly group environment to grow your skills, I highly recommend it!
Colin Fleming's "Enhancing LLM-Powered Development with Clojure's REPL" looked at an interactive way to work with AI as a development tool, and he talked about using LLMs to perform code translation from one programming language to another, which he has needed for his work on Cursive.
Alex Miller closed out the conference with "Design in Practice in Practice", pulling back the curtain on the design process for parts of Clojure 1.12 and how they evaluated the trade-offs involved, and also handled the rework after early feedback from the alpha releases. The talk built on Rich's "Design in Practice" talk from the previous Conj and was a great way to close out this year's event.
I crept off on my own for dinner at Galae Thai, west of the hotel, and would highly recommend it if you're in the area. Then it was back to the hotel bar until closing time, this time hanging out with Rich, and Stu, and Alex, and several other "old timers" from the Clojure community.
Attending Conj was about $2,000 for me, and it was definitely worthwhile, even tho' all the talks are recorded and appear on YouTube pretty quickly. The Unsessions, the hallway conversations, and the discussions over food and drinks, are what make the event special. I'm already looking forward to next year's Conj!
ClojureTV has (almost) all the conference talks available already: Clojure/conj 2024 playlist.
I just watched "Getting 50,000 Companies on Board with Clojure" by Cam Saul: it's a masterpiece! You've gotta watch it!