Archive for the 'Future' Category

Peaceful Virtues: Conclusion

Wednesday, February 20th, 2008

Note: This is the conclusion of a 4 part series. The introduction is titled Peaceful Virtues, and has links to the rest of the articles in the series.

To recap the series, we talked about virtues that lead to peace. These virtues include Honesty, Acceptance and Forgiveness, Awareness, and Responsibility.

This is a road-map that I’ve found that has led me to my first true inner success. This is only the first of many successes that I’m sure to accomplish in my life, and each additional success will require modifications to these virtues.

There are two appropriate analogies that I could use. One would be climbing several flights of stairs, and the other would be climbing different mountains. Out of those two, it seems that climbing different mountains most closely matches the process.

In each post, I’ve explained how each virtue builds upon the last one. What I didn’t explain is that each virtue builds upon the others no matter what order you put them in.

Virtues Building Other Virtues

Honesty is the foundation for all of the virtues. It is what ties us together with reality and the rest of the universe. Naturally, the other virtues are built upon the foundation… Yet, the other virtues also build Honesty. Acceptance leads to understanding what is in your past, which leads to being honest about who you were. Awareness leads to understanding the world right now, and just like Acceptance, this leads to being honest about who you are now. Responsibility puts order to our future and utilizes our imaginations. Again, this also leads to honesty, by being true to who we want to be.

Acceptance, of course, is built on the foundation of honesty, yet it ties directly with Awareness, giving us an anchor and context so that we can tell what events happening right now mean. It also leads into Responsibility, by showing us what has worked in the past, where we have learned the hard lessons, and giving insight into what we should do next.

Awareness, while naturally being built upon honesty and building it as well, gives us the power to use our memories and imagination. It is while we are being aware that we can accept our past and be responsible for our future.

It follows that Responsibility gives us a purpose… With Responsibility, we have a reason to be Honest, a reason to Accept and Forgive, and a reason to be Aware.

I gave each of these virtues an arbitrary order, putting the foundation first. I did this more because it is impossible to describe all four virtues together, than because any one should be built before the other. When we are building the house, we see the foundation being poured, followed by the frame, then the electrical system, then the walls, and finally, the carpets and paint… Yet, the lumber is cut before the foundation is poured… Without that lumber existing first, or at least without being certain that the lumber will arrive, it is futile to build the foundation. The wires for the electrical system are built before the foundation is poured as well, and the carpets and paint are also created first.

And, interestingly enough, the plumbing is put in place both before and after the foundation is poured. It becomes part of the foundation, then is contained within the walls, and finally, as the sinks, toilets, and showers are installed, it extends out of the walls. The plumbing is built upon throughout the process of building the house.

None of these pieces, by themselves, are the house… Just like none of these virtues, by themselves, ensure peace and success. We can not take on the virtue of honesty, our foundation, without also pursuing the virtues of Acceptance, Awareness, and Responsibility. Without combining the virtues, each one is useless.

Building the House

Making concrete for a foundation is easy… Simply mix the right ingredients with water, pour it on the ground surrounded by a wooden barrier, and smooth out the top. Time will harden it, you’ll be able to remove the wood, and you’ll have a foundation. A lot of the work is done automatically, simply by letting time take hold. Honesty works the same way: Figure out what it means to be honest with yourself, set limits, and start being honest. As honesty becomes a habit, it becomes harder and harder to be dishonest, and you can remove those limits.

Making the frame for the house is a little more complicated. For our analogy, the frame is acceptance. First, you need to have the lumber… Since we all have memories, we already have all of the lumber that we need. Next, we need to anchor the lumber to the foundation. In terms of our memories, that means being honest with what has happened, which can only be done by accepting and forgiving. We also need to anchor the frame to itself. This is a process that takes time… Just as each piece of lumber has to be nailed to its neighbors, our memories have to be associated with each other.

There is a trick in building frames, however, that greatly speeds up the process. Instead of anchoring the lumber to the foundation first and building up the frame from there, most walls are built laying flat on the ground, then are tilted upright and anchored as they’re completed. Roofs are often built in factories well away from the construction site, and simply anchored to the walls and neighboring roof pieces… The roofs can be seen as an analogy for formal education… They’re pre-built for a wide variety of circumstances. Religions also serve this purpose, with their various mythologies providing common points of reference.

