Book Review: The Agile Samurai

Review

The Agile Samurai by Jonathan Rasmusson has some differences from your typical book on agile project management. For starters, the style is very much like a Head First book, full of asides and fun graphics that help draw you in to the book. It also doesn’t stop at just laying out the rules and religion of a particular agile project management technique – it has valuable insight into how you get a project off the ground and a brief overview of some of the agile engineering techniques that will make your project successful.

Jonathan is a very engaging author. He clearly understands what he is talking about from a been-there-done-that perspective and is not afraid to warn you of things to watch out for. I was a little turned off by the whole samurai thing at first, but that’s mostly because I think the whole Zen/Eastern Mysticism thing is a bit overdone in software in general, and in agile specifically. Once I got over that bias, I thoroughly enjoyed the book.

I read the book mostly because I am always looking for good resources to pass along to people getting started working in an agile environment and this seemed like it would be a good one. I didn’t expect to learn much at this point – I’ve read more than my fair share of books and articles and been to training. I was pleasantly surprised – I picked up some really good information, particularly about the Agile Inception Deck.

If you are about to participate in an agile project, I highly recommend this book. If you have a team that is about to participate in an agile project, you should seriously consider passing out copies of this book. If you are a grizzled veteran, you probably won’t learn a lot from this book (information about the agile inception deck, an idea that came out of the ThoughtWorks consultancy can be found on the Web, including the author’s blog), but there are enough nuggets in there that you still may find it valuable, especially the detailed treatment of launching a project, a topic that is neglected in most other books about agile project management.

One slightly unrelated note – I read this book on my Kindle and I have to say that the formatting was exceptional. The Pragmatic Programmers by far take the most care in making there electronic books usable. I have books from another publisher that shall remain nameless that are completely unreadable.

Advertisements

Migrations

Eric on Rails

Rails has an extremely interesting idea for keeping a database up to date, no matter where it is (development, staging, production, etc.). Its called Migrations.

I’ve dabbled in this idea before – there is an open source project out there called dbdeploy.net, which is based on the java project dbdeploy. What it does is run all of your database update scripts in sequence, and theoretically allow you the capability to roll back to a previous version. I used it a part of our build process to keep our unit test database (there’s an anti-pattern we feel for) up to date. It worked fairly well, but wasn’t perfect.

What happens with Migrations is you write Ruby code that tells how you want to transform your database, and it will get handled no matter what kind of supported database you have. Its completely SQL syntax agnostic. It also is easier to create the rollback aspect, because it is just another method you have to write. And numbering is made easier because Rails takes care of numbering them for you.

The first thing I wanted to do when I saw this concept was port it to .Net. Yeah, except its been around for a long time, so of course someone beat me to it. Actually, a couple of people did.

So, I figured I’d do the next best thing and maybe write a post about how to use one of these ports. But Justin Etheredge beat me to it (long ago, in internet time). So, if you don’t know anything about Migrations or you do but you didn’t know you could use them from .Net, head on over to Justin’s post now.

Eric on Rails

Eric on Rails

As I mentioned previously, I am actually going to really learn a new language or two this year. I played around with Ruby probably 6 years ago, but just a bit of dabbling while I was on the bench (I was in consulting at the time). I retained almost nothing.

Other than a brief diversion into PeopleSoft on Unix platforms with an Oracle database for two lost years of my life back in the mid-90’s, I’ve been almost exclusively working with Microsoft development tools. I don’t see that changing for me in a professional sense in the foreseeable future, but I know I need to become more diverse as I spend more time pretending to be an architect. There are other schools of thought out there I can learn from.

I have in general spent most of my reading and studying time with non-Microsoft things – I have spent a lot of time with agile project management techniques (mostly Scrum) and agile “engineering” techniques. I have embraced a lot of non-Microsoft technologies in the .Net space (NHibernate probably being the most notable one). So clearly I can no longer be called a Microsoft fanboy (I once used to get that a lot Smile). So this isn’t about Microsoft or any particular technology vendor. Its about making myself a better software development professional.

As I stated in this blog before, the innovation these days seems to come most heavily from the Rails world. I hate the idea that I’m following the cool kids – I never have cared a lot about doing the popular thing, but in this case, I think they might be on to something. Don’t get me wrong – there are lots of things that are suddenly innovative about Microsoft. The phone is a significant advancement of the state of the art, even if I doubt it will catch on. WebMatrix seems to help ease web development without the soul crushing abstractions of Access or LightSwitch. And F# is a good gateway/compromise solution to functional programming on the .Net platform (someday I hope to spend a fair bit of time with that animal).

