In my previous blog post I gave a link to a post on Damien Katz's blog. For the case you don't know: Damien Katz is the inventor and initial creator of CouchDB. In case you still don't know anything about CouchDB, you better grab the book or go to the project site, and maybe later get your own instance at couch.io.

By the way, this blog is served from a CouchDB instance provided by couch.io. There is no classical application layer, just CouchDB as a backend and your browser as frontend. Its a classical 2-tier architecture.

So back to my CouchDB story...

I probably arrived on Damien's blog after following a link on Hacker News. After enjoying Damien's insightful observations about crappy programmers, I started reading some other blog posts, amongst other things, about CouchDB, and spending a few hours on it.

At that time, I had a growing interest in functional programming, distributed programming, as well as the underlying concepts. I had learned a few functional programming concepts (e.g. list comprehensions, anonymous and higher-order functions) through playing around with and later using them on a regular basis in Python.

A few months later (it was during an internship), I got the opportunity to do some functional programming in practice: I was engaged in a project where a lot of XSL Transformations needed to be done, which was my part then. Doing XSLT turned out to be not too bad at that time: I could delve into basic functional programming concepts and techniques, like recursion, immutable variables, and pattern matching, while applying them in a rather constrained (and therefore non-distracting) environment.

Still during that internship, I started studying Erlang (of course, using Joe's book). What had intruiged me about Erlang (and is still intriguing me) are its built-in distributed programming abstractions, as well as its focus on concurrency, fault-tolerance, and maintainability.

Meanwhile, I also started to observe CouchDB. It became more and more clear to me that CouchDB was the Open Source Project written in Erlang that had the highest potential with regard to its popularity and impact. Arguably its ingenuity lies in its particular combination of mostly rather old and traditional technologies (e.g. B-Trees, MVCC, HTTP).

Consequentially, about one year ago, I decided that I'd do my bachelor thesis in Computer Science about how to create reliable web services with CouchDB.

Now that I've submitted my bachelor thesis six weeks ago, I work on improving my prototype implementation of a reverse proxy in order to create a not-so-prototype-anymore out of it. The goal for it is to be usable (at least to some degree) and to have a good code base that can be built upon.

I will write more on that later. Source code will then be available on my github site.