Pre-Conj Interview: Lucas Cavalcanti

October 17, 2014


I got in touch with Lucas Cavalcanti. He is giving a talk together at Clojure/conj with Edward Wible, who was unavailable. The background to their talk is available, if you like.


LispCast: How did you get into Clojure?

Lucas Cavalcanti: I've got into Clojure at Nubank, the company I currently work for, about a year ago. Nubank was already using Clojure, so I learnt it as we evolved the project. I was already familiar with Lisp syntax and knew functional programming very well, so the move to Clojure was not too hard.

LispCast: Can you explain a little about Nubank? And how do you use Datomic?

LC: Nubank is a tech company for financial services that just went public:

We use datomic as our primary database system, taking advantage of the free datomic transaction logs for auditing, and adding more data to improve auditing. We also use the datomic query language (based on datalog) to analyze data, often joining multiple databases, since we have a SOA with each service having its own database.

We also use some datomic capabilities to do database sync with mobile clients and cache management.

LispCast: Your talk's description mentions some "hidden superpowers of Datomic". You mention that the solutions to these problems are generic. Does that mean they can work for any problem?

LC: The solutions we'll provide will have some small assumptions to work, but these assumptions don't depend on the entities types we're saving, just something about the database structure. Thus we said the solutions are generic, and could work for any problem that matches these assumptions.

Also means that we can write just one function that will serve to implement one of that "superpowers" for all entities/endpoints of your system.

LispCast: So a lot of people are new to Clojure, and certainly to Datomic. Can you explain Datomic briefly for those of us who have never used it?

LC: If you know Git or any version control system, Datomic brings to a database many powers you have with Git: Think of each database transaction as a commit that generates another version of the database. So you can get the database value at any point in time, check the changes made by a specific transaction, all the history of a certain entity or even create "branches" of the database.

It works by collecting facts like "the entity 123 has the attribute :speaker/name with value "Lucas Cavalcanti"" and gives a query language based on datalog that, once you get the basic concepts, makes much more sense than any other query language I've worked with.

LispCast: So, is there anything else you think people should read up on to make the most of your talk?

LC: Read the docs:


LispCast: Where can people follow your adventures online? Where do you socialize?

LC: I guess twitter @lucascs

LispCast: Ok. Last question: If Clojure and Ruby got together, what would they name their baby?



"the (dis)functional duck typing" ;)

LispCast: Awesome! Thanks for a great interview. It was informative.

This post is one of a series called Pre-conj Prep.

You may like the Newsletter

For more inspiration, history, interviews, and trends of interest to functional programmers, get the free Newsletter.

Learn More

Clojure pulls in ideas from many different languages and paradigms, and also from the broader world, including music and philosophy. The Newsletter shares that vision and weaves a rich tapestry of ideas from the daily flow of library releases to the deep historical roots of computer science.

Clojure/conj is a conference organized and hosted by Cognitect. This information is in no way official. It is not sponsored by nor affiliated with Clojure/conj or Cognitect. It is simply me curating and organizing public information about the conference.

You might also like