Over the years, there have been many introductions to the use of computer algebra systems like *Mathematica*. Generally, these have either taken the form of user guides, programming manuals, or applications to a specific area (e.g., physics, finance, statistics, combinatorics, etc.). This particular introductory text serves a different audience: it is a supplement for students in their first two years of undergraduate mathematics with the goal of providing insights into the underlying mathematics that can be gained through intelligent and focused use of *Mathematica’s* functionality and depth. It is clear to this reviewer that the authors have brought their years of addressing student concerns to bear on focusing this book on providing these insights.

The third edition of *The Student's Introduction to Mathematica and the Wolfram Language* was written for the then current Mathematica version 11.3; version 12.0 has since been released in the summer of 2019. Although the printed text does not anticipate changes, the authors thoughtfully provided indications of revisions to the current version through a downloadable set of solutions to *all* the book’s exercises. A consequence, of course, is that many of the improvements in version 12 have eliminated the need for the authors' careful explanations of some of *Mathematica's* output, explanations that are still needed for version 11.3 and earlier. Although some results in version 12 are formatted differently from those in the text (e.g., constants of integration and in solutions to differential equations) I doubt that such differences will lead to any serious confusion.

This text, including the exercises and solutions, is written in a student-friendly style. It begins with short introductory tutorial chapters on the user interface, emphasizing the use of *Mathematica’s* Basic Math Assistant Palette to simplify typing, particularly of “special” characters. The authors attempt to accommodate all contemporary interfaces (desktop, online, and cloud, Mac, Windows, and Linux, basic and extended keyboard), subsuming laptops implicitly under the term 'desktop'. It should be stressed that the exercises and accompanying solutions investigate and expand on material not directly covered in the main text and are, as I see it, an essential part of the book. These downloaded files are actually executable *Mathematica* notebooks and as such support expansion and experimentation by the reader.

Unlike most tutorial introductions to *Mathematica*, the authors go to significant lengths to provide explanations and rationales underlying what a newcomer would likely find confusing. As an example, the reason that FactorInteger returns a list of pairs of {prime-factor, exponent} rather than the traditional list of primeFactors bearing exponents is to facilitate its being used in a student-written program. I think this form of rationale should prove to be helpful to new users.

*Mathematica's* visualization capabilities are introduced in a detailed early chapter. This is done prior to going directly into the application of *Mathematica* to topics in polynomial algebra, single- and multi-variable calculus, and linear algebra to give students familiarity with using graphics to understand functional behavior and to detect anomalies and discontinuities. The authors stress how the scale and precision of graphs can also conceal such behavior from view. Thus, it is here that the reader is first made aware of the fact that unless directed otherwise, *Mathematica* generally computes in the Complex domain rather than in the Real subdomain. The first example of this is a plot of the cube root of x, which shows nothing for negative x, even though the real cube root of -8 is -2. (The explanation goes on to show how the student can direct the plotting function to work with Real values and explains, further in the text, how *Mathematica* determines which roots to display.) This chapter also covers accessing *Mathematica's* extensive sets of on-line curated data which ranges from statistical, financial, and geographic data to astronomical, medical, and biological topics and imagery and their properties.

A first-year student may be tempted to skip the chapter on algebra and move directly into the chapters on calculus and linear algebra. This would be a serious oversight, as it is this chapter that addresses themes and approaches that lay the foundations for using *Mathematica* to supplement understanding the properties and extensions of polynomials as the basis for these fields. Throughout the text, the authors stress the importance of visualization in order to avoid mechanically applying the rich tools for limits, derivatives, and integrals without first seeing potentially anomalous behavior in the neighborhoods under consideration. The authors also show how *Mathematica* can be used to derive generalized formulations, e.g., in an exercise the student is shown how the Solve function in *Mathematica* can be used to derive the Cardano/Tartaglia general form solution to the cubic.

The chapters on the calculus go well beyond topics that were traditionally covered in first and second-year courses, and subtle insights are presented that were once reserved for advanced calculus/real analysis courses. Similarly, visualizations provide insights into the properties of linear functions and vector spaces. The many functions provided in contemporary versions of *Mathematica* invite student experimentation and explorations that are no longer limited to painstaking pencil-and-paper approximations.

It is only after the use of *Mathematica* in calculus and algebras that the topic of programming is addressed. This is done in a more typical *Mathematica* textbook form, starting with definitions of atoms and internal forms, and working progressively into the Wolfram Language’s internal structure and functionalities for control structures, variable scoping, numerical precision, and the programmatic use of patterns in producing powerful, but readable, code.

The final chapter on 3D Printing is unique to this edition. As one who does not have access to a 3D printer, I only scanned this chapter for its content on how images are constructed from equations and specifications of regions. It is an interesting chapter, but certainly not integral to the text.

The index is comprehensive, addressing mathematical concepts that are covered as well as listing all the *Mathematica* primitives and functions used in the text. I found only one typographical error in the text, and surprisingly that was in part of the input to a function toward the back of the book (surprising, since the text was completely generated as a set of *Mathematica* notebooks).

I am aware that many colleges and universities have moved away from commercial computer algebra systems like Mathematica, Maple, or MATLAB in favor of the freely available Sage/Python system. I have been using Mathematica for nearly 20 years now, and to me it is very much like a comfortable old shoe. It has far more power and generalization than being a computer algebra system would suggest, and a sampling of that power is discussed in the opening chapters of this book.

I believe that this book would be a useful addition to any student’s library in a college or university that uses

*Mathematica*.

Marvin Schaefer is retired after a career of applying formal logic and semi-automated theorem proving to security properties and abstract models of computer operating systems and database management systems. While most of his work was conducting research in the private sector, he also served as?? Chief Scientist at the National Computer Security Center at the National Security Agency. He has been a member of the MAA since 1962.