Joshua Schrier has taken on a traditionally difficult task, teaching computational chemistry. To do this successfully, the student has to have programming skills, a solid foundation in the theory and background in the methods employed from classical physics to quantum methods. Thus the task is daunting and why so few have taken it on.
Principally in the execution of computations one must know language of programming of some variety. The author points out the difficulty in taking a computational approach using standard programming languages such as FORTRAN or C++ and has, thus, taken to using one of the powerful math software packages, Mathematica. There are a variety of such packages available that include MatLab and MathCad to name two. Each of these software packages requires a learning curve of programming. Some are more cryptic than others. The problem that arises is the same as that which arises using a classical language, one is married to it. The author thus makes the deliberate choice of selecting one software package and goes about the subject down that particular road. This is a reality of the problem of doing computational work. There is an extended appendix that introduces the student to the basic programming concepts and leads the student to tutorials in Mathematica. A student that has had no programming experience will likely need some time to absorb and apply this material for use. The author thus provides extended coding in each chapter to allow the student to proceed.
The computational methods introduced extend to a fairly wide range of topics beginning with Finite Difference Methods, which are sketchy but allows the student to get started (the author acknowledges that). He then introduces the widely utilized Variational Theory and specific applications of Hartree Fock and Huckel approaches. He then extends his discussion to Quantum solids, Density Functional Theory and Monte Carlo methods. Each of these topics is accompanied by example programming scripts for the software with examples. The theories themselves are only briefly introduced thus requiring that the student be well versed in them beforehand. Here is where I doubt the efficacy of this text at an undergraduate level. Introductory physical chemistry courses cover several of these topics but rarely do they incorporate Quantum solids, DFT and Monte Carlo methods in lecture and in a laboratory setting. So although the author suggests this book for an upper level undergraduate as well as a graduate level student, this text is less viable at the undergraduate level. Such use there, in my opinion, would not have much of a learning impact beyond entering the given codes and executing them. Not to say it cannot be done, but it is a tall order for an undergraduate student even already having completed a full course in physical chemistry.
From the quantum sections that introduce the methods, the author moves to wonderful applications in thermodynamics and kinetics. The thermodynamics begins with manageable curve fitting algorithms but then extends to more involved topics of the Ising model and then to molecular dynamics, the last of which may be better suited to the kinetics chapter that follows. The introduction of the MD, as before, introduces theory as more of a review of classical mechanics rather than a discussion. Again, this would best be used for a student having had more extended courses in classical physics which is less likely for an undergraduate senior. The kinetics uses a variety of methods that include stochastic methods, another more advanced topic for undergraduates.
Overall, the text is well presented and the topics are varying and effective. The decision to select a particular software and programming language is an unavoidable necessity. That decision has its limitations for the undergraduate student who is not experienced in programming in general or the advanced topics presented. For a graduate student this would be an amazing and valuable book to utilize.