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

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

System maintenance

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.

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.) Since then, I've gradually worked my way back into C++, via a fresh re-reading of Stroustrup's D&E, and am now having quite a good time.

Project Management

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

Algorithms

Multi-threaded Programming

Compilers and Compiler Design

 

Last updated: June 11, 2007

Home | Professional Reading | Software Tools | Publications | Blog | Personal | About | Copyright © 2005 -2006, by John F. Hubbard