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
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 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.
Category Theory from the Universe Up
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 Collections
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.
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 Jobs Resources
So you want to know who’s using Clojure and where to find jobs? You’ve come to the right place.
Database Structure in Re-frame
Your Database is going to contain a lot of important information. When you’re first starting out your app, you don’t know exactly what you’re going to store in there. In addition, you don’t know how you’re going to want to access it. Both of these will evolve over time as you understand more of the domain and you uncover the complexities of your UI. We want some help from the framework (Re-frame) to help us deal with this evolution.
Guide to Reagent
Reagent is a ClojureScript wrapper around React. It makes it easy to create React components using functions and hiccup, and state managed in Atoms.
Technical Articles
6 things Reacters do that Re-framers avoid
Down on React? You should check it out from the ClojureScript perspective.
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.
Clojure’s Hosted Legacy
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?
Clojure’s unsung heroics with concurrency
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.
Functional JavaScript
Many of us have to use JavaScript. But does that mean we can’t use functional programming? Sure, with discipline. But can we make it even easier?
How do Clojure Programmers Deal with Long Startup Times
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.
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.
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?
Accessing DOM nodes
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.
Accordion Component
You know those HTML components that show you some headers and let you expand the content underneath? Yeah! Let’s build one!
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 313: Always use the 3-argument version of reduce
Issue 313 – February 11, 2019 · Archives · Subscribe Clojure Tip 💡 Clojure Tip: Always use the 3-argument version of reduce. The 2-argument version can have unexpected behavior. Do you use reduce? You should. It’s one of the three functional tools (along with map and filter) that I made one of my first courses […]
PurelyFunctional.tv Newsletter 312: Maybe, Arcadia, Improvements
Issue 312 – February 04, 2019 · Archives · Subscribe Hi Clojurists, Please enjoy the issue. Rock on!Eric Normand <eric@purelyfunctional.tv> PS Want to get this in your email? Subscribe! Tims Gardner by defn Podcast An excellent interview with Tims Gardner, co-creator of Arcardia, the Clojure game programming system built on Unity. Clojure proves itself again […]
PurelyFunctional.tv Newsletter 311: Stewardship, Trees, Databases
Issue 311 – January 28, 2019 · Archives · Subscribe Hi Clojurists, Please enjoy the issue. Rock on!Eric Normand <eric@purelyfunctional.tv> PS Want to get this in your email? Subscribe! Announcement: No Clojure SYNC in 2019 I’m sorry to say it, but it won’t be happening in 2019. I’m deliberately leaving 2020 open. This post talks […]
PurelyFunctional.tv Newsletter 310: Quines, REPLs, HTML forms
Issue 310 – January 21, 2019 · Archives · Subscribe Hi Clojurists, Please enjoy the issue. Rock on!Eric Normand <eric@purelyfunctional.tv> PS Want to get this in your email? Subscribe! Announcement: No Clojure SYNC in 2019 I’m sorry to say it, but it won’t be happening in 2019. I’m deliberately leaving 2020 open. This post talks […]
PurelyFunctional.tv Newsletter 309: Hiring, cljdoc, Probability
Issue 309 – January 14, 2019 · Archives · Subscribe Hi Clojurists, As I write this, I’m sitting in my hotel room in Bengaluru, India. Yesterday was IN/Clojure. I was so impressed with the organization, the speakers, and the attendees. I’ve had such a great time here. And it really proves that a community can […]
PurelyFunctional.tv Newsletter 308: Conferences, Unison, NULL
Issue 308 – January 07, 2019 · Archives · Subscribe Hi Clojurists, There is something about the end of the year that nudges us to reflect on the prior year and look forward to the next year. While I make resolutions (and fail on many of them) all year round, January 1 seems like a […]