$title=' The Code Creation Problem'; include_once "../../prlheader.php"; ?>
While increasingly powerful mathematics packages like Matlab, Maple and Mathematica have dramatically reduced the effort required to perform some mathematical experiments, it is often still necessary to retreat to conventional programming languages, augmented by standard subroutine libraries, for complex or multi-domain problems. A few of the issues that arise were described in the context of mesh generation in Section 2.1 .
However, even with the programming tools and subroutines libraries now available, far more effort is required to code a complex mathematical computation than is required to explain the computation to a colleague. This is largely due to (1) the semantic gap between mathematics and conventional programming languages, and (2) the difficulty in expressing certain mathematical techniques as subroutines.
We feel that these issues can be effectively addressed by using transformations to convert high level mathematical expressions into more traditional code (in Fortran or C, for instance). A library of such transformations would also include routines that verify the mathematical validity of the transformations before they are applied as well as verifying the pre- and post-conditions of conventional subroutines. These tools could also support parallel versions of these languages such as Split-C [29] or Fortran-90 [40].
In Section 3.1 we illustrate why a transformation based programming methodology requires a system with a rigorous mathematical substrate. In Section 3.2 we give an example of an application of transformation based software development that could have a broad impact on scientific computing.