For a long time I've been trying to get to grips with a build language. Until recently all my attempts had been with NAnt and I found it very hard going and rather inflexible. I mean who thinks programming in XML makes sense?
I've recently been learning Ruby in an effort to put into action the advice from the pragmatic programmer and start scripting repetitive tasks as well as giving myself a wider knowledge of dynamic programming. From my exploits in Ruby I bumped into Rake again. I'd read about it when looking into build languages but I had gone with NAnt as that's what all the cool kids were using.
Rake, in case you weren't aware, is an internal DSL written in ruby for automating build processes. This is where it differs greatly from NAnt. NAnt is an external DSL for the same task. What an internal DSL allows you to do is utilise the underlying language when you need to. This also means that with Rake you are defining your build process through a Ruby script rather than XML. This makes a hell of a lot more sense to me.
Because it makes more sense to me I've been able to get to grips with it a lot quicker. It took me an hour to get to grips with Rake with only a basic knowledge of Ruby. I've spent days trying to use NAnt and never really got anywhere with it. After a day with Rake I've got my full build generating custom documentation from the XML generated by my tests. I dread to think how long that would have taken me with NAnt.
That's the real beauty of Rake. It is simple to leverage your existing programming knowledge to extend your build to do anything you want as you have the power of the Ruby language backing you up.
So if you're having a hard time with NAnt or are looking at enhancing your build process past Visual Studio I thoroughly recommend having a look at Rake. You might even learn an extremely useful scripting language into the bargain.
References I found useful: