Alex Miller, Stuart Halloway, Aaron Bedra

#Clojure
#Java
#JVMs
Clojure is a dynamic programming language for the Java Virtual Machine (JVM) with a compelling combination of features:
• Clojure is elegant. Clojure’s clean, careful design lets you write programs that get right to the essence of a problem without a lot of clutter and ceremony.
• Clojure is interactive. Clojure builds on the tradition of Lisp so that you are always working with running code and immediate feedback.
• Clojure is a functional language. Data structures are immutable, and most functions are free from side effects. This makes it easier to write correct programs and to compose large programs from smaller ones.
• Clojure simplifies concurrent programming. Many languages build a concurrency model around locking, which is difficult to use correctly. Clojure provides several alternatives to locking: software transactional memory, agents, atoms, and dynamic variables.
• Clojure embraces Java. Calling from Clojure to Java is direct and fast, with no translation layer.
• Unlike many popular dynamic languages, Clojure is fast. Clojure is written to take advantage of the optimizations possible on modern JVMs.
Who This Book Is For
Clojure is a powerful, general-purpose programming language. As such, this book is for programmers with experience in a programming language like Java, JavaScript, C#, Python, or Ruby, but who are new to Clojure and looking for a powerful, elegant language.
Clojure is built on top of the Java Virtual Machine, and it is fast. This book will be of particular interest to Java programmers who want the expressiveness of a dynamic language without compromising on performance.
Clojure is helping to redefine what features belong in a general-purpose language. Clojure combines ideas from Lisp, functional programming, and concurrent programming and makes them more approachable to programmers seeing these ideas for the first time. Since Clojure was created, many languages like Java, JavaScript, Elixir, and Swift have adopted features inspired by Clojure.
Clojure is part of a larger phenomenon. Languages such as Erlang, F#, Haskell, and Scala have garnered attention recently for their support of functional programming or their concurrency model. Enthusiasts of these languages will find much common ground with Clojure.
Table of Contents
Part I-Welcome to Clojure
1. Getting Started
2. Exploring Clojure
3. Developing Interactively
Part II-Data and Functions
4. Unifying Data with Sequences
5. Functional Programming
6. Describing Your Data with Specs
Part Ill-Intermediate Topics
7. State and Concurrency
8. Protocols and Datatypes
9. Multimethods
10. Java lnterop
11. Macros
Part IV-Clojure in Practice
12. Project Tooling
13. Building an Application









