While I at the time was flattered and almost said yes, it also felt a bit weird knowing they didn't vet people more. What did that say about other books from them I had read?
This seems like a strange mix of "hard" algorithms like sorting or binary search, and ML things like k-means clustering. Not sure who the intended audience is.
I'd argue they're better served doing leetcode (given finite time) to land the job, THEN reading this book to become better at their job.
They approached me a few years ago to write something, and Leanpub seemed a much more compelling offer.
- Algorithm Design Manual (3rd ed.) (by Skiena)
- Art of Computer Programming vols 1, 2, 3, 4A, 4B (editions 3,3,2,1,1) (collectively, "TAOCP") (by Knuth)
- Algorithms (by Erickson) [CC-BY-4.0]
- Algorithms (by Sedgewick & Wayne)
- Introduction to Algorithms (4th ed.) ("CLRS") (by Cormen et al.)
- How to Design Programs (by Felleisen et al.) - crossover between basic programming advice, functional programming, and some limited/basic algorithms coverage [CC-BY-NC-ND-4.0]
- Pearls of Functional Algorithm Design (by Bird)
- Purely Functional Data Structures (by Okasaki)
Publishers? Pragmatic Bookshelf, or O'Reilly (not oreilly.com-selling-Packt). Find what everyone is using as a learning/reference resource for a specific topic and use that, regardless of publisher; it's rarely if ever Packt.
In the "friendly+actually-useful" category, you missed "Open Data Structures" [1] ... I think it has one of the best descriptions of trees, including B-Trees which seem to be only superficially described in other books. The "Think" series is also pretty good and covers more than just algorithms [2].
TAOCP, Okasaki, Bird: these feel really academic and/or less useful for industry work. Reading HTDP wasn't as useful to me, at least: I feel like Felleisen's books describe what he "imagines" would be a good way to write software on a "real" job :-p (non-academic setting).
Skiena: I have mixed feelings about it... It seems to have gained popularity since Steve Yegge's blog post about Google interviews, but imho many concepts in that book are better explained elsewhere. I suppose the intended purpose of the book was to serve as a reference and an index to other resources. However, it often refers to sources that are 10 years old or older, academic implementations that could be challenging to apply in a real job setting, or things that are no longer available online afaict (e.g., LEDA), or hard to read papers, most of which lack a working implementation of the described concepts, etc. I wonder if anybody can really vouch for it or have a personal anecdote of the book being useful or enjoyable.
--
Two other books that I like from them are "Language Implementation Patterns" and "Distributed Services with Go".
It’s a great way to build up an understanding of how something works from the ground up without worrying about the specific code implementation (or using the book as a guide to write one).
I don't think anybody that doesn't already know the basics of TLS would be able to make sense of it as presented there: There's an implicit assumption that an RSA public key is used for key establishment that's never mentioned, and the diagram (which is sloppily drawn too) doesn't help things either.
In the end, "a" secret key is used to encrypt something – but the core of TLS key establishment (again, only the RSA variants) is how that key is agreed upon using only the server's public key. That's arguably the entire algorithm here (the rest is protocol negotiation)!
I own the book, and I enjoy it. Bought it for Xmas.