This fall I have stumbled on the podcast by Steven Levitt People I (Mostly) Admire. The podcast is engaging, but the title is priceless. The frisky word “mostly” vindicates us from finding idols and allows for selective inspiration from a wide variety of people. It made me think about people I admire. Perhaps it’s an overgeneralization, but when someone asks us about people we admire we tend to either name the most colossal personalities in human history (Einstein, Bach) or someone in our closest circle (our parents, friends). But then, in my opinion, there is a middle layer of people, who do not immediately spring to mind, nor do we put them on the posters, yet their contributions and achievements can have a tremendous impact on our view of the world. This year, I had an opportunity to discover absolutely awe-inspiring personalities with admirable personal and professional stories. Jørn Utzon, was a great testimony that one can create beautiful things but also have a beautiful character (this is refreshing after last decade admiration of Steve Jobs and "similar aggressive personalities). Richard Hamming taught me about the value of perseverance and the importance of "style" of thinking. Charles and Ray Eames surprised me with the volume of experiments and iterations required to produce truly unique pieces. Jeff Atwood reminded me about the magic of writing code - something that I forget in the daily foam of debugging of enterprise software. Maria Yablonina, an architect-roboticist reminded me about looking at things from a very different perspective by showcasing robots that can build things by climbing on walls. It’s marvelous to encounter people who are preoccupied with experimenting, creating, and collaborating. In the end, we feed off each other and we must step outside of our internal imaginary world and engage with others whether in person or through an examination of their work, to get an extra notch of inspiration.
Postel’s law: “Be liberal in what you accept and conservative in what you send”.
*In my humble opinion, the law applies to both software development and day-to-day communication.
A Byzantine generals problem is a condition of a computer system, particularly distributed computing systems, where components may fail and there is imperfect information on whether a component has failed. The term takes its name from an allegory, the "Byzantine Generals Problem", developed to describe a situation in which, in order to avoid catastrophic failure of the system, the system’s actors must agree on a concerted strategy, but some of these actors are unreliable.
Imagine divisions of a Byzantine army, attacking a completely encircled city. To proceed, the generals of each division, who are dispersed around the city’s periphery, must agree on a battle plan. However, while some generals want to attack, others may want to retreat. In the official description of the Byzantine Generals’ Problem (described in this paper), there is a leader-follower set-up. In order to achieve consensus, the commanding general and every lieutenant must agree on the same decision. To complicate matters, the generals are so far apart from each other that messengers are required in order for the generals to communicate. Also, one or more lieutenants may be a traitor, intending to sabotage the situation.
So, given these conditions and the commander-lieutenant set-up, can the army execute a strategy? The solution to the problem relies on an algorithm that can guarantee that:
* All loyal lieutenant generals decide upon the same plan of action, and
* A small number of traitors cannot cause the loyal lieutenants to adopt a bad plan.
The loyal lieutenants will all do what the algorithm says they should, but the traitors may do anything they wish. The algorithm must guarantee the first condition regardless of what the traitors do. The loyal lieutenants should not only reach an agreement but should agree upon a reasonable plan.
These days the problem is used to illustrate the requirements for distributed ledger technology as well as resistance for modularized software infrastructures.
Further Reading
* [The Byzantine Generals’ Problem]
* [Understanding Blockchain Fundamentals, Part 1: Byzantine Fault Tolerance
* Here is an explanation under 1:45 minutes [The Byzantine Generals Problem - An Intro To Blockchain
“For a successful technology, reality must take precedence over public relations, for nature cannot be fooled”
Richard Feynman