Software requirements for engineering and scientific applications are almost always computational and possess an advanced mathematical component. However, an application that calls for calculating a statistical function, or performs basic differentiation of integration, cannot be easily developed in C++ or most programming languages. In such a case, the engineer or scientist must assume the role of software developer. And even though scientists who take on the role as programmer can sometimes be the originators of major software products, they often waste valuable time developing algorithms that lead to untested and unreliable routines. .