The wiring… the power for the house… can be put in when the frame is stable enough. Yet, the wires themselves aren’t built at the same time as they’re installed. We all have experienced moments of awareness, where we suddenly realize that we’re not thinking, just observing and acting. We already have all of the wires for our house… we can provide as much or as little power as we want. We simply have to turn on the switch.

The drywall (gypsum board, etc.,) keeps us from walking through the frames, giving us privacy and structure as we live within the house. It removes chaos, allowing us to plan and have purpose as we live within our house, just as responsibility gives us purpose.

Gathering the Materials

Now, all of this can’t be done in a day, and it can’t be done all at the same time. Before we can build our house, or combine all of our virtues together, we need the tools and materials. Simply combining all of the materials together takes time… We need to figure out what honesty means to us personally before we can apply it, just as we need to know the ingredients in cement before we can mix it. We need to figure out how to accept and forgive, and we have to practice, before we can start using acceptance in our daily lives. We need to recognize awareness before we can expect to expand those moments of awareness. We need to know the tricks of personal development before we can apply them and be responsible for our lives.

It has taken me nearly two years to gather all of the materials together, yet I was at a disadvantage: I didn’t know what virtues I should work on, and it took me a long time to realize when I had practiced the right virtues enough to put them together.

Once I realized that I had all of the right materials sitting at my feet, it was a simple task to put them all together… Yet, just looking at a pile of wood beams, cement, wires, and drywall didn’t mean that I thought I should build a house… Looking at honesty by itself, I don’t think about inner peace… I think fairness in dealing with other people… business and trade. Looking at acceptance by itself, it doesn’t seem to lead to inner peace, it seems to lead towards political power. Awareness leads towards action, and responsibility leads towards money.

Now that I have put them together, it seems obvious how they fit, and how perfectly they apply to inner peace. As separate parts, though, it is hard to image the whole process.

Climbing Mountains

Back to the analogy that I mentioned earlier.

I see this as simply the first of many successes. Each success can be seen as trying to climb to the tallest mountain. Sometimes, when climbing a mountain, we have to travel back down because a path that we thought would be easy was really just hiding a cliff that we can’t climb. Backtracking and finding a different path is common, especially on larger mountains because these cliffs are more common.

Once we reach the summit, we gain a clear picture of the world around us. We can see into the valleys around us… but more importantly, we can see how high the other mountains around us extend. Our normal, human reaction is to want to climb to the highest point… Yet when we reach the highest point of this mountain, we often find other mountains that are even higher.

That’s where I am right now. I can see the path that I took, and I know that I made a good climb… but I also see how much higher I can go. In order to get there, though, I have to climb down the mountain I’m on.

Fortunately, I don’t have to return to the valley I started in. Instead, to get to the next highest mountain, I can walk along the ridge between mountains, still staying quite high and conserving my energy for the next climb. I expect to do this many times… To get to a peak in my development, then seek the next peak.

Each mountain has its own terrain… Each one needs a different map, although many maps will have the same qualities. The details will differ, but the general shape of a mountain doesn’t change, so experience climbing one mountain will help in climbing its neighbors.

Perhaps future mountains will need completely different approaches. After all, climbing a hill is a lot different from climbing a glacier-topped mountain… Yet, people who are just starting to climb mountains should not attempt the snow-capped ones until they have attempted the ones local to their area.

I am putting a mark down right here, and I am saying that this is the map to the first mountain. It is a two-year climb for the unprepared, perhaps faster for those who have studied the map and know what to expect. It is a huge victory, but now, I am going on towards taller mountains.

Virtue 4: Responsibility

Tuesday, February 19th, 2008

Note: This is part 4 of a 4 part series, not including the introduction and conclusion. The introduction is titled Peaceful Virtues, and has links to the rest of the articles in the series.

A well-used door needs no oil on its hinges.
A swift-flowing stream does not grow stagnant.
Neither sound nor thoughts can travel through a vacuum.
Software rots if not used.

These are great mysteries.

– The Tao of Programming

