• C++ Programming for Financial Engineering
    Highly recommended by thousands of MFE students. Covers essential C++ topics with applications to financial engineering. Learn more Join!
    Python for Finance with Intro to Data Science
    Gain practical understanding of Python to read, understand, and write professional Python code for your first day on the job. Learn more Join!
    An Intuition-Based Options Primer for FE
    Ideal for entry level positions interviews and graduate studies, specializing in options trading arbitrage and options valuation models. Learn more Join!

What chances nowadays to get into Quant Developer roles with a PhD in Computational Mech. Eng.

@KillingField :
this last week I've started to notice a surge in Quant job ads over internet. Has the hiring season begun? How long will it last?
A recruiter would be a better point of reference here, but hiring season for interns is usually towards the end of the year. Experienced positions usually start heating up before bonus payouts and are probably at their peak around this time of year I think. This year is special, though, due to Corona virus with a lot of staff working from home etc.
 
On a renown jobsite, there are 12 internships, 313 entry level positions, 352 associate level available out of 906 results for a "quant phd" search worldwide.
When I checked last time last month there were much much fewer than that.
I should look this up every week and observe the ebb and flow.
 
..so in these past months I have had the opportunity to realise that the paramount skill to have in order to pass quant developer (no ML) interviews, is a thorough knowledge of classic algorithms theory. Second place comes data structures, and how to implement them in your language of choice (Python or C++).
Quantitative finance concepts needed are the very basics, and what is necessary to go through C++ finance books like Joshi's or Duffy's. For interview purposes however, these books are useful to the extent that they expose you to the kind of data structures and programming style you will be expected to know when interviewed.

Going back to our past discussions on here, about raw pointers in C++98/11, that's the subject of chapter 3 of Scott Meyers' Effective C++, the first book. It's all explained in that chapter basically, the one on RAII resource managers (smart pointers, and custom types for resources that are not pointers).
The book has a lot of interesting tips and insights, however I have found it somewhat tough to digest, if while coding one has never encountered the difficulties that the book tries to address. I am guessing a lot of it bols down to knowledge of software design patterns and how and to which situation apply them.
I have noticed many of the changes introduced with the new C++11/14 standard were already available to users, by way of the TR1 library.
At this point, as I understand it, the main novelties introduced by the new standard can be boiled down to 4: the 'auto' types can be used when object is initialised, the 'move' mechanics (remind of auto_ptr behaviour?), lambda expressions to use as function objects in lists of parameters of <algorithm>s, and classes helping manage concurrency (that I cannot really take advantage of atm).
I also have the 'Effective Modern C++' book on C++11/14 by the same author, which I guess will present the best 'design patterns', and in what specific situations it is useful to take advantage of these improvements in the language.

As weird as it could have sounded to me a few months ago, it would probably be more useful to learn some rudiments of Python by completing online courses such as 'Python for data science' and the likes, than to go through Joshi's 'Concepts and Practice...' book.
 
Last edited:
I also have the 'Effective Modern C++' book on C++11/14 by the same author, which I guess will present the best 'design patterns', and in what specific situations it is useful to take advantage of these improvements in the language.

What's your definition of a design pattern? Meyer's approach is certainly not design patterns in the precise sense. C++ by definition is not design but it could have design patterns hiding inside code.

This is the way the students here learn _modern_ design patterns in C++

We discuss the popular design and system patterns that are based on the object-orient model. We concentrate on approximately 20% of the patterns that account for 80% of the effectiveness in software development. We also show how to create next-generation patterns using the multiparadigm programming models that C++11 supports. Class and Component diagrams in UML, Whole-Part pattern, Object-Oriented Metrics,creational patterns, structural patterns, behavioral Patterns, next Generation Design Patterns, examples and applications.

Any other approaches are basically outdated; they are stranded in traditional OOP mindset. Yeah, but what do I know.
I'm the only one doing it; some have passed, sadly (Marc Joshi), others have given up (Meyers), etc.
Feels like Last of The Mohicans ....
 
Last edited:
I also have the 'Effective Modern C++' book on C++11/14 by the same author, which I guess will present the best 'design patterns', and in what specific situations it is useful to take advantage of these improvements in the language.

What's your definition of a design pattern? Meyer's approach is certainly not design patterns in the precise sense.

Both his tips, and design patterns strive to generate the best (correct, readable, efficient, portable) code-style depending on the situation, i.e. what you are trying to model with your code.
Basically they stem from the same principles, but while design patterns are blueprints, Meyers' "Items" are sort of tips on how to implement them correctly. I can see an implicit, conceptual link between the two.
Many times, in the 'Effective c++' book, Meyers refers to factory functions or singletons, for instance.
 
