spec

Another week spent mostly on spec. In particular, Rich and I had a long talk about the different spec representations and what different parts of the spec API will accept. I updated the differences page reflecting the current intention (spec-alpha2 code is now in sync with that as well).

The key is really that we are much more explicitly separating “symbolic specs” (spec forms, symbols, keywords, and sets) from spec objects (which implement the Spec protocol). spec 1 had support in the spec macros and spec API also for other things like function objects, and that is no longer supported. s/spec was re-added as a convenience spec form that takes symbols, sets, or anonymous functions and evaluates to a spec object as these are no longer directly accepted in spec API functions.

We’re continuing to validate all these assumptions, and in particular I’m looking at a variety of options for creating custom specs or adding custom generators to specs. I’m very appreciative of the effort Sean Corfield and Michiel Borkent have provided in vetting their own spec libs against spec-alpha2 and reporting issues. I haven’t provided much guidance back to them (yet), but we are using those examples / info in particular as we evaluate the options for custom specs and s/with-gen.

Surveys

Many thanks for all the responses for the State of Clojure survey! We had 2461 responses, which was definitely more than last year, and possibly the most ever (I haven’t gone back to check yet). I’ve done a first pass comparison analysis and we will be working on a longer, more polished write-up to publish as soon as it’s done.

Please also make your voices heard in some other developer surveys going on now:

It’s important that Clojure “shows up” in these surveys, so please be visible!

clj on Windows

Several people have offered to help with getting clj on Windows over the line and I created a room on the Clojurians Slack at #clj-on-windows. If you want to help, stop on by there.

Other stuff I enjoyed this week…

Rather than music this week, I want to highlight Stuart Halloway’s talk that came out this week and a few related talks:

These talks highlight challenges that many open source projects are grappling with today. Building software in closed teams with shared context is something our industry has done for many decades. Building software in open teams or in semi-closed teams with open visibility, is another thing entirely. These kinds of projects have many more lines of communication (one of the hardest parts of working in any team), and more communication between people without shared context. I recommend all of these talks as smart people thinking hard and intentionally about how to do so, and I think they are all worthy of your attention.

This weekly journal is part of my own small effort in finding a way to make a communication path from the “full time” dev team for Clojure (or at least, me) back to Clojure users to make visible what we’re doing. This is an obligation (in Stu’s words) that I’ve chosen to make, and one that I think is sustainable. Many people have given me positive feedback about it, and I appreciate that, so thanks. We have also spent a little time talking about ways Clojure users can give feedback (and help) to the core team in ways that are both mutually useful and sustainable. I expect to circle back on that in a better way at some later point in 2019.

I also want to take this opportunity to say that I am incredibly fortunate to work in not one but two professional teams of people that care about and mutually support each other to build something for others. For Clojure, I have worked on a daily basis with Rich Hickey and Stuart Halloway (and occasionally others) for almost 6 years now, and being part of that has been great (and I feel like we are working better together now than ever). I also have been working for even longer than that with the team at Strange Loop. We took some time recently to sit down and brainstorm about 2019 and it was fantastic to have (almost) everyone in the same room coming up with ideas - many thanks to Bridget Hillyer, Mario Aquino, Ryan Senior, Crystal Martin, and Nick Cowan.