Книги чтобы прямо конкретно по Computer Science - вот это для меня как для software engineer интересный вопрос, на самом деле.
Лично из моей библиотеки я могу порекомендовать вот эти классические книги по разным областям Computer Science:
- Artificial Intelligence: A Modern Approach (Stuart Russell, Peter Norvig) 3 редакция. Книга по искусственному интеллекту, претендует на всеобъемлющесть. Вообще всё, что написал Питер Норвиг, рекомендуется к прочтению.
- Concrete Mathematics: A Foundation for Computer Science (Ronald Graham, Donald Knuth), 2 редакция. Книга по фундаментальной математике, которая используется в компьютерных науках. Один из соавторов - Дональд Кнут, автор "The Art of Computer Programming", другой классической книги в компьютерных науках.
- The Annotated Turing (Charles Petzold), вообще всё, что написал Чарльз Петцольд, рекомендуется к прочтению, но эта книга особенная. Это та самая первая монография Тьюринга, в которой он описывает машину, названную его именем, но только с построчным комментарием самого Петцольда. Книга очень помогает понять, что такое самый низкий уровень в компьютерных науках, а также даёт кое-какие представления о понятии вычислимости.
- The Elements of Computer Systems (Noam Nisan, Shimon Schocken). Очень подробное, основанное на практических занятиях введение в структуру компьютерных систем, начиная с фундаментальных основ - логических цепей.
- Concepts, Techniques, and Models of Computer Programming (Peter Van Roy, Seif Haridi). Уже довольно старая книга (2004 года), но с тех пор ничего подобного не выходило. Это обзор всех (на тот год) концепций, используемых в языках программирования - фактически, подробный разбор всех так называемых "парадигм программирования" по своей сути. На мой взгляд, она больше инженерная чем научная, но не порекомендовать её я не могу.
- Я её сам не читал, но очень много людей рекомендуют драконью книгу: Compilers: Principles, Techniques and Tools (Alfred Aho, Monica Lam, Ravi Sethi, Jeffrey Ullman). Тоже достаточно старая книга, но тем не менее перечисляющая всю необходимую теорию построения компиляторов языков программирования.
- Естественно, если мы говорим про CS, нужно упомянуть алгоритмизацию, и, наверное, самой важной книгой в этой области является Introduction to Algorithms (Thomas Cormen, Charles Leiserson, Ronald Rivest, Clifford Stein). Даже мой университетский препод по дискретке в 2008 году рекомендовал именно эту книгу по алгоритмам.
- Несмотря на то, что Кнут назвал свою книгу The Art of Programming, и до сих пор её пишет, его книга является в первую очередь книгой по алгоритмизации. Его вклад собственно в программную инженерию в виде концепции literate programming нарушает достаточно принципов архитектуры, чтобы сохраниться только в виде Jupyter Notebooks и Wolfram Mathematica.
Я уверен, что более знающие CS люди подскажут больше классических книг в этой области, но вышеперечисленные восемь это то, до чего лично у меня дошли руки, и в чьих качествах я не сомневаюсь.
Нет, я не упоминаю общеизвестный
SICP, потому что это книга в первую очередь по программной инженерии, а не по компьютерным наукам. Конечно же, я рекомендую Structure and Interpretation of Computer Programs всё равно, и сам её читал.