The last week has been a whirlwind of functional programming. In this post I'm going to talk about the CLojure workhop I attended.
It started on Tuesday with a clojure workshop taught by Stuart Sierra. If you ever get the chance to see him talk or teach a workshop I highly recommend doing so. The workshop was great, it was well planned and with a good mix of presentation and labs.

The first day was for the most part things that I had read about on my own - The language itself, the REPL, functions, flow control and collections (and sequences). There was also namespaces which I hadn't read about. While I had I knew the basics for most of these topics I still got a lot out of the day. The presentation portions of the workshop were not like most of the tutorials or Koans that I had seen, they weren't just here is how you do this in Clojure. There was a lot more background to why thing work the way they do, as well as best practices and some problems people have. The labs were the hands on protion of the day intersperced between the presentations. I managed to work through most of these fairly quickly, and when I wasn't Stuart was always happy to help out. It was in this part of the day that his familarity with the language and all of the idioms became aparent. I would at times sit for minutes pondering what stupid mistake I had made and he would very quickly pick up what I had done wrong.

On the second day we started to get to some more complicated concepts - concurrency, polymorphism, macros and life on the JVM. There was also a brief introduction to ClojureScript. I was unfamilar with almost all of these conecepts, I had briefly looked at multimethods but that was it. Concurrency turned out to be a lot simpler than I was anticipating, I suppose this is mostly thanks to the use of immutable data. Macros kind of blew my mind. Coming from an OO world having never used any Lisp idalect before the whole concept was foreign to me. I think I have a good grasp of what macros are and how they work. When it actually comes to writing a macro that's a completely different story, I need a lot more practice before with this. I did a little more with macros since then, but I'll talk about that in my next post.