Software Design Philosophy
In the next several posts, I’ll probably talk about my software design philosophy in my attempt to develop next-generation intelligent desktop software.
In the upcoming PDC, Microsoftees will attempt to resolve the impedance mismatch that exists among the object, relational, and XML data worlds and between programming and data languages. Early indications are that this integration will bring innovations like querying capabilities to object data and static typing to other types data and possibly make object-relational mapping technologies less important.
In my own software, I strive to resolve another impedance mismatch that I see existing between human languages and computer programming languages. I spoke about this before in my post about human-like software. I do this by bringing in concepts and techniques humans use into the programming language. (I attended the Whidbey Compiler Lab earlier this year at Microsoft, because at some point in the distant future I want to develop a new programming extension over VB and C# to support some of my ideas. The new programming languages I see these days don’t seem particularly innovative.)
AI visionary, Ray Kurzweil sees computers achieving human intelligence, when computing processing power approaches the capacity of the human brain after a couple of decades. He refers to the workings of the brain being scanned and downloaded onto a computer. He also assumes that the neural network model is the most efficient and promising approaching for processing language—which makes sense given that his company is focused on speech recognition and optical character recognition software.
I think that language doesn’t require the same parallel processing that speech and vision may and I think that current hardware may be adequate to the task. Cyc corporation favors a symbolic approach as do I, but they have spent a lot of time and resources trying to encode a lot of mundane facts about the world and capture a lot of common sense assumptions. Total world knowledge is not necessary for useful software; a simple extensible ontology suffices, that users can augment manually or through third-party plugins for their own domain-specific applications. I also tend to favor, not exclusively, the rule-transformation techniques used in Mathematica over some of logical inference techniques in Cyc.
There are other aspects of my design philosophy besides AI such as how I believe a document-based application should be built.