On 14 January 2025, Paul Alexander Bilokon interviewed Daniel J. Duffy, the founder and owner of Datasim Education BV (founded 1989), which was one of the first pioneering companies to promote C++, object-oriented programming, system design and training in a range of industries such as telecommunications, Computer-Aided Design (CAD), holography (optical technology), process control, manufacturing systems and computational finance. In particular, these applications were designed using a combination of domain architectures and the famous design patterns that became popular in the 1990s. Daniel Duffy is an internationally known author, trainer and numerical analyst. He has written more than ten books on programming, mathematics and computational finance. He has a PhD in mathematics (PDE/FDM) from the University of Dublin (Trinity College). He is also the originator of two major and market leader C++ courses in cooperation with Baruch College, NYC (ranked #1 MFE school in 2023) and Quantnet Inc. (www.quantnet.com). These courses are taken by many professionals and MSc/MFE students in forty countries and on five continents as evidenced by the student testimonials.
The above photo was taken at the Back to the Future C++ 1990: The First International C++ Course in Amsterdam, Netherlands, organized by Datasim Education BV. The photo shows delegates from Ireland, the Netherlands, Switzerland and UK. Daniel J. Duffy: front row, first from left.
PB You became part of the derivatives pricing industry when it was at its inception. Could you describe how it was different then, compared to now? (When exactly was that?)
DD I had my first encounters with first-generation derivatives pricing in 1992.
PB What hardware and what programming languages were used at the time? I take it C++ wasn’t one of them?
DD Background: before embarking on C++ in 1990, I had already worked for ten years on large engineering projects in oil and gas, CAD/CAM and FEM heat radiation modelling on expensive mainframes, minicomputers and workstation networks using languages such as Fortran, Pascal, SQL and 3GL. The late 80s saw the emergence of cheaper personal computers, leading to many companies making the move to the development of in-house software products. We saw the growing interest in C++ due its affordability and its claim to be a “better C.”
PB When did people in quantitative finance become aware of C++? What was your role in making C++ popular among quants?
DD C++ started to become popular in finance at the end of the 1990s as far as I know from my limited exposure to the industry at that time. The major banks most probably had their own C++ pricing libraries up and running at that stage. An interesting remark is that many of the C++ programmers at the time were ex-rocket science astrophysicists with hands-on experience of certain numerical methods (for example, Crank Nicolson, Alternating Direction Implicit (ADI) and Monte Carlo methods). A number of other object-oriented languages emerged in this period; many never became mainstream for various reasons with the exception of Java and several years later, C#. Around 2003 I started giving C++ and PDE/FDM courses to quants in the well-known financial centres. At the time there were a handful of books and trainers who focused on C++ for finance.
In a sense, I was probably most vocal in promoting the technology.
PB Can you mention some of the projects, utilising C++, that you worked on within quantitative finance?
DD I have been working with C++ and more generally with object oriented technology (OOT) since 1990 (I was one of first C++ developers in the Netherlands) on a range of applications in various domains. In the context of C++ for quantitative finance, my first project was in 1992 working on a first-generation (bleeding edge) C++ library at a large Dutch bank for equity option pricing and risk management. The hardware environment was Ultrix and C++ IDE was command line. Templates were not supported and the creator developed his own variant! Several Gang-of-Four design patterns were used, in particular Observer in combination with five-deep multiple inheritance class hierarchies. In general, knowledge of best design practices was in shortage, exacerbated by the fact that C++ was still not a fully-fledged programming language.
In the period 1992-2000 our company Datasim focused on a range of activities related to object-oriented technology (OOA, OOD, design patterns, C++, Java, Visual Basic and later, C#). Datasim was one of the first pioneering companies to promote C++, object-oriented programming, system design and training in a range of industries such as telecommunications, Computer-Aided Design (CAD), holography (optical technology), process control, manufacturing systems and computational finance. In particular, these applications were designed using a combination of Duffy’s domain architectures (Duffy (2004, 2018, 2025)) and the famous design patterns that became popular in the 1990s. It is in this period that we gained hands-on experience of OOT.
The term “quantitative finance” is relatively new it would seem. By the end of the 1990s it started to take form based on anecdotal evidence. Gradually C++ began to be taken seriously and more advanced mathematics began to be used to price derivatives products. Around 1999 I attended the first mathematical conference on derivatives pricing in Manhattan, NYC. What came as a surprise to me was that many of the golden oldie numerical methods used there were known to me from my undergraduate days, as I had previously studied them and their improved versions in my three degrees on pure, applied and numerical mathematics. Amazingly, my PhD topic entailed the numerical solution of convection-diffusion PDE applied to problems in fluid dynamics and heat transfer which turned out to subsume the Black Scholes equation as a special case.
An introduction to Black Scholes PDE and variations is given here, here, and here.
I would say that C++ for quantitative finance took off sometime between 2000 and 2005. My role in this journey consisted of:
- Setting up a range of C++ courses for novice and experienced quants in major financial centres and in-house;
- Setting up online certified C++ courses for MFE/MSc students all over the world (more details on Baruch/Quantnet below);
- 12 books on computational finance, C++, Boost libraries (two with Jörg Kienitz (C++ Monte Carlo) and Andrea Germani (C# Fixed Income);
- External MSC/MFE supervisor for 40-50 students University of Birmingham 2014-2021 computational finance (PDE, Monte Carlo and C++);
- Online pure, applied and numerical maths courses.
Finally, A short history of computational finance 1990-2020, a Partial Differential (PDE/FDM) Approach is given here:
I am the originator of two major and market leader C++ courses in cooperation with Baruch College, NYC (ranked #1 MFE school in 2023) and Quantnet Inc. (www.quantnet.com): https://quantnet.com/cpp and https://quantnet.com/advancedcpp.
These courses are taken by many professionals and MSc/MFE students in forty countries and on five continents. Student testimonials: https://quantnet.com/threads/c-online-programming-cert-testimonials.9227
PB What is the future of C++, including risks and opportunities in your opinion?
DD Opportunities, Challenges and Lessons (not always) learned
- Blind faith in inheritance was the beginning of the end for some.
- The generally accepted misconception “Objects model the real world and they are easy to find”.
- Too much focus on syntax (20/80 rule) to the detriment of domain classes.
- There is more to life than objects. There is decomposition (divide and conquer).
- Avoid Great Balls of Mud:
“A Big Ball of Mud is a haphazardly structured, sprawling, sloppy, duct-tape-and-baling-wire, spaghetti-code jungle. These systems show unmistakable signs of unregulated growth, and repeated, expedient repair. Information is shared promiscuously among distant elements of the system, often to the point where nearly all the important information becomes global or duplicated. The overall structure of the system may never have been well defined. If it was, it may have eroded beyond recognition. Programmers with a shred of architectural sensibility shun these quagmires. Only those who are unconcerned about architecture, and, perhaps, are comfortable with the inertia of the day-to-day chore of patching the holes in these failing dikes, are content to work on such systems.“
PB What is the best way to learn C++ in your opinion?
DD Some Recommendations:
- Read some topics on concepts in Cognitive Psychology. Understand that objects are not as easy as you think.
- Structured analysis and modular design.
- Best way to learn is to focus on concrete, domain-specific examples.
- Learn one or two languages besides C++, for example Haskell, C#, Python.
- Object-oriented design, design patterns and UML class diagrams.
- Learn the syntax and philosophy of C before jumping into C++.