Programming Clojure, Third Edition (Pragmatic Bookshelf)

PragmaticBookshelf
Drowning in unnecessary complexity, unmanaged state, and tangles of spaghetti code? Clojure cuts through complexity by providing a set of composable tools–immutable data, functions, macros, and the interactive REPL. Written by members of the Clojure core team, this book is the definitive guide to Clojure. This edition includes information on all the newest features of Clojure, such as transducers and specs.

Alex Miller @alexmiller with Stuart Halloway and Aaron Bedra

Edited by Jacquelyn Carter @jkcarter

Drowning in unnecessary complexity, unmanaged state, and tangles of spaghetti code? Clojure cuts through complexity by providing a set of composable tools–immutable data, functions, macros, and the interactive REPL. Written by members of the Clojure core team, this book is the definitive guide to Clojure. This edition includes information on all the newest features of Clojure, such as transducers and specs.

Find out about the sequence abstraction, which combines immutable collections with functional programming to create truly reusable data transformation code. Discover Clojure’s unique approach to state and identity, techniques for polymorphism using multimethods and protocols, and how to use Clojure’s metaprogramming capabilities. Use Clojure’s spec library to validate data, destructure data, explain invalid data, and generate large numbers of tests to verify code.

With this book, you’ll learn how to think in Clojure, and how to take advantage of its combined strengths to build powerful programs quickly.


“Programming Clojure is an inspiration of Clojure knowledge and has furthered my understanding of the nuances of Clojure. One of the new sections includes a step-by-step on building an application that made me want to drop everything and code along.”

–Nola Stowe, CTO/Founder, Ruby Geek LLC


  • Full details: Search
  • View this book’s portal and details on how to post errata and suggestions here.

Don’t forget you can get 35% off with your Devtalk discount! Just use the coupon code “devtalk.com" at checkout :+1:

Latest Threads About This Book Top

MBrooks
Hi, I noticed that the docstrings for the start and stop functions appear after the function arguments, like: (defn start [e] "REPL help...
New
MBrooks
The code for the function game is defined with the argument order [word, player]: (defn game [word player] ...) This [word player] ar...
New
MBrooks
On page 186 (last page of chapter 7) it says “The first thing we need to do is import (not use or require) our MidiNote protocol from the...
New
daveliepmann
@alexmiller On page 206 to 207, my copy of Programming Clojure, Third Edition asserts the following: assert tests an expression and ra...
New
pwalker
Hi @alexmiller I’ve been following along through PC 3rd, and hit a bump on page 122 - the ‘name’ format for the spec seems incorrect. I ...
New
espectroautista
“If you need to do arbitrary-precision, floating-point math, append M to a number to create a BigDecimal literal”
New
keepitss
The two arguments of game should swap positions. In the text: (game random-player "hello") Should be: (game "hello" random-player) Si...
New
keepitss
The output of below example repeat the code. (to-array ["Easier" "array" "creation"]) -> (to-array ["Easier" "array" "creation"]) Th...
New
New
keepitss
The definition of big? in the book is (defn big? [ ] (> x 100)). I got below error in clj REPL: user=> (defn big? [ ] (> x 100)...
New

Most Active This Week Top

Most Active This Month Top

Most Active This Year Top

xsobrietyx
Good day, My name is Vadym and currently, I’m reading your book “Programming Clojure, Third Edition”. I believe I found an example in y...
New
keepitss
The output of below example repeat the code. (to-array ["Easier" "array" "creation"]) -> (to-array ["Easier" "array" "creation"]) Th...
New
keepitss
The definition of big? in the book is (defn big? [ ] (> x 100)). I got below error in clj REPL: user=> (defn big? [ ] (> x 100)...
New
New
keepitss
The two arguments of game should swap positions. In the text: (game random-player "hello") Should be: (game "hello" random-player) Si...
New
espectroautista
“If you need to do arbitrary-precision, floating-point math, append M to a number to create a BigDecimal literal”
New
MBrooks
On page 186 (last page of chapter 7) it says “The first thing we need to do is import (not use or require) our MidiNote protocol from the...
New
MBrooks
The code for the function game is defined with the argument order [word, player]: (defn game [word player] ...) This [word player] ar...
New
MBrooks
Hi, I noticed that the docstrings for the start and stop functions appear after the function arguments, like: (defn start [e] "REPL help...
New

Most Active Last Three Years Top

pwalker
Hi @alexmiller I’ve been following along through PC 3rd, and hit a bump on page 122 - the ‘name’ format for the spec seems incorrect. I ...
New
daveliepmann
@alexmiller On page 206 to 207, my copy of Programming Clojure, Third Edition asserts the following: assert tests an expression and ra...
New

Most Active Over Three Years Top

PragmaticBookshelf
Drowning in unnecessary complexity, unmanaged state, and tangles of spaghetti code? Clojure cuts through complexity by providing a set of...
New
jgomo3
Programming Clojure, Third Edition (page 111) Backward description of when to use reduce and into, it should be: Reduce: when the outp...
New

Get money off!

The Pragmatic Bookshelf

35% off any eBook

Simply use coupon code "devtalk.com" at checkout. See full details here.