This past weekend was the 5th annual Iowa Code Camp and I wanted to share my thoughts from the attendee point of view. But before I get into the details I must say this event was by far the best one yet! I had a blast and wanted to thank everyone involved!
Some would argue the best part about a code camp is that you can geek out with other people who are passionate about the craft. But this time around I personally found more value in the presentations. Each speaker was able to pack in great content and present it in such a way that I kept wanting more.
A Primer in Object Oriented Concepts Using Examples
The first session I attended was 'A primer in object oriented concepts using examples' with Nate Adams. This session was of interest to me because I think the best thing a software developer can do is get a rock solid understanding of the fundamentals. And these core OOP concepts are exactly what the presentation was all about.
Nate started with the question 'why did we switch to OOP, what does it do for developers anyway?' He showed a set of numbers and asked everyone to memorize them. We couldn't of course because he only showed this set of integers for a few seconds. Next he asked if we could memorize another set of numbers that fell into a pattern of sorts. The idea behind this was that computers are solving much larger problems today and we needed a way to reduce complexity.
The first concept that he went into detail about was encapsulation and how we can use this concept to reduce the amount of things we keep in our head at one time. From my experience this is also good because we never expose how something is implemented, instead we name it something that reveals the intent.
He then got into inheritance with the usual 'is a' analogy to help people understand that we are trying to model things in the real world. The examples here were great because he talked about not only base classes but interfaces and how the interface represents more of a 'can do' relationship when compared to an abstract base class.
The last part of the presentation covered everyone's favorite topic, polymorphism. The explanation was a little different than I typically view it (different things to different people), but I went with it anyway. My only feedback for Nate specifically was around the examples shown during this part of the talk because it was a little complex for someone new to the topic. But aside from this small issue, the talk was an amazing wealth of knowledge about the core object oriented concepts!
LINQtroduction
The next session I attended was the LINQtroduction with Dustin Thostenson. To be fair I'm good friends with Dustin and couldn't say a negative thing about the guy if I tried. I went into this talk with the expectation that I would learn something new about LINQ, and it turns out I did!
I found his presentation to be above and beyond any LINQ intro talk. He started with the high level view describing what LINQ is and what it's trying to accomplish. Next he got rolling with a very basic example showing how you might enumerate over a collection with a for/foreach loop. This was then followed by the LINQ equivalent and I thought this was a great way to introduce people to the new technology. He explained in great detail how LINQ worked by talking about the basic compiler tricks that were introduced to build it into the framework. The only point not covered in extreme detail was the concept of expression trees, but to be honest this isn't a very 'intro' concept for anyone (heck I don't even understand what they are). My favorite part was the excitement around extension methods from the audience.
Along with the great presentation, Dustin offered the entire source code via CD so you could take it home and hack a bit more. The only real improvement I can comment on was related to the projector refreshing with each switch of the slides. For some reason the resolution or age of this projector was causing a delay between slides/sample code.
It's Chess, Not Checkers
After lunch I attended a very interesting session with Dru Sellers labeled 'It's chess, not checkers'. To be clear I wasn't sure what to expect when I got into the room and found a fish bowl like arrangement. I knew the discussion would be around architecture in some form or another because Dru and I spoke briefly the night before. But nothing would prepare me for the next hour of mind blowing discussion.
It started with a brief introduction to what Dru does and this alone was eye opening. I honestly felt that the 'small' role I played a few years back as a 'Solution Architect' was nothing at all like what Dru does from day to day. This guy is providing business value on a level that I can't even describe. Working with the business to ensure quality and direction can't be easy but he made it sound like he was living the dream.
The talk was very informal and he was determined to get everyone involved in the discussion. The group centered around how to grow as an architect inside your organization and what you should do to better align the business with your technology platforms.
Although I don't play this role inside my company any more, I learned a great deal about the value a real solution architect can add when it's done right. I always enjoy speaking with Dru, but this group discussion was by far the most fun I've had in a fish bowl setting!
WPF with MVVM from the Trenches
The last session I attended was WPF with MVVM from the trenches with Brent Edwards. I don't have any 'real' experience with WPF / Silverlight but I wanted to hear how someone from a large project was doing such work. I learned a great deal of information about how to keep your code behind to a minimum when doing XAML development. I already downloaded the source code from his presentation to play with it a bit more.
I also enjoyed the focus Brent put on testability during his talk. Most presentation technology talks are only concerned with the user experience, but you could tell Brent was building software that would be maintained for some time. My only regret is that I didn't sit through the entire presentation because I was busy getting ready for my talk that was in the next time slot.
How Test First Development Changed My Life
I can't comment on my presentation from the view point as an attendee, but I can say that the talk went well. I found myself not keeping to the notes I had for the session and instead ranting about the things that have really changed the way I write software. This isn't always bad, but the next time around I'll practice a bit more to help keep me on task.
Looking forward to the next code camp already
In general I felt this was the best code camp yet because the quality at each session was above and beyond that of years past. This could be my choice of topics but to be honest I didn't hear many negative comments about presentations given. Although I really wanted to see the IronRuby presentation that turned jQuery :(
Next fall code camp will be back on the west side of the state and I plan to do another test driven development talk of some kind. This time I hope to do a bit more live coding!