The main ideas behind a chess engine can be easily understood. The Maple worksheet in Every Chess Configuration produces a unique encoding for each board configuration BC, which will be a number in {0,...,t-1}. This number is then passed to the Move Generator, which generates all legal configurations that result from BC. Each such configuration is then passed to the Evaluation Function, which generates a real positional value PV, based on a specific list of criteria. The next best move will be the configuration which maximizes PV. Using explicit steps:
The above list is fairly easy to understand, but quite hard to implement. There are several reasons:
First, it is obvious that the list of criteria should be as long and as detailed as possible, to avoid missing good moves.
Second, it's also fairly obvious that the recursion for steps 4/5 will be extremely time consuming, because the program has to generate all legal configurations n moves forward. Obviously, n has to be a function of some time constraint, otherwise the size of the table of generated moves will eventually grow beyond any reasonable memory bound in a few moves. The variation in quality between chess programs occurs because of differences in steps 1/4/5.