Choosing a good book about a particular programming language from many books, or even hundreds of books, can be difficult.
Some people like to look at reviews, but I find reviews more or less useless. Just because a book receives a good review doesn't mean that it is actually good from your perspective. Book reviews are the same as movie reviews - they are just other peoples opinions. Some people like it while others don't. Reviews only work, if you know for sure, that the person who is doing the review has the exact same taste and level of understanding as you.
What really matters is the method of teaching in the book. The method which the author uses needs to fit your way of thinking. This is the most important aspect.
Of course it is also important that the author actually knows what he's talking about, but the author doesn't necessary need to be a master of the programming language. Skillful programmers tend to be less good writers, they think technically and uses terms that are difficult to understand.
Often I find that small useful and practical online tutorials are much more useful than a particular book. After gaining some experience you can then buy a good reference book and then you don't need a particular book teaching you "how to program".
The size of the book doesn't matter, but I have noticed that often times the biggest book is the least useful!
Often the biggest book just contains a lot of unneeded information. One of the things I hate the most is if a book contains about 30 pages of introduction to the different chapters. In most cases this is a complete waste of paper, and I tend to take this as a bad sign. I can take a look in the "Table of contents" and see what the chapters are about, and I can take a look at each chapter. Spending about 20 minutes reading about what the book is about in each chapter is a waste of time. Let's get strait to the point.
Some authors make the books big on purpose. Not because they need to be, but because they know that many people think that if a book is really big, it must be great and it must contain all the information that is needed. By making the book big with a lot of more or less useless information they can make the book look attractive and they can make the book more expensive.
Books like "The X Bible" or "The Y Bible" tend to be on 900 to 1500 pages and they are very expensive, yet I have never found anyone of those so-called bible books to be useful. A small book on the subject usually goes right to the point with a short and good explanation with a couple of good examples. The so-called bible books tend to be filled with a lot of unneeded information.
This is important: Make yourself an expert BEFORE buying a book!
When I need to choose a new book, no matter what the subject is, I try to gain some knowledge on a particular sub-subject of the matter first. I try to gain enough knowledge on a specific subject of the programming language. I then read a lot of information online and if possible experiment with it. When I feel I understand the subject very well, I have something to compare with and I then try to locate the biggest bookstore on programming languages. I then look at each book to see how it deals with the subject I now understand well myself.
By doing it this way I can compare the way the author explain the subject with the knowledge I already possesses. I am then better skilled at making a good judgment. If the author explains the subject really well, then the chances are that he or she will explain all the other issues just as well. And for the most part that is true. The explanation has to fit my way of thinking and understanding.
Some books are very popular, but just because a book is popular doesn't mean that it fits your way of thinking and understanding.
Another very imporant part is that the book also has to make use of examples that you can relate to.
I personally don't like books that uses complicated mathematically problems as examples. Even though I like mathematics, and of course you need some basic mathematics in almost every programming language, I am not a mathematician and I cannot relate much to heavy mathematical examples.
I once found a programming book on Java using only mathematically related problems as examples. Chapter by chapter the same examples was being used only gaining in complexity. Even though I understood the programming, I could not relate to those examples at all and I didn't understand the mathematics used. The examples became completely useless to me and so did the book.
In order to gain knowledge from the book you have to understand the problems in the book, only then can you appreciate the programming used in the examples - this is important! If you don't understand the problems used as examples in the book, you can't relate to the programming, and you risk believing that you don't understand that programming language well.
Find a book with good examples and solutions you can relate to!
A reference book is a must if you decide to program in a particular language, but a reference isn't the first thing you need. Many times a reference lacks explanation and examples and that's because it's just a reference.
On the other hand if you can find a good reference book with examples and a little explanation then often that is the best book.
As a conclusion you could say that a good programming book is a book that: