I remember my maternal grandfather was a jolly fellow. He loved to joke and sing. Often, he would get up early in the morning and start a pot of soup before breakfast. Then he would cook a big breakfast for everyone. He was in the restaurant business for most of his life. He had a big family. My mother had a sister and three brothers. She told me about waitressing for my grandfather.
One time when I was thirteen I went on a trip with my grandparents. We went to Saint Louis to visit my grandmother’s sister, Helen. We were sitting around the table after dinner. The conversation turned to which direction the Mississippi River flowed past a point where there was a crook in it so that it flowed north for a short stretch before it turned back to flow south. Aunt Helen had the idea that north was uphill and south was downhill. My grandmother was trying to explain that this wasn’t so.
Every time when she had just about convinced Aunt Helen that there was nothing untoward about the river flowing north for a bit and then curving back around to the south, my grandfather piped in and said something like, “but that would mean that it was flowing up hill.” This would get aunt Helen confused and she would start arguing with my grandmother and my grandfather would sit there and laugh quietly to himself. He did this three or four times before he got tired of it.
The next day we went to see the Gateway Arch. It was newly completed and we rode all the way to the top and looked out the windows. Later we stopped at a Radio Shack. Radio Shack didn’t have nearly as many stores in those days and I had never been in one of them. I got their catalogs in the mail all of the time though. I bought a small audio amplifier kit. When I got home I soldered it together but I must have overheated the transistor. It never worked.
My grandmother was a Superintendent of a school system in Tennessee. She always had text book samples. I loved to read them. I remember one time when I was on spring break and she let me go to work with her. I was impressed with her office.
I started thinking about my grandparents when I realized that I am as old now as they were when I knew them. I don’t feel old. I understand now that they probably didn’t feel old either. Time sneaks up on you. Of course I stand a good chance to live a good bit longer than they did. Our medical science is a good bit more advanced than it was back then. It still makes me ponder my mortality though.
Sweet dreams, don’t forget to tell the ones you love that you love them, and most important of all, be kind.
I approach programming as an exploratory process. I can’t seem to bring myself to sit down and plan a program out in minute detail beforehand. The truth is, any program that I understand well enough to plan out in minute detail beforehand, doesn’t interest me in the slightest. I want my programs to teach me something I didn’t know when I started writing them.
Consequently, I usually start out with some vague idea for a program. I write the shortest little bit that might work and compile and run it. Even better, I use an interpreted language like Lisp or scheme or ruby so that I can skip the compile part. I love dynamic languages!
At first, I find myself exploring the boundary between the language and the environment. For example, I have spent hours exploring the
Dir module in ruby. I have spent similar amounts of time exploring similar functionality in Common Lisp. Knowing how to traverse the file system in a given language is an important detail.
Another facility that I often dwell on is the reflective capability of a language, that is the ability of a language to know or discover details of its structure. For example, most symbols in ruby have a method
methods that returns an array of methods that the object implements.
methods is a reflective method. It allows the programmer to discover details about the programming environment dynamically at run time. Reflection is also called introspection.
Java implements reflection, demonstrating that languages not typically considered dynamic can be introspective too. The clever trick to Java reflection is that Java doesn’t create data structures to describe itself until you actually need them. This adheres to one of my favorite principles that states “you shouldn’t have to pay for features that you don’t use.” I’ve heard this principle called parsimony.
The underlying theme to these language features is that they all help make a language more adaptive. One of the key characteristics of human intelligence is our ability to distance ourself from a situation and analyze it with detachment. This is an important part of our ability to adapt to rapid changes in our environment. The ability of someone to reason about their relationship to their environment is essential to intelligent behavior.
Now I’ve really tipped my hand. The romantic notion that has captured my imagination is the quest for emergent intelligent behavior or Artificial Intelligence as it is commonly called. I try to avoid the term Artificial Intelligence because I find that neither the word Artificial nor the word Intelligence lend themselves to unambiguous definition, much less objective measurement. In fact, many of the great debates in the field revolve around this shortcoming.
To be continued.