The Elements of Computing Systems, Second Edition
Buy this book if you're a programmer who wants to know how computers work.I read the first edition in high school, and if I had to choose either this book or my entire undergrad CS education, I'd pick this book.