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.
Screencasts, Whiteboards, and Slides produced to help you learn
Learn the tricky corners of Clojure syntax, like for comprehensions and function definitions.
You’ve heard that Clojure is great for concurrency. But what tools does Clojure give you? And how should you use those tools?
These lessons are meant to each answer a specific question and help you build the skills you need to address a wide variety of concurrency problems.
Clojure core.async provides basic building blocks for communication and coordination. This course explores ten patterns you can easily implement using those building blocks.
With so many data formats out there, it’s good to see some example code for reading and writing different formats. I’m talking JSON, CSV, EDN, and more. This course explores how to read and write data formats using Clojure.
Pragmatic and in-depth guides to a topic.
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.
A complete massive action plan to get a functional programming job.
Getting to know people who can help you get functional programming jobs.
How do we deal with that little bit of time between when the user clicks and the server confirms the change is saved? Well, like many things in life, there are two ways: optimistically and pessimistically.
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.
Small, precise guides to a particular feature.
Unit testing in Clojure is straightforward. Here are a few testing ideas as they apply to Clojure.
Hiccup is a Clojure DSL for generating HTML. If you’re using it, you might like these tips.
Although it’s still early, ClojureScript is rapidly maturing its testing story. There are a Leiningen plugin and a Boot task for autocompiling ClojureScript as it changes and running tests in a variety of engines.
Setting up and tearing down a test database can be slow. Use a rolled back transaction to quickly reset the database to a known state. You can do that in an `:each` fixture to run each test in isolation.
As you get better with Clojure, it becomes easier to read. Why not jump ahead of the learning curve and read like an expert? Focus on the first thing, use the indentation, and read the evaluation order.
New Relic lets you get more out of Heroku. Install it in 7 steps.
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.
Clojure core.async is a way to manage mutable state. Isn’t that against functional programming?
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.
Lambda abstractions are always leaky, but some are leakier than others. Clojure programmers recommend keeping most of your functions pure and containing the leaks as much as possible.
Parts of courses on specific topics
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.
Property-Based Testing has several advantages over regular Example-Based Testing. It’s worth calling them out.
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.
Flow is a mental state where we feel totally immersed in our activity. We feel deep enjoyment and are energized by it. It’s the state the repl-driven programming promises us. In this lesson, we look at Flow, its benefits, and what is needed to maintain it.
In this lesson, we will see an example of the process of testing an existing function using Property-Based Testing.
PDFs, code, and other downloads to help you learn
A one-page sheet with the basics for creating Reagent components for use with Re-frame. Get started with Re-frame right away.
If you program the web in Clojure, you probably use Ring. Even if you don’t, your server is likely Ring compatible. Ring has a small SPEC. It’s centered around defining the keys one can expect in the request and response maps. And the exact names for keywords are easy to forget. I don’t want to forget. […]
These are all of the commands Eric uses to do TDD in Cider.
Code to accompany The Ultimate Guide to Clojure Concurrency and the Clojure Concurrency Course. It’s example code for a variety of concurrency primitives.
We interviewed Asher Coren about his upcoming Clojure/conj 2016 talk.
We interviewed Bill Piel about his upcoming Clojure/conj 2016 talk.
We Interviewed Brandon Kase about his upcoming Curry On talk called Composable Caching in Swift.
We interviewed Brian L. Troutwine about his upcoming Lambda Days 2017 talk.
We talked to Caitie McCaffrey about her upcoming YOW! Sydney 2016 talk.
Chris Birchall will be speaking at Lambda World 2016. I interviewed him about his talk.
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 […]
Issue 431 – June 21, 2021 · Archives · Subscribe Clojure Tip 💡 Clojure directness Over the weekend, I rewatched Clojure, Made Simple, Rich Hickey’s 2015 talk at Java One. In it, Rich made this claim about a Clojure translation of some Python code: It is as short as the Python program. And that is […]
Issue 430 – June 14, 2021 · Archives · Subscribe Clojure Tip 💡 Use :: keyword notation for unique values I’m not really a big fan of the ::keyword notation. Yes, it is much shorter than writing out the current namespace every time. But the code is not mobile. I only use it for keywords […]
Guy Steele is an amazing figure. He was instrumental in writing the specs for C, Common Lisp, Scheme, and Java. He’s also a great speaker. His talks are always concise and to the point. He seems like such a nice guy. He never says anything harsh!