Information Technology Reference
In-Depth Information
where maintenance and future extensions have become very difficult, and the mod-
ification of complicated codes easily leads to a significant danger of introducing
errors. Careful design of scientific software systems is therefore necessary.
Software Development Skills
The scientific software developer needs several skills to meet the demands of the
previous paragraph. These skills include
1. Understanding the mathematical problem to be solved
2. Understanding the numerical methods to be used
3. Designing appropriate algorithms and data structures
4. Selecting the most suitable programming language and tools
5. Using libraries
6. Verifying the correctness of the results
The first two points are critical to the last point. Ideally, the software developer
should also have an understanding of the physical problem being solved, but as
long as the mathematical model for the physical problem is specified completely,
the software development (in terms of programming and verification) is decoupled
from the original problem. In fact, such a decoupling encourages the production of
software that can be applied to a range of different physical problem areas. Points
3-5 are closely tied and have often been ignored in the literature. One reason may
be that up until the 1990s almost all scientific software developers used Fortran as
the programming tool. The tendency now is to use a collection of tools to solve a
given problem, i.e., the developer needs to select the right tool for each subtask. This
requires a knowledge of a range of tools.
Scientific software development, and especially the testing phase, is known to
be very time consuming and the number one reason why budgets are so frequently
exceeded in scientific computing projects. Students also tend to spend much time
on going from the mathematics to a working code. The rule of thumb is therefore
to avoid developing numerical software if possible, i.e., one should reuse existing
software to as large extent as possible. For some problem areas, there are software
packages providing all functionality you need in the solution process, and there is no
need for software development. Most scientific problems, however, demand some
kind of programming, fortunately in the form of calling up available functionality
in various libraries. How to do this efficiently again requires knowledge of different
programming tools.
This Chapter
Fortunately, there are many techniques to speed up the development of numerical
software and increase the reliability of an implementation. The present chapter gives
Search WWH ::




Custom Search