Monday, April 30, 2007

No Fluff in Reston

Lollapalooza is a travelling tour of singers of alternative, punk, and assorted indie music. It's been around nearly twenty years, and has given rise to imitators in other musical genres.

The closest thing I'm aware of in the software industry is No Fluff, Just Stuff (or NFJS, for short), where a band of speakers, typically consultants and technical book writers, discuss the software topics of the day. This may sound deadly dull, but it's for software developers, it's quite interesting.

Where does the strange name come from? It almost has a porn flavor to it, which ought to make it the "butt" of jokes. It is a reactionary title, suggesting many similar conferences are merely there for big software firms to sell something to attendees. They avoid such direct selling, though certainly, there's indirect selling as the speakers can present themselves as consultants, even as they don't talk about it themselves. And, they can kinda push their own books or books from friends.

This "tour" grew out of Jay Zimmerman's JUG (Java User's Group) somewhere in Colorado, so there's going to be some bias. In particular, NFJS doesn't do Microsoft. There's no C#. There's no ASP. It's not that the speakers are entirely against the idea, indeed, some do C# consulting. However, it's not exactly Java either.

The list of topics are typically: Java, Hibernate, Spring, Ruby, Ruby on Rails, Groovy, agile methodology. Agile methodology breaks down into Scrum and XP, leaning more to Scrum, but also encourages unit testing and TDD (test driven development).

The event lasts three days, a Friday afternoon and early evening, followed by 9-5 on Saturday and Sunday. The strange schedule means attendees typically give up a weekend, but it tends to work out better as more companies are willing to have their employees miss half a day, rather than miss three days.

Because speakers are kept around based on how the attendees like them (they fill out surveys and such), the talks are typically uniformly very good. I've attended three NFJS, and I do it, even though it rarely covers technical topics that affect me directly. I do it partly because I want to see what the rest of the software world is doing and thinking. To be fair, NFJS is at the bleeding edge, and part of their efforts is to direct the way Java server side code is done. They, I feel certain, did as much to popularize Ruby on Rails as anyone, especially with dynamic speakers like Dave Thomas.

Having been to three of them, I have some criteria that I use to decide how good a talk is. First, the speaker is engaging. It helps to like a speaker and to have a speaker with energy. Perhaps the two guys that best fit the bill are Scott Davis and Venkat Subramaniam. It's not a must. For example, Neal Ford is still quite good without having the same energy. Dave Thomas is funny, and while he seems to be somewhat less personable, he is nonetheless an engaging speaker.

The second criteria is that the speaker knows their subject, and some are outstandingly good at this, especially Neal Ford. He seems to know a ton about a lot of things, and it's really difficult to stump him. The guys are generally quite well prepared (the downside is there are no women speakers on tour, and few women attendees). The third criteria is a certain "wow" factor, and by that, I mean, you get something out of the talk that you wouldn't if you read a book or the Internet. The speaker has some insight or does something particularly cool.

I'll give you an example. I once attended a talk on Java myths about the garbage collector, and it's just the kind of talk you can't find elsewhere. It may seem like the dryest topic ever, and yet, a Java developer has to deal with the garbage collector.

He said that many people try to create objects outside of loops, because they feel the garbage collector will kick in, and slow things down. He said while this used to be true, using objects for a short amount of time, say, the time in a loop, is almost free. Java reclaims such objects very quickly. Indeed, the longer you hold an object, the longer it takes for Java to reclaim it (really, the JVM). It's optimized to get rid of short-lived objects quickly.

Or, Java objects with finalizers are not garbage collected unless it absolutely has to. The problem, apparently, is that a finalizer can resurrect the object, and the JVM doesn't want to deal with it. This can kill performance.

You can hardly get this kind of information anywhere else, and yet it feels highly relevant.

I ignore some topics completely, like Spring, Hibernate, and Tapestry. I favor language talks and agile talks. This year, the emphasis was on Groovy, a scripting language for Java. Unlike, say, JRuby or Jython (which no one seems to work on anymore), Groovy was built with Java in mind, so it does things that the JVM can handle. It runs slower than Java since it uses a bit of reflection, but is not held down trying to be faithful to an existing dynamic language like Ruby or Python. Scott Davis gave two good talks on Groovy, then Grails, which is the Groovy version of Rails.

I also like listening to agile talks, but they almost always fail on one additional criteria I have for talks, which, interestingly enough, comes from Dave Thomas (a regular NFJS speaker). One of Dave Thomas's best talk is non-technical, at least, from a software POV. In particular, he talks about different levels of expertise from novice to expert. A novice needs to be told very precise things to do. The example given is a cookbook recipe. How much is a pinch of salt? Is it half a teaspoon? A quarter? A beginner won't know, and wants details to the last step.

A good talk of the sort NFJS should do this, even if the talk is about agility.

