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.
Screencasts, Whiteboards, and Slides produced to help you learn
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.
When you are looking at a variable, how do you know what it refers to? The rules that determine what variable names refer to are collectively called the scoping rules. Learning the three kinds of scope and when to use each will help you make your code more maintainable.
Learn the tricky corners of Clojure syntax, like for comprehensions and function definitions.
Pragmatic and in-depth guides to a topic.
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.
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.
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.
Is functional programming a fad? We cut through the buzz cycle and answer the question once and for all.
A complete massive action plan to get a functional programming job.
The JVM’s garbage collector allows for Clojure’s persistent data structures to be practical. It’s one of the benefits of being a hosted language: you can take advantage of the millions of dollars invested into the JVM’s development.
When you’re working at a company, you usually inherit their deployment system. And that’s great because then you just do what they do. But what if you are on your own? What are the options for deploying a Clojure server?
The JVM JIT is a highly optimized compiler. I present some resources for learning what it does.
We write a clean, readable, functional implementation of Moving Average with Lodash.
The JVM is great but far from perfect. Here are some problems with the JVM that Clojure has to work around.
One of the most common complaints about the JVM is the long startup time. But what is really taking so long? We analyze some commands to find out.
Parts of courses on specific topics
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.
Agents are another reference type. Each one has a queue of work to be run on it, and those bits of work get run in a thread pool. They’re great because each Agent is a unit of parallelization. Three Agents mean three things can run at the same time.
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 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, […]
Issue 317 – March 11, 2019 · Archives · Subscribe Clojure Tip 💡 If you’re looking for a job, apply to many! I’ve helped several people find jobs in Clojure. And I’ve fielded many questions about the number of jobs. The number one thing that people stumble on is so simple, I often feel like […]
Issue 316 – March 04, 2019 · Archives · Subscribe Clojure Tip 💡 I recommend the AdoptOpenJDK builds for most people. Oracle recently changed their licensing terms for Java. Now, the Java Development Kit is free to download, but requires a paid commercial license to run it in production. They are still building OpenJDK, but […]