Learn these three tools — map, filter, and reduce– and you’ll be well on your way to developing a functional mindset.
Video Courses
Screencasts, Whiteboards, and Slides produced to help you learn
Advanced Property-Based Testing with test.check
Property-Based Testing is a powerful way to test your software. This course starts where the Intermediate course left off. In this course, we learn the most powerful applications of Property-Based Testing, including parallel and distributed systems, searching for known bugs, and testing web frontends.
Answers to Questions
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.
Beginning Property-Based Testing with test.check
Property-Based Testing is a powerful way to test your software. In this course, we learn how to use test.check, the Clojure Property-Based Testing library, to automatically generate tests.
Beginning with Clojure Macros
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.
Building Re-frame Components
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.
Written Guides
Pragmatic and in-depth guides to a topic.
10 Programming projects to boost your resume
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 ways to tweak your resume
5 functional programming ways to impress a hiring manager with your resume.
Are there enough functional programming jobs?
Is functional programming a fad? We cut through the buzz cycle and answer the question once and for all.
Clojure Concurrency Tutorial
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 Data Structures Tutorial
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.
Clojure Jobs Resources
A big list of sites with Clojure job listings. If you’re looking for a job in Clojure, these are the best places to look. Includes many remote jobs.
Mini Guides
Small, precise guides to a particular feature.
4 Things Java Programmers Can Learn from Clojure without learning Clojure
I was trained in Java at University. The OOP matrix was firmly implanted in my thinking. I wanted to share some things that I have learned from Clojure that were certainly possible in Java but never became fundamental to my programming practice. Clojure certainly has learned a lot from Java. It might be cool if […]
5 Differences between clojure.spec and Schema
Schema and clojure.spec aim to solve similar problems. There are significant differences, though, that might not be obvious at first.
5 features of Clojure let
Clojure let is used to define new variables in a local scope. This article describes a few things you probably know about let, and a few you don’t.
All about clojure.set
clojure.set is part of the standard library that comes with Clojure. It has functions for doing set operations and relational algebra.
Atom code explanation
I go over a real-world example of how atoms and immutable values allow you to compose constructs in ways that are easy to reason about and less prone to error.
Can building ClojureScript assets be integrated into my build process?
ClojureScript’s official build process is a simple shell command. There is also integration into Leiningen and Boot.
Technical Articles
3 Things Java Programmers Can Steal from Clojure
Many of the cool parts of Clojure are written in Java. That means you can access those parts from any Java code. Just include the Clojure JAR, import the classes, and you’ve got better tools.
4 Features Javascript can steal from Clojure(Script)
ClojureScript adds a lot of value on top of the Javascript platform. But some of that value can be had directly in Javascript without using a new language.
6 things Reacters do that Re-framers avoid
Down on React? You should check it out from the ClojureScript perspective.
A reduce Example Explained
A deep-dive into a single reduce example shows how much can happen in a short bit of code.
Are there any DOM manipulation libraries in ClojureScript?
ClojureScript has some nice DOM manipulation options, including jQuery and more idiomatic libraries.
Clojure is a better Java than Java
How is it possible that Clojure is better than Java at its own game? Hear me out, then decide for yourself.
Learning Paths
Curated selections of courses on a specific topic
Beginner Programmer Learning Path
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. […]
Functional Programming Learning Path
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.
Object-Oriented Programmer Learning Path
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. […]
The Everything Learning Path
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 Programming Learning Path
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 […]
Video Lessons
Parts of courses on specific topics
A day at the bakery
Now that we have an efficient way of fetching ingredients, let’s handle the orders for the day.
A deeper explanation of with-open
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?
A Game of JSON
This lesson teaches how to read in JSON and explore data. This lesson includes a video screencast. The screencast is 25 minutes long.
A map of the Repl-Driven Development territory
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.
A tour of the built-in generators
test.check comes with many built-in generators that we can use to create properties and build new generators from. We take a tour of the generators provided so we have a feeling of what’s available.
Access patterns
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?
Download Resources
PDFs, code, and other downloads to help you learn
clj-refactor Reference Sheet
These four reference sheets will be handy for you when you’re learning clj-refactor, the plugin for CIDER.
Clojure core.async Reference Sheet
Overwhelmed by the number of functions in Clojure core.async? This reference sheet shows you just the essentials in an easy-to-follow format.
Clojure Macro Patterns Reference
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.
Clojure Macro Sigils Reference
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!
Clojure Macroexpand Reference
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 […]
Clojure.test Cheatsheet
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.
Speaker Interviews
Adam Warski Lambda Days 2017 Interview
We interviewed Adam Warski about his upcoming Lambda Days 2017 talk.
Alex Mann Clojure/conj 2016 Speaker Interview
We interviewed Alex Mann about his upcoming Clojure/conj 2016 talk about machine learning in Clojure applied to the English language.
Alex Miller EuroClojure 2017 Interview
We Interviewed Alex Miller about his upcoming Euro Clojure talk called Dependency Heaven.
Alexey Aristov EuroClojure 2017 Interview
We Interviewed Alexey Aristov about his upcoming EuroClojure 2017 talk called otplike – Erlang/OTP processes and behaviours for Clojure.
Ali Shoker Curry On 2017 Interview
We Interviewed Ali Shoker about his upcoming Curry On 2017 talk about There are no BFT Fans Anymore.
Allen Rohner Clojure/conj 2016 Speaker Interview
We interviewed Allen Rohner about his upcoming Clojure/conj 2016 talk about Spectrum, a static typing library for Clojure.
Newsletter Issues
PurelyFunctional.tv Newsletter 410: don’t encode your policy
Issue 410 – January 11, 2021 · Archives · Subscribe Design Tip 💡 don’t encode your policy After I published the timeless in an unstable domain, generous reader Tim Cross shared his experience with me. I’ll quote him (with permission): One of the first ‘rules’ I learned and often one of the first things I […]
PurelyFunctional.tv Newsletter 409: the 3-stakeholders model
Issue 409 – January 04, 2021 · Archives · Subscribe Design Tip 💡 the 3-stakeholders model Last week, we talked about a model of the three stakeholders of programming. They were: Users Programmers Computers I thought I’d use it as the focus for a discussion about systematic model-building. I like to build models. That’s one […]
PurelyFunctional.tv Newsletter 408: 3 stakeholders of programming
Issue 408 – December 28, 2020 · Archives · Subscribe Design Tip 💡 3 stakeholders of programming Last time I was on the defn podcast, Vijay mentioned the 3 tribes of programming. In the article, the author specifies three archetypes of programmer: Poet mathematician Hacker Maker Vijay noted that I was self-identifying as the “poet […]
PurelyFunctional.tv Newsletter 407: two layers of design
Issue 407 – December 14, 2020 · Archives · Subscribe Clojure Tip 💡 two layers of design In John Ousterhout’s A Philosophy of Software Design (see review below), the author suggests that the Java InputStream API is poorly designed. In order to read from a file, the standard, recommended way to do it is to […]
PurelyFunctional.tv Newsletter 406: design, false nominalization?
Issue 406 – December 08, 2020 · Archives · Subscribe Clojure Tip 💡 design, false nominalization? Most verbs have a noun form. For instance, you can take the verb to read and get a reading. Or you can take the verb to submit and get a submission. Linguists call this phenomenon nominalization. You nominalize a […]
PurelyFunctional.tv Newsletter 405: giving thanks
Issue 405 – November 30, 2020 · Archives · Subscribe Clojure Tip 💡 giving thanks The US Thanksgiving holiday was last week. It’s traditional to share things you are thankful for with people you care about. I thought it would be good to share things related to Clojure I am grateful for with you. For […]
Programmers
Alan Kay
Alan Kay invented Smalltalk and Object-Oriented Programming. He reads more than a book per day. He has worked at Xerox PARC, Atari, and Apple. He’s currently the president of the Viewpoints Research Institute.