Perth .NET User Group Meeting, 2nd August 2007: Graeme Foster

On Thursday, 2nd August, come and join us at the Perth .NET user group where Graeme Foster will be demonstrating how to use Microsoft’s Composite Application Block (CAB), the Model-View-Presenter (MVP) pattern and unit testing and mocking, with a code example of building a view and presenter using Test-Driven Development (TDD). More details here.

This meeting will take place at 5:30 pm at our usual venue of Excom Education, Level 2, 23 Barrack St, Perth. This is a free event and everyone is welcome to attend.

Ship It!: A Practical Guide to Successful Software Projects, Jared Richardson, William Gwaltney Jr. Pragmatic Bookshelf. (Book Review)

If you are familiar with the “The Pragmatic Programmer”(written by Andy Hunt and Dave Thomas) then you will probably recognise the Pragmatic Bookshelf series of books, set up by Hunt and Thomas, in which Ship It! is included. This series of books sets itself apart by emphasising the practical aspects of delivering software, and also doing it well.

The book is split into the following chapters:

  • Introduction
  • Tools and Infrastructure
  • Pragmatic Project Techniques
  • Tracer Bullet Development
  • Common Problems and How to Fix Them
From the very first chapter, the authors make it clear ‘Ship It!’ is not another methodology, “There is no single, right way to develop software. There are a lot of wrong ways…”. Instead, they have gathered together the ‘best’ bits’ of various styles and methodologies they have been directly involved with, and combined them into a practical approach with the focus on delivering a project. The authors do not expect you to necessarily implement everything they suggest all at once. Adopt one or two at time and determine if they work in your environment. This practical stance is reinforced throughout the book. A selection of the topics examined can be broadly listed as follows:
  • Use source control (for anything you want to keep)
  • Automate your build (one click)
  • Use continuous integration
  • Track issues and features
  • Write tests and automate them
  • Use mocking
  • Build end-to-end stubbed systems (Tracer Bullet Development)
  • Build teams and foster communication

It is easy to read and feels fresh. As another reviewer pointed out, “It’s a rare book that speaks convincingly to both developers and managers, but this one does a good job”. There is a definite emphasis on the positive; it is about how to make projects succeed rather than a post-mortem of why they fail. The chapter “Common Problems and How to Fix Them” is a gem, with practical advice for developers, managers and customers.

