The best and worst part about software development is the variety. If you’re interested in it, there’s a piece of software that does it. In fact, there are probably a dozen different projects. This goes for both the broad application picture as well as the layer below it — All of the myriad libraries that allow us to build modern applications with such great fidelity. Places like GitHub, CodePlex and even Code Project are brilliant resources for community and discovery. Many of us don’t use them enough. As developers we should make it a point to mine these regularly. Browse what’s out there, you never know what gems you might find.
The flip side is that amidst all that variety you can be paralyzed by choices, which is why you need to experiment. There’s a balance between being productive and spending cycles researching and gathering knowledge. I don’t claim to have the right formula. I like shiny things, and I can burn a whole night just reading documentation and playing with this new ORM or that fascinating library over there. All at the expense of the deadline at the end of the week. But we all have to spend some time doing it — storing up our knowledge so we can apply it when the time comes. When you need to answer the question ‘what’s the best tool for the job?’ it’s nice to be able to have enough background to make the right choice.
While I didn’t set out to turn this into a ‘top 10 must have tools from 2012′ kind of post, I did want to share a few tools I’ve used a lot this past year. Some of these projects I’ve applied in production applications (or soon will), others I’m still discovering and learning to use.
By far the library I’ve used the most this year has been MVVM Light. Laurent Bugnion has done a great job of putting together a streamlined, easy to use MVVM framework. It’s available for WPF, Silverlight, Windows Phone and The Applications Formerly Known as Windows Metro Apps. I’ve dabbled with others like Caliburn.Micro and ReactiveUI but haven’t taken them to production. Not because they’re bad tools, just became too familiar with MVVM Light I think.
I ran across Value Injecter earlier this year and it’s been a great tool for mapping objects. I had previously used AutoMapper for these situations, but Value injecter seems to handle things much more dynamically.
Mono.Options/NDesk.Options is a great little package for parsing command line options. It’s by no means new, but incredibly useful for easily giving your command line tools a little extra polish. They have a nice little NuGet package as well.
I’ve started spending a bit of time with ServiceStack. I hope to do a lot more with this project in the near future. They tout “Thoughtfully architected, obscenely fast, thoroughly enjoyable web services for all.” This is a great example of a project that makes what can be a rather tedious process in some technologies just super easy.
Xamarin. Cross platform mobile development in C#. I’m a big proponent of keeping your UI native and fast. I think the approach at Xamarin is the most pragmatic I’ve seen, and I hope I get to participate in a few projects that leverage this in the next year.
So those are just a few examples, and for every one of those I’ve no doubt looked at a few more more that just didn’t suit me or the tasks at hand. But I definitely had to spend some time tinkering to find out. All told they’re part of a greater collection of tools that I can use to develop software faster and better.
So go check out some code this year. Be the squirrel with the most nuts, not the squirrel in the stew.