//-->

Ethical Software by Alex Bunardzic

October 27, 2005, 11:16 am

Ultra Late Binding

Filed under: Software, End-user experience, Art, Zen — Alex Bunardzic @

Warning: this might be a bit on the technical side; if I were to turn the geekometer on, the needle would probably go a bit to the right of the safe general public zone. However, don’t let this intimidate or repulse you — there could still be some general purpose stuff of interest to the non-technical folks.

What Is Binding?

Simply put. whenever two objects get coupled, we’re talking about binding. Whether it be two interlocking pieces of a puzzle, or two macromolecules that interlock together during the process of metabolism, or a hammer that hits the nail on the head, it always boils down to two objects that had temporarily made a match.

In the world of software programming, binding implies a sort of a resolution of a possible ambiguity. For example, as I’m writing a program, I may wish to bind a variable name to the actual block of executable code.

Late Binding

Late binding is a technical term that refers to the placement of the binding decision during the process of resolving the ambiguities. For example, I may grab my modular screwdriver in order to try to fix my daughter’s bicycle. At that point, before I even know what’s wrong with the bicycle, I may choose to use the Phillips screwdriver head. However, that may be premature. Why is that? Because I still don’t know, at that point, what kind of screws will I have to handle on the bicycle I’m trying to fix.

So, in order not to act stupidly, I’ll defer the decision on which head to use for later. Thus, late binding.

Ultra Late Binding

What then is ultra late binding? It’s kind of hard to explain, but it’s basically a hallmark of intelligent behavior. Even more than that, ultra late binding is a hallmark of inspired behavior.

Take, for example, a top-notch jazz musician. How does he work? He specializes in working under extremely hard conditions, trying to respond to an ever shifting underlying musical terrain. Anything he does, whether he decides to play a note or a cluster of notes, or whether he decides to lay back and not play anything, directly influences the rest of the band. Also, whatever the rest of the band does, directly influences him. If you’ve ever been in such a situation, you know how unnerving this ’staying on your toes’ predicament can really be.

But, it can also be incredibly satisfying and fulfilling. This is because one gets to exercise complete creative freedom.

Such creative freedom, such completely inspired behavior, is only possible in the ultra late binding circumstances. Like an inspired jazz musician, only when we defer the decision until the very last possible moment, can we unveil the gem of our utmost inspiration. This is what makes us alive, what makes us human.

These last couple of nanoseconds, when an expert in the field finally decides that enough evidence had been gathered and that now’s the time to act on the educated guess impulse, are the space where the magic happens. Anyone who cannot withstand the cooker pressure of deferring these vital decisions until the last split second, cannot offer anything other than bland, mediocre bureaucratic response.

In software, those systems that come with ridigly predefined behavior bring very little value to the situation. These are the early bound systems that act in a very predictable, boring fashion, regardless of the surrounding circumstances.

More flexible systems, the ones that offer certain unpredictability, are usually more valuable, as they can exhibit a wide variety of behavioral patterns. These are the late bound systems that are characterized by the polymorphic behavior.

However, in order to achieve truly flexible behavior, we need to go beyond late binding and introduce the ultra late binding which will leave almost everything unresolved and will disambiguate the tension only at the very last second. Such systems go beyond polymorphism and rely on dynamic and metaprogramming. Thus, we’re forced to go beyond statically typed languages, such as C, C++, Java etc., into dynamically typed languages, such as Ruby.

Leave a Reply

You must be logged in to post a comment.