PurelyFunctional.tv: How did you get into Clojure?
Dave Yarwood: I happened to find Clojure at a perfect time in my journey of teaching myself to program. My preferred language at the time was Ruby. I really enjoyed how expressive you could be when writing Ruby code, in part due to the language's metaprogramming features. At the same time, I had started to explore functional programming by learning some Haskell and OCaml. I hadn't encountered Lisp yet, but coming from metaprogramming in Ruby, Lisp macros really captured my imagination. And having just learned the basics of functional programming from my studies of Haskell, I felt right at home with Clojure's immutable data structures.
In general, I think Clojure is just a really well-designed language. The standard library is jam-packed with all kinds of useful functions and primitives, and whenever you can't find something you need in Clojure or as a Clojure library, you always have the entire Java library ecosystem at your disposal as a fallback. I'm a big fan of that.
PF.tv: What is your talk about?
DY: First, a little background: Lately, I've been playing around a lot with ZeroMQ, an open-source messaging protocol and networking library that makes it really easy to network threads and processes together using sockets. ZeroMQ has implementations in a lot of different programming languages, but I noticed that the ZeroMQ libraries available for Clojure were not the most intuitive to use. I tried all of the available options, including using the Java libraries via Clojure-Java inter-op, and I found the most viable option to be writing my own Clojure library by leveraging a Java ZeroMQ library and building useful patterns on top of it. This Clojure ZeroMQ library of mine is called ezzmq.
My ClojureRemote talk will be a quick introduction to ZeroMQ, why it's awesome, and what you can do with it, and then I'll talk about my experiences as I've written ZeroMQ programs in Clojure, and what I think are some of the best practices. Conveniently, I've abstracted away a lot of these best practices into functions and macros in ezzmq, which I will also discuss.
PF.tv: Who is your talk for?
DY: This talk is for anyone who is curious about ZeroMQ or network programming in general, or anyone who is interested in building distributed applications and is curious to learn about at least one tool that you can use to do that.
If you've ever needed to write a program in Clojure that can communicate with other programs, and you weren't sure how to do it, this talk is for you!
PF.tv: What do you hope people will take away from the talk?
DY: I hope to show that network programming can be easy, and that ZeroMQ is a very useful tool to have in your programming toolbelt. Having an easy way to work with data flowing between processes opens up a world of possibilities for the kinds of applications you can build.
When I encountered ZeroMQ, I felt so inspired that I immediately wanted to try it out and start using it to build things. I hope the people who watch my talk will feel similarly inspired and start building cool distributed programs!
PF.tv: What concepts do you recommend people be familiar with to maximize their experience with the talk?
DY: My talk will be fairly introductory. I think even those who have little to no experience with network programming will have no problem understanding the concepts as I present them. ZeroMQ really does make it easy to work with distributed messaging, and I hope that easiness comes through in my talk.
That being said, it could help to have a basic knowledge of things like inter-process communication (IPC), TCP, packets, and sockets. These are all good things to know about in general, and they are the foundation on which ZeroMQ was built.
PF.tv: What resources are available for people who want to study up before the talk?
DY: The ZeroMQ ZGuide is an incredible resource, and a great read from top to bottom. I found it to be an excellent introduction not only to ZeroMQ, but also to network programming in general. There are useful code examples sprinkled throughout, available in a variety of programming languages, including Clojure. Although, I hope to show in my talk that there is room for improvement in the Clojure examples.
PF.tv: Where can people follow you online?
DY: My home on the internet is here; I have a blog there where I occasionally write about music and/or programming.
I also occasionally contribute articles to the Adzerk tech blog.
PF.tv: Are there any projects you'd like people to be aware of? How can people help out?
DY: ezzmq is the Clojure ZeroMQ boilerplate library I'll be discussing in my talk. It's still very new, and I would be interested in anyone's ideas about how it can be improved, what people like and don't like. My goal is for ezzmq to be the best way to write ZeroMQ programs in Clojure.
JeroMQ is the pure-Java implementation of ZeroMQ on top of which ezzmq is built. It's a fantastic idea; being able to use ZeroMQ in Java (and by extension, Clojure) without requiring native dependencies is wonderful. But the project is woefully under-maintained, and could use a lot of help from the community. If you're interested in ZeroMQ and you can stomach writing Java, I would encourage you to become a JeroMQ contributor. I've been contributing for a little while and I can say that the community is very welcoming to pull requests.
PF.tv: Where do you see the state of Clojure in 10 years?
DY: Clojure is already picking up steam as a viable programming language for production web applications. I think we'll see this upward trend continue as Clojure becomes more and more common in the industry.
The Clojure core team is constantly surprising me with new innovations like the Socket Server REPL and clojure.spec. I wish I could predict what kind of awesome things they'll come up with next, but I guess it will have to be a surprise.
Building upon the wild success of ClojureScript, I'm predicting that other platforms will start to emerge. ClojureCLR could see some success. 10 years is a long time. Who knows? Maybe a usable C port of Clojure will surface!
PF.tv: If Clojure were an animal, what animal would it be?
DY: I think Clojure would be a chameleon. It has something for everyone, which makes it easy for it to blend in with its surroundings. Functional programmers love its immutable data structures and sequence abstractions. Those more accustomed to OOP can appreciate its tactful use of polymorphism with multimethods and protocols. Lispers like it because it's a Lisp they can use in production. And Java programmers like it because they can use it to make jars without writing Java!