The books of computer science, I think, should be divided into two major groups: one is references which play a role like a dictionary; the other is tutorials which can be, but not limited to, used by teachers and students in colleges.
References are those books which provide full explanation about some topics. They should express all the things in a concise, accurate, detailed way. Those books are not appropriate for learners or novices. They are for the ones who have been familiar with the topics and have known what and why and just want to know how.
Tutorials are, however, written like a novel and an essay. The words in the books should be easy to understand. The main mission of such books is to teach novices the basic mechanisms and to help learners to master the key concepts and core issues concerning what and why. Exercises are essential to those books which have three purposes: testing readers’ comprehension of topics discussed, giving readers a chance to practice and extending the texts. And a good book should give some hints or answers to some exercises. Because, in most cases, we are solving the wrong problems. It is very easy for a reader to misunderstand the author’s intention.
One of most important standard for a good book is that it MUST NOT have lots of errors.
For good books, examples are very important to make them better. Excellent examples are the most useful information for readers.
When you want to start studying some new topic, you should start with tutorials. After you’ve been grasping basic mechanisms and familiar with key concepts, you should refer to some manuals to learn more about that topic. With some practices, you will be proficient in that area.
Examples of good books:
Good references: <C, a reference manual>, <Linux in a nutshell>
Good tutorials: <The C programming Language>, <Advanced Programming under Unix Environment>
Appendix:
Here are some good books:
Books for learning C programming:
First book should be <C primer> or <Practical C programming>
<C programming Language> and <Pointers on C> should follow
Then you can try <C Traps and Pitfalls> and <Expert C programming>
Books for learning Linux development
<Practical guide to Fedora, Red hat Linux system>
<Advanced Programming under Unix Environment>
<Understanding Linux kernel>
Books for learning Java programming
<Header first Java>
<Thinking in Java>
<Core Java>
Books for learning C++ programming
<C++ Primer>
<Accelerated in C++>
<Thinking in C++>
Books for data structure and algorithms
<Introduction to algorithms>
<Algorithms in C/C++/Java>
<The art of computer programming>