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.
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.
Build a Clojure web application as you learn HTTP.
Reagent is a ClojureScript wrapper around React. It makes it easy to create React components using functions and hiccup, and state managed in Atoms.
Learn about ClojureScript and how to set up a project using shadow-cljs.
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.
Small, precise guides to a particular feature.
In this guide, I describe the available HTML templating options for Clojure and give my recommendations. Recommendation summary Choose Hiccup if you would like to embed HTML in your code. Hiccup uses an easy-to-write, literal data format to represent HTML. Choose Selmer if you would like to embed code in your HTML. Selmer embeds code-like directives […]
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.
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.
We need to give feedback to the user when the user clicks a button. We add a message box that disappears after a time.
Now that we can bake recipes, let’s add the other recipes, cookies and brownies.
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 437 – August 03, 2021 · Archives · Subscribe Design idea 💡 To build or not to build, that is the question I was watching a new talk by David Nolen yesterday in which he quoted Alan Kay in an essay called The Power Of The Context. Here is the quote: In programming there […]
Issue 436 – July 26, 2021 · Archives · Subscribe Design idea 💡 Software as Soulcraft “What is the purpose of life? It is to build a soul.” — Alejandro Jodorowsky My fascination with programming started early in my life. There was something about the ability to explore representations of ideas outside of myself that […]
Issue 435 – July 19, 2021 · Archives · Subscribe Design Idea 💡 The software crisis The software crisis was famously identified and named at the 1968 NATO Software Engineering Conference. The conference attendees noted that it was increasingly difficult to build software projects on time and within budget. As I read papers from the […]
Issue 434 – July 13, 2021 · Archives · Subscribe Clojure Tip 💡 Re-combination of parts A couple of weeks ago, we explored the idea of why not stating the assumptions about your domain can be good. It can lead to enough savings in code to make it significantly shorter. In this issue, I’d like […]
Issue 433 – July 05, 2021 · Archives · Subscribe Clojure Tip 💡 The “Clojure Effect” Back in April, I posted a question on Clojureverse which started a discussion about organizing code. At some point in the discussion, I coined the term Clojure Effect. I explained it a little bit, but it needs its own […]
Issue 432 – June 28, 2021 · Archives · Subscribe Clojure Tip 💡 Specific vs. general Last week, we left off an exploration of what makes Clojure more direct than some other languages. Just making a more concise Java doesn’t get at the difference. Yes, there is less boilerplate, but there is something more to […]
Christopher Strachey was one of the founders of denotational semantics and a pioneer in programming language design.