Computer Systems: A Programmer's Perspective
is superior to the widely mandated
Computer Architecture: A Quantitative Approach
is superior to the widely mandated
for software engineers and programmers. The former has less hardcoded numbers than the latter and more timeless principles.