Last edited:
Factories and other patterns are directly supported in Boost.
I've stopped using Singleton pattern 20 years ago. Factory Method pattern is OK but limited to toy examples.

I can see an implicit, conceptual link between the two.
The Gang of Four 1994 book tells the precise mapping, as does Baruch C++. Saves guesswork.
 
Here's a thought: Compare how (the process) mechanical engineers design and manufacture physical products with how software products are made. create. Big difference.
For one, lack of design blueprints.

If you build a house, do you first buy a bag of bricks?
 
It's the analogy is the point. What I am saying if you software like CAD/CAM then many software ills will be avoided. The penny hasn't dropped.
 
[...]
I'm the only one doing it; some have passed, sadly (Marc Joshi), others have given up (Meyers), etc.
Feels like Last of The Mohicans ....

How come Meyers has given up? On what? Leaving the OOP paradigm for functional or general programming?
He reports that C++ is multiparadigm in his books and speeches, he's well aware of that
 
How come Meyers has given up? On what? Leaving the OOP paradigm for functional or general programming?
He reports that C++ is multiparadigm in his books and speeches, he's well aware of that
C++
From Meyers' Wiki entry

"I hate anything that asks me to design on the spot. That's asking to demonstrate a skill rarely required on the job in a high-stress environment, where it is difficult for a candidate to accurately prove their abilities. I think it's fundamentally an unfair thing to request of a candidate."
In December 2015, Meyers announced his retirement from the world of C++.

Most of the QN/Baruch C++ alumni can design on the spot. Practice, practice, practice. The devil is in the detail.
 
@KillingField :
I am finding out that trying to get an internship after having already finished the PhD is hard, probably impossible. Not being a student anymore is enough of a reason to take you out and slim down the pool of candidates. I don't think there is any hope trying to enter just by applying on their website, without having connections of some kind.
I have even taken time to do their gamified personality test, turns out I am both a Risk Taker and also a Thoughtful Planner, at the same time.

So I am scouring for entry positions, just found this one:
We are looking for a new member to join a core Quant team focusing specifically on high performance computing.

Responsibilities:
  • Developing in a C++/CUDA/Python software library that prices derivatives and calculates risks;
  • Focus is on efficient algorithms, vectorization and parallelization, compilers, architecture of cross-asset pricing engines, core library frameworks and continuous integration infrastructure;
  • Optimization of the code for specific hardware, from today’s production staples to future disruptive innovations;
  • Support of end users of the library and communicating with desk-aligned quant teams and technology groups.
Essential skills and qualifications:
  • A postgraduate degree (preferably PhD), or equivalent, in a quantitative field, e.g. computer science, mathematics, engineering, physics, or finance;
  • Excellent software and algorithm design and development skills, particularly in C++
  • Outstanding problem solving skills;
  • Basic understanding of numerical methods, probability and foundations of quantitative finance to ensure that detailed model knowledge can be picked up if required.
Preferred qualifications:
  • Experience in parallel programming, e.g. TBB, OpenMP, CUDA or OpenCL;
  • Python, Java, Perl and web programming skills;
  • Previous work experience as a software developer or a quant.
