A First Course in Computational Physics and Object-Oriented Programming with C++ , DavidYevick , Cambridge U. Press, New York, 2005. $70.00 (403 pp.). ISBN 0-521-82778-7, CD-ROM

The use of computers is ubiquitous in physics research. Even the most analytical theorists need to conduct numerical calculations to obtain specific results. Thus the physics curriculum should contain some instruction in understanding and applying computational tools. Such instruction is sometimes built into traditional courses, but many departments now offer standalone courses in computational physics. The title of David Yevick’s text, A First Course in Computational Physics and Object-Oriented Programming with C++, suggests that this text would be appropriate for one of these newly developed computational physics courses. However, it is not. Instead it is a book on programming in C++ and is designed for the traditional scientific computing courses that were developed before the more recent computational physics courses.

One type of computational physics course involves a physics version of the numerical-methods courses taught in mathematics departments. The focus is on algorithm developments and their application to physical systems, and students frequently must already have some ability to program. Textbooks for such courses include Alejandro L. Garcia’s second edition of Numerical Methods for Physics (Prentice Hall, 2000), Tao Pang’s An Introduction to Computational Physics (Cambridge U. Press, 1997), and Paul L. DeVries’s A First Course in Computational Physics (Wiley, 1994). A text that attempts to teach programming, along with the computational physics, is Rubin H. Landau’s A First Course in Scientific Computing: Symbolic, Graphic, and Numeric Problem Solving Using Maple, Java, Mathematica, and Fortran (Princeton U. Press, 2005). This text is a hands-on workbook instead of a traditional text, and has the unique feature of discussing a number of different programming languages.

Another type of computational physics course treats numerical methods as tools to be used in computer simulations. This type starts with the physics, develops models, implements those models using numerical algorithms, and finally extracts information and insight from the resulting simulations. Undergraduate texts that follow this approach are the third edition of An Introduction to Computer Simulation Methods: Applications to Physical Systems (Addison-Wesley, 2006), which I cowrote with Harvey Gould and Wolfgang Christian, and the second edition of Computational Physics (Prentice Hall, 2006) by Nicholas J. Giordano and Hisao Nakanishi. The former discusses how to code simulations using Java and the recently developed Open Source Physics Library.

Yevick, a professor of physics at the University of Waterloo in Canada, has been involved in the numerical modeling of various aspects of optical communication systems for the past 25 years. He has also taught scientific programming for seven years in the university’s science and engineering departments. In his book, Yevick covers mostly programming in C++. He presents only a cursory survey of a few algorithms, much less than one would find in any of the previously mentioned books. For example, the only ordinary differential equation solver mentioned is the Euler algorithm. Monte Carlo methods are briefly discussed in a rather abstract context. A student would never learn from the text that those methods are a major tool in statistical physics.

The strength of the text is its careful development of the C++ programming language, with a focus on those aspects that are useful in scientific programming. The text would be helpful for graduate students who need to learn C++ for their research. Also, it would be a useful reference for those already using C++.

In addition to providing a detailed discussion of the C++ elements necessary for scientific programming, Yevick covers the advantages of the object-oriented programming (OOP) paradigm, hardware and software architectures, and program optimization. However, some of the discussion on those topics will only make sense to those already seriously involved in scientific computing. Coverage of why OOP is preferable to procedural languages is good, but I did not find the toy example in the text convincing. It is difficult to make the case for OOP using simple examples. The strength of OOP is in managing large projects or libraries, such as those used to generate graphical user interfaces, animation, graphics, and large-scale simulations. But these topics are not discussed in any detail in the text. Another obvious omission is the topic of parallel computing.

Nevertheless, A First Course in Computational Physics and Object-Oriented Programming with C++ contains most of what one would need to program in C++ and includes many helpful exercises. Physical science and engineering students who are either very diligent or have some background in programming could learn C++ very well from Yevick’s text. But many students with absolutely no programming background would need more basic assistance than the book provides.