You should read A philosophy of software design by John Ousterhout. It might become your favourite book.
I second that, absolute favorite
I second that, absolute favorite