It looks like a classic quantitative developer, derivatives pricing position. There is an emphasis on high speed computing and parallel programming.
Boxes I tick: I have the advanced STEM degree, but not in computer science; my C++ knowledge is now on the level of knowing best practices from Meyers' book. For instance, I am starting to get an intuition for exception safety, and off C++11/20 I mainly appreciate range loops and lambda functions, and I avoid pointers like the plague. With algorithms I am fine, but I lack practice and knowledge of software design to the point of being confident about it in interviews. The mathematics they list should be my strong point.
I have also dabbled a bit with OpenMP on Fortran08 (which is a modern language, with something called co-arrays that are a natural in multithread settings) during my PhD, seen some code and know what it is about (happy they don't use MPI). But I am far from being experienced with parallel programming, and not conversant in CUDA, or in the rest of the parallel protocols other than openMP they list. No scripting language apart from Matlab, and absence of relevant previous professional experience round up my skills in the Preferred qualifications list.

What do you think about the role and my chances? Entry level enough? Should I keep bothering with this?
 
@KillingField :
I am finding out that trying to get an internship after having already finished the PhD is hard, probably impossible. Not being a student anymore is enough of a reason to take you out and slim down the pool of candidates. I don't think there is any hope trying to enter just by applying on their website, without having connections of some kind.
I have even taken time to do their gamified personality test, turns out I am both a Risk Taker and also a Thoughtful Planner, at the same time.

If you can find a permanent position without having to intern first, great, but having seen this many times, a fresh PhD is most often (not always) in the intern pool, and I don't think you'd get cut for not still being a student, especially in a year like 2020. If you've found yourself rejected without getting interviews, I would guess that the lack of mathematics "of the purer kind" in your background or previous interest in finance may be a turn off for some, but it's also been a strange year in general. Also note that internship hiring is not probably in full swing yet for this year (for spring/summer 2021 start).

It looks like a classic quantitative developer, derivatives pricing position. There is an emphasis on high speed computing and parallel programming.
Boxes I tick: I have the advanced STEM degree, but not in computer science; my C++ knowledge is now on the level of knowing best practices from Meyers' book. For instance, I am starting to get an intuition for exception safety, and off C++11/20 I mainly appreciate range loops and lambda functions, and I avoid pointers like the plague. With algorithms I am fine, but I lack practice and knowledge of software design to the point of being confident about it in interviews. The mathematics they list should be my strong point.
I have also dabbled a bit with OpenMP on Fortran08 (which is a modern language, with something called co-arrays that are a natural in multithread settings) during my PhD, seen some code and know what it is about (happy they don't use MPI). But I am far from being experienced with parallel programming, and not conversant in CUDA, or in the rest of the parallel protocols other than openMP they list. No scripting language apart from Matlab, and absence of relevant previous professional experience round up my skills in the Preferred qualifications list.

What do you think about the role and my chances? Entry level enough? Should I keep bothering with this?
I'd say it's not the classical derivatives pricing position per se, as the term "core" usually means that your clients are other quants, not the trading desk itself. But yes, as you said, a classical quantitative developer position (with a higher bar than the typical LinkedIn "quantitative developer" whose quantitative peak is linear regression on spreadsheets). It sounds like a fine way to start a quant career.

I think this is a good way for someone with your background to enter the world of finance, as you'll get to leverage and develop your coding skills and learn a bit about quantitative finance too. Your profile is probably in line with what they're looking for (though at the very end they basically say that the candidate would ideally have a bit of industry experience coding). It sounds like you've got the C++ fundamentals nailed down (detailed design questions are difficult to ask in interviews and the answers tough to rank, so I wouldn't worry too much about it - that said, anything can happen), make sure to grind a bit of leetcode or whatever and prepare for heard on the street -style questions, just so you're not rusty on the stuff. If you mention OMP on your CV, make sure you're prepared to answer questions on it. Anyway, applying doesn't hurt, so go for it.
 
OpenMP is certainly good for the concepts but is getting a bit long in the tooth (VS only supports v 2.0). C++ 11 has thread and tasks/futures. Just saying.
And a C++ developer who is afraid of pointer sounds a bit odd.

Design Patterns == GOF

 
Last edited:
...belated thanks, I have quoted you extensively in the cover letter.
No sign of life from them so far, but found out that ad has been there for several months.
I have also plastered "Probability Theory" all over my résumé, in case it was references to the wrong math that was making it opaque to these hr people.
Still, I'd be curious to know the ratio of internships available to applications received, that must be going to \( \to 0 \).
 
OpenMP is certainly good for the concepts but is getting a bit long in the tooth (VS only supports v 2.0). C++ 11 has thread and tasks/futures. Just saying.
And a C++ developer who is afraid of pointer sounds a bit odd.

Design Patterns == GOF

Very good for C++ but a bit late, Fortran got coarrays hardcoded way before.

Seen the trend one reads in those C++ do's and don't's, best holy practices, etc, is towards demonising C-style pointers (never ever use a new even with a delete, you could need a delete[] instead and that will toast your program, etc) I thought nowadays "being afraid of raw pointers" is a proper thing to say.

I'll buy your book eventually.
 
...belated thanks, I have quoted you extensively in the cover letter.
No sign of life from them so far, but found out that ad has been there for several months.
I have also plastered "Probability Theory" all over my résumé, in case it was references to the wrong math that was making it opaque to these hr people.
Still, I'd be curious to know the ratio of internships available to applications received, that must be going to \( \to 0 \).
I am still at the "your application is being reviewed" stage, 2 abundant months after having applied.
The job ad is still there, renewing every three weeks, but still identical to the first ad posted in June.
And this is as reputable an institution as it gets: I wonder what's going on in there, they don't really seem in a hurry for another core quant as they claim.
 
Back
Top