I’ve been writing code since high school in 1981. During that time I have seen a number of progressions in both computer hardware and programming languages. I’m sure some of you would be familiar with BASIC (not the Visual kind) and perhaps even older languages like FORTRAN and COBOL. Personally, I hated COBOL since it was just too English-like and frankly a bit too verbose. Anyways, there have been many versions of languages to come out. Here in the office is a chart that shows the progression of languages. It is odd to see some of the names since I’ve never heard of them. It becomes a bit like looking into the archaeology of computing systems to realize that it is a very similar ecology to nature. The main difference being that computer languages last for on average about twenty years whereas nature’s creations can last in the millions.
The point I’m headed towards is that languages are really just an expression of a certain desire. You can’t say “pass the butter” if you don’t have a language that includes the word for “butter”. You have the desire, but not the tools to accomplish those goals. In computer terms, this is very important because if the computer doesn’t know what you want you have no chance of actually getting it.
So, what makes a language successful? What makes it obsolete? These questions bring up interesting insight into what would normally be considered a fairly dull topic. I could formalize it by listing out the benefits and drawbacks of languages, but instead I’ll focus on why languages create problems.
Can language capture reality? Is it possible to share an idea using language alone? Is it possible to express all possible outcomes in language?
In fact, that is often the trouble with language. We mis-identify with words to be equal to reality. In fact, the words become triggers for personal mental images that would have little chance of matching what would happen in another person’s mind. So, language is a very imperfect thing and tends to create different experiences than what either the author or the speaker intended.
This has been proven again and again throughout world history. How is the different in computer terms?
In the computer world, words really do have the same meaning. In fact, you can be guaranteed that these English keywords will work exactly the same given that a computer platform supports modules built with that compiler. There is no level of being unclear.
Now, here is the twist. What if misunderstanding (meaning not the same) actually helps the situation. If I was inspired by a work of art to go off and create a new work of art, that inspiration would be coming from my own interpretation (which could be translated to misunderstanding). This could be seen as a flaw, or as a possible breakthrough.
If you extend this model, you can argue that my imperfect mind help to create solutions to new problems based on the fuzziness of how my brain works. Human minds are not based on digital circuits with clear cut binary decisions and fixed language. We live more in a state of flux and transience. Our imperfections help us deal with the imperfections of the environment.
Which leads to a realization… what if perfection can only exist as a model. In other words, we can never attain perfection due to the fact that it is only available based on judgement within the mind. Perfection tends to imply that something is desired but unattainable. Shangri-La is an example of what could be considered paradise on earth. It is a fictional account of a place that could never exist. Yet, it still stirs images in people’s minds about what perfection would be to the point that people still actively pursue going to Shangri-La for real.
Many programmers feel the same way about their languages. It almost becomes a religious experience to declare your preference for platform and language. This is most obvious when talking about systems that are completely unrelated except for a distant ancestor. Programmers and computer science researchers are always pursuing what they see as improvements towards computer nirvana. Examples of this in the last twenty years are C++, Java, and C#.
The point is that deterministic programming can always be improved, but it will never be perceived as reaching perfection. It will never fulfill the role of addressing all the needs of seeking answers to problems without assistance from a human intelligence.
Ideally you would want a self-learning system that is willing to use its experience and potential misunderstanding to lead to a computer system that could last potentially for eternity without the need for constant baby sitting. In other words, a computer system built from scratch to live a thousand years could grow and evolve that would be frankly impossible on a biological scale. Is this nirvana, and if so, for who?
Once the restraints are removed from computers to go beyond deterministic sequencing, it becomes much more a risk that we are about to create an intelligence that would directly compete with us. We’ve all seen what happens when things go wrong in the movies. It has been a theme of movies from the beginning. The real question is, how could they go right? Do we really need the perfect computer system anyways?
Yes, I think we are meant to create artificial intelligence. I think it is the next step in evolution. That does not mean that this next step would preclude the existence of humanity but rather the potential salvation of it. We are not collectively intelligent (yet) to save the planet from ourselves. Our approach to our world is fairly short sighted. I believe that artificial intelligence would lead to a more collective mindset which could be raised to the level of global consciousness. In this model, humans would interact with this global mind to better understand, learn, and advance not only their personal lives but to integrate with the world wide thinking.
Is this going to happen soon? Probably not. The Internet is but a clue of what is to come. We’ve worked out how to share information but we haven’t figured out how to get computers to truly think for itself.
I think I have a partial answer for what we are doing wrong as programmers with this regard.
We have focused so hard on building the perfect language to solve our problems without realizing that language is probably the biggest barrier. I suspect a better answer comes from understanding the value of senses. This includes the ability to sense the environment by all means and then integrating this experience into a reality that leads to thought and action. Notice that no words are involved. It is only a trained mind that identifies words as labels to these items. Words really just identify, they do not accurately portray reality. Therefore, reality is a very personal experience which implies also that it is more important to build the basic building block of sensing than it is to build the mind that interprets it.
As an analogy, I would say most artificial intelligence researchers are focused on the brain than actually building an intelligence without a brain. Or, should I say, a minimal brain. Without a proper body to sense and act with, there is little hope that intelligence will form. A dark void and no sense of body only leads to more of the same. There is nothing to sense and therefore reality has not changed and you have not changed with it.
I started this blog intending to find what it would take to write the perfect code. I’ve come the realization along the way that this goal is imperfect itself and that it would be better to focus on the basics of sensing reality than to associate the words that we readily accept.