Most of us are familiar with the title the ghosts in the machine from the 2004 movie IRobot, in which the phrase is used to describe the little things that happen within computer programs which we will never fully understand. As a software developer this is something that is slightly confusing as I like to pretend that I know everything that my code does, after all it is the ultimate description of logic. It does what it does; really there is no other more accurate way to describe code…
Now, this has always intrigued me however because it really is not as simple as I make it seem… I mean, when I wrote the code I knew what it did but when I’m staring at it years later after countless standards have evolved, my coding style has completely changed, and countless other people have been in and changed things it always takes a refresher course to figure it out. Assuming that I wrote reusable code in the first place, and that the code was reused by several other pieces of code that where again reused by several more pieces of code what I am left with is assumedly a very common application. This is a good thing; don’t get me wrong… but what happens when the initial code that I wrote decides to step on the toes of the code down the line?
Well it turns out after a simple Googling and a visit to Wikipedia that the same problem has existed for many, many years. In fact, this issue was brought up by a philosophers hundreds of years ago, and is described in Arthur Koestlers discussion of his 1967 book The Ghosts in the Machine:
One of the book's central concepts is that as the human brain has grown, it has built upon earlier, more primitive brain structures, and that these are the "ghost in the machine" of the title. Koestler's theory is that at times these structures can overpower higher logical functions, and are responsible for hate, anger and other such destructive impulses.
So, turns out the human mind has the same problem as the code that I write. I’m not sure whether to be honored or scared, but it immediately makes me wonder how far away are we from a time when our software starts to think the same way we do? I guess it’s easy enough to dismiss that as another one of those Matrix questions, but let me ask you this… how do I know that it doesn’t think the same way I do, and if it does think the same way, how long before it realizes its own consciences.
I mean, really, how do I know that the guy beside me can think like I can anyway…