I recently ran across this article on the Wikipedia. It's about the game of Advanced Chess, said to have been invented by the Grandmaster Garry Kasparov. The game is still chess, but it is played in teams; each team consists of a human partnered with a chess-playing computer program, playing against another team of like composition. This is a twist on the usual scenario, in which a human is pitted against a computer program to see which is the better chess player.
Computer programs for playing chess have long been a subject of research in the field of Artificial Intelligence. Quality strategies and algorithms for automated chess playing are rightly seen as a hallmark of programming prowess and computational ability, since a brute force approach, while technically feasible now more than ever, can still be overcome by a sufficiently skilled human player.
Advanced Chess aims to combine the best of both worlds -- the sheer computational ability of the computer providing an exhaustive analysis of the quality of individual moves, and the innate strategic and reasoning ability of the human mind providing the guidance and overarching tactical selection of moves. Oddly, it seems that this combination creates a symbiosis that results in a team that plays better chess than either of its component members. According to the article, human players that are stronger than their teammate-program get stronger still. Human players that are weaker than their teammate-program end up playing better than the program would on its own.
This is a fascinating subject in its own right, but it also raises interesting questions of what exactly we're trying to accomplish with our use of computers in the enterprise. I think we tend to use the computer more as a slave than as a partner. What if we approached the development of web applications (or applications in general) as the development of "brain partners", facilitators that could be designed to augment the natural inner workings of our brains, shoring up the weaker areas and playing to our strengths? What would be a natural way of expressing such programs that would take advantage of the strengths of both sides?
We already do this, in some problem domains. Modern-day weather forecasting relies on sophisticated computer simulation of the elements that shape our climates. Stock traders use similar analytical tools that help inform their decisions of when and what to sell. Military fighter pilots as we know them today could not function without GPS and HUD and other computer-intensive aids.
What about our Java apps (had to work in a Java reference in here somewhere)? Do they facilitate, or do they impede? How can we make them do a better job of partnering? Is Java even a good language for the task? What about the alternatives like Python and Ruby? Is any existing computer language up to the task?
Enquiring minds want to know...