Learn these three tools — map, filter, and reduce– and you’ll be well on your way to developing a functional mindset.
Screencasts, Whiteboards, and Slides produced to help you learn
I get a lot of questions from people trying to learn Clojure. Sometimes, the best way to answer them is with a video. This course is for all of those questions that don’t really fit anywhere else.
What mysteries do Clojure macros hold? This course jumps right into macros with gusto. It starts with the key to understanding macros, takes you through the implementation of 6 progressively more complex macros, and finishes with the three reasons you *need* macros.
Sometimes we want to see how individual components are built. We want to know how to reproduce common components easily using Re-frame. In this course, we take that approach. We build individual, interactive components, going through the design decisions we have to make.
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?
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.
Pragmatic and in-depth guides to a topic.
When NOT to put personal projects in your resume; tips for choosing programming projects; and how to present your projects to maximize your chances.
5 functional programming ways to impress a hiring manager with your resume.
Is functional programming a fad? We cut through the buzz cycle and answer the question once and for all.
From Agents to Executors, this guide covers all of the important concepts for concurrent programming in Clojure. It includes a comprehensive catalog of concurrency primitives.
Clojure’s collections are central to Clojure programming. While in most languages, you might find collections somewhere in the standard library, in Clojure, they are front and center.
So you want to know who’s using Clojure and where to find jobs? You’ve come to the right place.
Down on React? You should check it out from the ClojureScript perspective.
How is it possible that Clojure is better than Java at its own game? Hear me out, then decide for yourself.
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.
Clojure startup times suck. Let’s just be honest. How do Clojure programmers live with that? Maybe that’s the wrong way to think about it.
Curated selections of courses on a specific topic
Clojure can be an excellent language to learn programming. The following courses should set you on a good path for getting up to speed in Clojure. Be sure to click those checkmarks to track your progress. Start with the best introduction to Clojure out there. It gently guides you through the language with fun exercises. […]
The following sequence of courses should build up your functional programming toolkit. These will help you eliminate duplication in your code and find better abstractions.
If you’re coming to Clojure from an Object-Oriented Programming background, this page is for you. Be sure to click those checkmarks to track your progress. Start with the best introduction to Clojure out there. It gently guides you through the language with fun exercises. You’ll learn the syntax and the thought processes behind Clojure programming. […]
If you’re looking to watch absolutely all of the courses on this site, I’ve put together a suggested order. Start at the beginning and just watch everything straight through. Be sure to click those checkmarks to track your progress.
Web development is an extremely popular use for Clojure. If you want to learn web programming, here are the courses I recommend you watch. I am assuming you already are familiar with Clojure. Be sure to click those checkmarks to track your progress. Backend You’ll want to learn Ring. It is a unifying set of […]
Parts of courses on specific topics
Now that we have an efficient way of fetching ingredients, let’s handle the orders for the day.
Do you understand the pattern of using helper functions within a macro and how it can make your macro more useful and easier to understand?
This lesson teaches how to read in JSON and explore data. This lesson includes a video screencast. The screencast is 25 minutes long.
We take a look at an idealized model of the development process so that we can understand all of the places where we can make tools and practices to improve our development workflow.
What do I mean by access patterns? It’s the underlying commonality between the collections. It answers the question: How will we access our information?
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.
PDFs, code, and other downloads to help you learn
These four reference sheets will be handy for you when you’re learning clj-refactor, the plugin for CIDER.
Overwhelmed by the number of functions in Clojure core.async? This reference sheet shows you just the essentials in an easy-to-follow format.
We tend to code using patterns that we repeat a lot. Learning these patterns can help you level up your macro skills very quickly. This reference sheet contains six annotated patterns that Clojure programmers use all the time.
Have you ever wondered what the symbols in Clojure macros do? I’m talking about `, ~, ~@, etc. This handy reference sheet tells you what they all do, when to use it, and shows examples. Never get lost in a macro again!
When we’re developing macros, it really helps to be able to see what code it will output. Fortunately, Clojure comes with three built-in functions for doing just that. They are so useful for debugging. This reference sheet shows what each one does. It also includes how to access macroexpansion in the three most popular Clojure […]
Want a handy reference for writing your tests? This cheatsheet contains everything you need to write tests, make assertions, and set up fixtures. It even shows the commands for runnings tests at the REPL.
We interviewed Adam Warski about his upcoming Lambda Days 2017 talk.
We interviewed Alex Mann about his upcoming Clojure/conj 2016 talk about machine learning in Clojure applied to the English language.
We Interviewed Alex Miller about his upcoming Euro Clojure talk called Dependency Heaven.
We Interviewed Alexey Aristov about his upcoming EuroClojure 2017 talk called otplike – Erlang/OTP processes and behaviours for Clojure.
We Interviewed Ali Shoker about his upcoming Curry On 2017 talk about There are no BFT Fans Anymore.
We interviewed Allen Rohner about his upcoming Clojure/conj 2016 talk about Spectrum, a static typing library for Clojure.
Issue 323 – April 22, 2019 · Archives · Subscribe Clojure Tip 💡 keep your workflow simple In my Repl-Driven Development in Clojure course, I recommend learning three commands for executing code: one to evaluate the whole file, one for a top-level form, and one for a single expression. With those three, you’ve got all […]
Issue 322 – April 15, 2019 · Archives · Subscribe Clojure Tip 💡 avoid flatten when possible I see a lot of people using flatten, but I wonder if they know that it’s kind of dangerous. It’s dangerous because it indiscriminately flattens all nested sequences. People usually call it just to flatten one level. Here’s […]
Issue 321 – April 8, 2019 · Archives · Subscribe Clojure Tip 💡 do not count sequences from strangers If you are writing a function that operates on sequences, be really careful what you do with it. Clojure’s sequences are lazy, and that can be really powerful. So powerful, in fact, that the sequence could […]
Issue 320 – April 1, 2019 · Archives · Subscribe Clojure Tip 💡 Know Clojure’s execution semantics for better Repl-Driven Development (RDD) I’ve been working on the Repl-Driven Development in Clojure course on PurelyFunctional.tv. When doing my research, it struck me that most explanations of RDD fail to explain how Clojure actually executes code. They […]
Issue 319 – March 25, 2019 · Archives · Subscribe Clojure Tip 💡 You can do shebang scripting with the Clojure CLI Well, it’s not exactly speedy, but it is practical. I have some longish running programs that I run occasionally. They are written in Clojure. I could make a -main function and generate an […]
Issue 318 – March 18, 2019 · Archives · Subscribe Clojure Tip 💡 Beware the order of keys in hashmaps You cannot rely on key-value pairs in hashmaps coming out in the same order as they went in. The trouble is, when you test, it might appear that you can. It won’t be until later, […]