Dr. Christian Betz will be giving a talk at EuroClojure 2017. His talk is called Tear down this wall – rethink distributed systems.
PurelyFunctional.tv: What is your favorite feature of Clojure?
Dr. Christian Betz: Tough question to begin with, because it's the well-balanced mixture of features which makes Clojure such a productive tool. Forced to pick a single one and not to fall for the "what is your favorite feature of LISP", I really like the immutable datastructures the best. They are the basis for so many other cool features and yet so easy to use due to the great overall design - yes, for me that's still the Clojure feature #1.
PF.tv: What is your least favorite feature of Clojure?
Dr. CB: Easy question - as Clojure is based on the JVM, you're not overcoming "dependency hell". That's the source of the most subtle bugs. However, it's a tough problem to solve, because it's not only a matter of language design, but also one of community and ecosystem.
PF.tv: Can you briefly describe your talk?
Dr. CB: A lot of people in the Clojure community are developing distributed systems. They are creating Single Page Application where your code lives in the browser and in many micro services. Or they are driving a cluster running Spark jobs. I will shine a light on different approaches to deal with the burdens of developing distributed systems. Is REPL-driven development the way to go? How many REPLs do you need? One for each piece of your system, e.g. ClojureScript/Frontend and Clojure/Backend? I'd like to fancy an approach, where you could move the borders of your systems at your will, giving you the power of dynamic architectures.
PF.tv: Why did you choose this topic?
Dr. CB: Tearing down the wall -- aka bringing freedom of choice to your software designs -- is a topic I'm concerned with for the last years. I believe in not having one fixed software architecture, but in having multiple architectures in a single codebase, coming to live at different times: A system you need to interact with in your REPL does need an architecture different from a system under test, different from your productive system. Clojure and ClojureScript do give you the features necessary to create this freedom. And where but the EuroClojure in Berlin is the place to talk about freedom and choice 🙂
PF.tv: What is one thing I will be able to do after watching your talk?
Dr. CB: You will reflect on the architecture of you own system. And - if we're both lucky - you will also reflect on the organization you're working in. Remember Conway's law? We're constraint to produce designs which are copies of the communication structures of the organization. Are you sure a frontend team and a backend team really serve your purpose best?
PF.tv: What are the three most important concepts I need to know to follow the conversation?
Dr. CB: If you're interested in this kind of discussion, you should watch Tim Ewald's talk on "Programming with Hand Tools". Different take, but very interesting.
There's a lot of good information from the Netflix people on their take on microservices -- why they started using them and what their ecosystem looks like today "Mastering Chaos - A Netflix Guide to Microservices" by Josh Evans. It's a lesson about system evolution.
And you should look into Powderkeg for its ability to connect a REPL to a cluster, very interesting approach taken by Christophe Grand. It shows you can address the same distributed problem I had in a very different way.
PF.tv: Where can people follow you online?
PF.tv: Are there any projects you'd like people to be aware of? How can people help out?
Dr. CB: Oh, we're having a number of projects, our latest being a Neo4j bolt-driver wrapper for Clojure or the most popular one, Sparkling, an Apache Spark/Clojure library. I'm really happy to receive pull requests as there are always missing features.
PF.tv: What one feature from another language would you like to see in Clojure?
Dr. CB: Actually, I'm not missing a feature from other languages. If I could make a wish for an improvement to Clojure, it'd be extensions to Clojure Spec: I really like the general idea, but it's really hard to express common idioms like "this map has keys a and b and no others". These things missing, extensions to Clojure Spec are popping up, incompatible and with different styles, making it hard to choose, and hard to switch between different projects.
PF.tv: What is your favorite Clojure function or macro?
Dr. CB: My number one Clojure function is
def - simply because I create a lot of function 'aliases' to access my data structures. Instead of
second to access a vector of firstname and lastname, I use
(def firstname first) and
(def lastname second) to encapsulate my datastructure. This way, if I need to change my datastructure, I only need to change a single
def. It's the small things that matter 🙂