What are product and sum types?

Product and sum types are collectively known as ‘algebraic data types’. These are two ways of putting types together to make bigger types. Product types multiply their states, while sum types add them. With these two ‘operations’, we can precisely target a desired number of states. In this episode, ...

Escape Hatches: Principles vs. Guarantees

Often, as well-meaning programming language enthusiasts, we might find ourselves encouraging newcomers with simplified descriptions of language features. There’s sometimes a tricky balance between explaining things in an approachable way and explaining them correctly and precisely. Let me give some ...

Why do I prefer Clojure to Haskell?

I prefer Clojure to Haskell. It’s probably mostly due to accidents of history: getting in Lisp at an earlier age, spending more time with Lisp, and only having one Haskell job. But I do have some philosophical differences with the Haskell philosophy as it relates to Haskell as an engineering tool. I...

ClojureScript Macros

ClojureScript Macros are a hurdle for most CLJS beginners and wrapping your head around how they work can be quite confusing. I’ll try to cover the basics you need to know to start writing your own macros.First of all - ClojureScript macros are written in Clojure and run during the ClojureScript com...

Love Letter To Clojure (Part 1)

In this blog post, I will explain how learning the Clojure programming language three years ago changed my life. It led to a series of revelations about all the invisible structures that are required to enable developers to be productive. These concepts show up all over The Unicorn Project, but most...

Why do I like Denotational Design?

Denotational Design is a abstraction design process created by Conal Elliott. I like it because it really asks you to step back and design the meaning of the abstractions before you implement them. In this episode, I talk about why I like it, what it is (step-by-step), and why it’s not about static ...

CIDER 0.23 (“Lima”)

CIDER 0.22 was released just a month ago, but now I’m happy to announce the release of CIDER 0.23 (“Lima”). Unlike CIDER 0.22, Lima is a pretty small release. I was under a lot of pressure to ship 0.22 in time for Clojure/south and I didn’t have time to complete a few small tickets that I had origin...

Book Squire Is Ten Years Old

While releasing a new version of Book Squire the other day I realized that Book Squire is ten years old. What first started as a quickly developed application to solve a personal need has grown into one of my longest running applications.Back in 2009 I was frustrated with the online access to our Li...

Using Slack as Log Appender

The back-office team of our client has an active slack based workflow for most of their systems. As this middleware is going to be another system that they need to keep track of, they asked us to send messages on Slack if the middleware encounters an error during its operation. In this blog post, I ...

Journal 2019.23 - 1.11, spec

Clojure 1.11 planningLately we’ve been starting to work on planning for Clojure 1.11. I’ve collected a list of possible features and problem areas and we’re starting to flesh those out a bit more and prioritize which things we’ll take on for 1.11. How does that list get made? It really pulls from a ...