It is fairly safe to say that most scientific, mathematical, and engineering software has been written in Fortran or C/C++. Libraries of software implementing algorithms have been written and distributed in these languages. The “Numerical Recipes” series by Press et al. includes at least two editions of each on FORTRAN, C, and C++, plus one on Pascal. These statements do not diminish the popularity of Python and its scientific and numerical libraries. The “Numerical Recipes” functions and subroutines have been used in many research projects, graduate theses, and dissertations. Although complete listings are provided, applying them usually requires plenty of effort in working through the code to understand the logic (and to look for typographical errors), extracting and rewriting what may be needed, and carefully testing the final product.
Scientific and mathematical software development in Java is a comparative latecomer. There have been several efforts at developing Java libraries, with one of the most comprehensive being the translation of Numerical recipes (3rd ed.)  into Java. This package is unsupported and is part of a package that can be purchased from the publisher. A comparable Java library would be useful since the design objective of Java is that a program can be run on any platform on which the Java Virtual Machine has been implemented. Write the program on a Mac; run it on a Windows or Linux machine. This would be especially welcome for scientific, mathematical, and engineering programs distributed as executables. They would not have to be recompiled for different hardware and operating system combinations. I undertook the task of reviewing this book with the hope that Numerical methods using Java would be a worthy successor to the books in the “Numerical Recipes” series.
This is a large 16-chapter book with over 1100 pages. It has several major similarities with--and differences from--the “Numerical Recipes” books. The first chapter deals with obtaining and installing the Java SDK and two different user development environments, NetBeans and IntelliJ. The different procedures are created as classes and are presented according to mathematical type in the remaining 15 chapters. The content chapters include the same sort of topics that one would find in a “Numerical Recipes” book, including linear algebra, finding roots of single equations and systems of equations, curve fitting, numerical differentiation and integration, ordinary and partial differential equations, unconstrained and constrained optimization, statistics and linear regression, random numbers, and time series analysis.
The book is primarily a user’s guide to the NM DEV commercial software library and, secondarily, this product’s predecessor, SuanShu, a ten-year-old collection that has been made open source. NM DEV is distributed as a jar file. The reader does not get to see the actual code. This is the first difference between the “Numerical Recipes” code and this book. Neither is the open-source version shown. The many examples include a brief mathematical introduction to the class implementing the algorithm, how to invoke it in a program, and showing the result. There are sample programs for every class. These examples can be downloaded from the GitHub archive.
Following the instructions in chapter 1, I attempted to follow the procedures for setting up a working environment on two machines--a Windows laptop and an iMac desktop (Intel). I installed the current JDK version 19, NetBeans 15, and IntelliJ Community version 2022.2.2. (The book used JDK 16, NetBeans 12.4, and no doubt an earlier version of IntelliJ. I doubt if this should make a difference.) The book shows how either environment can be made to work with NM DEV. I decided to try to use the older open source version SuanShu instead. I wanted to find out what is included in the open source package and what was additional in the commercial version. The only instruction on setting up SuanShu was with IntelliJ. It did not work as shown in the book. Instead of simply compiling and running the example, it attempted to run a comprehensive test suite that failed with over 100 messages “org.junit does not exist.” After two days of reading and re-reading the instructions and fighting with the software, I gave up. I was disappointed.
I wish the author had written a more conventional book, like Numerical Recipes, using the content of SuanShu as explicit bodies of text since it is, after all, open source. It would show the user that this book could have been a good introduction to the commercial product. Make the SuanShu software archive less elaborate. It looks structured like a set of matryoshka dolls. There is no need to have a deep subdirectory tree structure going down nine levels to find the first Java class. (The same is true for the archive of sample programs in the book!)