Book report, part 1: Introduction to Programming with Fortran
Summary:
Despite an odd starting point and some use of concepts in examples before they're formally introduced, the material is clearly laid out with many examples, with code and example files available online. Several major strengths and features of the language are covered, as well as several more recent additions, like support for parallel computing, that look like they will be expanded on later in the book.
Pros:
The topics are discussed in pretty good depth, and the sheer number of code examples is very useful to seeing how these concepts get implemented (and is no small part of why the book is as long as it is). I feel like each subject might be missing some of the more obscure use cases, but I feel like most constructs I would encounter in real life I could find some guidance for in this book. For instance, in the file I/O chapter, the concept of "internal files" is discussed. These would be strings that can be treated as parsable input files, hence "internal" to the program. This might exceed the idea of this book as an introductory text, but it's still appreciated.
I also appreciated having all the code examples and the text files available online for download. This is especially the case with some of the larger text files used in the data I/O examples. Personally I like typing in the examples to gain that experience, but it's a good check as well.
Each chapter also includes a set of problems to work through should the reader want to do so. I have skipped them in favor of working through the code examples, but I could see them being useful, especially for those new to computational thinking.
Cons:
For people really using Fortran as a way to learn programming, starting off with a discussion of numerical precision is an odd choice. It's definitely an important topic, especially in a language used for scientific and numerical computing, but it might make more sense to the novice if introduced after a more thorough discussion of data types. The way some concepts are brought up can also be confusing. For instance, there are two different introductions of the "do" loop (the "for" loop in other languages) due to the topic progressions and the necessities of the code examples. The if statement is also used in examples, without much explanation, way before the formal discussion of this structure.
The code examples can be found online, but it does require some digging. I also couldn't find any errata on the site for the different editions, so there have been a few times I'm not sure if something was written as intended or in error and I had no way to check other than trying to email the consulting firm hosting the book's information.
The biggest stumbling block I would see for true novices is that, while compilers are discussed in a fair amount of detail, there's no explanation of how to use them to translate the source code into an executable. Personally, I've been using the Photran IDE (an Eclipse project), but even that required some compiler installation. Some additional material on this would make this book a lot more helpful for people really new to programming I feel.