Friday, October 24, 2008

The Cost and Benefit of Introspection

One of the interests that I have developed over the years is understanding the differences and similarities between computers and the human mind. Finding many flaws in modern programming, and being too stubborn to admit that they may just be flaws in my own habits, I have steered this interest toward creating a development environment that is more “natural” to use. I have been operating under the assumption that it will be easier to change the near entirety of modern programming as we know it instead of changing my own instincts. I've never worked so hard to maintain my laziness.

As the years have passed and I find myself forced into more mundane programming tasks through college projects and work assignments, I find myself wondering if I am not chasing yet another pipe dream. The ideals that I chase include elevating most programmers beyond viewing their code as a set of files and directories that turn text into arbitrary memory addresses, yet I myself keep stumbling into other abstractions, equally arbitrary and unnatural. The fact that I can't even define what I mean here by “natural” and “unnatural” is perhaps the cementing alarm that what I seek is unattainable. My habit of chasing the unattainable leaves me yet fruitless in my side-project endeavors — but man have I been having fun these past few months just trying to revolutionize programming, even if it is an impossible goal.

The Dealio


I called this project “Rational Thoughts” when I first devised it, as my goal was to create a development environment (back then a mere language) that was more “Rational”, closer to how the human mind perceives things, and thus hypothetically easier to work with. This was a mistaken direction. Human beings are, by and large, hardly “rational” thinkers; we are actually quite emotional*. Even at my most philosophical, when the voices in my head are reminding me that I can't prove my own volition and that there is no faithless evidence for a god or an afterlife, there is an even louder voice causing me to feel sorrow, and a yearning for when I was younger and kept happy by my own naivety about such matters. Likewise, it is perceived happiness that drives us to flourish intellectually, more so than it is our intellect that drives us to be happy. Modern computers, and thus I argue the programming languages designed to interface to them, are already much more rational than we have ever been, and I sure as hell don't want to try and implement emotions in my programming language**.

In case it has not been made obvious, this is not an admittance of defeat. This is an attempt to organize my thoughts and get some feedback on a project that has become so large I can not perceive its entirety at any given moment. Specks of it drift past my eyes, goals from the past, yet I can no longer keep track of which of these goals are compatible and which are mutually exclusive. I have a particular goal on my mind, which I will present soon. But first, I want to talk about introspection.

* ever find yourself cursing at your compiler for generating a compile error, as if your unrestrained outburst would intimidate it into compiling?
** I am perhaps operating under another false assumption, that rational thinking and emotional thinking are somehow opposite each other. Perhaps a topic worthy of another article? Until then, or until it comes up in a comment, I shall continue operating under that assumption…<_< >_>

Introspection


It has been my greatest tool in designing this project. How can I fathom something that operates analogously to the human mind if I can not fathom the human mind? So I desire to study the human mind, and it just so happens that I have one with me at all times.

The first problem with introspection is the observer effect. By using mental processing to consciously look at your — uh — mental processing, you are limiting the amount of mental resources you have to do the observed processing, similar to the framerate drop you get when debugging a game. It is because of this phenomenon I have started to wonder about the direction I am heading. I was once a person who believed that self-introspection, or doing more things consciously and less things subconsciously (or at least being more aware of what the subconscious is doing), was the path to “enlightenment” (a cliched word, but I can't think of any better) and free will. Now I am beginning to think that many things are done subconsciously for optimization reasons, as if the subconscious was running assembly commands through the low level bus that drives our processors. If we started taking more and more mental processes out of our subconscious and doing them “ourselves”, wouldn't we slow down in the same way that an assembly program rewritten in unoptimized Java wouldn't perform well?

The second problem with introspection is avoiding a corrupt memory state, which I believe we humans are still calling “insanity”. If you are not used to it, constantly asking questions such as “why am I straight instead of gay?” or “would I be as evil as Hitler if I was born into his exact world state?” can cause discomfort. It seems from my experience that doing this enough can cause less discomfort via emotional “callouses” that form in your brain, which I can only assume operate by allowing the “rational” part of your mind to continue processing ego-threatening thoughts while the “emotional” guy sits on the sidelines believing that love is about romance and not hormones, or whatever it is that keeps him happy***. I believe that taking this process too far will result in a psychopathic mindset, so handle with care.

It is my obsession with introspection that gives me guidance when working on Rational Thoughts, but it is also what holds me back at times. I desire a programming environment where any question the user asks may be answered easily: “What was the value of this variable seventeen frames ago?” “Why is this variable negative here?” “What will the value of this thing be in two years?" Of course, these questions can be answered through multiple invocations of a program and debugging, but I want an environment that is able to look into its own “mind” and help out on a level closer to how the human mind views things. A development environment that is not so much rational as it is “clever”. But after so many years, I am beginning to wonder if I am any closer to understanding how my own mind works. After all, mightn't it take more processing than a mind has to understand itself, an inescapable paradoxical property of intelligence?

***I like that guy, he comes up with witty asides to lighten blog posts that reek of technicality and emo-philosophical hogwash

No comments: