With only three basic particles making up atoms, and their interaction fairly well understood (we can even predict the chemical properties of elements we have not yet discovered) atoms seem to be like Lego bricks: only fitting together in a limited number of ways. So how come, in the age of super computers, we have not yet invented a program that can predict every single possible chemical compound (lets start modestly: of around fifty atoms or less)? Would a “super version” of such a computer program- one that would create a “master list” of all possible compounds and their reactions - theoretically make the field of experimental chemistry obsolete? I realize the vast number of possibilities, but just as with a chess game, the number of actual possible boards is far less than the theoretical number of all possible chess pieces and positions. Many simple compounds could be ruled out as “impossible” and a dead end, thereby considerably shortening the list of possible compounds. Am I missing something obvious here?
Because the combinatorial complexity is far to big for practical computation
One of the simplest possible cases that illustrates why this is impossible is given by restricting the choice of atoms to just carbon and hydrogen, forbidding any double bonds and disallowing any rings. This becomes equivalent to enumerating the number of possible mathematical trees of a certain structure a calculation interising in graph theory as well as chemistry.
Graphs are not exactly the same as hydrocarbons as there are spatial constraints on the molecules that can exist in 3D space and also because the molecules are in 3D, some variants with the same graph may be chemically different due to chirality (see this answer for more details). But Some calculations based on just 50 carbons put the number of possible variants at >1021 (see this wikipedia page) which is a ridiculously big number.
And this is is with just two elements from the hundred or so that could be used and it is ruling out most of the interesting structural features that could add a great deal of extra complexity. All this complexity arises from the carbon skeleton alone and it is already beyond any computational capacity we can contemplate having (just using one byte per compound would use a great deal more storage than at least one estimate of the total world capacity to store information.
So, if you still think this sounds like an easy task, you haven't done those calculations or appreciated the gargantuan scale of the resulting numbers.
Let me add a another point besides the already overwhelming problem of almost innumerable combinations.
I am afraid that the Lego analogy oversimplifies the underlying problem by a large margin. A Lego brick only cares to which brick it is directly connected, lets say we have bricks A,B,C,D. Lets connect them like this, A-B-C. For A, it doesn't matter that B is connected to C and i could switch C with D without affecting the connection between A-B. This does not hold for atoms in molecules. It matters significantly what type of other bricks are connected to B or even further along the chain.
It is possible to define functional groups that are fairly independent, having similar properties irregardless of the neighbors, but that is always an approximation. The approximation is often good, which is why the rules that one learns in basic organic chemistry work most of the times but there are cases where the approximation is bad and the rules no longer work. It applies even to A and B themselves. The properties of A and B are not conserved when you bring A and B together, the whole idea to identify A and B in the combination A-B is an approximation.
This adds to the complexity to calculating all possible combinations. In principle, you have to recalculate the properties for every new compound. You can often make a good guess for the properties of the new compound based on the constituent parts but that's it.
This poses already a difficult problem but coupled with the insane amount of possible combinations makes it all but impossible to create such a table.