As computers have gotten smaller and faster, developers have become more and more removed from the lowest levels of programming. Randall Hyde's new book Write Great Code - Volume 1: Understanding The Machine (No Starch Press) will help you get back to the basic levels of how computers work and how that affects your programming.
Chapter List: What You Need To Know To Write Great Code; Numeric Representation; Binary Arithmetic And Bit Operation; Floating-Point Representation; Character Representation; Memory Organization And Access; Composite Data Types And Memory Objects; Boolean Logic And Digital Design; CPU Architecture; Instruction Set Architecture; Memory Architecture And Organization; Input And Output (I/O); Thinking Low-Level, Writing High-Level; ASCII Character Set; Index
It used to be you couldn't program at all without knowing this material. The design of a program was tied closely to the machine architecture, and it drove the instruction set and the overall programming decisions. But now the higher-level programs have made it easier for mere mortals to write a program and be completely oblivious to how a CPU executes an instruction or loads data from memory. Hyde goes into great detail on all the instructional design and theory, and I'd venture to guess that a very small number of programmers (and I'm not one of them) know most of this information. The assumption is that you'll know at least one procedural language (like C, C++, BASIC, or assembly). He rotates examples among C, C++, Pascal, BASIC, and assembly so as to keep the examples as language-neutral as possible. The goal when you finish the reading is that you should understand exactly how the architecture of a CPU affects your program, and how to make programming decisions that will lead to efficient programs. This volume will be followed up by another book titled Think Low-Level, Write High-Level. For me, I think this is where a lot of this information will come together.
Foundational information presented in great detail, and a book that all serious developers should take the time to read and understand.