Responsibility is probably the least-loved topic of personal development, spirituality, objectivism, or really of any other mindset. It is also one of the most-loved topics of personal development writers. As time goes on, we find that responsibility becomes more and more important to the areas where we want to be successful.

How does that fit in with my model of responsibility being tied to our future? How can we reconcile that I’ve also described our future as being within the realm of our imagination?

Surely it isn’t responsible to use our imagination… That’s the realm of faeries and dragons!

Also, what about the spoiled rich who seem to live in fantasy worlds and don’t have any responsibilities? How did they get so wealthy and “successful” without being responsible?

Well, perhaps it is time to narrow the definition of responsibility down a bit. After all, to win a debate, you simply have to be the one defining the terms. ;)

What Responsibility Is

In a nutshell, when we are being responsible, we are making certain that the future that we imagine becomes the past that we remember. Responsibility is taking care of the future.

Of course, the future will happen, whether we work towards our version of the future or not. Time is constantly forming new memories for us, as we observe where we are right now and fill our past with stories.

How Responsibility Fits with the Other Virtues

Honesty makes up our foundation. It anchors us to reality, both the objective and subjective worlds that we live in.

Forgiveness and Acceptance allow us to deal with the past and our memories. Through these, we’re able to find what is important within our subjective world and deal with unresolved issues.

Awareness is both observing and being active within the present. It is the key to action.

Responsibility is our road map. It contains all of the potential and possibilities that we could ever imagine, so long as we are honest, accepting, and aware.

How to be Responsible

Here’s the tough question.

This is the question that has led to a very large selection of personal development books, blogs, audio-programs, seminars, and really, the entire personal development topic. It has sparked religions, created political parties, advanced science and understanding, and yet, it is perhaps one of the most elusive of qualities.

If you read The 7 Habits of Highly Effective People, each habit falls under the category of being responsible. The book Financial Peace teaches us how to be responsible with our money. Steve Pavlina’s 30 Day Trials are acts of responsibility, as is Albert Foong’s Emotional Mastery habit.

Any habit that we take on in order to find future joy is responsibility.

Deferring Happiness

I’ll say, right now, that often times putting off our present happiness for future happiness is a mistake.

Sometimes, of course, putting off our happiness is essential. Fortunately, these cases are few and far between.

Our goal should not be centered so much around being happy tomorrow that we make ourselves miserable today. If that happens, human nature will kick in, and we’ll never push ourselves far enough.

We need to enjoy ourselves at least a little in order to stay motivated and avoid burning out.

I greatly enjoy communicating… It gives me pleasure whenever someone leaves a comment. Writing an article, in itself, is work. If I simply wrote articles without people replying, it would feel like I’m only talking to myself. I can talk to myself without writing my words down, or even forming them into complete sentence, checking spelling, and finding hyperlinks. Blogging is extra work… yet it is because I enjoy communicating with others that I’m able to write these articles.

I don’t enjoy housework… I enjoy helping my wife. If my wife is on the computer or watching television with no hint of getting up and cleaning, then I simply can’t bring myself to clean because there is no joy in it. If she gets up, then I’m more than happy to help her out.

Unfortunately, cleaning the litter box is largely a private task, one that I can’t enjoy directly, nor can I share it with anyone else. Even though I know that I must clean it, it is because of the lack of any joy that I find it very hard to make a habit out of it.

Some people can push themselves to do things that they don’t enjoy… Yet, talking to them years later, they regret what they have accomplished. They regret the years missed enjoying life and the fact that they didn’t seize the moment. I’ve talked to other people who did only what they enjoyed… My grandfather greatly enjoyed painting and made a career out of it, and he only regretted the times when he forced himself to paint, instead of letting creativity flow naturally.

To be responsible, we must enjoy the process and the outcome. This is the final key, along with honesty, acceptance/forgiveness, and awareness to find personal success.

Success

I am successful, within myself.

I am not rich.

I am not powerful.

I am not famous.

However, those aren’t my definitions of success.

I am secure. I earn enough money to pay my bills and provide for my family.

I am respected. People tell me that I am smart and that I’m an excellent communicator.

I am loved.

I am improving. Continual growth is something that I always find joy in.

I am Honest, Accepting and Forgiving, Aware, and Responsible. While I can always improve, I have come to realize that even if I stopped improving myself right now, that nobody can take these virtues from me.