But the next leg of the future is paved with things prominent in the Ruby world. They could have come from anywhere (and in the past seem to have most often come from Java, but I posted about that already). But right now the cutting edge of ideas like dynamic languages, lightweight web development, behavior driven development, automated acceptance testing, etc. seems to firmly reside in Ruby world. And I like the promises that those ideas bring to help enable us to build better software with higher quality faster.

My interest is not, as I said above, to switch my day job from C# and the .Net world to Ruby and Rails. There are still really cool things going on in .Net. I still believe in “thick/fat/smart” clients. No toolset does a better job for building such things than .Net. WPF and Silverlight still have a future.

Instead, I think that by spending my free time playing with Ruby and Rails will help me discover ways to be a better C# developer. Its time for me to leave my comfort zone in hopes of learning valuable new lessons (this is my initial guide, but I know there will be other resources – I’ll post about this book and those resources as I can). I plan to blog about my discoveries. Many of them will probably be things you already knew. Some of it may be things I already know, but not as deeply. It should be a fun ride.

Java’s Dead

Uncategorized

OK, I don’t know Java well enough to give it a eulogy. It may not even be actually dead. But the end is definitely near. First, Oracle bought it, surely just to destroy it so the IBM can’t make money off of it anymore. Smile Or maybe not. Maybe Larry actually wants it to live. Maybe the Oracle thing doesn’t even matter.

The strongest evidence I have that Java is dead – we (the .Net folks) don’t steal from it anymore. Much of the best things about .Net (including C# itself) have been stolen from Java. And that’s a good thing – that’s what progress is all about: taking ideas and expanding upon them in a different setting.

Now we steal from Ruby instead. We steal the ideas and language idioms. We steal the framework concepts (ASP.MVC look like Rails to anyone?). We steal the tools (how many Cucumber clones do we really need? Just use StoryTeller – its much, much, much better for matching how we roll in the .Net space…). And all of the cool kids aren’t jumping ship to Java world, they are becoming Rails heads.

Java brought some great things to the table – not having to manage memory being the biggest, although as a staunch NHibernate fan, I’m grateful for it for bringing about the rise of the ORM. It also brought some dreadful things – boilerplate for the sake of boilerplate (you know I’m talking about you, EJB). But on the whole, it was a great thing. It wouldn’t have led to the creation of C#, my drug of choice (although that probably had as much to do with Sun’s lawyers as it did any pure motives).

So, the question becomes, given how tightly coupled our histories have been, what does all of this mean for .Net? I think its clear – C# continues to get the best ideas from the rest of the language world incorporated and become more powerful. I just hope that it doesn’t end up being so convoluted in the process that it becomes unusable.

Happy New Year 2011

Uncategorized

In this obligatory post, I’d like to make my New Year’s resolutions for 2011:

  • Seriously learn a new language or two. I’ve started diving into some Ruby, but F# is also something I want to spend some time with. I don’t want to leave .Net, like all of the cool kids are doing these days, but I can see that C# is trying to become more like these languages and so I know that learning them will help me become a better C# programmer. Regardless, this nugget of advice from the Pragmatic Programmers is one I have not been keeping up with and so I must do better.
  • Present at more events. 2010 marked the first time I’ve spoken outside the Pittsburgh area (thank you NOVA Code Camp!). Its fun to meet people in different communities that have completely different experiences. I want to do more of it.
  • Really get serious about writing. I’ve been blogging in various forms for 7 or 8 years now. Extremely sporadically. I’m better at Twitter (but of course that doesn’t take anywhere near the effort). I actually do a fair bit of writing in my day job that could easily be cleaned up and turned into  blog posts. I just need to do more of it.
  • Spend less time reading, and more time doing. I don’t think that requires any explanation. Smile
  • Keep up with my health. Last year I was diagnosed with type-2 diabetes. I’m lucky enough to have it under control with pills and weight management. I can even be bad occasionally and eat some cookies (which I did entirely too much over the holidays). But there is a silver lining – it caused me to wake up and realize what I was doing to myself, and through better eating and exercising regularly (I get to the gym at least once a week – better than I was, but still in need of improvement) I’ve lost 30-35 pounds. And I just feel better.