I bought this book on a whim, because I was trying to understand a compression scheme and had trouble finding good documentation on it. The book overall is written in a quite conversational style that I find a bit distracting from the content, and the introduction is a bit repetitive — yes I get it, there’s some maths involved. Thanks.
That said, the content is a solid and quite approchable introduction to the topic area. I haven’t ever thought before about entropy in information theory for example, I now feel like I could give a coherent elevator description of the topic.
Another example is the description of Huffman codes. Here the topic is introduced with four pages and a few diagrams and I “get it”. In the random algorithms book on my shelf (Introduction to Algorithms, third edition by Cormen, Leiserson, Rivest, and Stein), the same content takes ten pages and includes a six page set of lemmas around the code’s correctness. Both descriptions would get you there in the end, but Understanding Compression‘s description is definitely more approachable.
Overall, its very rare for me to sit down and actually read a technical book from cover to cover, but this book wanted me to keep reading. So overall, that makes it a very successful introduction to the field.
I didn’t realise when I bought the book and started reading it that Colt is a Google Developer Evangelist and had already made a short video series about compression called Compressor Head. That series is fun as well and worth a watch, even if you’ve already read the book. That said, I think the book is better overall — the topics are covered in more depth, whereas the videos try a bit hard to be fun.
One criticism I’d make of the book is that I would have liked to have seen more discussion of how these compression algorithms are used in real world formats. For example, adaptive statistical encoders require a separate literal stream. What is a real world format that uses such an encoder and how does it store that extra stream of data? I don’t know, because the book doesn’t cover that at all. Now, that’s probably a bad example because perhaps such an encoder isn’t used in the real world, but the general complaint holds true — things are discussed at the theoretical level, with passing references to real world implementations.