Udemy
    •  
    •  
    •  
    •  
    •  
    •  
    •  
    •  
Turn what you know into an opportunity and reach millions around the world.
Learn More
Your cart is empty.
Keep shopping
Clojure From Scratch: Code and Concepts Woven Together
Rating: 4.4 out of 5(59 ratings)
12,989 students

Clojure From Scratch: Code and Concepts Woven Together

Learn idiomatic Clojure at the REPL: functional ideas, concurrency model, and design philosophy that make it powerful
Last updated 7/2026
English
English [Auto],

What you'll learn

  • Write idiomatic Clojure at the REPL using prefix notation, immutable values, and the four core collections
  • Define functions with multiple arities, variadic arguments, destructuring, and closures
  • Replace loops with recursion, comprehensions, and the functional trio of map, filter, and reduce
  • Build readable data pipelines with threading macros, transducers, and the function combinators
  • Manage concurrent state safely with atoms, refs, software transactional memory, futures, and core.async
  • Work with lazy and infinite sequences, and avoid the head-holding and chunking pitfalls that bite newcomers
  • Model data with records, protocols, multimethods, and spec, and handle errors as structured data with ex-info
  • Understand the design philosophy behind Clojure: simplicity, hosting on the JVM, code-as-data, and the identity-state-time model

Course content

10 sections64 lectures6h 20m total length
  • Why Clojure Exists: Rich Hickey and the State of Software in 20073:20

    You'll hear the origin story of Clojure and meet Rich Hickey, the veteran C++, Java, and C# programmer who spent two and a half self-funded years designing it. You'll understand the problem he set out to solve in 2007 — uncontrolled mutable state in a world of multi-core CPUs and rising complexity — and why that makes Clojure a pragmatic, opinionated language rather than an academic experiment.

  • Hello, REPL: Your First Clojure Expression3:46

    You'll type your very first Clojure expression at the REPL and watch it evaluate, printing a short line of text with println. You'll learn the parenthesized prefix-notation call structure, where the function name comes first and the arguments follow, contrast it with the infix notation you may already know, and print your own line to lock in the shape of a Clojure function call.

  • println vs pr vs print: Choosing the Right Output Tool5:59

    You'll learn the four common printing functions — println, print, pr, and prn — and exactly when to reach for each, so you stop defaulting to println by reflex. By printing the same string and data through each one, you'll see the difference between human-readable and machine-readable output and discover the read/print symmetry that matters later for serialization.

  • Comments and Whitespace: How Clojure Reads Your Code6:26

    You'll learn the three ways to comment Clojure code: the semicolon line comment, the #_ form-skipping reader macro, and the comment macro. You'll also see that Clojure treats commas as whitespace, and you'll practice cleaning up a noisy expression with each comment style to build early fluency with the reader macros.

Requirements

  • Comfort with at least one programming language such as Python, JavaScript, Java, or Ruby
  • Basic understanding of variables, functions, loops, and data structures
  • Familiarity with using a terminal or command line to run programs
  • A computer running Windows, macOS, or Linux with permission to install software
  • No prior experience with Lisp, functional programming, or the JVM required

Description

This course contains the use of artificial intelligence.

Clojure is the most widely deployed Lisp in industry, and it rewards programmers who understand not just how to write it but why it was designed the way it is. This course teaches you both at once. You'll write real Clojure from the very first lecture at the REPL, and every coding section opens with a short, story-driven lecture that gives you the context behind the code you're about to write, so the syntax never feels arbitrary.

You start at the keyboard: evaluating expressions, printing values, and learning the parenthesized prefix notation that defines the language. From there you build steadily through bindings, the core data types, equality and conditionals, and the four immutable collections at the heart of every Clojure program. You'll define functions, close over values, and learn to iterate the Clojure way with recursion, comprehensions, and the functional toolbox of map, filter, reduce, threading macros, and transducers. The advanced sections take you into concurrency and state with atoms, refs, futures, and core.async, then into lazy sequences, records, protocols, multimethods, spec, and data-rich error handling.

What sets this course apart is its woven structure. Across ten sections, hands-on coding lectures carry the bulk of the learning, but they're framed by conceptual lectures that explain the ideas a senior Clojure engineer takes for granted: why Rich Hickey built the language in 2007, what hosting on the JVM buys you and costs you, how persistent data structures stay fast while immutable, why code is data, and how identity, state, and time form a coherent model of the world. The course then closes with a run of deeper conceptual lectures that tie the whole language together, ending on the big ideas of lazy evaluation and the sequence abstraction, and the two quietly profound features — transducers and protocols — that set Clojure apart.

By the end you'll be comfortable reading and writing idiomatic Clojure, you'll understand the design decisions behind it well enough to make good choices in your own code, and you'll have hands-on experience with the concurrency and data-shaping tools that make Clojure a favorite for data-heavy, correctness-critical systems. Whether you're coming from Python, JavaScript, Java, or another Lisp, this course meets you where you are and takes you to fluency.

Who this course is for:

  • Developers from object-oriented or imperative backgrounds curious about functional programming
  • JVM developers (Java, Kotlin, Scala) who want a productive, data-oriented Lisp
  • Engineers who want concurrent, immutable-by-default code with less ceremony
  • Self-taught programmers looking to deepen their grasp of functional design
  • Anyone who wants to think in data and expressions rather than classes and mutation