If you ask us what we want to develop in, we have a clear answer. Ideally in Clojure.
The first deal that led to starting Flexiana was an ERP that had no bugs. The client was a midsize telco company (the second-biggest provider of VOIP & call center infrastructure in the Czech Republic. Jiri Knesl, Flexiana founder (at that time the only person in the company) used Clojure, Postgres & a couple of other technologies. In the first 2 years, there were only 2 production bugs, both were in the Postgres part. There were no bugs in the Clojure part of the application.
It was like magic. Clojure didn’t just deliver high-quality software. It was also very expressive. Later the first app got DSLs for API, CRUD, access rights, etc. and it showed that:
After 8 years of usage, we have grown to become one of the TOP10 largest Clojure teams in the World (in fact after Nubank and Cognitect We don’t know any larger Clojure development team). And our collective experience shows more Clojure qualities. Some of them are:
The stability might seem weird, one might think Clojure lacks progress. But when you are so far ahead, you can stay where you are and still be the first and the best. Plenty of things have changed anyway (we switched from Luminus to Duct, from Prismatic Schema to Clojure.spec, we don’t use core.async when we don’t have to, we moved from Om to re-frame etc.), but truth is that the changes are mainly changes that drive us to more idiomatic Clojure. The underlying principles are great. So the only thing you have to do is to learn how to apply them.
We at Flexiana are committed to Clojure as our language #1 on the server-side and ClojureScript as our language #1 on the client-side. As our operating profit will allow it, we promise we will budget to give back to the community. Mainly:
We are incredibly grateful for the work of Rich Hickey, the Cognitect team and the whole community and we promise to give back a substantial percentage of our profit back to it.
The practice taught us that a state and mutable changes are roots of errors. Clojure comes with immutable data structures as first-class citizens.
Clojure syntax is very simple and consistent, easy to learn. No need to learn new syntax when a new feature is added to the language.
Clojure is platform-independent. In general, it’s run on JVM, but it can be run in a web browser or NodeJS.
It’s here since 2007 as a modern Lisp based on the best experience of computer science.
In general, Clojure is a functional language that allows us to write pure functions, describe side effects as data, use recursion, compose a program from small functions, etc.
Read-eval-print loop as the main programmer’s experience. A program can be composed by directly executing code from an editor in a runtime machine and seeing the result. The runtime machine could be anywhere on the Earth.
Build-in capabilities for concurrent programming as Software Transactional Memory and Agent System.
It allows an extensible and dynamic polymorphism.
The code itself is data. A program can manipulate the code via macros. Build-in data format called EDN.
It can use platform-specific features. Reuse Java libraries on JVM or communicate with a web browser API.