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.
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.
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.
Learn the 4 React Lifecycle Methods you’ll need to know for Reagent/Re-frame and why the other 6 are not needed.
Is functional programming a fad? We cut through the buzz cycle and answer the question once and for all.
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 424 – April 27, 2021 · Archives · Subscribe Design Thoughts 💡 Leverage in a thriving ecosystem In Clojure, we often look for leverage. Leverage is ideal in a walled garden where we lack the free labor to solve problems the hard way. However, in an open ecosystem, demands are numerous and lack a […]
Issue 423 – April 19, 2021 · Archives · Subscribe Grokking Simplicity is in print! 📘 My new book, Grokking Simplicity, is in print! I have 25 copies sitting beside me. They were waiting in front of my house on Saturday when I got back from vacation. It is quite a relief that the book […]
Issue 422 – April 12, 2021 · Archives · Subscribe Design Tip 💡 Don’t write your own language A few weeks ago, I argued that Deepmind should have written their own programming language to do machine learning. There are many advantages to writing your own language for solving your specific problem. And writing a language […]
Issue 421 – April 05, 2021 · Archives · Subscribe Design Tip 💡 Programming monism Programming languages exhibit an unhealthy monism. Monism is a system wherein you believe that a single principle underlies distinct phenomena. For example, in OOP, we might say, “everything is an object.” In the lambda calculus, there are only functions. This […]
Issue 420 – March 29, 2021 · Archives · Subscribe Design Tip 💡 Say what you mean People have tried to write a “more concise Java,” like Groovy. But I think the idea is misguided. The fundamental problem is not that Java is verbose. The design flaw is that Java does not allow you to […]
Issue 419 – March 22, 2021 · Archives · Subscribe Follow-up 🙃 Clojure’s buzz In last week’s issue, I asked how we could drive Clojure’s growth. I got some really great responses to my question last week. Mostly, they were explaining how lots of characteristics trump language quality. While Clojure is a great language, it’s […]
Christopher Strachey was one of the founders of denotational semantics and a pioneer in programming language design.