- this is about humans, not about computers;
- this is a draft, the ideas must be further refined, discussed with other people;
- warning: high levels of abstraction ahead!
What would you say... if I said that... a person is nothing but a set of software running on top of a hardware platform? Your first reaction could be "this guy had too much of The Matrix", or "what kind of unsupported nonsense is that!?".
If you bear with me for some time, I hope you will change your views.
What makes a human a human? What is it that defines us? Our body? Our voice? Our thoughts? The beliefs and concepts that influence our decision-making processes? Or maybe it is that entity the church calls "the soul"?
I prefer to place a greater emphasis on our thoughts, because they make us different from other individuals. Otherwise we'd be pretty much the same - two hands, a pair of eyes, two legs... In contrast, thoughts can build communities, thoughts can bring innovation, they can start friendships or wars, as well as end them... Thoughts are our primary self-improvement instrument.
By viewing a human as a "set of software running on top of hardware", we add an abstraction layer, therefore we don't have to focus on the minor details (ex: how is a filter implemented?), and think about "big things" instead.
A human is:
- The body - the physical part of ourselves (the hardware layer);
- Low-level software - the stuff that controls our basic body activities (the firmware);
- High-level software - this is what makes the personality.
To put things into perspective - physically we are the same, and have identical sets of organs. Further, we talk the same way, having the same low-level software that coordinates how our vocal chords vibrate, the same low-level software that controls our eye-sight and guides us in space, etc.
The real difference is in the high-level software, the part that makes some of us poets, engineers... optimists, liberals, christians, electronic music fans, doctors, and so on (this is what makes our personality).
Let's move on with the analogy. What can you do if something is wrong with your hardware? Replace the faulty part, or get yourself an entirely new system. Hmmm... changing a bad organ is not trivial, sometimes - impossible, sometimes it takes a long healthcare course to bring it back to its normal condition.
On the other hand, we have software issues, which can be handled with in other ways: reboot the system, find a patch, uninstall the program (you didn't need it anyway :-), reinstall it, update it, install another one, reverse engineer it and fix it, study the source code and build your own (improved) version.
All these operations take place at the logical layer, as long as you have the right knowledge (or the will to study) and plenty of time on your hands, you can keep playing with your software and watching how the objective function gets better (or worse, depending on how successful you are).
If you are advanced, you can use your software skills to deal with some faulty hardware issues as well. (Think of it as of a filter driver that alters the IRPs in such a way that they become compatible with the lower-level drivers; or as of a program that emulates a device you don't really have (software rendering for those without a real hardware accelerator)). The software that deals with emulation is what we call "imagination".
With that said, it becomes obvious that tweaking the software layer is the #1 tool for self-improvement, the low-hanging fruit - you can become a better person by simply using the power of thought (there is no need to interact with other objects or people, no need to do physical exercise, etc).
Q: Ok, this sounds interesting, but how can this be applied in real life?
- This approach helps you categorize problems by type - thus you see the big picture and avoid cases in which you use the wrong solution. Is it a software problem, or a hardware problem? If it's hardware - take a pill, or see a doctor; if it is software - analyze the issue, find the culprit, and change that component (leaving the other modules intact);
- Separate one component from another, so that "an error here" won't break "everything else over there" (think of this as of a ship, that can stay afloat if 2 out of its 5 compartments are flooded - this gives the crew the chance to get to the shore and handle the problem);
- Create your logical sandboxes, or emotional sandboxes - don't get burned when something goes wrong;
- Alter your behaviour. This applies to impulsive people, they say something, but they don't always think about the impact of their words. Solution - add an output filter, which acts as a high-level plugin (one that can be disabled later) that will review and organize your thoughts before you put them into words;
- Pinkifiers and depinkifiers, "bullshit meters" can be regarded as input filters - prevent useless information from entering the lower software layers of your brain, discard it before you end up thinking too much about something that is not worth it (like a network firewall drops a corrupt packet, so there is no need to forward it to the next layer in the stack);
Things are getting more interesting, when the levels of abstraction are so high, that you can say "there is no spoon", and actually mean it! What a guru can do:
- Ignore pain, or convert it into pleasure (it's like casting an int to a char, or vice versa, and getting away with it);
- Temporarily disconnect sensors - the neighbor's music bothers you? Disable audio input;
- Directly edit memory contents to change values of certain variables (even constants :-), or the states of certain sub-systems. You've tried to understand a problem, troubleshoot it - but nothing seems to work? You can continue playing with it, or simply pretend that the function returned TRUE instead of FALSE, and go on living your life.
Note that some of these things can be dangerous. For instance, pretending that pi=1.618 won't do you any good, because the entire universe around you behaves as if pi=3.14 - and you can't change that (regard the universe as a low-level software platform, a small sub-system of which you are; you can change stuff inside your box, but you cannot change anything outside your box).
You cannot directly alter/control other people's actions either. In this metaphorical example, they are other boxes (also outside your box, but all contained within the bigger box known as "the universe"). In this case, the best you can do is use the box's external controls to interact with it (works like the public methods of a class in C++); in other words, you can ask a person what their name is, and wait for them to answer, but you can't open up their brain and literally extract the answer yourself.
The final point is that you are the ultimate master of your own box, don't be afraid to play with it, use it in any way you can. The important part is that you can't really break it - because if it is a software level problem, it's only a matter of thinking it over and finding a logical solution (often you won't even have to get off the chair for that). As long as you don't break any bones or lose any vital organs - you're fine :-)
- The body replaces its cells at various intervals; meaning that the cells in your bones are not the same cells that were there N years ago (N is different for various body parts). The point is that today you are physically not the same you were several years ago, but you still feel that you are the same individual - therefore your "self" is not in the physical layer (which leaves us with the software layer);
- Emotions should be considered as elements that exist at the software level. The same external event can generate a different response for different people (ex: you look at a pig - you see a cheeseburger; a muslim looks at a pig - and they see disgrace). Another example is our change of attitude: today you don't like trance music, tomorrow it becomes your favourite flavour. The cause is that your software was modified (or was reconfigured - so now you actually like high-pitched or synthesized sounds, and patterns), and the same external event generates a pleasant feeling. What about love, you ask? Love is a logical attachment to a person; there are thousands of attractive women (or men) out there, but you prefer to be with the one because you share a history, you like the same jokes and films, you have the same views... Basically, your personalities are compatible (and a personality is a set of "software level stuff").
Wow, that’s quite a statement to make ;)
Just like any theory with direct implications in real life, it looks clean and true on the outside, from a theoretical POV, but I doubt the “master” status can really be achieved. Sure, there are people who can endure pain (etc.) but for all I know that level of control may be impossible to reach. This reminds me of the joke where the mathematician sees a fire getting out of control, and instead of trying to extinguish it, he exclaims “a solution exists” and just continues scribbling on his papers.
Another thought about “you can’t really break it": apparently the software can screw itself over pretty bad without any damage to the hardware, as in: a person becoming mentally ill after a close one has died. (kernel panic, reboot how?)
Overall I really liked the article, and I’m looking forward to seeing more of this stuff. I think you could write an entire book about the person – computer analogy ;)
Comment from: Nae [Visitor]
Completly agree, the sum of our thoughts and decisions could be a definition of each human. But there is a thougt that most of our behaviour is done unconsciously. So i’d say we need to include a small corection to the idea that a person is only its High Level Software….
Comment from: gr8dude [Member]
Folks, thank you for your feedback.
First, I must apologize, somehow the tags got screwed up and a part of the story was not shown correctly, it is fixed now; it is this part:
…you can keep playing with your software and watching how the objective function gets better (or worse, depending on how successful you are).
If you are advanced, you can use your software skills to deal with some faulty hardware issues as well. Think of it as of a filter driver…
The version that was posted earlier looked like “objective function think of it as of a filter driver” :-)
Back to the actual discussion. You found it interesting because you’re both programmers; my initial goal was to make the story user-friendly enough for non-programmers, but I think there is room for improvement.
Indeed, the master status may be something we can reach only asimptotically, or not at all (it could be a concept such as “the ideal gas” or “perfectly spherical horses moving in a vacuum"), but it is good enough for such thought exercises.
But then, we have all these “real stories” about monks in Nepal having excellent mind concentration skills - perhaps they are those who got pretty close to the “software guru” status. Of course, they express it in different terms (spiritual?), but for us, the engineers - things look more comprehensible if shown as a UML diagram :-)
Constantin’s example can be countered in several ways:
- the victim is not aware of the issue (so they don’t actively try to fix it);
- the victim is not “guru enough” to be able to solve this issue; in the context of this article, it’s like saying “yes, you can solve that problem, provided that Z=’45″. Now.. how to make sure that Z equals ‘45 - that’s beyond the scope of the theory :-) A real life example: the theory of evolution explains how primitive life-forms managed to become more complex and more advanced, but it is beyond the scope of this theory to explain how the primitive life forms got here in the first place;
- the victim is being ‘healed’ by people who are located in their own ‘boxes’. They want to modify the memory that belongs to another box (a different process in the OS, having its own address space) - there is no “legal” way to do that, the only tools are the public functions exported by the box. If the outsiders have full physical access to the target system - they can hack the hardware and make it behave so that the software on top of it starts working properly. Alternatively, they can trick the existing software by crafting a special datagram and pass it to the box via its public functions. The datagram will exploit a known vulnerability and alter the behaviour of the box - like a rootkit does. This point brings us to another level - a software guru that is so advanced that he or she can actually change things in other boxes. A more ‘primitive’ example is social engineering - people using the public interfaces, sending perfectly normal (but wisely crafted) messages to a target system, and altering its behaviour. There will be another essay about it… For now, I’m just glad that I can express social engineering in terms of boxes, public interfaces and malicious payloads :-)
- a solution exists, but it is impractical to implement it; the joke with the mathematician is actually very very appropriate in this context. Imagine that you’re trying to uninstall KDE’s core components using apt; the tool will find the dependencies, and tell you that if you bring down KDE, a zillion other programs will be removed as well. No one who is sane will press ‘y’ when asked if they really want to delete 90% of their HDD, unless they really mean it.. too many dependencies. So we prefer to leave things ‘as is’, and build kludges on top of the current (broken) system, because they do not imply the use of such drastic measures.
Nae, I agree with you as well; but I will try to convince you that we are both right, without adding complexity to the existing set of ideas. In fact, this concept can be stretched to fit other things - just add another layer to your “protocol stack” and you’re ok (ex: in NT systems you can add a filter driver on top of any existing driver, even the very low-level ones). It’s just a matter of drawing a line between “high” and “low". The more advanced you get, the more fine grained your analysis is, and the more levels you can see (ex: we operated with rocks, but then we could split them into small granules, then someone found a way to see the atom, then we went lower - to electrons, and so on; at each step, the definition of “low level” becomes more refined).
The unconscious part of ourselves is “fed” by our conscious part. What you dream at night is a mix of things you see, do, or think of, when you are awake. The ideas with which you operate unconsciously, are the ideas that you harvest while you are aware of what is going on around you.
You can’t be afraid of vampires until you read a book about them, or see a movie, or a friend tells you a story about one (the concept of the vampire was processed by the high-level software, before it got archived for use by the unconscious).
Note: maybe we should also get synchronized and discuss the terms - subconscious, unconscious? :-)
Comment from: Nae [Visitor]
Yeah a separate topic on this with some basis material provided would bring more light as i don’t i’m enough informed on these terms.
In the vampire example.. i’d say that if u’d ask a person if it’s afraid of vampires or not, then the conscious part could say an answer but the trouth can be different and can be brought by a dream this is a situation where the unconscious part is ruling the top levels soft… in my understanding at least…
Comment from: zappepcs [Visitor]
Very nice. I might like to add a bit to this. You could add a bit about phantom pains that amputees feel in their missing limbs. How blind people’s other senses become heightened. One of the biggest things that comes up when I think of artificial intelligence (see Cmdr Data of Star Trek) is the fact that without social interaction and communication the intelligence doesn’t mean much. If yourself is all you have to judge yourself by, you will not think of yourself as smart or not smart.
I like to analyze things in what I term ‘failure mode’ to see what the real function(s) are. Without social structure and interactions, what is intelligence? Tom Hanks did a bit of this failure mode work with the movie ‘Castaway’ http://tierneylab.blogs.nytimes.com/2008/01/22/science-explains-wilson-the-volleyball/
As you think of hardware/firmware/software you can think of the complex cascade of finite state machines that I spoke of as how application states are cross fed from one software application to another and to and from firmware. An example: we can be having a great time with friends AND still be dealing with firmware feedback of feeling sick. The combination will drive our actions differently than if we were not feeling sick. You might even convince your friends to go for pizza instead of Thai food because of how you feel.
When broken down to component parts, there is some room to argue that intelligence is nothing more than a measure of how well various parts of the human brain interact. I would also posit that the human brain is not one, but many processors and include several layers of firmware.
Set your alarm on your watch/phone to go off every 90 minutes during the day. Each time it rings, write down how you feel and why. When you repeat a word enough times, it begins to lose meaning and I attribute this to the fact that the ‘normal’ pattern recognition and FSM interactions stop happening the more you repeat the word.
Our “state of mind” might be described as similar to the combination of browser history, system logs, and ‘recent documents list’ on a desktop computer. The system logs would include things like “your aunt is coming to visit this weekend’ and other things that would not necessarily affect you as you pick out groceries at the store.
Soul? A magic word to describe the complexity of the mind.
All of that is like reverse engineering. The trouble comes when you try to create it from that reverse engineered understanding. We also have to look at stereotypes to make judgements on firmware conditions. Sports figures are not often known as multilingual, cello playing, walking astronomy dictionaries. Why is that? I’m not saying it can’t or has not happened, just that more commonly it does not happen. Why is now the question.
The chemical soup inside our skin is very complex and also relays messages. Can you say adrenaline? So, the complex cascade of states goes back and forth, not simply in one direction. This is something I don’t think will be explained by message passing tokens, or with the magic word ‘firmware’ but might be explained by seeing feedback loops on all processes such that the input to a firmware process may be from somewhere in the cascade that is down stream from the firmware process’ own output, so not a 100% feedback, but a derived feedback.
I get the feeling that neural networks, several working together and tightly integrated might begin to simulate what I’m trying to describe, but I do not yet know this to be true.
Anyway, nice post.
Form is loading...