REVIEW - Technical Java - Developing Scientific and Engineering Applications


Technical Java - Developing Scientific and Engineering Applications


Grant Palmer




Prentice Hall Professional (2003)




Ivan Uemlianin


December 2004



Technical Java has two target audiences: the newcomer to Java from a natural science background; the seasoned programmer who is sceptical about using Java in this domain. I recommend the book for either audience.

The book has four parts. The first set of chapters deals briefly with Java's differences with Fortran, C and C++. The second section (chapters 5-16) covers the Java language itself. Then comes the 'technical' section (chapters 17-24) on mathematical modelling. The examples covered in this section come primarily from fluid mechanics (modelling gas mixtures, air flow, etc.), but the techniques are general, and include the Fourier transform. Finally, come three chapters on building the i/o wrappers (simple i/o, GUI and web) that turn models into applications.

Each of the technical chapters has a good project feel. A problem is clearly stated, along with its mathematical representation. In discussing a Java solution, due consideration is given to analysis and design (e.g., class hierarchies, public methods). The code that implements the mathematics is a succinct and 'obvious' response to the problem as defined. These are good examples of how to approach scientific programming.

Those who know the language can safely skip the first 16 chapters, but for those new to Java, these chapters provide a workable introduction. In particular, the science and engineering flavour is there right from the beginning: instead of "Hello world!" we have "compute area of circle"; interfaces are illustrated by an "Electrostatic interface ... to be implemented by classes that represent charged bodies".

The language is terse almost to the point of being brusque ("If you want to create a GUI with Fortran you are out of luck"), but very clear. The author favours simple, direct sentences. This makes the text easy to follow. Similarly, it is easy to navigate, as the relevance of any particular section is apparent immediately.

The content seems clear and correct - apart from the peculiar assertion in the C and C++ chapters that Java has no void type (the most common line of code in the book is 'public static void main(String args[]) {'). I was surprised to find no discussion of floating point arithmetic, as this can be relied on to trip up the uninitiated.

This book will be useful to people evaluating languages for a scientific project. Although it cannot answer the question of whether Java is *the* language to use for scientific programming, it certainly makes a good case.

For the right person, this book could also be a good introduction to Java. I imagine someone from a natural science background would feel very at home with it, just as I did.

Book cover image courtesy of Open Library.