Ever been completely baffled by Wikipedia articles on Monads and Functors? Are you curious about what everybody is raving about, but can’t find any good ways to learn it? It turns out that many of the ideas of category theory come almost directly from the real world. Wouldn’t you like to understand how those concepts relate to the real world?
Screencasts, Whiteboards, and Slides produced to help you learn
Clojure is based on collections, but how are they used? What are some patterns for making the most of them? This course introduces you to the workhorses of the Clojure programming language, the immutable collections.
Combinators are an important part of functional programming. They are functions — usually small — that combine their arguments into new functions. They’re great fun and have a lot to teach about functional programming and the lambda calculus. They are an important part of any Clojure programmer’s toolkit.
Learn the fundamentals of core.async, a concurrency library for Clojure and ClojureScript that gives you tremendous power.
Protocols are a very cool and very important feature in Clojure. They are a great way to build polymorphism into your software, including extending existing Java classes without modifying them.
Pragmatic and in-depth guides to a topic.
Build a Clojure web application as you learn HTTP.
Reagent is a ClojureScript wrapper around React. It makes it easy to create React components using functions and hiccup, and state managed in Atoms.
Learn about ClojureScript and how to set up a project using shadow-cljs.
So you want to know who’s using Haskell and where to find jobs? You’ve come to the right place.
Easy to follow installation guides for the three main platforms: macOS, Linux, and Windows. This guide shows you how to install everything you need: Java, Leiningen, and the Clojure CLI tool.
Josh Doody (Salary Negotiator) and Eric Normand critique a functional programming résumé and give advice for making it better. They also talk about preparing for the interview and the salary talk.
Small, precise guides to a particular feature.
In this guide, I describe the available HTML templating options for Clojure and give my recommendations. Recommendation summary Choose Hiccup if you would like to embed HTML in your code. Hiccup uses an easy-to-write, literal data format to represent HTML. Choose Selmer if you would like to embed code in your HTML. Selmer embeds code-like directives […]
How do you choose which Clojure routing library to use in your web app? I share my recommendations and how to decide based on your needs.
How do you choose which web server to use for a Clojure web application? I share my recommendations. There are two excellent choices—both fast and reliable.
Clojure has been successfully adopted by many companies. There are many resources available by people who did the hard work of introducing Clojure to their team.
If your functions return `core.async` channels instead of taking callbacks, you encourage them to be used within `go` blocks. Unchecked, this encouragement could proliferate your use of `go` blocks unnecessarily. There are some coding conventions that can minimize this problem.
There are two commonly used ways to create new data types in Clojure, deftype and defrecord. They are similar but are intended to be used in two distinct use cases. deftype is for programming constructs and defrecord is for domain constructs.
Use the OWASP Top Ten Project to minimize security vulnerabilities in your Clojure web application.
Clojure was designed as a hosted language. So what is Clojure, the language, if it relies on the features of a host? And what are the disadvantages of choosing the JVM as a host?
People know about the immutable data structures and the STM. But there’s something going on at a much deeper level that is really hard to get right in Java. It has to do with the optimizations the JIT will run on your code.
Conveyor belts are strikingly similar to Clojure core.async channels. While it could be a coincidence, there is speculation that conveyor belts were influenced by a deep understanding of core.async.
It’s common that adding more layers of abstraction or indirection will make things slower. However, React and ClojureScript make web pages faster than doing it by hand — essentially programming the bare web. The lesson is that if you choose your layers well, they can actually make your system faster.
Parts of courses on specific topics
Sometimes we need to get a reference to the real DOM node that React normally manages for us. For instance, when we need to play an embedded video, the API requires access to the DOM node of the video element. React gives us a feature called Refs that let us get access to any DOM node it creates.
You know those HTML components that show you some headers and let you expand the content underneath? Yeah! Let’s build one!
Let’s add a new ingredient, namely cocoa.
We need to give feedback to the user when the user clicks a button. We add a message box that disappears after a time.
Now that we can bake recipes, let’s add the other recipes, cookies and brownies.
PDFs, code, and other downloads to help you learn
Guide to baking for the intrepid robot
How to install: Download the CSV file (click the thumbnail below). Install Anki. Run Anki. Click Import at the bottom of the window. Import the CSV file. Adjust the options like you see them below.
A printable PDF (double-sided) with the 100 most common Clojure expressions. One side has the function/macro, the other a quick explanation. This is for printing on Avery 5371 paper.
A printable PDF (double-sided) with the 100 most common Clojure expressions. One side has the function/macro, the other a quick explanation. This one has a grid for cutting by hand.
Events, Effects, Co-effects, and Subscriptions! This reference sheet shows you the most common forms of all of these so you can get started with Re-frame right away.
Learn the four important React Lifecycle methods you’ll need when using Re-frame, when to use them, and how. Get started with Re-frame right away.
We Interviewed Allison McMillan about her upcoming Curry On 2017 talk called Angelina Ballerina Learns About Memory Allocation.
We interviewed Alvaro Videla about his upcoming clojuTRE 2017 talk called Metaphors We Compute By.
We interviewed Anatoly Polinsky about his upcoming Clojure Remote 2017 talk about configuration.
We interviewed Andrew Mcveigh about his upcoming :clojureD 2017 talk.
We interviewed Annette Bieniusa about her upcoming Lambda Days 2017 talk.
We interviewed António Monteiro about his upcoming ClojuTRE 2017 talk called Lumo: Bootstrapping a Standalone ClojureScript Environment.
Issue 453 – December 06, 2021 · Archives · Subscribe Design Idea 💡 Model as Toy This essay continues the series about Domain Modeling. I watched an interview between Neil Stephenson and Freeman Dyson. Freeman Dyson explains that models can be used independently of how well they fit the world. As he puts it, they […]
Issue 452 – November 29, 2021 · Archives · Subscribe Design Idea 💡 Domain Invariants This essay continues the series about Domain Modeling. A domain model has three pieces: Information Operations Invariants Today, I’d like to talk about invariants and how we can encode them in a programming language. Invariants are things that always hold […]
Issue 451 – November 15, 2021 · Archives · Subscribe Design Idea 💡 Signature-Driven Development This essay continues the series about Domain Modeling. My friend Bert coined the term Signature-Driven Development while I explained my ideas about FP and modeling. He said that given the signature, writing the body of the function was often straightforward. […]
Issue 450 – November 10, 2021 · Archives · Subscribe Design Idea 💡 Runnable specifications This essay continues the series about Domain Modeling. In the last issue, I talked about seeking precision and simplicity in our models. Precision means it describes the model we want. And simplicity means it finds a general and minimally sufficient […]
Issue 449 – November 01, 2021 · Archives · Subscribe Design Idea 💡 Domain model correctness and simplicity This essay continues the series about Domain Modeling. In the last issue, I talked about convenience. It is essential but should not be the primary objective. Convenience is a lagging indicator of model quality. Instead, we should […]
Issue 448 – October 27, 2021 · Archives · Subscribe Design Idea 💡 Domain model convenience This essay continues the series about Domain Modeling. Convenience is one of those topics I’m still deciding where to place into the theory. From one perspective, part of the purpose of domain modeling is to make code easier to […]
Christopher Strachey was one of the founders of denotational semantics and a pioneer in programming language design.