Issue No.06 - November/December (2007 vol.9)
Published by the IEEE Computer Society
Eric Ayars , California State University, Chico
DOI Bookmark: http://doi.ieeecomputersociety.org/10.1109/MCSE.2007.109
This book review examines an interesting new textbook on scientific programming languages.
N. Giordano and H. Nakanishi, Computational Physics, 2nd ed., Benjamin Cummings, 2005, ISBN: 978-0131469907, 560 pages.
Nicholas Giordano's Computational Physics has long been a standard in introductory computational physics courses, and the second edition (with coauthor Hisao Nakanishi) is an even better text.
Many varieties of computational physics courses exist, so I'll use mine as a baseline. My students have, at a minimum, completed the first two semesters of a three-semester calculus-based physics course; most are a bit more advanced than that. There's no programming prerequisite for the course, so students start with a wide range of programming abilities. Because some of them have no programming experience, I teach the class in Python, which brings me to the first thing that sets this book apart from similar texts: it's "language agnostic." Instead of using one of the several good programming languages available, the authors wrote their examples in pseudocode. I based my textbook choice largely on this independence from any one particular language because I'm not aware of any text that uses Python.
However, the more I actually use this clear, English-based pseudocode in the classroom, the more I like it! It separates the magic from the incantation: students are encouraged to think about the way the program works, rather than the way the language works. It lets teachers focus the course on computational methods rather than computer programming. As a student, I was taught Basic, Pascal, C, and Fortran; each was presented as the language to learn at the time. I fully expect that during their careers, my students will use multiple new languages that we haven't even thought of yet, and I want them to know how to solve problems using a computer rather than how to program in "x."
Of course, students still have to become competent in some computer languages to really grasp the material. For students who wish to use Basic, Fortran, or C, the authors offer extensive code examples in those languages on their Web site ( www.physics.purdue.edu/~hisao/book).
I really like how the authors begin each section with a physics problem, and then introduce the techniques to solve that problem. This approach isn't unique, but it's well-implemented and consistent throughout—letting the physics select the tool set helps students keep a clear goal in mind throughout the process. Students aren't introduced to new computational techniques without first seeing their need. There's never a sense of "here's a tool, where can I use it?" but always, "here's a problem, what tools can I use?"
There's a lot more to be said about most types of computational tools than would fit in any readable chapter. The authors wisely limit each chapter's scope to the simplest method that will do the job and put the details about more complicated approaches in the appendices. This is nice because it lets instructors choose the material they want to cover more thoroughly or treat with basic coverage.
The text also has a good selection of suggested problems clustered at the end of each section. Most exercises are fairly straightforward, with more challenging problems occasionally thrown in. Each problem stands alone and usually addresses a single concept. Solutions typically require 20 to 50 lines of well-documented Python code, although this varies considerably with programming style, language, and quantity of comments. Personally, I prefer to give more project-oriented homework sets in which students work on multiple aspects of a larger problem, but the exercises serve as a good starting point for such projects.
The breadth of coverage is more than sufficient for a semester-long computational course. In addition to ordinary differential equations, the text covers orbital dynamics, oscillations, waves, chaos, diffusion, percolation, Monte Carlo techniques, electricity and magnetism, Schrödinger's equation, Ising models, molecular dynamics, and (briefly) interdisciplinary topics such as protein folding and cellular automata. The authors wrote the text in such a way that once instructors cover the first few chapters, it's easy to pick and choose individual topics depending on students' interests because there's no unnecessary linking of one chapter to another—it's possible to jump from chapter 6 on waves to quantum mechanics in chapter 10 without losing anyone.
Although I greatly appreciate the text's language-independent nature, this might be considered a possible weakness. If your students don't have previous programming experience, expect to incorporate considerable outside resources to fill this need. I typically dedicate the first two weeks of the semester to programming in general, with an emphasis on Python, before beginning the text. It has also been necessary to bring in self-generated example code. If you use Basic or Fortran—or to a lesser extent, C—example code is available on the authors' Web site; otherwise, expect to provide it yourself. Personally, the advantages of language independence outweigh this disadvantage, but your mileage might vary, and it's something to consider.
I'm very pleased with this text—the students like it, I've had good results using it in my course, and it interfaces extremely well with the conceptual emphasis I prefer for an undergraduate-level computational physics course.
Eric Ayars is an assistant professor of physics at California State University, Chico. His research interests include scanning probe microscopy, non-Newtonian fluids, and application of physics education research to the advanced laboratory experience for physics majors. Ayars has a PhD in physics from North Carolina State University. He is a member of the American Association of Physics Teachers, the American Physical Society, the Physics Instructional Resource Association, and the Council on Undergraduate Research. Contact him at firstname.lastname@example.org.