I'll give you an example of one kind of talk I've seen several times which drives me completely nuts. Because there are plenty of agile speakers, there's a huge emphasis on unit testing even to the extreme of test driven development (TDD). Each speaker I've heard (at least two), tells you how wonderful unit testing is, why you absolutely have to have it, how it saves you time, how you can convince people to use it, and so forth.

But have they ever, ever demonstrated how to download JUnit? I know, it should be easy! We're all "experts", aren't we? Well, no. This is why we attend NFJS. First thing, tell us the website to download JUnit. Tell us how to install in Eclipse. Tell us how to run it command line. Then, come up with something to do TDD.

And pick something with, say, a database. Something real. Most people eventually have issues such as "I'm not just manipulating plain old objects--I have a webpage, or a database, etc". Code that up.

There are some extremely practical issues. For example, how do I get cruise control to run the unit test automatically? Where do I place the unit tests?

The advice reminds me of those people who say "don't prematurely optimize". Profile, baby, profile! And then what? And then they don't profile. Download a profiler. Run it. Tell us how to interpret the results. Tell us how to make intelligent decisions from the profiler. If we're novices, we can't even profile!

Or, running a Scrum. I sat through a talk which had good ideas. The speaker was pretty good, even. He talked about user stories, but didn't demonstrate actual user stories, which, to my mind, is a bit of a deal breaker. It's like going on a vacation and talking about it, but not having any pictures to show. In the end, when you hear high level details, you don't get a sense of where things go wrong and why.

And there's one thing that bothers me about agile talks. It would be nice to figure out whether it really works. Do people meet deadlines? Do you actually schedule things differently? How important is it to hire an agile coach to tell you what to do? This is the part that treads between what NFJS does and what it wants to do. It wants to avoid overt selling. That's fair. But if agile coaches feel they are necessary to make that transition, maybe they should say so. I understand how self-serving that is.

Let me run through some of the talks I liked. I sat through a lot more of Neal Ford's talks, and they're uniformly good. He covers a gamut of topics from JRuby to Groovy to tools that help you be more productive as a programmer. Now, I recall who he reminds me of (looks-wise). Bobby Riggs. Anyway, excellent speaker.

Also liked Scott Davis. Scott does a few things pretty well. First, he always seems really happy. Then, he always says how wonderful your question is. Even if it's not, you tend to feel good about asking questions, and that seems like a good goal for a speaker. He also manages to do a few things that are beyond the trivially basic stuff so you feel you're getting value listening to his talks.

I liked both David Hussman and Nathaniel Schutta as speakers, but the quality of the talks weren't as good because neither had much takeaway. Hussman, for example, didn't walk through an actual agile session from story cards to schedule planning. True, the talk was about agile requirements, but he didn't come up with any requirements either. This is where you can shine as a speaker. Invest the time to find an example that isn't too arcane (maybe requirements for keeping track of various tasks done by a development team) so everyone can understand it (so no Hibernate or specific technologies like that), so that people have some sense of how to apply it in the real world.

Similarly, Schutta gave compelling reasons to test, but there are plenty of practical steps needed to add unit testing to one's life, from downloading and installing JUnit, to deciding how to organize the test code from the real code. I've seen similar talks by Jared Richardson, and this step is also missing from his talk. That's one more step someone has to take to figure stuff out, and that's one step that a speaker could do for you.

Ideally, if there was an Internet connection (I'm surprised there isn't even Ethernet wired to the place), they could download and demonstrate how to do the installation.

I kinda wish Jared would be given a talk that has more code in it. He tends to give the agile talks, and I feel the agile talks tend to be weak as a group, partly because it takes more work to demonstrate the principles as I'd like to see them. He's written some stuff related to Ruby or some such, so I'd get a better sense of how Jared covers material that involves examples if he covered talks with them. Alas, he's told what to talk about (not surprisingly).

Here are some suggestions I'd make. For agile development, I think it might be worth trying to run a one-day (well, 8 hour) session with desktops or laptops set up (the logistics would be admittedly horrid) and going through an agile development compressed into a single day. "Scripts", i.e., giving people lines to say so they can play-act would be helpful.

I'd like to see some talks given to real basics, like database technology, as well as talks on pie-in-the-sky ideas like Haskell or O'Caml.

I had thought Blogger had killed this post, and was made, because it is supposed to be automatically archiving it as I type. It turned out that it did archive it, but I couldn't see it right away. They still need to fix that.

Anyway, as negative as I sound, the weekend is always great because it gets me to think about ideas, even if I don't always take the steps of doing it myself.

1 comment:

Charles Oliver Nutter said...

Pardon me, but JRuby has more people working on it now than ever before. We've got six core committers, a community of about 30-35 people contributing patches, and dozens of people putting up production JRuby and JRuby on Rails apps. Your characterization of JRuby as something "nobody works on anymore" is pretty far off.

Jython has also seen a major upswing in activity the past six months, and will release beta 2 of their 2.2 release this week. Combine that with JRuby's 1.0RC release soon and both projects are looking great.