Designing Data-Intensive Applications by Martin Kleppmann
Designing Data-Intensive Applications - the one book to read to understand software development.
Systems desigh interview by Alex Xu
The high-level design of different systems, from URL shorteners to YouTube.
A Philosophy of Software Design by John Ousterhout
A Philosophy of Software Design - the must-read for software engineers.