If you are new to functional programming or Lisps, the vocabulary can be more intimidating than the ideas. Use this glossary as a quick reset when you hit a term like “persistent data structure,” “macroexpansion,” or “transducer” and want a short, practical definition.
When possible, read the glossary entry and then return to the lesson page that used the term. Most concepts land best when you see them in code and in a real workflow, not in isolation.
In this section
-
Key Concepts
Core Clojure ideas used throughout the track: persistent collections, namespaces, vars, and REPL workflow.
-
Immutable Data Structures
What immutable data structures are, why Clojure uses them everywhere, and how Java developers should reason about updates and structural sharing.
-
Namespaces
What namespaces do in Clojure, how they differ from Java packages, and how to organize code without creating naming conflicts.
-
Vars and Bindings
What vars and bindings are in Clojure, how `def`, `let`, and `binding` differ, and where Java developers usually get confused.
-
Functional Programming Terminology
FP vocabulary in plain language: purity, immutability, composition, higher-order functions, and more.
-
Higher-Order Functions
What higher-order functions are, why they matter in Clojure, and how Java developers should read patterns like `map`, `filter`, `reduce`, and returned functions.
-
Destructuring
How Clojure destructuring binds names from vectors and maps, why it matters in everyday code, and where Java developers should be careful.
-
Currying and Partial Application
How currying and partial application differ in Clojure, why `partial` is the common tool, and when Java developers should use each idea.
-
Concurrency Terms
Concurrency vocabulary: coordination vs parallelism, contention, backpressure, idempotency, and related terms.
-
Concurrency vs. Parallelism
What concurrency and parallelism actually mean in Clojure, why they are not the same thing, and how Java developers should choose the right tool.
-
Deadlocks and Race Conditions
What deadlocks and race conditions are, how Clojure reduces some of the usual risks, and where Java developers still need to stay careful.
-
Software Transactional Memory (STM)
What Clojure STM is, when to use refs and `dosync`, and how Java developers should think about coordinated state changes without explicit locks.
-
Miscellaneous Terms
Extra terms that show up across the ecosystem: macros, transducers, protocols, and other recurring concepts.
-
Homoiconicity
What homoiconicity means in Clojure, why code-as-data matters, and how Java developers should connect it to macros and metaprogramming.
-
Macros and Macro Expansion
What Clojure macros actually do, how macro expansion works, and why Java developers should prefer functions unless code transformation is truly needed.
-
Lazy Evaluation
What laziness means in Clojure sequences, where it helps, and what Java developers must watch for around chunking, side effects, and retained heads.