One of the advantages of attending UberConf over No Fluff Just Stuff (NFJS) is the larger number of sessions and the ability to provide more in-depth coverage during sessions.  The sessions that I found most interesting from UberConf 2015 were the ones related to Java 8, Groovy, and Big Data.

  • The all-day Functional Programming in Java 8 workshop, led by Venkat Subramaniam (@venkat_s), was fantastic. We worked through some very interesting examples that made clear the advantages (more concise, more expressive/easier to understand). Since J8 functions are inherently lazy, they can provide some performance gains, no actions are executed until a terminating action is called. We also spent a fair amount of time learning about lambda expressions (a reference to a single method interface), which was a pretty cool way to implement things like Runnables in a single line of code. There are a lot of advantages to using Java's functional syntax with collections -- it's extremely readable and easy to debug.
  • The Cassandra/Spark workshop I attended was interesting, though less useful than the previous (Java 8) session.  The Cassandra overview was cool -- the instructor provided a good overview of the Cassandra topographies and appropriate use-cases for its capabilities. The majority of the workshop centered around the implementation of the open-source DataStax driver for Cassandra. Many of the advanced functions of the driver are unfortunately behind the DataStax paywall. In the second session, we went through the implementation of Apache Spark with Cassandra.  Spark is most useful for low latency, high volume data streams/feeds with very fast writes. On the other hand, the query capabilities of Spark are quite limited (can only query on primary key); it's query language is inflexible with ad hoc queries.  One distinguishing characteristic of Spark from other tools to interact with big data stores is that Spark does not actually do map/reduce -- it distributes its computations across nodes in Resilient Distributed Dataset units (made up of tuples).
  • The UberConf 2015 Hadoop workshop was essentially an introduction to using Hadoop -- the content was quite similar to the Cloudera course. One of the interesting bits from the workshop was the discussion of using the MRUnit extension of JUnit for map/reduce.
  • Groovy was, in my opinion, the most interesting workshop of the week. Since Groovy runs in the JVM and relies on Java to run, it's a remarkably straightforward language to learn for a Java developer. The syntax is cleaner, and it's already functional, which reinforced the lessons of the Functional Java 8 session I attended earlier. One of the cool things about Groovy is that if you don't know how to write code to solve an issue in Groovy syntax, you can just write it in Java in your .groovy file, and it compiles with no issues. We spent a most of our session writing code in the Groovy Console, which is provided with the Groovy distro. We walked through two really cool examples -- one in which the instructor distilled a geocoding utility into about 10 lines of code, and another where he pulled back a series of cat pictures from the internet into a new Swing JPanel in fewer than 50 lines of code. Near the end of the session, we looked at a few Spock examples, which I thought was one of the more interesting Groovy implementations (not counting Gradle, I guess...). Spock is a lightweight unit testing framework that allows you to write very descriptive tests against your code, which can be in either Groovy or Java. I think there's a lot of opportunity to implement Spock tests in applications throughout our projects.