Learning how to implement financial models 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 prerequisite 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 the author prefers Emacs, but vi or Eclipse are equally appropriate.
There are many beginner guides to learning C++. The author has experience with Jesse Liberty’s Teach Yourself C++ in One Hour a Day 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. The author has personally found Solter and Kleper’s Professional C++ Programming (Programmer to Programmer) 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++ 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 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 the Use of the Standard Template Library – which is worth picking up.
Summary and Suggested Reading Chronology
- Teach Yourself C++ in One Hour a Day – Liberty, et al.
- Professional C++ Programming (Programmer to Programmer) – 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 – 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.