John Ousterhout's "A Philosophy of Software Design". But this does prompt the question: If these two books about software/program design are so different then which is correct and why is there such a gap? In my experience (like kiitos above) I don't see much scope for HtDP for most industry programming and I have worked in few different domains.