| Our book was conceived as a programming toolkit and a problem-solving resource for professional engineers and scientists who take on the role of programmers. The book’s original idea was based on the fact that engineers and scientists often need to develop software to suit their particular needs, but hardly ever are they “superprogrammers” at the start. On the other hand, the scientist/engineer who becomes an improvised programmer is often the originator of major software products: who knows better what the software must accomplish than the person who is an expert in the field of application and the intended user of the product? Who can better design and code the bridge-building program than the bridge builder?
At the same time, scientists and engineers are intellectuals, trained in the sciences, with good mathematical backgrounds, and who already know the many complexities involved in scientific and technological calculations. They constitute a group of readers who do not accept black boxes or unexplained methodologies. Furnishing software and development tools for them requires finding a balance that, on one hand, does not ignore their scientific, technical, and mathematical competence, and on the other one, provides practical shortcuts that avoid unnecessary complications. We have attempted to achieve this balance in our book.
The software requirements of applications intended for engineering and scientific uses are almost always computational. The typical scientific and engineering program has a strong number-crunching component. But the computational capabilities of conventional programming languages are limited and often not well documented. For example, the mathematical functions that are part of the C++ language barely include the common trigonometric and logarithmic functions. An engineering application that requires calculating a statistical function, or that performs basic differentiation or integration, cannot be easily developed in this or most other programming languages. Consequently, the scientist/engineer software developer is forced to search for or develop algorithms and methods to perform the required calculations, often ending up with untested, undocumented, and unreliable routines. Providing these numerical tools has been our primary objective in this book.
But it does not end with the tool, algorithm, or even the canned routine that solves a computational problem. The engineering or scientific application must execute in a modern computer and do so with professional appearance and functionality. In a very few cases is a minimal, text-based program sufficient for the purpose at hand. To be effective, the program must execute in a graphical operating system such as Windows; therefore the engineer/scientist programmer must also have access to these skills. |