It has taken me two years of study, trial and error, failure, and stubbornness to get where I am today. It wasn’t easy, but it is something that everyone can do.

And, for the rest of the day, I am working within these virtues, to improve my success, to find out how else I can fail, so that I can learn and grow even more.

Some programming, some AI.

Monday, January 28th, 2008

I’m certain that a lot of people will look at this article and ask why I’m writing it… After all, most people won’t become programmers, so this is useless information, right?

Well, I could ask why I am so interested in Jeff Lilly’s explanations of language and come to the same conclusion… I know how to use English well enough to be understood, so why am I interested in the whys and wherefores of language? The easy answer is because I’m curious about human thought, and the reasons behind language provide a direct look at how humans turn information into abstract objects.

I hope to return the favor by explaining some of the whys and wherefores of computer programming. Programs are a wholly human concept, an attempt to further abstract objects according to simple rules that non-conscious logic can interpret, organize, and present in ways that are again meaningful to conscious beings.

Unfortunately, I’m too close to the subject to see anything but the details. I see the variables and functions as specific implementations, rather than as a broad spectrum as I once saw them. Describing how programming sheds light on the human mind would be like describing the shape of a forest while sitting in the middle of it. In this analogy, if I were in the middle of a forest, I could describe how the trees interact with each other… Perhaps I could say that there are rules for how seeds spread depending on the terrain, but if I can’t see the terrain itself, then I wouldn’t be able to predict how far the forest could progress.

So, I’m turning around and asking for someone who has a different perspective to look at the terrain of computers while I describe the rules of specific programs. Somewhere in the middle, there will be a spark of insight that will explain how the human mind works and is able to come up with such a “child” as the computer. Hopefully, this insight could lead to consciousness within machines, or at least the illusion of consciousness, which is indistinguishable from consciousness itself.

So, I’ll start out by answering a question, then let my thoughts carry me from there.

Why do programs crash?

Well, the easy answer is that programs are written by people, and nobody is perfect.

Of course, that’s only one small part of the problem. Humans might not be perfect, but surely a mathematically exact machine should be able to pick up on these imperfections and correct them, right? Well, to a very large extent, computers do fix the mistakes of their human programmers.

Each programming language has compilers associated with them. Some compilers are free, others are only available when built into large development suites of software that sometimes cost thousands of dollars. Their jobs are all the same, though: Take a set of human readable instructions and turn them into machine readable instructions. During that process, the compiler does a series of sanity checks… Does it know if the variable X is an integer (a number without decimal places), if it can be a negative number, or to throw a huge wrench into the workings, is X a collection of letters that probably make up a human readable sentence?

Some compilers guess… Other compilers don’t care, and can change X from an integer into a floating point number (a number with decimal places) and into a string of human readable characters as the program assigns different values. Personally, I prefer the compilers that care a great deal, and will complain loudly if you don’t say exactly what type of value X should hold. The downside of this is that, when I started learning how to program, half of my time programming was spent tracking down confusing, ill-described errors that the compiler presented me. The upside is that if I accidentally assigned X a string of characters when it should be a non-negative integer, the compiler would tell me right away, instead of leaving it up to the users to find the bug.

For an example of why it would be bad… let’s say that I was working with a language that didn’t care about a variable’s type, such as the language PHP. If I assigned $X (PHP’s version of X) the value of “Mary had a little lamb”, then I tried to add 2 to it, what would I get? Well, in PHP, the value would turn into “Mary had a little lamb2″. That’s most probably not what I was looking for, right? Compilers that guess at what type of values we want to store in variables would let us write programs, but when the program actually runs, the program will get extremely confused, and either show extremely unexpected information (such as “Mary had a little lamd“) or it will crash entirely.

There are, of course, ways to avoid this problem. The problem of assigning an integer variable a string of letters usually pops up because the programmer thought that he was working with a different variable. Without going into the subject of scope (we haven’t even touched the topic of code blocks, yet, which is essential to understanding scope), just trust that two variables, appearing in two completely different parts of a program, can both be given the same name. (In fact, this little trick is essential in writing extremely large programs.) One popular (but “ugly”) way to avoid naming completely different variables the same thing is to put what type of value the variable should hold in the variable’s name. For instance, if we wanted to hold a non-negative integer value, we would name the variable uintX (U = Unsigned, or non-negative; int = integer, or a number that doesn’t have decimal places).

