This series addresses issues specific to domain of financial derivative valuation and risk measurement. However, before leaping into the domain itself, I'd like to cover some considerations of tools, process and architecture which are more general, applying to software systems in this and other domains.
The overwhelming winner in this category is object-oriented programming, which has enjoyed ubiquitous success for solving software engineering problems for the last thirty years and continues to do so. It has an undeserved reputation of being complex and hard to understand. An object is simply an organized unit of data in a program that represents something in real life as closely as possible. For example, a circle object in a geometry program might have the capability to calculate and report its area, radius, diameter and circumference. It is the ability to define new types, or classes of object, so as to represent closely real-life phenomena, that gives object-oriented programming much of its power.
It is when constructs in a program mirror the essential aspects of the problem at hand, that the program solves it most effectively. In coming posts I will define crucial concepts (or abstractions) such as Product, Index and Model for the domain of derivatives valuation. In an object-oriented program, each concept can be represented in code as a class of object, able to perform relevant operations and interact with other objects in the same way that those concepts relate to each other in the real world.
A practical concern is the choice of computer language for the implementation of a system. A vast array of languages support object-oriented programming. In any numerical computation one of the primary requirements of an implementation language is high performance; the ability to construct a system which is able to make the most of the available hardware resources. The C++ language satisfies this requirement and has been the de facto standard for production systems in quantitative finance for many years. So much so, that while high performance is the fundamental requirement, the use of C++ itself has become a proxy for that requirement in much of the financial domain. Note that I'm talking here about core analytics libraries, not the wider systems in which they are embedded.
Modern C++ is a formidable tool that puts great power in the hands of software developers and can yield efficient and elegant solutions to programming problems. However, there are a number of pragmatic issues which must be addressed, some specific to systems implemented in C++, others more general. I'll address them, issue-by-issue, in coming posts, before moving onto the problem domain itself.