LispCast: How did you get into Clojure?
Bozhidar Batsov: I’m very fond of Lisps and I love exploring new programming languages. In 2009 Common Lisp was my favourite Lisp dialect and I was often solving small programming exercises in it. I wanted to do some “real work” in CL, but the ANSI standard had left out basic things like networking, GUI, etc. and relying on distribution-specific extensions didn’t feel right to me. I was working as a Java developer at the time, so when I stumbled upon a news about the release of Clojure 1.0 I was super excited. A practical Lisp seemed like a dream come true to me! I immediately started playing with Clojure and enjoyed it immensely. I was impressed by the immutable data structures, the seamless Java interop and the powerful concurrency primitives. Along the way I developed a deep appreciation for the merits of functional programming and explored a few other functional programming languages.
LC: What is CIDER and how did you wind up as its maintainer?
BB: CIDER is an interactive Clojure development environment for Emacs. It’s pretty similar to SLIME (which I consider CIDER’s spiritual ancestor) for Common Lisp and Geiser for Scheme/Racket. People who are not familiar with Emacs should think of CIDER as a Clojure IDE plugin, that provides a ton of useful (Emacs-flavoured) features like interactive code evaluation, code completion, documentation lookup, code navigation and many others.
CIDER is built on top of the popular nREPL server and replaces SLIME + swank-clojure as the standard way to write Clojure programs in Emacs. A lot of the functionality in implemented in terms of reusable nREPL middleware, which makes the project pretty accessible to Clojurists who are afraid of Emacs Lisp. Portions of CIDER’s middlewares are used in other dev tools like vim’s fireplace and Gorilla REPL.
I was an early adopter of CIDER (which was named nrepl.el back then) as I was pretty excited to use a development environment tailored specifically for Clojure (unlike SLIME). The project felt pretty barebone (compared to SLIME) and my Emacs skill were pretty decent, so I started contributing features and improvements to it (I think the first major thing I contributed were the compilation error highlights). About one year after the project started, the original maintainer Tim King had to step back and handed over the maintenance to me. I’ve been hacking on CIDER pretty actively ever since and I have epic plans for its future! 🙂
LC: What is the best resource for someone who wants to get started with CIDER?
BB: I guess that for people familiar with Emacs the best resource would be the project’s README itself.
Users who are new to Emacs should probably start with some gentler tutorial like http://clojure-doc.org/articles/tutorials/emacs.html or perhaps http://www.braveclojure.com/basic-emacs/.
While not strictly necessary, I’d encourage people to also have a look at cider-nrepl’s README.
A more extensive user guide (perhaps in texinfo format) and a few screencasts are on the roadmap, but I cannot promise when/if they’ll become a reality. Lots of bugs to squash and features to add prevent me from spending more time on improving the documentation.
LC: What is the best resource for someone (like me) who has migrated from SLIME and might not know all the cool stuff that’s in there now?
BB: The README lists all prominent config options and commands (or at least I think it does). The changelog is also a great place to discover new features.
There’s a wiki entry on differences with SLIME, but it hasn’t been updated in a while, so people won’t learn much from it. Guess I should find some time to update it!
I’m always planning to write blog posts and do short screencasts for important new features, but unfortunately I never find the time to do so. Who knows, maybe next year…
LC: Where can people follow your adventures online?
BB: There are plenty of opportunities for people to stalk me online. 🙂 Here are some of the best options:
- http://batsov.com/ (my personal blog)
- http://emacsredux.com/ (my Emacs blog)
LC: One last question: If Clojure were a zoo animal, what would it be and why?
BB: A bear! Bears are (arguably) cute, smart and powerful. They are good at pretty much everything – they can run very fast, climb trees and swim. Does this remind you of a certain programming language?
LC: This was a great interview and I enjoyed it!