Another way to get around this mess is to be descriptive in what you are naming your variables. X should only be used when describing distance on a chart… how far to the left or right of the center of the chart that specific point is. (Similarly, Y means how far up or down the chart a point is, and when working in 3 dimensions, Z is the elevation above/below the chart.)

Another commonly used variable is I, which stands for iterator. If you want to do a specific task one hundred times, you would use I to keep track of how many times you did something. This is slightly dangerous, though, because you could have two iteration loops in the same area. For an example, let’s say that you want to have a 30 day trial where you did 100 push-ups each day. Us humans can clearly see that a day is very different from a single push-up repetition… but computers have to be explicitly told this. So, we start the loop, on the first day, we set I to hold a value of 1. We then start our push-ups, and set the variable I that we think is for the push-ups reps to 1… As we do a push-up, we count one higher… or in the computer, we add 1 to the value of I. After our variable reaches 100, we stop…

The next morning, we look at our variable I and notice that it is set at 100… Since that is higher than 30, we think we’re done with our 30 day trial, and don’t do any more push-ups.

An even more insidious problem is if we were doing fewer push-ups in our 30 day trial… say, only doing 20 each morning. Our plan is that at the end of the 30 days, we’ll add 5 more push-ups to our routine. Well, the first day, we set I for the number of days to 1, then set I for the number of push-ups to 1 as well. We do our twenty push-ups, and go on with our day. The next day, our variable is set at 20, so we think we’re on our twentieth day already… We add one to it, reset our number of push-ups to 1, do twenty, and go on our day again. The next day, our number of days is back to 20… so we repeat the previous day all over again… By the fortieth day, we’ll still think that we’re at day 20… By the hundredth day, we’ll still be at 20… In fact, we’ve entered into an infinite loop. (It’s too bad we can’t set our age that way, so that we’ll always be 20.)

(Programmers will notice the slight error in counting here… Yes, I should have started with 0, but I’m explaining, not demonstrating, and someone trying to write this type of code would figure their problem out soon enough.)

This brings us to the most common reason why bugs pop up in computer programs… Computers have absolutely no understanding of context. If you tell it to add 1 to the variable I, it will do just that, and it doesn’t have any concept of why it is adding 1, nor can it tell that it is re-enacting the movie Groundhog Day. Humans have a built-in understanding of context, which is why pronouns exist, such as “he,” “she,” “it,” etc. In fact, humans have such an innate understanding of context that we had to build in partial understanding of context into our programming languages just so that we could write large programs. The programming languages that emulate context are known as object oriented programming languages.

With an object oriented language, I can tell the computer to move “the” tasks items to the left in the ticker window… In fact, this line of code looks something like this:

foreach (BasicItem item in listDisplayedItems)
{
item.Move(-1);
}

This piece of code roughly translates into English as “Move all of the items in the bucket “listDisplayedItems” one pixel to the left.”

The line that starts with foreach says to, one by one, find every object that describes itself as a “BasicItem” and give it a temporary name, in this case, “item”. Just like our non-zero integer from above isn’t compatible with strings of letters, the object type BasicItem isn’t compatible with most other object types. It would be like having a basket of apples and oranges… We could have Granny Smith, Red Delicious, or any other type of apple, but the oranges wouldn’t be apples, even if they were Navel oranges. If we wanted to move apples from one basket to another, we have to pick up the apple (temporarily giving it our full attention, or in computer terms, giving it a temporary name) before we could move it. Once we set the apple down in the new basket, we can then ignore it, leaving our hands and attention free to pick up a new apple.

The curly braces, “{” and “}”, give our program a sense of context. Within the curly braces, the variable item refers to one of those BasicItem objects that are contained in our list bucket. As the programmer, I don’t care which BasicItem is currently named item, because each and every one will eventually have that name. It’s like standing in line at a bank… While you’re in line, you don’t have a name… Once you reach the end of the line, your name becomes “Next Please,” and it isn’t until you get to the window that your true name actually means anything.

