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 416 – March 01, 2021 · Archives · Subscribe Design Tip 💡 Why do we program in hard mode? Sometimes one simple visualization can really blow minds. I am always on the lookout for them. I want to tell you about a recent one. I was watching The Forgotten Art of Structured Programming by […]
Issue 415 – February 22, 2021 · Archives · Subscribe Design Tip 💡 What is worth sacrificing clarity? There are some universal qualities that are always worth increasing, all things remaining equal. At this point in industry maturity, we understand that there are certain qualities it is worth spending effort to improve. To name a […]
Issue 414 – February 15, 2021 · Archives · Subscribe Design Tip 💡 Constrain your design with composition first Last week, we talked about choosing affordances from use cases to help us constrain and inform the design of our model. But not all affordances are created equal. Some affordances are more useful for constraining the […]
Issue 413 – February 09, 2021 · Archives · Subscribe Design Tip 💡 Affordances in software In the last issue, we talked about affordances, those features of a designed object that both allow for manipulation and communicate such to the user. In general, you want the affordance’s usage to align with what it is communicating. […]
Issue 412 – February 01, 2021 · Archives · Subscribe Design Tip 💡 use and abuse of the decorator pattern In the book Head First Design Patterns, the authors present the Gang of Four design patterns in a fun, educational style. One of the patterns they present is the Decorator Pattern. The decorator pattern is […]
Issue 412 – January 25, 2021 · Archives · Subscribe Design Tip 💡 module depth is bogus In A Philosophy of Software Design, John Ousterhout presents the concept of module depth. He claims a module should be “deep” as opposed to “shallow,” and uses this measure to explain why various software is poorly designed. Here […]
Christopher Strachey was one of the founders of denotational semantics and a pioneer in programming language design.