Why get into the trading industry?
From a technical perspective, there are challenging problems to solve day-to-day which demand a fast paced rapid development cycle (diagnose a production bug in real time, devise a fix and implement, test and release within hours). A technology stack that measures latencies in nanoseconds and more importantly, an on-going battle with other competing firms to make markets as efficient as possible, which could be challenging and rewarding (in remuneration).
What developer roles are there?
These are just some high level examples:
- Market Connectivity Developer- connecting the trading system to various stock/derivative markets
- Trading Algorithm Developer - develop algorithms which run in real-time that would send orders to the markets to make profitable trades
- Quantitative Research Developer - working on statistical analysis to devise profitable trading strategies
What programming skills are required?
These are some general areas you should have knowledge of before you attend any interviews
- C++ Programming - the core language for any low latency software development in a lot of trading companies. You should have some understanding of the feature differences amongst C++ 11/14/17/20 standards
- Python Programming - primarily used for data analysis and research purposes. This includes Shell scripting skills and it is always useful to know your Bash/Awk well so that you can manipulate log/csv files to extract details you are interested in.
- Network Programming (TCP/UDP) - Operating System and hardware specific knowledge such as memory/CPU cache management and process/thread management
What soft skills are required?
- Team-oriented mindset with great communication skills
- Fast learner who can think outside the box
- Good problem solving skills to understand your requirements and limitations in order to devise a solution that would work best
- Disciplined mindset that is testing-focused. You can’t write perfect code all the time, therefore you need to be used to writing unit tests, regression tests and other tests.
- Collaborative approach - you care about documentation and knowledge sharing so that your whole team can grow together
- Some basic understanding of stock markets is an advantage but is not always required
Different companies have different interview processes, however they usually consist of the following stages:
- Coding test
- Face-to-face technical interviews involving either a quiz of programming knowledge or a technical design session
- Behavioural interviews with managers
Preparing for Coding Test
Typically you will be required to take a coding test. On one hand it’s an opportunity to demonstrate your coding skills, unofficially it’s a quick way for companies to eliminate candidates which do not have the required coding skills. A typical coding test consists of 2 or 3 questions and you have 2-3 hours to complete.
- While we could debate all day long the difference between solving brain teasers and day-to-day work on system development, the reality is that you should always practice by completing A LOT of these coding tests before attempting to apply for any jobs
- Codility and Leetcode have a lot of online tests which you could practice with
- There are different themes of coding tests which you might want to be familiar with, a useful guide can be found here. Typically, C++ and C++14 or 17 could be used.
- Be familiar with the C++ standard libraries and use them when necessary to save you time, e.g. <algorithm>. Unlike real-world programming, you probably can’t use other libraries such as Boost, therefore it is important to be familiar with standard libraries.
- At the beginning of the coding test, you should always spend a few minutes to read through all the questions and assess which question is the easiest to start off with. Don’t spend too much time answering a single question, otherwise you might not have time for other questions.
- You can choose to do the tests in the coding test web browser or you could code in your familiar Integrated Development Environment (IDE) such as vim or Visual Studio. Completing the test outside of the browser means that the interviewers are unable to assess your real-time coding time, which may or may not impact whether you pass the test.
- Your coding test will typically be assessed by a set of testing inputs. Some questions could be performance related and if you have a solution already, you might need to consider the Big O notation of your algorithm. Typically you do not want O(n^2) performance. Again, remember that a working solution is more important than an optimised solution. Your solution will be assigned a score based on the success/failure of the testing inputs.
- Your interviewers will not just look at the code alone and therefore it is very important to write readable code with sufficient comments to explain your assumptions/thinking/rationales. Your interviewers will use your solution here to assess the quality of your coding in a real-world development environment. Good developers do not typically like to work with developers who write unreadable code.
How to prepare for Technical Interviews
Usually this stage consists of multiple interviews with different developers. It can consist of:
- Live coding test - your interviewer will ask you some questions which you may need to implement quickly on Codility or HackerRank, for example.
- Rapid fire Q&As - these could be programming/IT-specific such as C++ language based questions (e.g. templates, class inheritance), network programming or operation system knowledge.
- Whiteboard algorithm design - given a set of requirements, come up with a solution on the whiteboard. This may involve writing pseudo code or drawing data flow or architectural diagrams
Here are a few tips:
- A typical C++ question may ask what new features in C++ standards you would like to use and give a coding example on how to use it
- Make sure you can backup what you explain with examples
- Understand the questions thoroughly, always ask questions if there is anything unclear
- You can ask your interviewer if you can make assumptions - it’s okay to provide a solution for a limited set of requirements.
- You are not expected to give the perfect or most optimised answer straight away, however you are expected to explain your thinking and clearly describe your proposed solution
- Your interviewer will assess your solution and exploit any bugs or weaknesses and you will be required to consider how to fix the problems they raise and observe how well you can handle sudden problems.
- Don't forget that your interviewers are not going out of their way to fail you, it’s in their own and the company’s interest to give you sufficient opportunities to pass the interviews
- Therefore, if they are providing any hints or suggestions to improve or correct your solution, take it on board for a few moments and reassess your solution
How to prepare for Behavioural Interviews
In this stage, you would usually have interviews with developer team leads along with other managers in the business (e.g. Human Resources). Their goal is to assess whether you would be the right fit for the company. Be yourself!
- Before the interview, you should think about all the projects and work you have done in previous jobs, hackathons or hobbies, which you can use as examples for showing your success/failure in taking on challenges and how you went about solving them.
- There is no shame in discussing failures, as long as you can explain what lessons you have learned and how you have been using them since.
- There are plenty of articles posted online to help you to prepare for a behavioural interview such as this and this.
- Interviewers like to see candidates who are passionate about what they do, ideally in software development but also in your hobbies.
- This part of the interview process is a good way to assess your personality and communication skills; storytelling is a good way to differentiate, influence and connect with your interviewers. Some companies like to ask candidates to give a short presentation for these reasons
Do you have any questions?
During any interviews there is always time for candidates to ask questions. There are plenty of questions you could ask regarding the company, its processes/culture or development perspective. Things to consider: however here are some themes you could consider asking specific to trading companies:
- How much exposure does this role offer to the rest of the business? Some companies are fairly open and you can learn anything you want as long as you are not shy in asking. Other companies can be more siloed and therefore you might be restricted from interacting more widely
- How (in)flexible is the working environment and does that fit your desired work life balance.
- If you trade stocks or derivatives for your own investments, you should ascertain whether there are any rules/limitations around personal dealing.
If you think you're prepared to take on challenges in trading companies as a software developer, why don’t you take a look at Mako first? Mako is a global company which encourages developers to engage with trading teams as much as possible. Check our other pages to gain a better understanding of who we are and have a read of our CTO’s blog post about what makes Mako different.
If you have any questions regarding this process, you could drop me a message @sunwu and I’ll try my best to answer if possible.