Programming Clojure, Third Edition, in print; Free iOS course
February 21, 2018
Trying to avoid accidental complexity? The Clojure language gets out of your way so you can focus on expressing simple solutions to hard problems. See how with Programming Clojure, Third Edition, now in print and shipping from pragprog.com/book/shcloj3. Be sure to read below for 5 Tips for Thinking in Clojure to help you get started.
Free iOS Course
Chris Adamson has put together a video course (adapted from his weekly livestream) based on the book iOS 10 SDK Development: Creating iPhone and iPad Apps with Swift. You can work through the book, chapter by chapter, using the links available from pragprog.com/book/adios4, and yes, the content is good for iOS 11. If you don't have a copy of the ebook or paperback, you can buy that from pragprog.com/book/adios4 as well, where you’ll also find sample code downloads.
Come and learn!
/\ndy
Programming Clojure, Third Edition

Clojure joins the flexibility and agility of Lisp with the reach, stability, and performance of Java. Combine Clojure's tools for maximum effectiveness as you work with immutable data, functional programming, and safe concurrency to write programs that solve real-world problems.
Start by reading and understanding Clojure syntax and see how Clojure is evaluated. From there, find out about the sequence abstraction, which combines immutable collections with functional programming to create truly reusable data transformation code. Clojure is a functional language; learn how to write programs in a functional style, and when and how to use recursion to your advantage. Discover Clojure's unique approach to state and identity, techniques for polymorphism and open systems using multimethods and protocols, and how to leverage Clojure's metaprogramming capabilities via macros. Finally, put all the pieces together in a real program.
New to this edition is coverage of Clojure's spec library, one of the most interesting new features of Clojure for describing both data and functions. You can use Clojure spec to validate data, destructure data, explain invalid data, and generate large numbers of tests to verify the correctness of your 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.
5 Tips for Thinking in Clojure
- Rely on your REPL. Clojure (like other LISP languages) intends to provide a "live" development experience where you are actively manipulating and testing the program while you develop the code. To take full advantage of Clojure, it's essential to work in a development environment that allows you to interactively evaluate parts of your code while you develop. We are fortunate to have a variety of tool choices in Clojure that can satisfy those demands.
- Maps, not Objects. Developers coming from object-oriented languages are likely to look for the ability to create classes or objects to hold their data. Clojure takes a more direct and flexible approach to data, primarily storing information attributes in heterogenous maps. Rather than providing class-specific interfaces, Clojure provides a single generic data interface for creating, accessing, and transforming attribute-oriented information. The result is that modeling data and managing the evolution of data over time is generally much more generic and immediate than the equivalent operations in object-oriented languages.
- Collections, not Loops. Imperative languages encourage you to write loops that manipulate data elements one-by-one. In Clojure, you instead think primarily in collections, not loops. When transformations need to be applied, you use a functional approach to describe the transformation from one collection to another, which may involve mapping, filtering, or otherwise transforming data at the collection level.
- Isolate State. Clojure is not a pure functional language – it has constructs readily available to create and manage state, perform I/O, etc. However, most Clojure developers minimize the number of functions that work with these kinds of constructs. As much as possible, Clojure functions tend to be small and pure, just simple transformations of data to data. Clojure's model for all state manipulation is to describe stateful change as a function from prior state to new state. Stateful change thus becomes little more than the application of pure functions to data.
- Have Fun! Many people find Clojure to be one of the most enjoyable languages they've ever used. There is very little ceremony in the code, a literal syntax to easily represent data, a huge library of functions available for transforming data, and access to all of the existing functionality of the underlying host platform via either interop or libraries. Clojure gets out of the way and lets you get to work!
Now in print and shipping from pragprog.com/book/shcloj3.
Upcoming Author Appearances
Who Are We?
The Pragmatic Bookshelf publishing imprint is wholly owned by The Pragmatic Programmers, LLC.
Andy Hunt and Dave Thomas founded the company with a simple goal: to improve the lives of developers. We create timely, practical books, audio books, and videos on classic and cutting-edge topics to help you learn and practice your craft.
We are not a giant, faceless, greed-soaked corporation. We're a small group of experienced professionals committed to helping make software development easier.
Don't Get Left Out
Are your friends jealous that you get these spiffy email newsletters and they don't? Clue them in that all they need to do is create an account on pragprog.com (email address and password is all it takes) and select the checkbox to receive newsletters.
Are you following us on Twitter and/or Facebook? Here's where you can find us and keep up with the latest news and commentary, and occasional discounts:
Tell your friends! Tweet this
Follow us on Twitter: @pragprog, @pragpub, Andy Hunt @PragmaticAndy.
Coming Soon:
- Programming Clojure, Third Edition, in print
- Learn Functional Programming with Elixir: New Foundations for a New World, in print
- Rediscovering JavaScript: Master ES6, ES7, and ES8, in beta
- Software Design X-Rays: Fix Technical Debt with Behavioral Code Analysis, in print
Recently Released:
- Rails 5 Test Prescriptions
- Reactive Programming with RxJS 5
- Forge Your Future with Open Source
- Domain Modeling Made Functional
Thanks for your continued support,
Andy Hunt
Publisher, Pragmatic Bookshelf
Books • eBooks • PragPub Magazine • Audiobooks and Screencasts
PragProg.com