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.
You want to learn Clojure but it seems so daunting. Who has the time to read and read and then start yet another half-finished project? Clojure in One Hour is a series of short projects that you can do in one hour. No theory, just hands-on projects to get something done.
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.
Reagent is a ClojureScript wrapper around React. It makes it easy to create React components using functions and hiccup, and state managed in Atoms.
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.
Learn the 4 React Lifecycle Methods you’ll need to know for Reagent/Re-frame and why the other 6 are not needed.
Is functional programming a fad? We cut through the buzz cycle and answer the question once and for all.
Small, precise guides to a particular feature.
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.
Unit testing in Clojure is straightforward. Here are a few testing ideas as they apply to Clojure.
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.
Now that we can bake recipes, let’s add the other recipes, cookies and brownies.
Let’s add an action for adding ingredients.
We modify the compiler to add static scope information. Even though we don’t know the value of variables until runtime, we do know the names of the variables at compile time. We can use that to make missing variables a compiler error.
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 355 – December 09, 2019 · Archives · Subscribe Clojure Tip 💡 memoize to trade space for speed In the last issue, part of the bonus of the challenge was to use memoization to speed up the straightforward recursive solution. This is a common use case for memoization. Take, for example, an implementation of […]
Issue 354 – December 02, 2019 · Archives · Subscribe Property-Based Testing Course Launch 🚀 Folks, if you are reading this, there might just be time to get 50% off of the three Property-Based Testing courses before the price goes up forever. I was planning to end the course today, but I didn’t have great […]
Issue 353 – November 25, 2019 · Archives · Subscribe First Annual PurelyFunctional.tv Survey! 📋 The first annual PurelyFunctional.tv Survey is still open. Your answer to this quick survey will help me understand how to improve my videos and help you master Clojure faster and more deeply. There are only four questions. If you’ve watched […]
Issue 352 – November 18, 2019 · Archives · Subscribe First Annual PurelyFunctional.tv Survey! 📋 I’m happy to announce the first annual PurelyFunctional.tv Survey. Your answer to this quick survey will help me understand how to improve my videos and help you master Clojure faster and more deeply. There are only four questions. If you’ve […]
Issue 351 – November 11, 2019 · Archives · Subscribe Clojure Tool 🔨 babashka It’s Clojure for your Bash scripts. It uses Graal to compile Clojure to native, so it starts up fast. It can run Clojure commands over lines of input, so it works with the Unix philosophy. You should know that I’m just […]
Issue 350 – October 28, 2019 · Archives · Subscribe On Vacation 🏕 Hello! This is going to be a light issue this week. I’m on vacation at the moment. I’ll miss next week’s too! Conference alert 🚨 I booked my tickets to the 2019 Clojure/conj in Durham, North Carolina this week. If you’re going, […]
Christopher Strachey was one of the founders of denotational semantics and a pioneer in programming language design.