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..
![]()
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:
- Use K&P's core principles everywhere: simplicity, clarity and generality.
- Show pride in your work - do a thorough job whenever you program.
- Automate wherever possible. There are many occasions to use different automation techniques to make your programming life easier. Look out for them actively.
- Develop your own toolbox as your experience develops. Write flexible reusable ADTs, modules and tools, and reuse them aggressively on new projects at the least provocation.
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.
- February 2011: Article 1: Every Abstract Data Type (ADT) needs a stringify operator.
- April 2011: Article 2: Review of 'The Pragmatic Programmer (Hunt and Thomas)'.
- March 2012: Article 3: Review of 'Programming Pearls' and 'More Programming Pearls' (Jon Bentley)'.
- January 2013: Article 4: Perlstub: Building a Tool, Extending your Editor
- March 2013: Article 5: Testing and Development: the Siamese Twins of PSD.
- Sept 2013: Article 6: Review of 'The Practice of Programming (Pike and Kernighan)'.
- Aug 2014: Article 7: Import Cool Features #1: Simulating OO in C
- Dec 2014: Article 8: Cool Features #2: Bringing Recursive Data Types to C
- Aug 2015: Article 9: Individual Safety Tips or "Shared Norms" of C Programming? Note that I tried a wisdom of crowds experiment here, I wrote a draft, and then triggered a LinkedIn discussion about it, incorporating many of the suggestions here.
- Feb 2016: Article 10: Automatic Code Generators: build tools to help you program.
- July 2018: Article 11: A new approach to Code Generators - Tool-Enhanced Features for an Existing Language (TEFEL), used to add Pattern Matching to C.
- June 2019: Four Lectures on C Tools just given to our first year Computer Science students. Covers most of the PSD ground from a C perspective. The third and fourth lectures cover Code Generators in more depth than article 10 does, including a couple of new slides in the fourth lecture on TEFEL and the Pattern Matching example from Article 11.
- August 2019: Article 12: Another TEFEL Example: Adding Go-style Interfaces in C.
- September 2019: Article 13: A Study in Optimization.
- Coming soon: Article: If you need to do Memory Allocation, make sure your code doesn't leak!
- Coming soon: Review of 'Code Complete (McConnell).'
d.white@imperial.ac.uk Back to my Personal Pages. Updated: August 2019