Reading Lists for Beginning Quantitative Analysts
This post is part of a series of reading lists for beginner quantitative analysts. Other posts in the series concentrate on Derivatives Pricing, Numerical Methods and Python Programming:
- Quant Reading List - Derivative Pricing
- Quant Reading List - C++ Programming
- Quant Reading List - Numerical Methods
- Quant Reading List - Python Programming
The previous article discussed the theoretical foundations of mathematical finance. While these foundations are extremely important, a practioner quant in industry will actually be spending the majority of their time implementing models in code.
Learning how to implement models requires a deep understanding of the theory, which provides necessary mathematical tricks which can be exploited to optimise the code. In addition it is necessary to be well versed in the modern tools of software engineering, such as version control and Agile development. PhD candidates in a technical discipline have previously been highly sought after for financial engineering positions, as they already possess the ability to independently model technical phenomena. However academic environments can often downplay the importance of software engineering, which is an essential skill required for modern quant analysts.
Despite the popularity of languages such as Python, C++ is still a widely utilised programming language in financial institutions. A good understanding of the language will be a necessary prerequisite to gaining an interview as a derivatives pricing quant. In addition, an understanding of C++ will make learning other programming languages straightforward since it involves more complex concepts, such as manual memory management.
More textbooks have been listed here than in the Derivatives Pricing read list article. This is because the C++ language evolves at a faster rate than the mathematical finance theory. In addition it is generally quicker to work through a coding textbook than a corresponding mathematical text.
Introductory C++
When learning C++ from scratch the first consideration is how and where you will program your code. It will be necessary to obtain an Integrated Development Environment (IDE) to enter your syntax and run your programs. Depending upon your operating system choice you may wish to download a tool such as Microsoft's VSCode or use the gcc compiler that is part of most Linux distributions. In particular if you use Ubuntu Linux you will need to run sudo apt-get install build-essential
in order to obtain the tools. Within a Linux development environment text editing tools such as Vim and Emacs are popular. Another alternative is SublimeText, which also has a significant following.
There are many beginner textbooks on learning C++ with no prior experience. Two boosk commonly recommended to those with no prior programming experience are Sams Teach Yourself C++ in One Hour a Day, 8th Edition by Siddhartha Rao and the (slightly older) Sams Teach Yourself C++ in 24 Hours, 6th Edition by Rogers Cadenhead and Jesse Liberty. These books will give you a good foundation in the C++ language and its syntax. They will teach you all of the basics of programming, including functions, program flow, memory management and object-orientation. They even touch on the Standard Template Library (STL). The books also cover the modern C++14 and C++17 standards.
Scott Meyers has a well deserved reputation as a C++ expert and his multiple 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 understood the concepts discussed in his 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. It was written in 2005, so is somewhat dated compared to more modern texts, but it still remains an indispensible book for any C++ programmers bookshelf.
Meyers also has a more modern version of the above book titled Effective Modern C++: 42 Specific Ways to Improve Your Use of C++11 and C++14, which covers topics such as the auto
keyword, smart pointers, move semantics, concurrency and lambda functions.
Herb Sutter's Exceptional C++: 47 Engineering Puzzles, Programming Problems, and Solutions is also a noteworthy read, concentrating on exception safety and object orientation in the format of programming 'puzzles'.
Design Patterns and the STL
Learning C++ to the level of Meyers will be sufficient for desk quant derivatives pricing 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. Many large high performance quant codebases make use of some of these patterns so it is essential to be aware of them.
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, despite its age is still worth picking up.
Suggested Reading Chronology
- Sams Teach Yourself C++ in One Hour a Day (8th Edition) - Siddhartha Rao
- Effective C++: 55 Specific Ways to Improve Your Programs and Designs - Scott Meyers
- Effective Modern C++: 42 Specific Ways to Improve Your Use of C++11 and C++14 - Scott Meyers
- The C++ Standard Library: A Tutorial and Reference (2nd Edition) - Nicolai Josuttis
- Design Patterns: Elements of Reusable Object-Oriented Software - Erich Gamma et al
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.