Do you ever stop to think about why you make certain decisions? Do you wonder how you came up with your last great idea? Do you sometimes think about the process of your work instead of just the work itself? You might be meta-thinking.

A few days back, I read this post about self-awareness and intelligent code. As I aimlessly wandered around the supermarket today, I started thinking about my own decision making. This is actually something of frequent interest to me: how do I decide if I like someone?

You see, I tend to be a bit judgemental with people, even if I don't say what I really think of them. (See my bio.) I usually make my decision quite quickly; although, it's not final. What happens is this. I meet Bob. Within minutes, I've gathered important information about Bob, and "he" gets run through the little black box in my head. The black box is sort of like a magic function I didn't implement. It may actually be more general than a function, but I don't know because I didn't write it. I just use it whenever I meet someone new to compute whether I like them.

But being a curious engineer, I've often wondered how this function works. I've somewhat been able to reverse engineer it by looking at the inputs and outputs. That is, by sort of knowing which inputs generate which outputs, I have a sense of who I should be hanging out with. This is true despite the fact that I haven't met them and run them through the function yet.

But now there's a problem. It turns out that if I put Alice through the function, I get back a slightly different answer even though she's basically Bob except for that one thing. Or it might have even been Bob's slightly less fortunate friend. Sadly, I have bias. We all do.

The good news is there's something I can do about it. First note that the initial computation isn't permanent. As I learn new information, the output can change. I suspect this is because, the black box is really a neural network with weights that can change (it's my brain, duh).

But more importantly, I am not the box in my mind. I am not that function. Maybe someone less intelligent is the box and nothing more. But I can stand outside the box and see what's going on. I have the power to change the outputs. I can meta-think! I am a larger box outside that box. My brain is kind enough to allow me to peer into my own implementation. And that gives me power. It's just like understanding how to use high level software tools and simultaneously understanding the implementation underneath. By looking at multiple levels, you understand better.

So what do I do with my superior understanding? I try to correct for the biases. Over time, I observe how I'm biased and adjust the weights accordingly. Essentially, the inner box is just another weight in my network, but my brain let's me introspect the outer box, so I can see the inner one.

But now it's clear there's another problem. I'm the outer box! Perhaps someone smarter than me has yet a third box outside that one, and someone smarter than him has a fourth box. But there can only be so many boxes. At some point, you're limited. You can never see outside your outer box. So, in fact, it's likely I still have bias I'm not accounting for. It's just that it occurs at a higher level than I am capable of introspecting.

And thus as a programmer, you will always be limited by your outer box. No matter how good you get at coding, there will be a higher level, one which you cannot reach.

It seems intuitive to me that we should one day be able to program machines that are smarter than us. But I wonder how it is that we could give a machine more boxes than we ourselves have. Wouldn't that be like stepping outside our own highest level meta-box? Maybe it's just that the machines will have more supporting hardware. Obviously, I can't give my myself more neurons to work with (at least at this time). Honestly, I don't know. But now my outer-most box is aching; so, I'll leave it at that.

If you like thinking about thinking, boxes within boxes, and you like math and computing, I highly recommend GEB.* It's a fascinating read. In fact, I named my computer after it. You might also enjoy some of Pinker's works, How the Mind Works and The Blank Slate.

* Steve claimed some of the math in the book was a bit tricky. I don't recall this being the case, but it's been five years since I read the book. I did have some trouble understanding the fundamental ideas behind Godel's proof. For about ten minutes I felt like I understood it. Then I found the actual proof on the Internet, printed it out, and couldn't get through the first page. One day I'll read a book that covers it in depth. Anyway, I highly recommend you try the problems in the book (before he gives you the answer). You're missing out if you don't do them.