7 ms·
While not strictly a CS book, "Godel, Escher, Bach" by Douglas Hofstadter definitely has strong roots in the area. It's not a text book, nor anything even close
by samdalton 15y ago
While not strictly a CS book, "Godel, Escher, Bach" by Douglas Hofstadter definitely has strong roots in the area. It's not a text book, nor anything even close, however, there is a reasonable amount of mathematics and programming language design which make it educational as well as inspirational (particularly formal logic systems, around which the premise of the book is built).
The book is somewhat life changing, in the questions that it asks. You might find yourself thinking about things differently, such as what it is to be conscious, can we ever achieve artificial intelligence, is there such a thing as fate, how was J.S. Bach able to produce such stunning compositions, etc.
It's quite heavy going however, but there's a slightly more succinct, terse version which he wrote a few years ago, called "I Am a Strange Loop". This book takes the point he was trying to make in the first book, and expands on it while adding clarification. It does lack a lot of story that the original contained, so it's not a complete replacement however.
While I think of it, there's also Operating System Concepts by Silberschatz, Gagne and Galvin - http://www.amazon.com/Operating-System-Concepts-Windows-Update/dp/0471250600 http://www.amazon.com/Operating-System-Concepts-Windows-Upda....
It's an extremely detailed look at how operating systems work, down to the lowest level, and it explains a large number of things that we interact with on a daily basis.
- arethuza 15y agoI think GEB is an excellent books because it basically demonstrates in a reasonable accessible way that CS can be about rather more than "how to write programs".
- ericbrunstad 15y agoI fail to see how you can claim that Operating Systems Concepts is an "extremely detailed look at how operating systems work." I read every page of this book. Much of the information is outdated. For instance, much time is spent on tape drives and related devices, as well as methods of using computers that are now updated (FIFO job queues, etc). Some interesting algorithms are covered. However, many of the algorithms have little relation to the techniques used in practice. For example, most of the locking techniques presented in the book are not used on x86. The information about paging and segmentation is overly high-level and is not sufficiently deep to guide an implementor. I'd recommend skipping this book and instead reading the Intel x86 documentation. It was vastly more useful to me while writing my own operating system than anything I read in Operating System Concepts.