Hubbard-Software.com: Professional Reading for the Systems Programmer and the Software Designer

Table of Contents

Overview

I don't believe you can master Software Design without an awful lot of Systems Programming knowledge and experience; this is probably explained best by Joel Spolsky, who notes that, in today's immature world of software, all of the abstractions "leak". And even if you are listed as a Software Architect on your card, unless the company is large enough to have the Ivory Tower Problem (non-practicing architects; non-functioning systems), Systems Programming is likely what will be doing most of the time anyway, unless of course you're just starting out, in which case you might be doing web scripting or Java or some such.

My point is that you have to know how everything underneath works, in order to get the best designs.

Philosophy and Design

I've been, variously, an OO True Believer (I was young once, OK?), then a classical kernel programmer, which washed the C++ straight out of my system for at least a year. (Until I had to write the custom compiler.) I then gradually worked my way back into C++, via a fresh re-reading of Stroustrup's D&E. That worked great for the mixed-project style at Apprion, where I was writing mostly user-space programs to hack the network stack of various wireless sensors and sensor management systems (with the blessings of the various manufacturers, of course).

After moving to NVIDIA in 2007, however, I've settled into what I hope is a long term role as an OS (mainly Linux, but some Windows) kernel engineer, and GPU (graphics processing unit) specialist. This requires using C almost exclusively. And so I now have some very entertaining anecdotes explaining just how badly C++ falls short in kernel programming.

What I'd really like is something that is as standard as C and C++, but adds just a very tiny bit of C++ to C. Embedded C++ took a similar approach, except that they subtracted a tiny bit from C++, which is not good enough for kernel programming: the system is still too large, too buggy, and too non-portable.

Linux / Unix (but lately...mostly just Linux)

System maintenance

Hardware-specific reading; assembly language

The C Language

Scripting languages, Makefiles, and Build Systems

Kernels and Operating Systems

Networking

Telecom

Cryptography

Security

Web and database programming

In case you have to pay the bills in between better jobs, you may end up doing some web programming. Here are a few books to help keep you out of trouble, or at least allow you to sound silly and pretentious enough to survive a UML whiteboard session.

Algorithms

Multi-threaded Programming

Compilers and Compiler Design

C++

OO and Design Patterns

Design patterns are a way to ease communications among developers, and sometimes with other people (software managers; marketing types). They are also used for two other situations:

  1. During a design dispute, in a bid to demonstrate that developer A is more OO-centric than developer B (this tactice has fallen somewhat out of fashion, since the dot-com bust of late 2000--too many of those dot-bombs were have-you-been-saved-brother OO True Believers), and
  2. By novice developers, in the mistaken belief that, with a cookbook full of design patterns, programming is really little more than flour, sugar, oven temperature, and picking out the color of the frosting.

Here are a few entertaining books on the topic of OO programming:

Project Management

 

Last updated: December 12, 2009

Home | Professional Reading | Publications | About | Copyright © 2005 - 2008, by John F. Hubbard