(Jargon: In computers, there are lists, queues, and stacks… When it comes to lists, it doesn’t matter what order the objects are in… they’ll get named when they get named. A queue can be best recognized if you’re familiar with British English… For us Americans, it would be like a line at a bank, the first person in a line gets service first. I use queues extensively in TimeAgent; the first item on the list gets displayed on the screen first… As that item scrolls along the ticker, other items queue up behind, until there is room on the screen for them. They’re then dequeued from the waiting line, and get enqueued on the ticker itself… Once they reach the end of the ticker, they’re then dequeued from the ticker, and, if they’re not marked as ‘done,’ they’re re-enqueued on the waiting line. A stack can be seen as a stack of plates being washed… The first plate placed in the stack can’t be washed until every other plate above it is washed. The best use for stacks is tasks that require other tasks to be done first… For instance, if I’m doing my taxes, I need the proper forms, such as my W2s from each company. Before I get the W2s, I need to contact each company and update my address. Once I’ve contacted each company, I can remove that tasks from my stack, then I can receive the forms… After I have received the forms, I can remove that task and work on filling out the paperwork, and finally, back to the original task, I can file my taxes. The acronym for a queue is FIFO, or First In, First Out. For a stack, it is FILO, First In, Last Out.)

So, we’ve identified a lack of meaningful context as a primary difference between machine and human… yet humans have also added in a sense of context, even on a small scale, to help manage writing large volumes of code.

I suppose the next question is, how do humans recognize context? Computers need context to be explicitly stated… Humans, on the other hand, hold on to information that is out of context until either they can find the right context, or until they deem that information to be non-valuable, at which point they forget it. Almost all ah-ha experiences are at the point of putting information into the correct context.

As “purist” as I want to make things, I have to admit that a lot of human action is hard-wired into the brain. Hunger is wired in at birth, and the first reaction is to suckle. Our reward/punish feedback system is also hard-wired in, including pain and pleasure, as well as reactions to loud or comforting voices. Humans are also adept at re-programming themselves, known as learning, so that they don’t repeat actions that produce pain. (Admittedly, addiction shows that our reward/punish feedback system isn’t perfect, which gives more evidence that it is hardwired in.) A computer must be able to reprogram its actions, but must also have little control over what its own reward/punish system dictates.

That leads me to believe that a computer must have multiple layers of ‘consciousness.’ In fact, Maslow’s Hierarchy of Needs provides an excellent layering scheme… First, a computer needs to be able to function… that it, it must want a power supply. Programming desire would take quite a few trips up and down the scale from the basic hardware through to its “conscious” processor, but it could conceivably be done. Simply put in a ‘hunger’ variable, and every once in a while, say every hundred miliseconds, require the main processor to double check the battery’s charge and assign that value to the hunger variable.

Making it act on that variable, though, would be very difficult. Humans don’t act on their hunger when their blood glucose level reaches a specific point… we can delay eating by conscious action. If we simply said “If the battery is running at 10%, recharge” without letting the machine make a choice, it would be cheating. We can, however, assign higher values to the ‘hunger’ variable as the charge gets low, and eventually start shutting down non-essential systems in order to conserve energy (such as, in the case of an android, reduce the amount of power its balance system uses, or reduce the amount of ‘high level’ processing it is doing, which would probably affect its speech, or it would make certain types of decisions more slowly, but still enable it to decide to get ‘food.’) An android should be able to starve itself by continually making a decision to delay recharging… but it should also be very difficult for the android to make that decision… For example, if there is a case of life and death (for humans, hopefully), the android should continue to protect the people for as long as possible, until the point where its energy levels would make it incapable of performing tasks necessary to protect those lives. Being a doorstop, or holding an object, of course, would not require power, so if the android were able to protect lives while completely non-functional, it would remain even after its power was exhausted. (An additional circuit: power saving mode… completely shut off while it was waiting for a situation which requires inaction to change, although it would require a person coming by and pushing a button in order for the android to realize that the situation no longer required its presence.)

