``Of all games of skill, Go is second only to chess in terms of research and programming efforts spent. Yet in playing strength, Go programs lag far behind their counterparts in almost any other game. While Go programs have advanced considerably in the last 10-15 years, they can still be beaten easily by human players of moderate skill.'' [14]
Static board evaluation in Go is very difficult. This combined with a large branching factor makes it sure that regular negamax-type algorithms won't work very well. One of the reasons behind this difficulty is the fact that there are stones on board that will eventually be captured, but not in near future. In many cases experienced Go players can classify these dead stones with ease, but algorithmically, the problem is polynomial-space hard [7]. Using a simple look-ahead to determine the status of stones is not always easy since it might take dozens of moves to actually capture the stones.
One of the reasons that Go is thought to be difficult for computers is simply the fact that (many) humans are amazingly good at Go. The visual nature of Go fits human perception but is hard to model in a program. Computers have difficulties sorting out pictures of chairs from pictures of bicycles - something which is quite trivial for humans. Consequently, humans are able to recognize subtle differences in Go positions. They can judge very early on, whether a large, loose group of stones can be captured or not. Humans can answer such questions with just a glance on the board, whereas an equivalent proof by a computer search seems completely out of reach. [14]
Almost all Go programs contain a pattern database and a pattern matching subsystem [14]. These patterns try to mimic the visual thinking that humans are supposed to do. A large effort is done to handcode, to test and debug these patterns. There is also some research on automatically acquiring patterns [10] from game collections.
Local searches are used to answer questions like ``can these stones be connected?'' or ``can this group survive?''. There are methods like lambda-search [16] tailored for such problems. It is still an open question, how to combine all the information gathered from these search trees and use it globally. The search tree contains much more information than the yes/no answer, like threaths etc.