“I hear and I forget. I see and I remember. I do and I understand.” This saying, probably wrongly attributed to Confucius, might be an interpreted translation of a similar saying by 3rd century BCE philosopher Xun Kuang (in the Xunzi). However, this English adaptation seems to have been unearthed in the 1960s by the education community, which fostered the movement of learning through experience.
While reading this book, the saying swiftly came to mind. Indeed, we all ”know” Bitcoin; however, very few can actually explain the software and mathematical scaffolding that allowed its creation, and dissect the inner mechanisms that sustain its architecture. In essence, we all heard of Bitcoin and forgot about it. Then we read in the newspapers that its value is skyrocketing (and we remember that we should have bought some) or plummeting (and we remember that we should have sold them). Regardless of our success in getting rich with Bitcoin (sadly not my case), understanding the ins and outs of Bitcoin is a pleasant experience, accessible through this book.
The author embraces a bottom-up approach, starting with the mathematical and cryptographic background that supports Bitcoin. Note that all code is written in Python; so, readers who are not good at programming in Python may miss out on a significant chunk of the book’s value. I must also say that all code is accessible online through a GitHub repository, and the use of Jupyter notebooks makes things easier for programming newbies.
From a mathematical perspective, the book is not very demanding. An undergrad’s basic understanding of algebra is enough to follow the explanations on finite fields, elliptic curves, and elliptic-curve cryptography (chapters 1 through 3). From there, programming concepts become increasingly important. In chapter 4, “Serialization,” readers will learn how to transform the public keys and signatures created in previous chapters, so as to be able to store or send them efficiently on the Internet. Next, the book proceeds with the fundamentals of Bitcoin, namely transactions, Script smart contracts, blocks, and network communications (chapters 5 through 10). Later, chapters 11 and 12 cover simplified verification and Bloom filters, necessary for running a light client that requires the assistance of nodes that store the entire blockchain. The book ends with chapters 13 (“Segwit”) and 14 (“Advanced Topics and Next Steps”), which readers can safely skip without regret.
This very interesting and well-written book gets right to the point; however, it is not for everyone. While the subtitle’s claim is true, readers must have a programming background (any language will do, but a functioning knowledge of Python is ideal) and previous knowledge of bitwise operations and public-key cryptography basics. Otherwise, despite the clarity found in most chapters, following along will be tough. Also, despite the remarkable attention to detail, a future edition would benefit from an introductory “big picture” chapter, as sometimes we cannot see the wood for the trees.
Readers not interested in the programming details can skip the coding parts and still get the general idea. Readers can also jump directly to a chapter of interest and in most cases find what they are looking for (although this is not a reference book). That being said, the book is intended to be read sequentially and with a computer nearby to solve the coding exercises. Indeed, in order to get the most from this book, read it this way. It is a rewarding experience.
More reviews about this item: Amazon, Goodreads