I have been programming in Fortran for more than 25 years, first in FORTRAN IV and somewhat later in FORTRAN 77. In the last decade of the 20th century, I attended, together with a number of colleagues, a course on Fortran 90, given by the late Jan vanOosterwijk at the Technical University ofDelft. It was also around this time that I came to know the comp.lang.fortran newsgroup, and I have learned a lot by participating in that friendly community.
In a way, I am a typical Fortran programmer. My background is physics and I learned the task of programming partly during my study, but mostly on the job. In other ways, I am not because I took a fancy to the more esoteric possibilities of programming in general and sought means to apply them in Fortran. I also began writing articles for the ACMFortran Forum. These articles are the groundwork for this book.
This book will not teach you how to program in Fortran. There are plenty of books dedicated to that ([22], [65]). Instead, the purpose of this book is to show how modern Fortran can be used for modern programming problems, such as how techniques made popular in the world of object-oriented languages like C++ and Java fit neatly into Fortran as it exists today. It even shows some techniques for solving certain programming problems that are not easily achieved in these languages.
If you know Fortran mainly from the days before Fortran 90, you may find the first few chapters to be a gentle introduction to array operations, overloaded operations, and other features that were introduced by that standard. You will find that Fortran has also opened the way to completely different styles of programming, normally associated with functional programming languages. Most chapters are dedicated to illustrating how all of these language features can be employed in practice.
In this book, I often refer to software I have written myself and published via the SourceForge website or to software I am involved with in some other way. This is not to promote that particular software over anything else – it is merely a consequence of knowing that software very well. I have tried to attribute all of the examples that are not my own to the people who have written them. However, as I am only human, I may have forgotten one or two names.