If you were to ask me which books I'd recommend for gaining a deeper understanding of the discipline of software engineering, I'd reply with the below list. So now you don't have to ask me :-)
- What the Doormouse Said by John Markoff. An excellent historical lookback on how the 60's counterculture shaped the personal computing industry.
- The Design and Implementation of the FreeBSD Operating System. An excellent deep dive into the internals of FreeBSD. A great introduction to operating system design.
- Elements of Programming. An excellent demonstration of the application of mathematics to program design. The primary author applied his ideals of generic programming into what would become the C++ STL, and then, a major portion of the C++ standard library.
- Structure and Interpretation of Computer Programs. Commonly referred to as SICP, this book is all about controlling your growing programs by way of abstraction. An excellent read for any programmer.
- Computer Systems Architecture. A great introduction to computer architecture by M Morris Mano. Goes from logic gates all the way to register transfer logic.
In general, my belief is that regardless what kind of engineering you do, you should have at the very least some knowledge of the layer beneath the one you work in. For systems folks, this means an understanding of computer hardware: caches, CPU's, all that fun stuff. For web developers, this means networks and their protocols. Only then can you really understand your own domain, and appreciate why things are the way they are.