Preface

Motivation

The spark that ignited this project was not a sudden flash of inspiration, but a painful personal accident. My highly respected dentist recommended the precautionary removal of a wisdom tooth. “Problems might appear later,” he warned, “and they will only get worse with time.”

Trusting his expertise, I followed his advice. Soon I was one tooth—and a few hundred dollars—lighter. Unfortunately, the problems only worsened. The socket refused to heal, leaving the nerves exposed. With Christmas holidays in full swing, all dentists were off duty. For several days, the pain expanded from one tooth until it felt as though my entire head was aching.

I did not handle the pain gracefully. First, I blamed the sugar industry for ruining people’s teeth with such a toxic product. Next came my dentist. Before long, I was even accusing the government education system of failing to train competent professionals.

Eventually the holidays ended, the clinic reopened, and the issue was finally resolved. Relief came quickly. Yet what remained long after the pain subsided was a question I had discussed many times with my colleagues: Can pain ever be implemented as software?

My colleague, apparently blessed with better teeth, believed it was possible. With the right sensors, firmware, and code, a robot could be made to simulate agony. I strongly disagreed. To behave as if in pain, I argued, is not the same as feeling pain. I could not see how genuine pain could ever be implemented in a programming language.

It was this missing “pain function” in the standard library of C that planted the seed of an obsession—an obsession that has grown, over years of thought and trial and error, into the work you are now reading.

Method and Approach

The conclusions presented in this book were developed using the same software design methods and tools I have relied on throughout my career as a software professional. The software I have built with these methods works reliably. Accordingly, I believe the conclusions developed with them should hold as well.

However, no program is without bugs, and no complex argument is without potential flaws. Some parts of the reasoning presented here may contain errors. Still, I am confident that, as with well-designed software, these imperfections will not obscure the larger picture.

Acknowledgments

I owe my deepest gratitude to my wife. She is quite a remarkable piece of work—far more complex than anything found in the standard library of C. She patiently endured countless late nights listening to the clicking of my noisy laptop. Despite the many disruptions to her sleep, she remained remarkably understanding and supportive throughout the writing of this book.

I also owe a great debt to my brother, along with an apology for the many fishing trips I surely spoiled by relentlessly subjecting him to my theories.

Special thanks—or perhaps playful blame—go to Andy Jones. His gift of the book The Structure of Space and Time proved truly transformative. Without that “gift,” I might never have developed the necessary obsession to bring this work to completion.

Finally, I wish to honor the memory of my dog, Raju (R.I.P.), my loyal hunting companion, with whom I shared so many memorable hunts—and to the hares, R.I.P. as well.