Elegant Architecture

Architecture, Functional Languages, Style

A Cartoon Map of Knowledge

While visiting San Diego, for some much needed time off from work, I had a fantastic evening hanging out my friend Steve Bjorg and his family. As the bookend to the evening, Steve and I sat down and had chatted about reading books. It started as merely a random topic on which to build an enjoyable conversation, but quickly morphed into a discussion about how to represent knowledge.

The driver behind our discussion was an exploration of my inability to read technical books on a Kindle or computer. The reason I dislike reading technical books on devices is because they don’t allow me to do my prefered method of navigation. When I’m reading a technical book, there are two possible reasons that are making me read: 1. to solve a specific problem that I am having or 2. to find something which sparks my interest and passion and causes me to explore and experiment. For example, I’ve been learning Clojure, my main resource for that as been one of the O’Reilly books on Clojure. I have the Clojure basics down, so now what I do is flip through the book quickly until I see a diagram, image, or something which catches my attention, at which point I stop and start reading the context. So the question Steve and I began exploring was: can you represent the contents of a large complex technical manual, online, in a way which allows a reader to guide themselves through the entire subject matter in a way which only requires a glance to find what is important.

The problem with doing this sequential flip through of online documentation is that online documenation is not sequential; it is a heirarchical tree or maybe even a directed graph. Each section linking to children which dive in to more detail about each topic covered in the parent section or linking over to related topics. When your book is a choose your own adventure tree, how can you flip through it sequentially while still keeping context? Our first idea was to make this tree a sequence by enumerating it with a breadth first search. Our guess here is that a breadth first search will keep some level of connection between parent and children topics and allow the reader to build an over laying context to keep things reasonable.

My own personal vision of what this would become is something like a cartoon map of an amusement park. Ideally, a wordless, visual guide which represents the broad strokes of what is in the manual while cartooonishly exagerating the features of interest. In other words, and adventurer’s map: pointing out where there be dragons, and trolls, and krakens, and dungeons. So a user can look at it, find something which looks fascinating instantly, and diving into the full granular details and context to learn.

This is all about providing a way for someone who already knows the basics of a topic to keep themselves diving further and further into the ocean. Basically, it’s a carrot to dangle in front of people to motivate them to learn your software by showing them adventures they can have.