Title: The Old New Thing
Author: Raymond Chen
ISBN: 0-321-44030-7
Verdict: Highly Recommended [For Windows programmers]
The first blog I discovered, and still read each day, is The Old New Thing by Raymond Chen. He also writes a column called Windows Confidential which fills the final page in Microsoft’s TechNet magazine. His book, which follows the name of his blog, is essentially a print version of more of the same – interesting historical facts and ‘inside’ information, surrounding the development of the Windows OS. There is a heavy bias towards GUI related issues as he works in the Windows Shell team, but there is also plenty of other low-level information such as in “Understanding the consequences of WAIT_ABANDONED” which is relevant to any Windows programmer.
An operating system as old as Windows, which has had to transition from the 16-bit real world of DOS, through to multiple 32-bit platforms and then on to 64-bits is going to have more than just a few warts. On the face of it some of the API’s and behaviour may not make an awful lot of sense in today’s largely 32-bit world and the obvious reaction of some detractors would be to blame it on poor design. The truth is often far murkier and frequently involves some nasty hangover from the 16-bit days – the entire sections devoted to GlobalAlloc() and GetWindowText() cover this ground thoroughly.
Microsoft takes backwards compatibility very seriously, and whether you agree or not with their sentiments, this book will show you some of the hurdles that need to be straddled for this to happen. For instance Raymond shows you 5 ways that developers can screw up implementing something at simple as QueryInterface(). He also describes badly implemented version checks and code that patches the OS, breaking it in the process. Couple this with the legal requirement of not being able to physically patch someone else’s broken code and it’s going to induce some creative (and entertaining) engineering.
There is another aspect to the book which I found puts software development into a new light, and that is the economies of scale that affect a company the size of Microsoft. To them a 1-in-a-million bug affects a significant number of customers, and they often have more beta testers than many products have actual customers. This can have particularly humorous outcomes such as in “Windows brings out the Rorschach test in everyone” where he describes how various innocent images have managed to offend some users.
Although much of the grunge would be of more interest to developers coding to the C based API, there is still plenty of sound advice for those who live in the .Net world, and even some that transcends all OS’s such as “A cache with a bad policy is another name for a memory leak”. If I had to give my own definition of Schadenfreude it would probably contain a reference to this book.
Chris Oldwood
03/12/2009