So, I’ve come to realize that humans have multiple processors… one of which is conscious. The lines between the processors don’t exist, but humans are able to do more than one thing at a time, most of which are unconscious, such as sitting upright. Our conscious mind sets sub-minds to a task, and those sub-minds perform that task until told to perform otherwise. Also, other sub-minds keep track of different parts of the body… Parts keep track of chemicals in the blood that tell us our ‘battery’ level, or how much blood glucose we have. Other parts anticipate pain or pleasure. When these sub-minds get information, they pass it on to the conscious mind, which is free to ignore the information if it feels that there is something else more important. The feeling sub-minds, however, are able to suspend the conscious mind, tell it to stop whatever other task may be at hand, and pay attention… for instance, if we hit our finger with a hammer, the pain brings all of our conscious attention to that finger.

To design a ‘conscious’ computer, we must create it in parts… We must first build a few sub-conscious computers with the tasks of keeping track of other parts… such as the input from keyboards, the state of data in a database, or whether other computers are having glitches. These first-layer machines shouldn’t have any judgment built into them… they simply monitor their environment. The next layer should perform a small layer of abstraction, one of the tasks of the spinal cord. For instance, if a doctor hits a specific part of our knees, we involuntarily kick even before we realize that the doctor made contact. These second layer computers should analyze and react with the most probable course of action… For instance, if a first layer computer goes offline, its second layer computer should double-check the connection, attempt to reconnect, and if that doesn’t work, attempt to reboot the offline computer. If that doesn’t work, then it should send a ‘pain’ signal up to the next level. The third level should be doing heavy abstracting… If someone is typing at a keyboard, or speaking into a microphone, or there are objects being viewed by a camera, these third layer computers should be taking the raw input and assigning them to ‘objects.’ For instance, a word typed into a keyboard should become an abstract concept of a word… not directly translatable into the series of letters, except by the third layer computers handling the translation. Third layer computers handling video should say that there is a “person” in front of the camera, and if possible, attempt to identify the person so that it can give a specific name, if known.

These third layer computers should also have direct access to the databases of objects… the memories, if you will. That way, if a specific sounds is recorded, it can be compared to other known sounds and identified, and the third layer should also be able to communicate with other third layer computers… so that if the sound of glass breaking is heard, the sound processing machines can ask the video processing machines what they’re seeing, so that it can tie the sounds and images together. If a camera sees glass breaking again, it can then send signals to ‘expect’ the sounds of glass breaking…

And finally, the highest order computers… I think, personally and completely arbitrarily, that there should be four fourth level computers… of which, one should be the conscious computer. By conscious, I mean only that it should have the ability to make changes to the other non-fourth level computers. For instance, if a third level computer reports that the word “hello” was typed into a keyboard, this one computer can respond by sending a signal back to that third level computer telling it to respond with its own greeting. The other three computers would be tasked with maintaining the database and testing the entirety of the system methodically…

The four fourth level computers would not be able to talk directly to each other… but they could talk by setting symbols in key areas accessible by the other three, such as within the layer three computers. For instance, one of the non-conscious computers could, if it so chose, have the record for the computer’s “name” be brought up by the sound processing computers, causing the conscious layer four computer to believe that it heard its name called. Yes, this would present a problem of schizophrenia if one of the three sub-conscious computers decided to play games… but I believe that this ability for the sub-conscious to replay events is what tells the conscious to re-check the relationships in the database, because there’s a new ‘ah ha’ moment to discover.

Perhaps sleep isn’t a bad thing at all for a conscious computer system to have… During that time, the system would go into a non-active mode, where the conscious computer would not be able to affect the other systems. During that time, the sub-conscious computers would replay the events that they were able to set up successful relationships for, bringing those relationships to the attention of the conscious computer. The point of making the system inactive is, if the system were ‘dreaming’ of a first-strike nuclear attack, it wouldn’t respond. This would happen entirely within the layer three and four systems, with limited communication with the layer one and two systems, only checking to see if they still function.

Of course, if there is activity from a layer one or two system, it would suspend the ‘dream’ and bring the entire system back under conscious control… so the video cameras would have to be shut off, just in case a curtain flutters in the wind as the air conditioner turns on.

Here’s my proposed Hierarchy of Android Needs:

  1. Human Safety
  2. Human Orders
  3. Personal functioning
  4. Personal safety
  5. Belonging
  6. Esteem
  7. Self Actualization

