Monday, June 05, 2006

Call to the Programmer in 2006: Make computers understand people and programming will be easy (or Mental Augmentation)

Computation allows us to remember things we would have forgotten otherwise. It also allows us to share these memories. Computation allows us to create imaginary memories that might exist in the future, might have existed in the past, or could be a good explanation for what is happening right now. How do we make remembering, imagining, and sharing our memories easier?

How do the problems of individuality, society, and competitive evolution relate to easily accessed historical memories, imaginary memories, and the communal sharing of these memories?

Darwin's formal theory of evolution assumes that there are multiple species and that these species have individuals. The ideas of species and individual have been shown to be pretty fuzzy and they are becoming more fuzzy as we lose individuality through the communal sharing of computational power, one of our forms of intelligence. We are quickly losing the idea of species as humans have become the only specimen in their ecological niche; what does it mean to compete against another species, with which you cannot reproduce? The evolution of computation (memories and the thought process itself) has slowly started to move onto the Internet, where a world-language is evolving and computer languages are becoming very simple to learn and use.

Processing power over the next 20 years will not come from major advances in transistor technology, although quantum and biological computation have large promise. The problem of how to program these new types of computation still lies at the feet of the programmers, and I believe that these programmers will provide the computational power gains of the next 20 years--by rethinking computation and programming. Programming the Internet will not be solved by focusing on programming language syntax (e.g. Perl versus C versus Lisp versus Python versus Ruby versus C-sharp-dot-net-with-COM-and-templates). Easily programming the Internet will not be solved by providing more powerful function calls or great libraries of function calls. We need computers to understand humans. We need computers to be able to learn the goals of individual humans. We need computers that try to help. We don't need more computers that wait to be told what to do. We need computers that can tell when we are confused and that can provide additional data or offer mental assistance. We need computers that can infer our mental states. We need computers that know what we believe about the world and what we want out of life--our goals, desires, and beliefs. We need computers that know us as communities and individuals.