Learn Clojure faster, use Clojure wisely.
Instant access to documentation, source, lovingly-crafted conceptual relationships, and a dynamic visualization of how everything ties together.
Because a great language deserves to be paired with a great way to understand it.
Some of the ways makes it easier to grok Clojure…
Explore the Clojure language and standard library
The Clojure Atlas is driven by a hand-curated ontology of Clojure language and library concepts.
Find functions, classes, and concepts in a snap
Think code completion, but over every entity and concept within Clojure, with a visualization of related terms a click or keystroke away.
View documentation, source, and conceptual relationships dynamically
The docs and source code for all core functions are included; focus on related data structures, syntax, and abstract concepts with just a click.
See—then understand how Clojure relates to key Java/JVM interfaces & concepts
The ontology includes a full graph of the relationships among Clojure's JVM bits, allowing you to easily understand key implementation details.
Clojure Atlas is complete. I'm thinking/working on various improvements though (outside of tracking additions and changes in future releases of Clojure):
- The actual visualization is useful, and matches the original notion I had for it, but there is significant tweaking to be done still. In particular, I think there are more useful arrangements of categories and relationships to be built, and I'd like to investigate some subtleties around node and edge rendering.
- Figuring out a way for library authors (or users?) to produce ontologies for libraries. This is still in the idea stage, really.
Beyond that, I have a wish list that's a mile long at this point for more significant progress in the realms of presentation and discovery of language constructs and APIs that I won't bother enumerating here. However, I am relying on you to inform what's important. If you have suggestions, requests, or other feedback, please do get in touch with me; the Uservoice forum, email, or twitter are all good.
Would you like to be notified when Clojure Atlas is updated? Either drop me your email address (nope, I'm no spammer), and/or follow @ClojureAtlas on Twitter.
While Clojure Atlas has a number of raisons d'être, it fundamentally exists because I've consistently thought that typical programming language and API references – being, in general, walls of text and alphabetized links – are really poor at conveying the most important information: not the minutiae of function signatures and class hierarchies, but the stuff that's "between the lines", the context and interrelationships between such things that too often are only discovered and internalized by bumping into them in the course of programming. This is especially true if we're learning a language and its libraries (really, a never-ending process given the march of progress), and what's standing in our way is not, for example, being able to easily access the documentation or signature for a particular known function, but discovering the mere existence of a previously-unknown function that is perfect for our needs at a given moment.
tl;dr: Technical documentation doesn't need to suck so hard.
Why Clojure? I use it every day, and a number of its facilities make it particularly amenable to being a good place to start proving out some of the visualizations and user interactions I have in mind to address these problems of context and discoverability.
Clojure Atlas requires a "modern" browser. Specifically, Chrome, Safari, Internet Explorer 9, or Firefox 3+ (in that order of preference; Firefox is sadly quite the dog when it comes to SVG).
Clojure Atlas is a side project, but one I'm particularly keen on. Other side projects of mine include authoring and contributing to many a Clojure open source library, writing at cemerick.com, and recently co-authoring Clojure Programming from O'Reilly.
Colophon and Credits
Clojure Atlas would not be possible without a raft of incredibly high-quality projects and resources:
- I write all my code in Eclipse with the help of the Counterclockwise plugin for Clojure. This includes the ontology, defined as a huge pile of Clojure vector, map, and keyword literals, which is prepared for delivery to the browser by dumping it to JSON.
- This site is built using Ring, Compojure, and Enlive — all wonderful Clojure web libraries — and assembled and deployed on Heroku using Leiningen. The runtime data access for the site (used only for accounting, analytics, and other miscellanea) is all AWS S3 and SDB, the latter accessed using the rummage library for Clojure.
- …and, of course, Clojure itself. In particular, the metadata available at runtime for each function, macro, etc. is what enables the trivial harvesting of documentation and source code. And, of course, I quite love the language, and am forever indebted to Rich Hickey for improving my life as a programmer more than any other language or tool I've ever encountered.