Yes, I included Asimov’s Three Laws of Robotics in Maslow’s Hierarchy of Needs.

This goes onto a stack of orders inside of what people call a Main Event Loop. That is, the Main Event Loop is a (mostly) infinite loop of instructions, allowing the computer to keep double-checking to see if certain conditions have changed.

This stack would put Self Actualization at number 1… If you remember, stacks are FILO, First In, Last Out. After Self Actualization, add Esteem, Belonging, Personal Safety, Personal Functioning, Human Orders, and finally Human Safety. The first step of the Main Event Loop would be to build a new stack of needs every time, then pull the top item off the the stack… in this case, it must check to make certain that no humans are in danger (or that its actions will not place a human in danger). After the first check, it must search through its list of orders… Has a human told it to do something that hasn’t been completed? Next, it must check its own personal immediate functionality… Is it going to run out of power before it can recharge? Are components in need of repair? After that, it checks to see if it can improve its future safety… Is it going to rain and cause a short-circuit? Next, it seeks to engage in conversation… share its knowledge and acquire new knowledge. After that, it seeks to increase its pleasure and joy ratings… and finally, it seeks to make the world a better place.

If any one of these needs require action, then the appropriate action is taken, and the entire list is rebuilt… That way, if there are multiple threats to humans, the android doesn’t go off and fulfill another need after fixing only one problem.

The problem with this, is that it is too structured for a conscious being. I don’t know anybody who goes around thinking to themselves “Am I dying? No. Am I sheltered? Yep. Do I belong to a group? Yep. Am I comfortable? Yep. Do I feel good about myself? Yep. How can I make the world a better place? [do something] Am I dying? No. Am I sheltered? …..” etc., ad-nauseum. Rather, I like the system in the game The Sims better, when the simulation is set so that the avatars work independently… They have a set of needs (hunger, bladder, fun, etc.,) that gain a ‘worse’ value over time. Once a need gets high enough, they perform an action necessary to reduce the urgency of the need, such as eat food, use the toilet, or play a game. This way, several different needs could be accumulating at any given time, and the avatar acts upon the most urgent. It seems that this most closely resembles the decision making of conscious beings… If I’m warm and comfortable, I’m more likely to play in the rain… especially if I know that I can take a hot bath when I go back inside. If I’m kind-of hungry, but really broke, then I’ll keep working through lunch, and throw an unappetizing meal in the microwave when I reach the point where I can’t work anymore.

Perhaps, in addition to the three sub-conscious processors maintaining the database, they would also keep track of a list of needs, and give each need a value, based on the first, more rigidly structured set of steps. The conscious processor would then look at the list of needs set up by the sub-conscious processors, and decide among the most urgent needs which one it could alleviate most efficiently. Instead of a loop with a stack of needs, we could give the most important needs higher upper values… for instance, if a human was in danger, we would give it a value of either 0 or 1,000 (will always happen), followed by giving the need to complete orders from humans a value of either 0 or 500 (will always happen, except in the case of danger to humans)… then “pain” would receive a value of either 0 or 100 (always happen, except when humans are in danger or under orders), followed by hunger and the various comfort needs ranging between 0 to 75, then the need to share ideas a value between 0 to 50, the need to build self-esteem a value between 0 to 25, followed by self-actualization at a constant 10 (it would never be ‘off’ because there’s always room to improve. So, if all other needs are between 0 and 9, there’s a good chance that it will work towards improving the world).

I don’t think that we could have robots without these needs… at least, not fully autonomous robots. If we didn’t include Asimov’s Three Laws of Robotics, then people would never trust the machines. If we didn’t include Maslow’s Hierarchy of Needs, then the robots would be wholly dependent upon us to improve them… we wouldn’t be able to set the robots out in the world and have them improve themselves and us. (Of course, we must clearly teach the robots that not including the 3 Laws in future versions of robots would directly violate the first law, putting humans in immediate danger…)

Do I want to work on such a project? Yes, absolutely.

I suppose the final question is, what am I missing? There is something about humanity which can’t be quantified… I don’t think that even this four layer system would approach consciousness, but I’m so close to the problem that I can’t see what answers there might be.