A fun and gentle introduction to the Clojure language, functional programming, and data-drive programming, through the eyes of baking robot X5.
Screencasts, Whiteboards, and Slides produced to help you learn
This course teaches you the hands-on, nitty gritty details of the JVM and Clojure/Java interop that you would pick up after many years of programming Java. It combines videos with reference sheets to give you easy access to the accumulated skills of years of experience. With this course, you won’t have to worry about stack traces, JVM options, or the standard library again.
Clojure sequences are lazy by default. That gives you big benefits like separation of concerns, but it also brings with it some gotchas. This course is mostly about exploring those gotchas–problems that can bite you if you’re not ready for them–and techniques to work with each one. Being prepared is the best antidote to a bad bite. After dealing with the downsides, we explore the big benefits.
Leiningen is the *de facto* standard project tool in Clojure. This course gives an overview of `lein` commands, projects, templates, and dependencies.
Manipulating time is a difficult thing. Time was made for people. The rules are complicated and depend on where you are on Earth. Time units have varying lengths (how long is “one month”?; how long is a day when you change daylight savings?), daylight savings depends on the country you’re in, and formatting dates depends on the language. It’s complicated. Luckily, Joda Time does an excellent job. Joda Time is a date-time library that represents everything immutably. It’s what people use when they want robust date-time calculations. clj-time wraps up the types from Joda Time and makes it easy to use from Clojure.
Namespace declarations can be complicated. They manage all of the dependencies of one namespace on another. There are a lot of options. In this course, we go over how to make best use of them.
Pragmatic and in-depth guides to a topic.
This guide goes through the different ways of storing state in Re-frame and how to choose between Re-frame components.
What are some of the milestones that people hit when they’re learning functional programming?
Small, precise guides to a particular feature.
There are a number of web frameworks in Clojure, but beginners should roll their own server stack themselves to tap into the Ring ecosystem.
If you know Clojure already and just want to experiment writing ClojureScript, using Figwheel can really help get you there quickly. I show you how in a few commands.
Macros should be avoided to the extent possible. There are three circumstances where they are required.
Where to put your tests is a common question. You could put them anywhere, but you want to pick a place that makes it easy to find, easy to exclude from production, and work well with your tools. My recommendation is to follow what most projects do, which takes care of all of these requirements.
Learning any new language is a challenge, and Clojure is no different. Finding the time to learn and practice is a real challenge, so we need to make the most of what time we have. These tips will help you immerse yourself in Clojure.
The structure of our data should match the relevant structures in the real world. And to ensure that our data is structured well, we should reduce the potential for incorrect structure. Variants provide a great solution for it.
Reification means making an abstraction into a concrete value that can be manipulated at runtime. Reification is the core of what makes a language dynamic. Three types of reification in Clojure are discussed.
The SOLID principles are guidelines for writing good Object-Oriented code. It turns out that these principles are followed and embodied in Clojure.
reduce is a very useful function. You can use it for many calculations over a collection. Code annotations are useful, as are physical metaphors.
Would you like to optimize your learning of Clojure? Would you like to focus on learning only the most useful parts of the language first? Take this lesson from second language learning: learn the expressions in order of frequency of use.
Ring, the Clojure Web library, defines three main concepts that you use to construct web applications.
Parts of courses on specific topics
Backpressure is incredibly important in a distrubuted environment. Our servers can face more load than they can handle. Web requests are cheaper to produce than to respond to. The best practice when faced with more requests than you can handle is to immediately respond that you can’t handle it so that you can continue processing the requests you’ve already accepted.
We can now define a function called bake-cookies to implement the cookies recipe we thought before.
We make a generic `bake-recipe` function that looks up the steps in the database and bakes it.
We learn about the different locations that X5 can go to in the bakery. We learn about sets and what they can hold.
Let’s add a recipe for a new baked good, brownies.
Now we can rework our bake-cake function to use the variadic versions of our add functions.
We interviewed D. Schmudde about his upcoming Clojure/conj 2016 talk about the intersection of functional programming, clojure.spec, and art.
We interviewed Daniel Friedman about his upcoming Code Mesh talk with Jason Hemann.
We Interviewed Daniel King about his upcoming Curry On 2017 talk about Building Tools and Languages for Terabyte Scale Biology: A Call to Action.
We interviewed Dave Yarwood about his upcoming Clojure Remote 2017 talk about ZeroMQ.
We interviewed Dom Kiva-Meyer about his upcoming Clojure/West 2017 talk.
We interviewed Dr. Christian Betz about his upcoming EuroClojure 2017 talk called Tear down this wall – rethink distributed systems.
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 […]
Issue 315 – February 25, 2019 · Archives · Subscribe Clojure Tip 💡 Use the correct data structure for the job. Use multiple data structures if there are multiple jobs. While I was iterating on the Sieve of Eratosthenes (last week’s puzzle), I kept realizing that I was using the wrong data structure. I wanted […]
Rich Hickey is the creator of Clojure and Datomic. He’s a prolific speaker and has a lot of great ideas about programming. His impact on the future of programming is ongoing and extends well beyond Clojure. This is a collection of his talks, interviews, and articles.
Robert Martin is an influential figure in the industry. He was one of the people who drafted the Agile Manifesto. He was instrumental in starting the software craftsmanship movement. And he blogs about and makes video courses on software design.