to the C++ edition
This book has been out ``in the wild'' for more than two years. Since then, its pdf version has been downloaded 2-5000 times/month from the main server and has a few thousand hits from sites that offer science e-books for free. I have also received positive feedback from students and colleagues from all over the world and that gave me the encouragement to devote some time to create a C++ version of the book. As far as scientific programming is concerned, the material has not changed much, apart from some typo and error corrections. The only new features that I can highlight are the discussion on how to link a C++ program to high quality numerical code in Fortran (like Lapack and Rksuite) and the introduction of the highly promising MIXMAX random number generator of Konstantin Savvidy in the Monte Carlo simulations.
I have to make it clear that by using this book you will not learn much on the advanced features of C++. Scientific computing is usually simple at its core and, since it must be made efficient and accurate, it needs to go down to the lowest levels of programming. This also partly the reason for why I chose to use Fortran for the core programming in the first edition of the book: It is a language designed for numerical and high performance computing in mind. It is simple and a scientist or engineer can go directly into programming her code. C++ is not designed for scientific applications (object oriented languages' aim is to improve modularity, maintenability and flexibility of programs) in mind and this reflects on some trivial omissions in its standard. Still, many scientific groups are now using C++ for programming and the C++ compilers have improved quite a lot. There is still an advantage in performance using a Fortran compiler on a supercomputer, but this is not going to last for much longer.
Still, for a scientist, the programming language is a tool to solve her scientific problems. One should not bind herself to a specific language. The treasures of today are the garbage of tomorrow, and the time scale for this happening is small in today's computing environments. What has really lasting value is the ability to solve problems using a computer and this is what needs to be emphasized. Consistent with this idea is that, in the course of reading this book, you will also learn how to make your C++ code interact with code written in Fortran, like in the case of the popular library Lapack. This will improve your "multilingual skills" and flexibility with interacting with legacy code.
The good news for us scientists is that numerical code usually needs simple data structures and programming is similar in any language. It was simple for me to "translate" my book from Fortran to C++. Unfortunately I will not touch on all this great stuff in true object oriented programming but you may be happy to know that you will most likely not need it (a lot of C++ code out there is realizing procedural and not true object oriented programming).
So, I hope that you will enjoy using my book and I remind you that I love fan mail and I appreciate comments/corrections/suggestions sent to me. Now, if you want to learn about the structure and educational procedure in this book, read the foreword to the first edition, otherwise skip to the real fun of solving scientific problems numerically.