How did we introduce?
I guess much like anything we use, we didn't really introduce it. We
experimented with it, used it to build some internal tools and
systems. These would be rolled into production and we'd start getting
a feel for where it might/might not be useful.
We've favoured building systems in small, independent pieces which
makes swapping out an implementation easier, and encourages us to
learn and re-learn everything about what that piece did. We'd take the
knowledge but feel confident about dropping any/all of the code that
ran before.
I used it originally at the beginning of last year for doing some work
with Google's APIs and to build a system to run the ETL flow for one
of our businesses. A part of that runs on Hadoop (we have some tens-of-
gigabyte XML files) and is still used today, although we dropped the
flow system for a JRuby implementation.
More recently, we've been working at uSwitch to replace a
monolithic .NET system (it's actually lots of WCF services, but feels
like you can't manoeuvre easily :) with a mix of Ruby and Clojure. A
colleague, Mike Jones, was on paternity leave and felt Clojure might
be a good fit for the core pricing/comparison of the Utilities. As we
went we uncovered all kinds of nuances and things which had been
missed in the original .NET, and our Ruby implementation.
How did we get other people involved?
Anyone that worked on the team would need to do some work on the code
at some point. Mike has kind of been the lead for it, but, all of us
have been working with it.
We place a big emphasis on learning. We started studying SICP and
organising weekly meetings to go through examples. Others started
working the Project Euler questions and meeting to go through those.
What have been the biggest problems?
I think it's been getting the functional-feel/Clojure-feel. After a
while you get a feel for what's good/bad with OO languages- forced out
through many years of TDDing and applying OO principles to older
systems. I don't think any of us had experience with a functional
language, so you have to rely on more base things to know whether it's
going well. I'd say more recently, I take a lot of inspiration from
Stuart Halloway's emphasis on Simple over Compound to know where a
solution lies.
I'd say it's taken us a long time and lots of extra learning to get to
being average Clojure programmers. But, I definitely think it's made
us significantly better programmers overall (a side-effect of learning
SICP and some other old-school CompSci books has been making better
decisions). It sets the programmer bar pretty high.
What have been the biggest successes?
I actually think one of Clojure's best strengths is it's Java Interop.
If I'm looking at using some Java library, I'll almost always 'lein
new' a new project and play around. I find the flow in Emacs/SLIME
with Clojure very productive now. I also think the interop code you
write ends up being cleaner than with other JVM languages (think
JRuby).
The bit of code I wrote at the beginning of last year to do some of
our big data ETL is still being used (although given it's triviality
it's more to do with it just working, than a specific Clojure #win :).
The utilities pricing has probably been in production for around 9
months and runs really well. We hired Antonio Garrote (https://
github.com/antoniogarrote), who slated our Clojure code during his
interview, and he's been using Incanter to help analyse and visualise
some stuff he's been doing with Mahout.
Aside from anything Clojure specific, I think the biggest success has
been the emphasis it's placed on us to be more thoughtful and
analytical programmers.
Any surprises?
This isn't really related to Clojure per se, but, Mike and I both
attended clojure-conj last year. During the flight we paired for about
7 hours and rewrote whole parts of the utilities code. Protocols had
just been introduced to Clojure and we thought it might be possible to
write a tidier implementation. We added them and then deleted them,
our implementation didn't really work out very well. But, what was
surprising was how being locked away without the Internet was still
productive. We felt it was one of the most productive 7 hours work
we've ever had.