The complexity of most computer programs and programming languages is one of the Unsolved problems in software engineering. The current applications are complex to the extent that when programmers leave, companies fail, if those companies have no one else who understands what the programmers have done.