This post is part 2 of a series of Reading Lists for Beginner Quants. Other posts in the series concentrate on Derivative Pricing, Numerical Methods and Python Programming:
The previous article discussed the theoretical foundations of mathematical finance. As Mark Joshi points out in his careers guide (PDF), a quant will be spending at least half of the time implementing models.
Learning how to implement is a three-stage process. The first stage requires a deep understanding of the theory, which provides necessary mathematical tricks which can be exploited to optimise the code. The second stage involves understanding the computational language of the implementation and how to apply it in a software engineering setting. Finally, the third aspect is the marriage of the two first stages. This is why PhD candidates in a technical discipline are highly sought for financial engineering, as they already possess the ability to independently model technical phenomena.
In the modern financial world C++ is by far the most prevalent programming language. A good understanding of the language will be a necessary prerequesite to gaining an interview. It is far easier to work through programming textbooks than mathematical texts, hence there are more listed here than in the theoretical foundations article. Since the aforementioned first stage of "implementation" has been discussed in the previous article, the second stage will be considered here, in particular the C++ language.
The first consideration is where you will program your code. You will need to obtain an Integrated Development Environment (IDE) which is where you will enter your syntax and run your programs. Depending upon your operating system choice, you may wish to download the free version of Microsoft's Visual Studio C++ or use the gcc compiler that is part of most Linux distributions. In particular if you use Ubuntu Linux you will need to run "apt-get install build-essential" in order to obtain the tools. As for a Linux development environment I prefer Emacs, but vi or Eclipse are equally appropriate.
There are many beginner guides to learning C++. I have experience with Jesse Liberty's Sams Teach Yourself C++ in One Hour a Day (7th Edition) which is now in its 6th Edition. This book will give you a good foundation in the C++ language and syntax. It will teach you all of the basics of programming, including functions, program flow, memory management and object-orientation. It even touches on the Standard Template Library (STL). It is highly recommended.
The next stage in learning how to be a good C++ programmer is to consider style, software design principles, gain a deeper level of object orientation and generic programming. I personally found Solter and Kleper's Professional C++ to be highly useful in this regard. It has good chapters on memory management, style and C++ quirks. It is a little out of date regarding software design principles, but the remainder of the book is sound.
Scott Meyers has a well deserved reputation as a C++ expert and his two books on how to improve C++ coding will be useful even to seasoned developers. Most expert C++ developers will not even consider hiring you unless you have read these two books. The first book, Effective C++: 55 Specific Ways to Improve Your Programs and Designs is in its 3rd Edition and concentrates on memory management and object orientation. The second book More Effective C++: 35 New Ways to Improve Your Programs and Designs, spends more time on exception handling and efficiency. Herb Sutter's Exceptional C++: 47 Engineering Puzzles, Programming Problems, and Solutions is also a noteworthy read, concentrating on exception safety and object orientation.
Learning C++ to the level of Meyers will be sufficient for desk quant job interviews. However, if mastery of C++ is your goal then learning about Design Patterns and the STL are the next logical steps. The "Gang Of Four" book Design Patterns: Elements of Reusable Object-Oriented Software is the standard text on Design Patterns. Josuttis' text on the STL, The C++ Standard Library: A Tutorial and Reference (2nd Edition) is highly recommended but is quite a heavy read. It is only worth looking into once you are very comfortable with C++ syntax and idioms. Meyers also has a book on best practices for STL use - Effective STL: 50 Specific Ways to Improve Your Use of the Standard Template Library - which is worth picking up.
Summary and Suggested Reading Chronology
- Sams Teach Yourself C++ in One Hour a Day (7th Edition) - Liberty, et al.
- Professional C++ - Solter, Kleper
- Effective C++: 55 Specific Ways to Improve Your Programs and Designs - Meyers
- More Effective C++: 35 New Ways to Improve Your Programs and Designs - Meyers
- The C++ Standard Library: A Tutorial and Reference (2nd Edition) - Josuttis
In the next article, texts on numerical methods will be considered which will give you the knowledge you need to finally implement the models and obtain useful results.
QuantStart also provides a C++ bookshop, which has many more C++ books than listed here, as well as more articles on C++: