This year's cf.Objective() was the biggest, most successful ever: more attendees, more speakers, more tracks, more content, more sponsors, lightning talks, BOFs, ad hoc sessions - more, more, more! Yet it still managed to maintain the great ratio of attendees to speakers that gives people a small conference feel with great networking opportunities.
This year I attended a session in almost every single slot. That's almost unheard of for me. I normally skip a lot of sessions and hang out in the hallways, talking to other folks who are skipping sessions, or working. Not this year: Bob Silverberg and his team put together an awesome schedule that was unmissable!
Here's my quick run down of the sessions I attended - others have posted reviews of many of the other great talks that I would also have liked to attend:
Opening keynote. With Adobe not sponsoring the conference this year, the keynote duties fell to Scott Stroz as a brilliantly funny MC and a selection of Adobe Community Professionals / Champions. We heard about the goodness that is ColdFusion Builder 2 from Ray Camden, what's coming in ColdFusion 10 from Mark Mandel (including a tantalizingly brief glimpse at closures), contributing to Open Source projects from Bob Silverberg, some great material about hiring CF developers and growing them from Jason Dean. The keynote ended with a teaser: the next release of ColdFusion is coming sooner than you think! Perhaps we should expect a 9.1 or 9.5 release later this year?
With the ACPs / ACCs being the semi-official voice of Adobe, I was very pleased to hear the message that it is not Adobe's responsibility to grow new CF developers - it's up to the community. That's something I've been saying for years and a lot of CFers really do seem to believe that growing the community, creating more jobs, training the next generation of CFML experts etc is all down to Adobe. Sorry, but that's not how languages work. Jason said if you're having problems hiring, reconsider your job description: look for web developers, not CF developers - and quickly cross-train them to your way of thinking, showing them the RAD benefits of CFML on the Java platform. That's how I got started, along with the rest of my C++ / Java team at Macromedia, and many of that team are still fairly devoted CF developers!
- Making legacy code testable - Emily Christiansen. This is one of the hardest problems most of us face when trying to introduce automated testing on existing codebases: code that wasn't designed for testability is often extremely difficult to test. Emily took us through several examples of typical spaghetti code and showed how to extract code into CFCs, adding tests along the way, so that legacy code can be slowly refactored into a more modern, more robust codebase alongside a suite of tests that ensure future changes can't break things that already work. It's slow, painstaking work but the end results are definitively worth it, and it should give hope to folks drowning in a sea of unmaintainable, legacy code.
- Code deployment shouldn't only be FTP: using Ant to automate your build process - Peter J. Farrell. Peter regularly gets the award for the longest session title but his presentations are punchy and to the point. Even tho' I'm a long-time Ant user and advocate, I picked up some useful hints and tips from this session that will help make my build scripts more maintainable. I was hoping for a bit more depth (perhaps a deep dive next year?) but it covered a lot of ground for an Ant 101 presentation.
- NoSQL? No problem - Peter Bell. Most of the NoSQL presentations I've seen focused on a particular data store and how to use it from CFML. That's great if you've already picked one or you're just experimenting. Peter's talk focused on the driving forces behind the emergence of NoSQL and looked at the four very different types of data store and why you would pick each one (key/value, column data, document, graph). For each type of store, he covered good use cases as well as pros and cons. I came away realizing that the ideal setup for work will be one store for logging (we're going to look at Cassandra) and another store for user data (almost certainly MongoDB). One of my colleagues will still evaluating Cassandra soon and I'm off to MongoSF next Tuesday to learn more about that. Thank you Peter!
- Forms that don't suck - Matt Quackenbush. Despite serious technical problems at the start of the session that caused Matt to swap to someone else's laptop, he presented ValidateThis and cfUniform in depth with clear, solid examples. I've looked at ValidateThis a couple of times and will do so again, because of this talk, as well as looking at cfUniform for the first time.
- Implementing an in-memory distributed cache using ColdSpring AOP and Ehcache - Adam Bellas. This was Terracotta's sponsor-supplied talk but it was far from an advertising pitch. Adam went in depth into configuration issues and how to leverage AOP to caching to existing services, along with very impressive numbers showing the before and after capacity of the system. It's a topic that would benefit from more time to ramp attendees up on the basics, but it showed the power of distributed caching systems.
I skipped the lightning talks so that I could spend the evening working, since I'd been so engaged all day!
My first 'miss' of the conference was getting caught up in some interesting discussions over breakfast and not making it to Bob Silverberg's Selenium session. I gather he showed off integration with CFML which would have been really useful at work. Darn!
- Web single sign-on and ColdFusion - Adam Crump. Adam definitely knows his stuff but this was a hard session to follow. He focused on the protocols and configuration of SSO providers so it was a little hard to get a sense of what's really involved at a CFML level (what code he showed suggested it was much easier than I would have expected). The most valuable part for me was an honest review of what problem areas remain for SSO implementations - what works well and what doesn't work so well (or at all). I think I'd need to see more sessions on this topic before I felt I had the information I need.
- Simple MVC with FW/1 - Daria Norris. Of course I'm going to attend a session on FW/1! Daria had some initial technical difficulties but then provided a good MVC 101 to get everyone up to speed on the basics of "why" and then showed how FW/1 makes it easy to implement MVC without needing to get bogged down in framework details.
- Holistic program quality and technical debt - Nathan Strutz. This was the absolute stand out session of the whole conference for me! Nathan was eloquent, informative and funny. He covered a broad variety of areas that, together, make up our general sense of "quality" and he talked about lots of different ways that we can accrue "technical debt" - a future cost of maintenance caused by not doing things right in the first place. He emphasized how hard it is to avoid that debt but also how important it is to be aware of it and factor "repayment" into your future plans. An excellent presentation, packed with good information!
Next up, and last session of the day, was my two hour deep dive on multi-tenant, multi-lingual web platforms. I was very glad to see so many people in the audience already building these systems so instead of it just being me saying how I did things, I was able to get some attendees to explain their approaches so that we could look in more depth at various options I covered in the session. Preparing a two hour session is a lot of work and I still ran over a bit - and would have liked to have been able to dig even deeper into a number of issues!
Friday was Birds of a Feather night and I attended "What else do I need to know?" and "Object oriented design".
The former was billed as "How do I learn the non-coding stuff?" but we actually covered a lot more than that with some great discussions on how do we even find out what other stuff we need to know, how do we find out where to learn about it and some open and frank discussions on training policies and self-improvement. It's clear that even amongst folks who actively pursue self-improvement, there's a wide range of goals being set and a vast difference in what people consider appropriate for expanding their horizons.
The latter BOF on OO was well attended and had some very heated discussion about the pros and cons of various approaches. One of the main topics covered was ORM and the problems people are running into. I raised Ted Neward's famous observation about ORM, later covered in Jeff Atwood's blog post: Object-Relational Mapping is the Vietnam of Computer Science. The more I've worked with various ORMs over the years, dating back to 2005, the less enamored I am with them. Back in 2005 I created a talk called Objects & Persistence (available on my Presentations page) and took that around a lot of CFUGs and conferences. I tried pretty much every ORM that appeared in the CFML world and I worked extensively with Hibernate natively (from Groovy) in 2008/2009. I have a lot of sympathy with Ted Neward's position and I worry that CFers will find themselves in similar trouble now that ColdFusion 9 and Railo 3.3 have "Hibernate Inside". So I put on my Devil's Advocate hat and waved my pitchfork at the pro-OO, pro-ORM folks in the BOF. Hopefully it'll save those folks some pain - or at least they'll approach the process with open eyes. It's been interesting to find myself going from an OO advocate in a community of mostly procedure programmers to a somewhat anti-OO advocate in the same community that has now (mostly) adopted OO as the standard approach. I guess the pendulum has swing past my position and now I want to see more moderation :)
Saturday started with my introduction to functional programming session, which I had a lot of fun putting together. Because many of the concepts are so new to most CFers, I spent a lot of time on FP 101 which meant that I was over half way thru my hour before I got to my first code examples. I decided to press on thru the slides and dig into the other examples near the end of the talk. I ran over a bit but managed to show most of the expense report example I'd created to show how FP encourages you to build up solutions from a combination of small, pure functions that are easy to understand and easy to test. I didn't get to the next, more sophisticated example but showed it to a few people after the talk and they were impressed by the power (and simplicity) available with this style of development. I know several people went off to try Clojure afterward so I'll consider the talk a success.
- Don't forget about custom tags - Steve Bryant. Without doubt, another stand out talk and a close second behind Nathan's session about technical debt. Steve's session had a really good flow, covering a lot of the subtleties of custom tags as well as making a very convincing argument for their role as a facade to a well-encapsulated, CFC-based service layer. His compare and contrast approach to using UDFs, CFCs and custom tags for an increasingly sophisticated set of examples was compelling and I learned several new things about custom tags. Thank you Steve!
A business meeting meant I had to miss Emily Christiansen's talk on antipatterns. I saw an earlier version of it and would highly recommend it to anyone getting started with design patterns.
- (Abstraction + CF9 ORM) == modeled in minutes - Matt Quackenbush. Although Matt hit some problems with his demos (which he very professionally soldiered on thru and solved), this was a great talk that offered a lot of solid, pragmatic advice on abstraction and generic programming patterns, showing how to minimize boilerplate code and improve reuse through clear API design and appropriate base classes for shared implementation.
- Simplifying development with ColdFusion on wheels: an introduction - Chris Peters. I've been to a number of cfWheels presentations now and I think I can see why it isn't getting the traction it deserves: it's practitioners are very enthusiastic and very knowledgeable but aren't able to really show how to approach cfWheels from ground zero in a very simple, intuitive manner. Every presentation I've seen dives pretty much immediately into the APIs and the breadth of conventions (all those folders!) without providing a clear path from, well, Hello World! to a simple blog without needing to learn much of the framework. Chris even noted that there's a lot to learn but once you have that down, it's very powerful. I don't think people need to be convinced of the power. I think they need to be convinced of the ease of use first. How easy it is to use this framework? So I'm going to set myself a challenge: I'm going to learn cfWheels and write it up so I can give a cfWheels 101 presentation and encourage more people to give the framework a first look!
And then it was over! Another excellent cf.Objective() - the best ever - and we're left looking forward to cf.Objective() 2012. Thank you to Steven, Jared, Jim and the rest of the steering committee for organizing the conference and to Bob Silverberg and his team for putting together an incredible line up of topics to educate, entertain and amaze! Great work everyone.