Skip to main content

Book Reviews: Agile, Programming and Refactoring

This blog post started as being a review of 12 books, then I cut it back to 7, then 5, now 3. Hey, it's late on a Saturday night and I am now knackered. In any case - here we go, three good-uns:


Agile Estimation and Planning (Mike Cohn - this book took me from being a person who knew how to setup an Agile team and practice Agile development, to - as the cover says - being someone who can plan and estimate relatively large software development projects using Agile methods. I've used the approach Mike lays out "in anger"; it works - superbly.

Mike has published an accompanying book on User Stories, which I have not read, but I imagine would compliment this book nicely.

Basically, if you want to understand how to successfully extend your Agile practice from being a way to manage programming on a day-to-day (or Sprint-to-Sprint) basis - and to develop the maturity of your Agile approach - then this book is like a step-by-step "how to". The guidelines are easy to follow, and to me at least, everything just makes sense.

Caveat emptor though; I imagine the approach would be harder to apply in practice - and/or make sense of - to someone who has not practiced Agile development relatively solidly.

The C Programming Language (Brian Kernighan and Dennis Ritchie - Anyone who works as a programmer or is interested in programming should read this book, IMO. Admittedly I didn't get around to it until I was well into my programming career - however it is really a pleasure to read, and if nothing else, sheds a lot of light on the nuts-and-bolts under the hood of your Ruby, C# or Java compiler/interpreter. And, well, what programmer doesn't get a kick out of finding out about the nuts-and-bolts?!

Cleverly written, and flows beautifully. This is not a technical manual (although in some editions a manual is included), more like "the story of C". I can see why it is a classic. Aside - this book is where the "hello, world!" program comes from.

Working Effectively With Legacy Code (Michael Feathers - Again, this is another classic, IMO - and is arguably a bit more practical for most modern programmers than "The C Programming Language".

Feathers defines "Legacy" code as essentially being any code that is untested or currently untestable. Most professional programmers worth their salt will have come across lots of this stuff - in fact, I would hazard a wager that many (most?) coders are in-fact working with legacy code (as Feathers defines it) on a daily basis... Anyway, Feathers introduces us to this notion and then moves on to the thrust of the book; which is to introduce myriad patterns that enable the user to wrap or refactor legacy code in such a way to make it testable.

The book is written in the style of the "Gang of Four" Design Patterns book - there are three sections; the first sets the stage, introducing Michael's reasoning, definitions, and some tools. The second section is scenarios (essentially suggestions as to how to apply patterns to deal with problems, like "My Application Is All API Calls") and the third is a reference for a stack of dependency breaking patterns.

This book in my opinion is great - there should really be a hell of a lot more writing about how to address the problem of refactoring legacy code - after-all, it must be one of the key issues that the software industry faces currently. Perhaps the subject is just not sexy enough. In any case, I think the author does a slick job of "coolifying" the subject matter - and this book in my opinion is a much easier read than Fowler and Beck's "Refactoring".

Also, I like the cover - presumably, it's some sort of timekeeping mechanism...


Goodnight - perhaps I will post some more book reviews soon!


  1. Hey admin,
    of course this blog is doing a very good job of serving useful information. I'm proud to be a part of its Readers community.good job dude...
    for more information about c programs visit my web

    1. Thanks HHH, looking forward to seeing how your blog develops!


Post a Comment

Popular posts from this blog

HOW-TO: Add/edit a field in Team Foundation Server 2012 using Visual Studio 2012

It's been a while since I made a purely technical post...

So, today I wanted to make a change to a Microsoft Team Foundation Server 2012 (TFS2012) instance that I am working with to reflect "Actual" time spent on a task - mainly for reporting purposes, and because I have found in the past that making this minor process adjustment yields a relatively useful metric over the long-term.

I am using the Microsoft Scrum 2.1 Process Template ( for a project that I am working with. So that I don't forget how to do this (again!) I will blog-post the procedure I've used to add this field to the template as a screen-shot-based tutorial, as follows...
Before Assuming you are familiar with the Scrum Process Template (2.1-ish) - open a task and take a look at the "Details" section, as follows:

 This is where I want my "Actual" field to show up.
Get the Power Tools Download and install the latest v…

HOW-TO: Apply a “baseless merge” in Team Foundation Server 2010 (and 2012)

Another purely technical post on TFS...
The scenario We wish to migrate code between branches that do not have a branch/merge relationship, in order to expedite urgent changes being made by a project team, without disrupting on-going BAU development work. Sample branch hierachy/strategy Imagine the following branching strategy in TFS (visible by connecting to TFS via Visual Studio 2010 or 2012):

Essentially you have a "DEV" branch, which has a "QA" branch, which in turn has a "PROD" branch. DEV is the branch that you would be using for BAU development. As a piece of development matures, you move it into QA, where it is tested by your internal QA team. There may be further changes made in DEV that are moved into the QA branch as the QA team pick up issues. Once the QA team are happy with a packaged of changes, they will move them into PROD, which is essentially the hand-over to the customer. The PROD branch represents the software that the customer has.


Eclipse/Android error: "Multiple dex files define [...]"

Wow, I am really going nuts blogging this-evening - 2nd post in less than an hour. 

Anyway this is a particularly nasty error that I keep running into with Eclipse/Android when starting the emulator after I have not run it for a little while. Since I run the risk of permanently forgetting the solution to the problem every time I walk away from my Android project (and thus having to spend a painful hour-or-so digging up the procedure again), I will blog it here, for my benefit, and for the benefit of anyone who may also suffer the same problem.

The gist is that when you start the emulator in debug mode (that is, you hit the button in the following image), you get the following error message come out on the console and a nasty popup telling you nothing more than there is an error with your program and you need to fix it:

[2012-04-06 23:20:57 - Dex Loader] Unable to execute dex: Multiple dex files define Lcom/google/gson/ExclusionStrategy;
[2012-04-06 23:20:57 - SimpleList] Conversion to Dal…