“never commit to memory what you can find in a book” – Albert Einstein

Now I’m not gonna argue with the big man, because you know what he was a pretty clued in guy, but what happens if you can’t find that book?. For that very reason I’ve produced a list of the books that I have on my desk, or close at hand, from which we draw inspiration, support and guidance. Maybe you’ve got some of these titles already, and some you may not. I regard them as essential reading.

The Pragmatic Programmer : From Journeyman to MasterAndrew Hunt and David Thomas.

This book is an absolute must. Regardless of your career position or your expertise, a read of this book will either open up new ideas, new directions or concrete the practices you have already. It doesn’t read like the other books to come in this list, it reads like a novel, where you’re the lead character.

It has a bullshit bingo score of zero, it’s honest, cuts through the spin you’ve heard about all the different systems development life cycles, and leaves you with advice, direction, and resources that you can implement immediately. It is, in a word, pragmatic.

It also comes with a very handy tear out quick reference guide, which can serve as Tip of the Day, and a check list of tasks to make you a better, more effective, and more valuable programmer.

Design PatternsGamma, Helm, Johnson, Vlissides

I may upset some people when I say this, Design Patterns (DPs) are not the be all and end all of good design, but you know what, they help. This book, aka The Gang Of Four Book, dates back to about 1994 and was on my recommended reading list in Uni. A very influential book, and is chockers with patterns, implementations, and examples.

Google has a wider range of information and tutorials on DPs, but for a tangible reference on DPs you can’t get much better than this. If you can’t get your hands on this one check out Martin Fowler’s “Enterprise Integration Patterns”, an equally comprehensive and influential reference resource.

High Performance MySQLSchwartz, Zaitsev, Tkachenko, Zawodny, Lentz & Balling

If you intend on using MySQL for your application’s data source, it’s vital, let me say that again, vital, that it’s performing to the best of it’s ability. You can put all the caching layers you want in front of your data layer but when those cache layers purge (and they will) you want to make sure that your data layer can churn and burn requests faster than you can say “Where is the DBA?”. MySQL is simple to install, it’s simple to run, it’s simple to use, but to have it cranking, is an art form. This book is your friend, your guide, it’s your frickin Jedi master to MySQL tuning and performance hackery. The authors of this book understand all the nooks and crannys of MySQL, and they pass on their knowledge and wisdom in a friendly and non-alienating manner. It plays a reference role on my desk, but it works surprisingly well as a cover2cover read as well. It’s packed full of diagrams and examples to illustrate their points, and you’ll be able to use your new found learnings immediately and feel the gains. There are a number of copies of this book in the office, people just want to have they’re own copy.

RefactoringMartin Fowler

Ever get that feeling when you look at a piece of code and you think to yourself, I could make that better (note I didn’t say write that better, thats just ego massaging)? You’ve taken the first step in the discipline of refactoring. Martin Fowler has taken an number of tried and tested techniques in “making stuff better” and presented them in this book. Similar to the aforementioned “Enterprise Integration Patterns”, the initial pages act as a quick reference guide to each of the techniques, heck lets just say, patterns in approaching the common problems and gotchyas when you’re attempting to make your existing code better. Some of the Sound Alliance projects are entering their 10th year of existance, and there are many little cogs in the engine which still contain 10 year old code. Refactoring these is an essential part of making sure our application complies to new environments, new code versions, new caching techniques etc, and ensuring that their external behaviour doesn’t change is crucial. Martin’s book has made an invaluable contribution in that area.

Test-Driven DevelopmentKent Beck

These days if you don’t know what TDD is you’re mocked, you’re scorned, you’re outcast. Funny thing is, I sometimes feel that a significant percentage of the people touting “TDD” haven’t enough experience of using it in the real world to be mocking those who didn’t. When I started off on the road of TDD, I found conflicting guidelines, conflicting turtorials, sullied examples of Unit, Functional, and Behavioural Testing. I found myself no better off than I was before, and soon slipped back into my old ways. However I still felt the itch and noticed that a number of names were being used to bolster the integrity of particular blogs, one of those names was Kent Beck. Kent’s book is a straight down the middle, from a clean slate guide on TDD. It doesn’t take itself too seriously and highlights areas where you might find yourself tumbling down the rabbit hole, and quickly puts you back on the straight and narrow.

Having a book on TDD without code examples, is just FAIL. Having a book on TDD with bad code examples is equally FAIL. The code examples in this book, are clean, readable, and reflect each of the stages described in the cyclic process.

If you’re starting off trying out TDD, I thoroughly recommend this book, not only as a primer, but as one of the staples on the subject.

Release It!Michael T. Nygard

“But it works on the development server”. Heard that one before? You probably have, I’ve even said it myself from time to time. Writing code is one thing. Writing code that can deal with the real world is a different ball game altogether. Your application in production is constantly in a state of flux. Inthemix can be quiet (quiet is a relative term please note) one minute, and then it can be suffering under a barrage of users checking out the released line up for a major festival. Stresses and strains are external factors to the application that you almost never consider when you’re in the development phase, and if you do consider it, there is a very good reason. You and your business has been bitten in the proverbial posterior in the past you and carry the scars from it.

Michael’s book does a very good job of warning you about the hazards, the pit falls, the garden paths and monsters under the bed of having your application in the wild. Learn from the mistakes of others is the general feeling from this book, and it’ll teach you to look at all the various aspects of your application which can cause a cascade of failures resulting in your business loosing money. This book is a little full on on the technical terms and it makes some large assumptions on it’s readers knowledge, however if your in the business of making money from your application it’s a good read, and can be read cover2cover. However, I tend to take a break away from it every so often, it’s a bit reading horror stories as a child before you asleep, it gives you nightmares.

Pragmatic Version Control – Using SubversionMason.

If you’re not using version control on your code base, (and other things for that matter), you’re driving fast down the wrong side of the motorway. Version Control will, and believe me it has, save your derriere. Besides the obvious, there are many tools available which can analyse your commit logs, and allow you to run risk assessments on code changes, personnel productivity, and release management.

The Pragmatic Programmers have released a number of titles dealing with bare bones, and the hard core features of the major version control flavours.

Version control is just one of the tools what you should master and this book is a great resource and cookbook to help you achieve that skill level.

Pragmatic Version Control is available from the Pragmatic Bookshelf in numerous formats : http://www.pragprog.com

I do have a number of other titles that are worth having on your desk, but I gotta keep some cards up my sleeves don’t I.

Part 2 – “The Software” will outline the software tools that we use, and how we use them, and how we could use them better.


This website uses IntenseDebate comments, but they are not currently loaded because either your browser doesn't support JavaScript, or they didn't load fast enough.

Leave a Reply

You must be logged in to post a comment.