When we wish to enact change within ourselves with the goal of becoming a better person and evolving as a human being, we will inevitably arrive at a realization of an internal disconnect between what we would like to see as our ideal self and what and the reality of our being is – often very far from that ideal. In order to implement the changes we wish to see in ourselves, we may either reject and renounce our current beliefs and forcefully try to replace them with others, or accept ourselves for whom we are with our limitations and beliefs and attempt to change ourselves from within those accepted parameters and limitations.
A software engineer starting a new project first has to dream up the ideal solution to that problem. In the programmers mind, this solution is perfect and is functioning ideally to achieve the stated goals. When subsequently transforming that idealistic vision to actual computer code and connecting it with Reality, there are inevitable losses in quality and only a fraction of that perfection the programmer saw in his head gets translated to the real world. With practice, the amount of quality lost during this transformation may be reduced but it can be never completely avoided.
When dealing with legacy code, be it of their own doing or something inherited from other programmers, the engineer is facing a decision whether to accept the codebase as it is and attempt to make incremental changes to it or to throw it away and start over from scratch.
In “The Paradox of Self-Denial”, Alan Watts notes that attempts to accept, reject or change ourselves are all equally fruitless, as if trying to bite your own teeth, since the part of our self that wants to change our self is the very one needing to be changed. In order to realize the futility of that, a serious attempt must be made at it – because only through the humility of discovering the inability to make any meaningful change to itself can the ego die – opening a doorway to actual progress. Zen Buddhism likens this task of self-transcendence to a mosquito trying to bite an iron bull and eventually realizing the utter futility of the activity.
An engineer can easily manipulate and control an external entity – a piece of code – but we have yet to develop software that is capable of truly meaningful self-improvement.
The implication of this on the surface seems to be that we appear to be ultimately powerless to control or implement changes in ourselves in any meaningful way – and this does not bode well with most of us. Most of us are unwilling to let go of control at that level and simply trust ourselves to the “flow”.
We are not isolated entities floating in nothingness – instead, we are part of an enormous world of other entities, objects, connections and relationships which we would call the Reality. Our subjective Reality is the sum of our environment, the people and objects with which we interact with and this subjective Reality has a major influence on all our decisions, thoughts, feelings and creations. We can either be in sync and balance or in conflict and disharmony with our subjective Reality.
A piece of software also never exists in isolation – it is always part of a bigger ecosystem of other pieces of programs and related applications. There are programs upon which our code relies upon; there are other programs which rely on our program; and yet more programs which are in our general space, perhaps as competitors or partners which all shape the direction our code takes. The engineers observe the environment, the Reality of the program, and make changes to the program to better accord with its Reality so that it would act out its part and role in the environment in the most effective way.
The amount of influence our Reality has upon us depends on our level of harmony with that Reality. As our thoughts and ideas move further away from those of our Reality, the chances of conflict keep increasing. On an individual scale, this may result in arguments, hurt feelings and social problems, while on a society level this often leads to uprisings and even civil wars. By adjusting the balance between harmonizing and conflicting with our Reality, we can control the amount of influence that Reality has on us – ideally trying to match our Reality as closely as possible to our being to reduce the amount of conflict in our lives.
A person who is in constant conflict with his Reality is in fact contributing to the same elements of their Reality that they are in conflict with – effectively creating a closed loop which only breeds further conflict. Instead, by trying to harmonize with his Reality, by first implementing change within himself and then projecting it outwards can the Reality on a bigger scale be changed; it must not be forgotten, though, that Reality is much bigger and has much higher inertia than the individual – so it is easy to get hurt when attempting too radical and disruptive changes.
Sometimes, programs are developed which go against the ‘current’, software which upsets the Reality, disrupts the status quo and otherwise goes not conform. Sometimes, such disruptive technology is necessary to drive the Reality forward and shake it out of some limiting beliefs. However, it is extremely risky because it goes hard against the current and being a conflicting entity, it can trigger a lot of chaos and mayhem. Due to the high risks involved in such disruptive solutions, most software businesses prefer to harmonize and be in accord with the Reality and make incremental, iterative changes instead.
If we accept our Reality as a major influence on all our thoughts and decisions and that for the most part, it is better to be at peace with and in accord with our Reality, then it would again appear that we are still powerless – in that state of mind, in that harmonic existence, it still requires us to relinquish control over ourselves to the invisible hand of Reality – and become merely powerless observers of ourselves. Have we just exchanged the notion letting go and going with “the flow” with the idea of letting go to go with “our Reality”?
The key here is that we have quite a lot of control over our Reality and can choose the elements which it is composed of; by doing so, we can indirectly influence ourselves through the invisible hand of Reality. By choosing to surround ourselves with people with certain mindsets, we let ourselves to be influenced by those ideas and naturally gravitate towards similar thought patterns. By choosing a venue for the night, we make a decision on how we wish to be influenced on that particular evening; which ideas we want to absorb – which elements we wish to bring into our Reality. By choosing a movie to watch or a song to listen to, we bring those into our Reality and let them influence us.
A software engineer can also control the Reality to which his program is exposed to by making strategic decisions on which other programs his program interfaces with, which system libraries he uses and which operating restrictions are placed upon the program. A programmer consciously choosing to develop a program under much more restrictive and limiting conditions – less available memory, network bandwidth, disk space or processor speed – influences the outcome of the final product.
An engineer developing a video streaming algorithm under near-ideal network conditions will create a solution that works in that environment – but not in less-than-ideal, real world conditions; even with extensive QA and testing, the underlying ideas that shaped that program will have very difficult time in a very restrictive network environment. Yet a programmer writing the same program from scratch in an extremely harsh and restrictive environment will make deep low-level decisions which will shape the program in such a way that it will operate smoothly in that environment – and in all better-case real-world environments as well. Therefore, it is useful to develop software in worst-case environment and scenarios – because when you release the program to the world, for the majority of time it will operate in environments which are less restrictive than the one where it “grew up”, giving it a lot of headroom and increasing its overall operational effectiveness.
Thus, by recognizing the futility of trying to bite our own teeth, by seeking harmony between ourselves and our Reality, by making incremental adjustments to our own mind as well as our Reality, by placing elements and components into our Reality which we know to drive us towards our goals, by exposing ourselves to and letting ourselves be influenced by elements which we see in our vision of our ideal self, we have the control to drive ourselves towards any goals we can imagine and be well on the path of becoming the person we dream of being.