JavaScript programmers need to learn Clojure
It’s half past noon, and I’m sitting in a nice hummus place in Manhattan. I look anxiously at the big clock on the wall every few seconds because I should be having lunch with David Nolen, my personal idol and a ClojureScript hero, in just a few minutes. I want him to speak at ReactiveConf 2016, and I’m pretty nervous about what he’s going to say to my proposal.
Well, after a great and mind-opening chat about React, Clojure, and state management in Om, David accepted my invitation! And later he gave one of the most exciting talks of the last year’s ReactiveConf:
Eventually, since we are huge fans of Clojure, we joined our efforts with EuroClojure and persuaded them to organize their 2016 conference in Bratislava:
Clojure has forever changed the JavaScript community
Maybe you’ve never heard about Clojure, but it’s had a huge impact on you how program front-ends regardless. Redux, immutable data, time travel debugging, hot reloading — all of this has been inspired by the Clojure community.
Its creator, Rich Hickey, has taught us over the time that
- simplicity matters,
- values have their value,
- and that taking your time to think is more important than TDD.
Daniel Higginbotham summarized the key takeaways in The Unofficial Guide to Rich Hickey’s Brain, and I strongly recommend this read for everyone coming to functional programming from the OOP world.
Closer look at Clojure
Now you’re wondering what makes Clojure so special.
Clojure is a dialect of Lisp, and we all know the jokes about Lisp parentheses, don’t we? So the biggest advantage of Clojure can’t be the parentheses, right?! Well, I’m sorry, but they actually are!

One thing you have to know about Clojure is that it does not have syntax. In Clojure, everything is data. Even the code is just a huge nested list of lists, which is where the parentheses come from.
This simplicity makes it easy to write functions that transform and generate the Clojure code. Such functions are called macros, and they have a built-in support in Clojure. Thanks to them, most of new language features can be included as a library. That enables a fast evolution of Clojure that’s unimaginable in other languages. For instance, generators, CSP, destructuring, or pattern matching, are implemented in Clojure as macros.
You don’t use classes and objects in Clojure, you work with pure data instead. There is a handful of data structures in Clojure, but there are millions of functions out there compatible with these data structures.
It is better to have 100 functions operate on one data structure than 10 functions on 10 data structures.
— Alan Perlis, Epigrams on Programming
Standard OOP programs usually contain a lot of boilerplate code that converts data between objects, rewriting the same logic over and over again, just to apply it to different classes. In Clojure, you simply don’t have to do this.
You can reach a point with Lisp where, between the conceptual simplicity, the large libraries, and the customization of macros, you are able to write only code that matters.
— Rich Hickey, Code Quarterly 2011
I strongly recommend to try Clojure at least for a while, even if you won’t use it as your main language. There is a lot you can learn from it that will make your everyday work easier.
Are you just as excited about ReactiveConf 2017 as we are? Then buy a ticket now! It will cost you only €499 until July 15. The ticket will grant you access to all three days of the event.

Don’t forget to follow us on Twitter, Facebook, and Medium for exciting news and announcements.
By Samuel Hapák, co-organizer of ReactiveConf