Hi! Tell us about who you are and what you do.
I’m Michiel Borkent, also known as @borkdude in various places on the web. I’m a software developer from The Netherlands. I’ve been working fully remote since 2016. I prefer working remotely over working in an office as I’m quite sensitive to sounds and movements around me. I started experimenting with Clojure in 2010 and have been using it ever since, while also dabbling with other languages. I’m mostly doing sponsored open source work within the Clojure community nowadays. The tools I’m most known for are babashka and clj-kondo. Babashka is a scripting environment for Clojure with batteries included and similar fast startup time as bash. Clj-kondo is a static analyzer and linter for Clojure, which is useful on its own but is also one of the building blocks of clojure-lsp. Check out my Github profile to see what I’m currently working on.
What is your hardware setup?
I’ve been using Mac laptops since around the same time I started exploring Clojure. I don’t think that was a co-incidence because Windows, which I used before that, wasn’t usually treated as a first-class citizen in developer tooling then. I recently migrated from a Macbook Pro 15" 2019 i9 to a Macbook Air 13" 2020 M1. Initially I intended to only replace my travel laptop with the M1 but it turned out to be more performant so I switched completely.
I like working from coffee places on my laptop. The 13" screen was a bit of a downgrade from the 15" one in this mode of working, but I feel that bigger screens don’t make me more productive. I can go for hours on just the laptop. I’ve also been doing that at home for about a year, while sitting at the dinner table, but started to get neck aches due to bad posture. After having moved back to my desk, I noticed that the Dell Full HD 24" screen I was using looked very pixelated compared to the Retina screen of my laptop. After a week I wasn’t used to that and asked around for good monitors compatible with Macs. I decided to go for an LG 5K Ultrafine 27". It’s quite the upgrade and I’m happy with it so far.
In the last company I was in, I was working on a project which demanded quite some memory due to an in-memory index. In that job, I’ve bought several new machines to keep up with that. Eventually I assembled a PC and installed Windows + WSL2 on it, so I would never have to buy a new machine for that project again. You can read about that here. It has an AMD Ryzen 9 3950X processor and 128GB memory. You can see all the specs here. Right now I’m only using this machine to test Windows or linux-specific issues with my open source projects, so for that purpose it’s quite over-spec-ed, but it did the job in that specific project. The plan of moving my development to WSL2 didn’t pan out as I’m still using macOS most of the time.
I don’t have any fancy keyboards and just use the standard Apple Magic keyboard and mouse. I recently bought an Apple touchpad and sometimes switch between that and the mouse.
I have a Blue Yeti USB microphone which I bought after I was on a podcast and noticed the subpar sound quality from my laptop. Since then I’m using that whenever I’m guesting on something that is recorded. For meetings I usually don’t bother connecting it and now use my Sennheiser HD4.50 bluetooth headphones with noise cancelling and built-in mic. In general I like Sennheisser’s sound better than brands like Bose and Apple, so when the time comes to upgrade this, I’ll probably be looking into Sennheiser again but in a higher segment for even better sound quality.
On each side of my desk I have a Dali Zensor 1 speaker connected to a small Denon hi-fi set (DM39 DAB Micro System), which is connected to my screen via a quite old external sound card (M-audio MobilePre). I use it to play music: mostly progressive rock and metal, through our living room, where my desk is. My wife also still uses it to play CDs, mostly early music and Bach.
I sit on a Steelcase Leap Office Chair which I bought second hand. I liked it so much that I also bought my wife one.
In the winter I use a HappyLite in the mornings to compensate for the dark days.
And what are the favorite items in your workspace?
Probably the Macbook Air and the new LG 5K monitor. The laptop is very light, yet performant, so it’s perfect for travel, working at a coffee place and at home. I just connect one USB-C cable from the new monitor and I can continue my work. The monitor feels like an extension of the laptop’s smaller high quality screen.
What is your software setup?
I use Emacs for all my coding. The setup is based on Bozhidar Batsov’s prelude. Like many Clojure developers, I use CIDER which relies on runtime information from a running REPL, but also clojure-lsp which exclusively relies on static analysis, an interestingly powerful combination. Clojure-lsp is using clj-kondo, the static analyzer and linter I wrote for Clojure for its Clojure analysis. When I started clj-kondo, I didn’t realize that it would benefit me in this way later on. It’s funny how these things can come together in the OSS world.
I use iTerm2 as the terminal application with zsh as the shell together with oh-my-zsh.
Any favorite programs/apps/tools?
Emacs is an all-time favorite. It’s comforting that a project from 1976 can still be relevant today, especially with all the churn in programming languages and tooling we see today.
Recently I discovered difftastic which
git diff experience when reading Clojure pull requests
locally. Wilfred did an amazing job on that.
During travel, I use TripMode to save on mobile data usage.
It’s gone a little bit out of fashion, but I still use Dropbox for synchronizing personal documents that are not in a git repository on Github.
As already mentioned, Clojure-lsp has become a boost to my daily Clojure development.
Magit is indispensable when it comes to working with git inside Emacs.
What are your favorite programming or scripting languages?
I’ve dabbled with various languages during my career as a software developer and will continue to do so. I started out with Common Lisp during an internship. The code-as-data-structure approach was mindblowing to me. When entering the industry I was quite disappointed with the proliferation of OOP and verbose frameworks. I didn’t feel like learning what J2EE was, it sounded so boring to me. I joined a company which happened to use C#. I started using F# in my spare time which I quite liked, but soon after, I discovered Clojure and it stuck with me ever since. I still like learning new languages like Haskell or Rust, but I keep coming back to Clojure when I want to get things done. Perhaps Clojure just matches how my brain works, more than other programming languages that I’ve used.
Clojure is a Lisp dialect which runs on the JVM and emphasizes interactive, functional and data-oriented programming. For scripting, compared to bash, it feels quite heavy and a bit slow too start. This is why I started the babashka project which compiles a Clojure interpreter, written in Clojure, which almost support the full language, to a native binary for ultra-fast startup using GraalVM native-image. Babashka comes with various built-in libraries which makes it a complete, standalone tool. There is also a variant of Clojure which compiles to JS: ClojureScript. Since the Clojure interpreter I wrote, SCI, also works inside ClojureScript, there is a similar scripting project which targets Node.js: it’s called nbb: Node.js babashka.
Is there anything you are missing in your setup?
I’m quite satisfied with what I have. When I was in a band as a keyboardist and vocalist, I used to take keyboard solo lessons from a virtuous keyboardist. I asked if I should upgrade my synthesizer. He told me: it’s not about the gear. It’s more about practice than having more advanced tooling. That comment is still in the back of my mind whenever I’m tempted to pimp my setup. Of course it’s important to buy things that last and keep you healthy, like a good office chair, so I won’t save money on that, but I feel my setup is in pretty good shape right now.
What book comes to your mind that you would like others to read?
I should really read more books. Most of my time is spent on actually writing software. When I wrote SCI, I discovered that I had been implementing what was described in Structure and Interpretation of Computer Programs and when I read the chapter about optimizations, I applied a couple of those techniques.
I’d like others to discover Clojure. Perhaps it will match your brain, or it won’t. You will only find out after using it for a while. But if it does match your brain sufficiently, there is no way back. I enjoyed The Joy of Clojure by Michael Fogus and Chris Houser when I got into Clojure myself. I think doing and reading is probably the best combination to master a new language.