Friday, 24 July 2009

All this and a hot cup of coffee?

When I look at the 3rd party tools out there for .Net development it seems like everything started over in the Java community. Unit testing, ORM platforms, IoC, automated builds, mocking, basically all the good stuff that I'm trying to master. As they came over to the .Net space other projects have sprung up offering alternatives, in some cases better suited to the specifics of .Net, but many of the tools ported from Java are still considered to be great pieces of code.

To try and build a skill set that is as flexible as possible, my intention is to try and find tools that have Java counterparts wherever possible so that I could slip into Java more easily if I ever find myself in that situation. Obviously the general skills are going to be more important than the specific tools used for the job, so if I find myself having to use a different testing framework or IoC container there won't be much of a learning curve.


Sunday, 19 July 2009

So what's the big idea?

So, I'm trying to hone my developer skills by learning new technologies, best practices and so on, but there is only so much that you can learn from simply reading about things, especially in a field such as development. Therefore I shall have to put what I am learning about into practice and that requires a project (or projects) where I can use the tools and techniques. Obviously there are things that I could do at work, but I am locked in to using the company standards for development there which means I can't suddenly start working on an MVC based web site, use NHiberate for my data access etc. So I need a project that I can work on in my spare time at home, and that requires having a good idea.

Without a clear goal anything that I work on will be disjointed examples focussed on nothing but the topic I am learning. To gain a true understanding of all this stuff, I want to be able to use a variety of new techniques together, working towards a proper, real-life application. As this work is going to happen during my free time I also feel that having an interesting goal will aid with motivation as this is the time when I could be playing games or watching tv or spending time with my family or playing my guitars, or recording some music or writing a song... Ohhhh, maybe I've just hit upon an idea.

I've been playing guitar for many many years now. I enjoy coming up with my own tunes and I have a whole bunch of high quality recording gear. Unfortunately I find that whenever I sit down to write a song it ends up sounding like the sort of overly-sentimental, rubbish ballads that tend to make up most of your average Bon Jovi album once you remove the tracks that are released as singles. However, from time to time I get the odd flash of inspiration, just a couple of lines that work really well. My plan is to build an app that will allow me to store these little snippets and add a few tags to them consisting of the genre of music that I think they fit, the concept behind them, and general keywords. As the collection of lyrics builds up I could then search them based on these tags, such as find all my ballady lines when I want to write something for my girlfriend, or everything about how angry I am with the world if I tap in to the angst of my inner teenager. This may not write a song for me automatically, but it should help to provide a very good starting point.

If I create this as a web-based application it means that I can access it from wherever as inspiration strikes. As I tend to use macs at home it means that I don't need to boot into Windows, I can add things from my iPhone whilst out and about, or if something annoys me at work releasing the aforementioned inner-angsty-teenager I can save it there and then. Opening the app up to the web also adds the ability to let others use it, both random strangers and friends of mine. With musically inclined friends using the same service it makes sense that adding some collaboration features might be handy too, allowing members of a band to share ideas easily. It's hardly going to be facebook or anything, but this will add a few social networking like features to the site.

Further down the line I could extend the functionality to include saving short recordings to catalogue in addition to the lyrics. This might work better in a more traditional windows based application that could communicate with the website as a service and if I get really enthusiastic about it, I may even try to create a simple multitrack recording environment capable of hosting VST plugins to record these with, but that is a long way off and certainly out of scope for anything I am doing now.

So, that's the big idea. A multi-user database-centric website with scope for future rich client enhancements. Off the top of my head I can see how I can use the MVC framework for the site, NHibernate for my data access and OpenID for my user authentication. One of the reasons for MVC's popularity is that it allows for automated testing more easily than webforms, so NUnit could slot in to that role. Unit testing and dependancy injection go hand in hand, so this may also open up the way for using the Castle Windsor IoC container. If I do decide to build a rich client interface in the future with recording capabilities I could easily add WPF and WCF to the list of technologies in play too.

That seems like an almost overwhelming bunch of new tools and techs to get my head around so I'm going to have to take it all one step at a time. The first step involves yet another new tool that I haven't yet mentioned. In my different jobs all my source control has been via MS SourceSafe, but for my home development, due to the combination of open source licensing and its good reputation compares to SourceSafe I shall be setting up Subversion.


Tuesday, 14 July 2009

Yet another blog hits the internet

Once upon a time I thought I was a pretty hot developer and a bit of a software architect. Then the credit crunch and recession hit leaving me on the job market. A quick glance around the job boards quickly showed me that I had fallen into a rut, comfy with the skills and technologies that I knew, and that I had been stagnating. I had been using .Net 3.5 for nearly a year and had not heard of WCF, WPF, WF and that other card thingy wotsit one. Or even generics for that matter (which, for the record, are now my favourite thing in .Net). I'm a pretty smart guy, I pride myself on being able to learn new technologies quickly and easily but I had been taken by complacency and failed to keep up with the world around me, which can be easy to do in a company that isn't very forward looking.

I decided that I need to work on my skills to get myself back to the level that I once thought I was. To that end I started listening to .Net focused podcasts such as DotNetRocks, and researching the new features that I had been missing out on. Exposing myself to all of this also opened me up to the open source community and some of the great tools that are out there like NHibernate, NUnit, and various other things beginning with N. I downloaded the ASP.Net MVC framework, signed up for the Windows 7 beta and decided to kick off a little project of my own from home.

Fortunately I was not out of work for too long, and I feel that some of the knowledge that I had picked up from my newly sparked interest played a key role in me landing my job. Obviously I am keen not to fall back into that same trap and so I am continuing to try and keep learning and improving my skills, both to excel at my current job and to improve my prospects for finding my next job when the time comes. This blog is one way that I am trying to keep my momentum going. I'm not expecting to build an army of loyal fans, but rather I am using it to try and document my progress and if anyone ever reads it, that'll be a bonus. As I am going to be doing this in my own time* I may be slow to make progress as I need to fit it in around my life as a family man, but I shall be happy if I can see slow but steady progress.

*Obviously I'd like to be applying these things at work too, but when there are real-world pressures to get work done in a timely fashion and no buy-in to implementing these sort of best practices from management I can't afford a learning curve.