In Appendix E: Issue Tracking Systems, I was surprised to see that Gemini from CounterSoft (http://www.countersoft.com/) was not mentioned. I have implemented it at several sites with minimal effort and it has been used by developers and users with great success.

In Tracer bullet development, I agree with the approach to the end-to-end working ‘stubbed‘ systems, but I would also add that methods should also be written in such a way that the release version will throw an exception in any method that has not been implemented (rather than just returning a dummy value). Otherwise, years from now, you might find yourself mentioned on the DailyWTF! In some ways, it would have been nice to have had a worked code example for this section, but I realise the authors did not want to limit themselves to one particular language and restrict the reach of this book; I think they made the right decision.

If you are an experienced developer, then you probably will not find anything revolutionary or truly new amongst its 200 pages, but you might find something that your current routine is missing. Is this book worth reading? Absolutely. I would not hesitate for a moment in saying go out and buy it. Highly recommended.

You can purchase from here:
http://www.amazon.com/Practical-Guide-Successful-Software-Projects/dp/0974514047
http://www.oreilly.com/catalog/0974514047/

Disclosure: The Perth .NET User Group is a member of the O’Reilly User Group and Professional Association Program. O’Reilly make copies of their books available for user group libraries, and the copy reviewed here was kindly donated by O’Reilly. That said, it was not a factor in reviewing this book.

Recommended Computing Books: Updated

For some time now, I have been meaning to update my list of recommended computing books to include “The Pragmatic Programmer: from journeyman to master” by Andrew Hunt and Dave Thomas. This book was first published in 2000 and I’m frequently surprised that many developers have not read or even heard of it. It could quite easily be sub-titled “The manual of practical software construction”. It has received glowing reviews from Martin Fowler, Kent Beck, Ward Cunningham, John Lakos, all of whom know a thing or two about writing software.

If you are a developer, this book is required reading along with Code Complete and Rapid Development by Steve McConnell. If you are a manager, go and buy a copy of this book for every one of your developers. You won’t regret it!

I believe this section heading quotation from the book, captures its essence:

An investment in knowledge always pays the best interest.
Benjamin Franklin

When Push Comes to Shove

Am I missing something, or do the push pins in Microsoft’s Virtual Earth look like they were created by a programmer rather than a designer?

The Hanselhive Has Been Assimilated!

I guess it was inevitable: Scott Hanselman’s company Corillian got taken over a little while ago, and Scott has done something many people have speculated would happen: he has joined Microsoft! (apparently, it’s not the first time Scott Guthrie or Chris Sells has mentioned to Scott that he should be working for Microsoft).

The only question I have is: where will they find office space for all those Hanselman clones???

The Principles of Beautiful Web Design, Jason Beaird, Sitepoint. (Book Review)

“What’s the most infuriating part of design? Getting started!”

This book bills itself as “A simple, easy-to-follow guide…this book leads you through the process of creating great designs from start to finish.” and it is exactly that. The author sets out with the premise that “Good design Principles are not rocket science!” and does an excellent job of proving it. His “Don’t just tell, show!” style makes this book accessible to everyone.

At just over 160 pages, you could almost read this book in a single session. It strikes a carefully thought-out balance between describing principles and illustrating them. It is clear and well structured, with practical examples in every chapter.

Aimed at the novice to intermediate designer, and a great resource for software developers who want to take their web design skills to the next level and provide them with a shared vocabulary with designers.

The book is divided into the following chapters:

  1. Layout and Composition
  2. Colour
  3. Texture
  4. Typography
  5. Imagery

The preface starts out by stating: “Good design is about the relationship between the elements involved, and creating a balance between them.” The design principles espoused in this book are very much in line with how I personally view design: “The most important thing to keep in mind is that design is about communication…”. It is fundamentally important to strike a balance between design and usability. It’s all about balance.

It’s likely to leave you wanting to hear/digest more of Jason’s expertise and insight; let’s hope he publishes a next book in what could be a classic series. This book was a delight to read.

Purchase here:
http://www.sitepoint.com/books/design1/
http://www.amazon.com/Principles-Beautiful-Web-Design/dp/0975841963

Disclosure: The Perth .NET User Group is a member of the O’Reilly User Group and Professional Association Program. O’Reilly make copies of their books available for user group libraries, and the copy reviewed here was kindly donated by O’Reilly. That said, it was not a factor in reviewing this book.

StringBuilder.AppendFormat() versus String.Format()

If you are familiar with .NET then you will probably already know that for efficiency, you should use a StringBuilder rather than concatenating strings in a loop. I recently wrote some code that looked similar to this:

StringBuilder sb = new StringBuilder();

sb.Append(String.Format(“{0} {1}”, areaCode, phoneNumber));

where this code was called many times in a loop (not instantiation of the StringBuilder, obviously). It turns out there is a better way of doing it, using one of the StringBuilder class’s methods:

sb.AppendFormat(“{0} {1}”, areaCode, phoneNumber);

As Dustin Campbell mentions here, the reason this has slightly better performance is because internally, String.Format() actually creates a StringBuilder and calls StringBuilder.AppendFormat()

Identify Galaxies…

Want to have a bit of fun and do something useful? Why not put those spare ‘wetware’ cycles to good use and identify a few galaxies! Check out the GalaxyZoo project.

Book Review: C# Cookbook (2nd Edition), Jay Hilyard and Stephen Teilhet, O’REILLY


The C# Cookbook, Second Edition has been updated and revised for C# 2.0 and version 2.0 of the .NET framework, and despite the fact that version 3.5 of the .NET framework is imminent, it remains a must have book to have on hand. It is essentially a collection of examples showing how to solve specific programming problems (some of which you might not have even realised you have, such as boxing/unboxing and efficient string handling, to name just a few…)

The C# Cookbook has over 1100 pages and is arranged into 20 chapters, each of which focuses on a particular area in C#. Despite its size it is not daunting to read. Here are the topics covered:

  1. Numbers and Enumerations
  2. Strings and Characters
  3. Classes & Structures
  4. Generics
  5. Collections
  6. Iterators and Partial Types
  7. Exception Handling
  8. Diagnostics
  9. Delegates, Events and Anonymous methods
  10. Regular Expressions
  11. Data Structures and Algorithms
  12. Filesystem I/O
  13. Reflection
  14. Web
  15. XML
  16. Networking
  17. Security
  18. Threading and Synchronisation
  19. Unsafe Code
  20. Toolbox

This book is in O’Reilly’s ‘cookbook’ series Problem-Solution-Discussion format, and like other books in the series can either be read from cover to cover, or be used as a reference to shed light on a particular problem. Each ‘recipe’ starts with a description of the problem, followed by a complete, documented code sample showing you how to solve it, along with a detailed discussion of how and why it works, and any drawbacks. This format can also serve as an excellent way of mastering aspects of C#.

Like the other O’Reilly cookbooks, this book manages to strike a perfect balance between reference and instruction on real problems developers encounter every day. Hats off to Jay and Stephen for creating such a useful resource.

If you are a developer who writes C# code for a living, I would be surprised if you do not find something useful the first time you pick this book up. If you are thinking of buying just one book on C# 2.0, make it this one. Highly recommended for beginners and experts alike.

The only problem I have now is that I need to go and buy my own copy as this one is now on its way to the User Group library. Of course, I could just borrow it, but I would really like to have a copy on hand all the time…!

You can download the source code here: http://examples.oreilly.com/csharpckbk2/

You can purchase the book online here:
http://www.oreilly.com/catalog/csharpckbk2/
http://www.amazon.com/C-Cookbook-2nd-Cookbooks-OReilly/dp/0596100639

Disclosure: The Perth .NET User Group is a member of the O’Reilly User Group and Professional Association Program. O’Reilly make copies of their books available for user group libraries, and the copy reviewed here was kindly donated by O’Reilly. Thanks to everyone involved at O’Reilly for making this happen. That said, it has not been a factor in reviewing this book.