This book presents core concepts and algorithms of distributed computing, covering distributed graph algorithms; logical time and global states; mutual exclusion and resource allocation; high-level communication abstractions;distributed shared memory and more.
I've just completed this book that a friend lent to me.
It's rather well-written and goes in depth on a lot of the basic (or rather foundational) concepts of distributed computing, and more advanced ones too.
It's approachable, although not as much if you have an aversion to mathematical notation, but it's possible to pull through by focusing on the pseudo code and descriptions.
An annoying thing about the book is that it never ever mentions failures, time outs, and network issues in distributed algorithms. I went the entire book thinking that nearly none of the material in there was of practical use.
Then you go to the afterword, after 470 pages of content and algorithm reading, down to the section "A Series of Books" where it is suddenly revealed to you that the book's purpose was in fact to have algorithms about failure-free asynchronous systems (these things don't really exist, they're always failure prone in some way! They're more of a mental framework to explore the algorithms themselves)
The author does recommend alternative books to get that content, but hot damn would I have liked to know about it beforehand, maybe in the preface or something, given there is one already.
This has been a huge disappointment regarding my expectations, but after learning about this point of view the book has set itself for, I can see the book doing a very good job at it. It's why I still give it 4 stars.