Google Pritikin Diet. Read a little. This was researched long ago.
The first is the area of programming languages - they should know what a statement is, what a class is, an algorithm, a subroutine. In short, they must know how to program.
The second area is that of the business world they are writing the program for. If you are writing a program for Morgages, for example, you need to be using base-10 rather than base-2 for mathmatics. You need to know how to calculate a morgage rate, principle, interest, etc. (You'd better realize that morgages can be bought and sold and how to determine their current values and future values).
Our modeling should match the real world. The closer to the real world the model matches, the easier it will be to relate the program to the business model.