Welcome to Duncan White's Practical Software Development (PSD) Pages.

I'm Duncan White, an experienced and professional programmer and sysadm, interested in large scale ruthless automation of systems. I've been programming for over 30 years, mainly in C and Perl, although I know many other languages. In that time, despite my best intentions:-), I just can't help learning a thing or two about the practical matters of designing, programming, testing, debugging, running projects etc. Back in 2007, I spent some time discovering - and rediscovering - some absolutely fantastic books about Practical Software Development. By coincidence, the three main software development books I've (re)read lately all have titles of the form "P..P":

  • The Pragmatic Programmer (Hunt & Thomas) - see my Review here.
  • Programming Pearls (Bentley) (and the sequel More Programming Pearls) - see my Review here - referred to as Pearls throughout these pages.
  • The Practice of Programming (Kernighan & Pike). see my Review here. Referred to as tPoP throughout these pages.

Inspired by those three excellent books, and by some vaguely formed thoughts of mine over the last few years, I thought I'd start writing an occasional series of articles, book reviews, more general thoughts etc, all focussing on software development without all the guff. If you're a professional programmer, you'll probably have already read some of the books I discuss, and probably had some of these thoughts as well. But I hope maybe I can tell most people about some new books and techniques. Please drop me a line if you do find them useful..

picture of D. White

Several themes will run through many of these articles. Many of these are derived both from experience and from the above three books. Some of the most important themes I will return to again and again are:

One note: although most of these discussions are intended to be general, most of my examples will be in C and (especially) Perl, simply because these are the languages I use most. As will become clear quickly, I am not a fully paid-up member of the Object Oriented Programming (OOP) squad. I use OO techniques whenever they seem appropriate, but I'm equally at home with procedural/modular techniques. I find there is a regrettable tendency amongst OO pundits to pretend that nothing good existed before OO techniques, and to reinvent earlier excellent practical techniques, stick pretty OO labels (terminology) on them and call them new and shiny. For example, separately defined components with clean interfaces and information hiding (i.e. "modular programming") have been a standard programming technique for an awfully long time before they were ever dressed up as "classes".

Many terms have been used over the years for these components - "components", "modules", "packages", "classes", "units" to name but a few. Whatever terminology is used, most of the core modularity concepts are the same. I'll use the term module to describe such a component, whether ostensibly object-oriented or not. "Abstract Data Types" are a special case of module, where the module is defining a new type and all the operators that act on it. Sounds very much like objects - but perhaps without inheritance.

Back to my Personal Pages.
Updated: August 2019