nedjelja, 14. ožujka 2010.

Who stole my artificial intelligence?

Have you ever wondered why software is so quirky and disobedient? You may have thought of it being poorly designed and implemented, which in many cases may be true. Or worse yet, you may have thought of yourself being too stupid to use it properly. Sadly enough that it doesn't comply readily to your wishes, more so that it makes you feel bad.
There are many situations when you might have felt this way. You may have wanted to use data from one application in another, and there seemed to be no obvious way to do so. Copy and paste may not work, export and import may not work. Perhaps it's even impossible to do automatically, even if your data is just some text, or a number, or an image - some ubiquitous form of information that zillions of programs are designed to use and share with each other. Your spreadsheet program may not be able to export a table in a form suitable to display on your web site, let alone edit it online. It may use some back end data source invisible to your pretty page formatting program. Or it may embed some quirky formatting of its own, hard to get rid of.
Your web page may contain useful information that you would like to edit in a text processor, or an image editor, or movie editor, or spreadsheet editor. But somehow it's hard to do so. Your applications seem not to know where to look for compatible information, and even if they do, they are more than likely to loose track of the context that information was in. You are stuck with copying, pasting, making and modifying copies of that information. If you are a developer, you may choose or even need to make programs that fetch some form of information from one place to use it in another. All this is just to make it possible for your program to help you use information, without ever changing its true meaning. You need to work, and often work hard, just to help your software get to some information, and when you do it, it still doesn't understand it in any way similar to the way you understand it. Again and again you need to solve the same problem - get to the information that is already stored somewhere in a digital form, ready to use for some purpose and so unready to use for the purpose you need at the moment.

Now, what is wrong with this picture?
Well, when I had my first IT lecture back in ground school, teacher told us a handy definition of the information system, and we were supposed to know it. He said that it is "a system for storing and processing information in a digital form". Britannica seems to agree with this: it says that information system is "an integrated set of components for collecting, storing, processing, and communicating information".
It sounds pretty much like what our minds do. It sounds to me pretty much like a definition of an artificial mind, or to use a more popular and less correct term, it sounds like the definition of artificial intelligence. So this is what computers are for. I was excited about this, and wanted to learn more. I was even more excited about the prospect of computers becoming ever so smarter, peripherals developing to make them easier to use, their memory capacity and processing speed increasing to make them more and more powerful, and software developing to make them store and process all the information I could store and process, and much more. This was the time of ZX Spectrum and mighty Commodore 64 I myself purchased not long after, and it was this promise I remembered about computers: they will store and process information - they will remember stuff and be able to think about it. At the time it seemed OK to me that they are so clumsy and inefficient about doing this, but I believed we were on the right track and was eager to get on board. As you may have guessed from the first paragraph, the promise I believed would soon come true - still hasn't.

This blog is about why this is so, and what we can do about it. I am an experienced programmer, currently practicing Java and working hard to address this issue. I not only believe that this could be done - I know it for sure. If you are a software developer and are interested in this issue, stay tuned. There will be useful information on this blog for you :)