Posts

Showing posts from March, 2011

Utah Code Camp

Saturday I attended the Utah Code Camp . Despite my previous lack of interest, I decided that this time I would attend out of curiosity if nothing else. I have been invited before, but it never seemed like a good way to spend a Saturday. I have attended a few of the larger software conferences including SD Best Practices and SOA World/AJAX World as well as watching session videos from NDC and QCon . I wasn't really expecting much from a free, local conference. Wow! I couldn't have been more wrong! Saturday was amazing! I attended 4 sessions that introduced me to new technology and 2 sessions on topics that I a quite passionate about already. All of the speakers were well prepared and interesting. The free lunch (provided by my employer: STG ) was also nice. I didn't win any prizes, but I wasn't really that interested in them anyway. Introduction to Erlang I have been meaning to learn a little about functional programming for a while. I am reading 7 Languages in 7 We

Object Oriented Design Resources

I was recently asked where one might find some good resources on object oriented design. Since the internet is full of free resources on the topic, I thought it might be useful to point out the ones that have helped me most. Let's start with the SOLID principles. Roy Osherove is kind enough to host a video of the talk Uncle Bob Martin gave at the Norwegian Developers Conference in 2009 describing these principles. Of course, you can always read the about the principles on Uncle Bob's blog . In addition to SOLID, Uncle Bob encourages us to create Clean Code . Test Driven Development is a known technique for building consistently well designed of software systems. As Michael Feathers demonstrates , unit testing in an excellent way to expose the flaws in your design. Of course, one needs some idea of where to start, so learning about domain driven design , design patterns and architectural patterns are all crucial.

Wrapper Classes

A couple of the developers involved in our hiring process seem to be obsessed with the different wrapper patterns. That got me thinking about the differences between the Decorator , Adapter , Facade and Proxy patterns. Here is a quick summary that compares and contrasts these four patterns: The Decorator wraps a single class , exposes the same interface and adds functionality to the wrapped class which is injected into the Decorator. The Adapter wraps a single class and changes its interface while maintaining functionality . Usually this is done to make the class easier to use in the consuming system. The Facade wraps multiple classes and provides a simplified interface for using them together. The Proxy wraps a single class and is similar to the Decorator in implementation, though it does not extend the functionality of the class, but hides an implementation detail such as network transport or lazy loading. The consumer shouldn't know it has a proxy rather than the

Software Layers

TL;DR: Please learn the currently accepted definitions terms so that you can use them correctly. I am regularly amazed to see developers, whose primary job function is Applying Proper Names to Things , misapply new (to them) terms to well-known definitions. The most common example is probably calling your process agile whether or not it follows any of the principles . Who hasn't worked on a fixed bid, fixed scope, fixed date project and been told all along how "agile" the project is? The second you hear the phrase "scope creep," you know the customer isn't a priority and agile never made it to the table. While I am a huge proponent of XP (and I mean, by-the-book XP), I won't bore you with a rant on that topic. What concerns me is Domain Driven Design . Domain Driven Design is a large subject that takes 100 pages to define quickly . I supposed this contributes to the misuse of the term. Domain Driven Design defines 4 layers of an application: (User) Inte

Utah .NET User Group

Last night I attended the local .NET User Group for the first time. The speaker presented on MEF. It was quite informative. I fulling intend to use MEF to support the plugin feature of the TFS build notifier I am working on. It was fun to get the chance to talk to other .NET devs in the area, eat free pizza and hear about another tool for the toolbox. I am not really convinced that MEF is a full IoC container and I am wasn't thrilled that all the examples were in Silverlight, but the talk was well prepared and Joe McBride (@XamlCoder) knew what he was talking about enough to stand up to Q&A. :-) I actually was picked for 2 of the door prizes, but I declined them both. I have been a die-hard ReSharper user for 4 years now, so CodeRush doesn't interest me in the slightest. I also haven't done a desktop app in years (just Web and Server side development) so I declined the Infragistics components so that someone who will actually use them can have them. It was fun