Paula Gearon Clojure/conj 2016 Interview

Paula Gearon will be giving a talk at Clojure/conj 2016. She will be talking about Naga, production rules, and Datalog.

Follow her on Twitter and GitHub. How did you get into functional programming?

Paula Gearon: In 2004, I started seeing strange constructs starting to show up in our Java codebase at work. I could follow what they did, but I did not understand why anyone would write code this way. But the code was coming from several of my colleagues whose skills and experience I respected, so I knew better than to ignore it. They came from a computer science background, while I was a computer engineer. That's a degree that will get you a job as a programmer, but not give you the full theoretical underpinning of the discipline.

When I spoke with them about it, they kept referring to "functional" programming, and suggested that I watch the SICP lectures from MIT and read the book (Structure and Interpretation of Computer Programs). These completely changed my perspective on programming. My own Java code changed, and I even did the odd unusual thing in C. Then I started to learn languages with built in lambdas like Ruby and Python. But the real epiphany came when I learned Scala in 2009 and discovered immutable data structures.

I wince now whenever I see Javascript where someone loops over an array and updates it in place. It's totally valid, but it no longer matches my approach. What is your talk about?

PG: Description logic and how a rules engine can implement it. In particular, I describe the architecture of the open source Naga project that I've been developing at Cisco. This is a rules engine that runs on graph databases. What do you hope people will take away from the talk?

PG: An understanding of what description logics represent, how this maps into a graph database, and how a rules engine can be built to infer certain kinds of information from it. Ideally, they would come away wanting to apply rules to their own data. What concepts do you recommend people be familiar with to maximize their experience with the talk?


  • Graph databases (like Datomic)
  • description logic
  • production rules
  • the RETE algorithm

While I don't reference RDF specifically, this is my background, and the data model that this work is based on. The main difference is that RDF expects URIs (or IRIs) to be associated with everything, while I am trying to take a more generic approach. What resources are available for people who want to study up before the talk?

PG: Wikipedia articles on RETE, modus ponens, and Description Logic.

A lot of the recent research into Description Logic has been done by Semantic Web researchers. A useful background on data modeling for the semantic web is in the RDF Primer.

Also, if you can find a copy of Forgy's 1982 paper on RETE, then this is a useful read. It may be tricky to track down though. After my own unsuccessful search, my supervisor at university confessed that he only had it because a colleague had given him a copy. Forgy's older publications are accessible though (referenced on the Wikipedia article).

And of course, they can look at Naga. Where can people follow you online?

PG: I don't do post a lot online now, but I'm on Twitter as [@quoll]twitter, and GitHub with the username quoll. Are there any projects you'd like people to be aware of? How can people help out?

PG: The Rules engine I'm working on is Naga. It started as a hobby, but then I was able to start doing it for the Threatgrid group at Cisco. We use it to find connections between elements of data, and annotate entities with this information.

I have too many things in a half finished state, though I would love to move forward on some if I could have a conversation with people about them. Part of Naga is a re-implementation of Mulgara (a Java RDF Database I maintained), and I would like to break it out into it's own graph database. In particular, I want to rebuild the Mulgara persistent trees in Clojure. I made a start. But instead of building trees with this, it may be more efficient to use this as an on-disk storage option for the Datacrypt Project. This is a conversation I would love to have. Where do you see the state of functional programming in 10 years?

PG: Declining, and merging into another great idea.

C, and C++ were huge in the 1980s, but had largely diminished to a niche by the early 2000s. But the C++ heritage carried on in Java (I still remember the Java launch, with Bill Joy showing the C++ standard as the basis of Java, and most of the book after the first chapters was crossed out). I started doing OOP in 1992, and at the time it was changing the world. Of course, while it remained popular in many places, I started seeing skepticism, and even abandonment of OOP in the 2005-2010 period. But most functional languages support objects of some type.

We keep seeing new approaches (or in the case of functional programming, an old approach) taking over, while incorporating the previous paradigms. Going on history, I would suggest that in about 10 years we will all be looking at something different that few people are considering today, and it will incorporate functional programming in some way. If functional programming were a superhero, what superpower would it have?

PG: The ability to turn back time. Thanks for the interview!

PG: You're welcome.