LibraryReference articles

Quant vs software engineer, and the quant developer in between

Reference article

A software engineer and a quant developer can write the same language on the same kind of machine. The difference is the test they must pass. A web page is correct when it does what the user asked. A price is correct when it agrees with the maths to a stated tolerance, and a program can run with no error and still be wrong by a lot. Most of the move from one job to the other is learning that second kind of test.

People who search "quant vs software engineer" are often software engineers who wonder whether their skills transfer to quantitative finance. That is work where people use maths, statistics and code to price things and manage risk in markets. A person who does that work is called a quant.

This page compares the jobs by the work itself: what each person builds, and how each one knows the work is right. It does not compare pay, and it promises no job. Job titles differ between firms, so read each job description for what that firm means by its title.

Three jobs, three kinds of output

We describe three roles. Real teams mix them, and many people do more than one.

Software engineer. Builds products and the systems behind them: web services, apps, data pipelines. The output is software that people or other programs use. It is judged on whether it meets its requirements, stays up, and can be changed safely.

Quant developer. Builds the software a trading or risk team runs on. Examples are a pricing library (code that turns a contract and market data into a price), a risk run that prices every position overnight, a tool that tests a trading rule on past prices, and the data store under all of it. The output is still software, but much of it produces numbers that people trade on.

Quant researcher or quant trader. A researcher looks for patterns in data and turns them into models. A trader decides what to buy and sell, and at what price, often with help from those models. Their main output is a decision or a model, and code is the tool. For what each of the four classic quant jobs does all day, read the four quant jobs.

In our view, the quant developer is the natural first step for a software engineer, because it keeps most of what you already do and adds the maths one piece at a time.

What "correct" means in each job

This is the biggest difference, and it shapes how you test.

In much product software, a bug is visible. A button does nothing, a page shows an error, a request times out. Tests check behaviour: given this input, the program returns that output.

In quant code, the worst bugs are silent. The program runs, returns a number, and the number is wrong. Nobody sees an error. Someone trades on it. So quant tests check a number against a second source of truth: a formula, a known identity, or a much slower method that is easier to trust.

Two things make this harder than it sounds.

Randomness. Many prices are estimated by simulation, so the output changes a little each run. A test cannot ask for an exact match. It must ask whether the gap is small compared with the estimate's own noise.

Floating point. Computers store most numbers as binary fractions. Python's floating point tutorial says almost all platforms map Python floats to IEEE 754 "double precision" values with 53 bits of precision, and that most decimal fractions, 0.1 among them, cannot be stored exactly. Small errors like this are usually harmless. They become large when you subtract two numbers that are almost equal.

A worked test: check a simulated price against a formula

Here is the kind of test a quant developer writes. We ran every number below ourselves in Python, with NumPy and a fixed random seed, on 8 November 2026.

An option is a contract that gives its holder the right, but not the duty, to buy or sell something at a fixed price on a later date. A call is the right to buy. Take a call on a stock with these inputs:

The known answer. The Black-Scholes formula gives a closed-form price for this call under its own assumptions. A closed form is an answer you can write down exactly, with no simulation. For these inputs it gives 10.4506. You can enter the same inputs in our free Black-Scholes calculator. For where the formula comes from, read Black-Scholes as a replication theorem.

The program under test. A Monte Carlo pricer simulates many possible stock prices at expiry, works out the call's payoff in each, averages the payoffs and discounts the average back to today. Its output comes with a standard error: a measure of how far the average is likely to sit from the true value, because of the randomness alone. It shrinks as one over the square root of the number of paths. The method is set out in the Monte Carlo pricing estimator and its standard error.

The test. Divide the gap between the simulated price and the formula by the standard error. That gives a z-score: the gap counted in units of noise. If the program is right, the z-score should usually lie between about minus 3 and 3.

PricerPathsPrice (standard error)z-score
Correct10,00010.345 (0.148)-0.71, pass
Correct100,00010.421 (0.047)-0.64, pass
Correct1,000,00010.453 (0.015)0.18, pass
No discount100,00010.955 (0.049)10.3, fail
Wrong drift100,00011.740 (0.050)26.0, fail

"No discount" forgot to discount the payoff. "Wrong drift" used the wrong drift in the simulated price.

Read the last two rows closely. Neither buggy version crashed. Each printed a price that looks reasonable to the eye, 10.95 and 11.74 against a true 10.45. Only the test against a known answer caught them. That habit, more than any language feature, is what we think a software engineer most needs to add.

A second check needs no formula at all. Put-call parity says a call minus a put (the right to sell) with the same strike and expiry equals the stock price minus the strike discounted to today. Here that is 100 minus 95.1229, which is 4.8771, and the Black-Scholes call and put (10.4506 and 5.5735) give the same gap. For European options (options that can only be used on the expiry date) on a stock that pays no dividend, parity holds without any model, so a pricer that breaks it has a bug. For the argument, read put-call parity, carry, and the bounds that need no model.

A worked trap: the variance that came out negative

Variance measures how spread out some numbers are. One textbook formula is the mean of the squares minus the square of the mean. It is exact on paper. In floating point it can fail.

We ran it on four numbers near one billion: one billion plus 4, 7, 13 and 16. The true variance is 22.5. The textbook formula, run in NumPy in double precision, returned minus 128. A variance can never be negative. The fix is to subtract the mean first and then square, which returned 22.5. The squares were near ten to the eighteenth power, and the 53 bits of a double cannot hold that many digits, so the subtraction cancelled the digits that mattered.

Prices, positions and sums of money near large round numbers meet this problem all the time. Our interview question the risk service that reports a negative variance walks through it.

Speed: fast to answer, or a lot of work done

Latency is how long one request takes. Throughput is how much work gets done per second or per night. A trading system that sends orders cares most about latency. An overnight risk run that prices every position under many scenarios cares most about throughput, because it must finish before the market opens.

Our C++ pages cover where speed in pricing code comes from: memory layout, allocations in a hot loop, and when C++ is worth it at all. Start with when a pricing engine belongs in C++, and when it does not and profiling before optimising.

Data work: the bugs that make results look too good

A lot of quant code is data code. Two data traps matter more here than in most product work.

Joining on time. Prices and events arrive at different moments. To ask "what was the last price before this trade?", you need an as-of join: a join that matches each row to the nearest earlier key, not to an equal key. pandas has one. Its merge_asof documentation calls it "similar to a left-join except that we match on nearest key rather than equal keys", and its default direction is backward. If a join uses data that arrived later than the moment it describes, the test sees the future. That error has a name, look-ahead bias. Read event time, arrival time, and the as-of join.

The firms that disappeared. If you test a rule only on companies that still exist today, you leave out the ones that failed. The test then looks better than reality. This is survivorship bias. Read survivorship bias and the universe that never existed.

Both bugs share a feature with the pricer bugs above: nothing crashes. A backtest, which runs a fixed rule on past prices, just reports a better result than the truth.

Moving from software engineering to quant work

This is our suggestion for an order, not a rule. Skip what you already know.

  1. Probability and statistics. Expected value, variance, the normal distribution, and how sure you can be of an estimate. Everything above leans on these.
  2. Python for numbers. If you come from another language, learn NumPy-style array code and when a plain loop is faster.
  3. Monte Carlo and its error. Simulate, then measure how wrong the simulation can be.
  4. One pricing model end to end. Black-Scholes, then put-call parity, then the Greeks: how the price moves when an input moves.
  5. Time-series data. As-of joins, adjusted prices, and point-in-time data, meaning data as it was known on each past date.
  6. C++, if your target role needs it. Learn it inside pricing code first.

For the order by role, read the quant roadmap by role. To practise interview questions, use the interview questions bank and the quant puzzles.

What Thuztra Learn covers for an engineer, and what it does not

Thuztra Learn is our product. Its coding path has six modules: Writing your first Python; Python and vectorisation; C++ where it earns its place; SQL for time series; Performance and profiling; and AI-assisted workflows, and the checks that make them safe. Its quant developer path has six more: Monte Carlo and variance reduction; PDE and finite difference methods; Transform methods; Jumps and Levy processes; Greeks and implementation; and Market data and research infrastructure. The probability and statistics come first, in the core curriculum.

It does not teach low-latency trading systems, built to send orders as fast as possible: network code, exchange connections or FPGA chips (hardware set up for one task). It does not teach general coding interview drills such as data structures. It is not a degree, and it does not place anyone in a job. Membership is a paid subscription: see what Thuztra Learn is and what it costs.

A first step this week

Write the Monte Carlo pricer above in the language you know best. Use the same five inputs. Run it with 100,000 paths and print the price, the standard error and the z-score against 10.4506.

You know it worked if the z-score is between minus 3 and 3, and if it moves outside that band when you delete the discount factor on purpose. If your price is near 10.95, you forgot to discount. If it is near 11.74, check the drift term in your simulated price.

Fine print: Python, NumPy and pandas are named here only as tools, and the Python and pandas pages are cited for what they say. They have no link to Thuztra. Education only, not advice.

In short

The code skills carry over. What you add is the maths a pricing or research program is checked against: probability, a few closed-form answers, Monte Carlo with its standard error, and the data traps that make a test on past prices look better than it was. Test every number against something you already know is true.

Terms used here

Related

The four quant jobs

Researcher, trader, developer and risk, described by what each actually does all day. One rule followed through all four desks, and the places where the four of them disagree.

The quant roadmap by role, in quantitative finance

What to learn, in order, for a quant trader, researcher, developer or analyst. One shared start, four branches, and a plain list of which steps Thuztra Learn teaches and which it does not.

When a pricing engine belongs in C++, and when it does not

The gap between Python and C++ is not one number. Measured on the same maths and the same bits, it ranges from a factor of three to a factor of nearly two hundred. What moves it.

The Monte Carlo pricing estimator and its standard error

What a simulated price actually estimates, how wide its error bar really is, and the one property of the square root rate that makes it beat quadrature in high dimensions.

Event time, arrival time, and the as-of join

A message carries at least three clocks and most stores keep one. Which timestamp answers which question, why a replay disagrees with the live run, and the join that respects both.

Survivorship bias and the universe that never existed

Today's index members run backwards through history are not a universe. The three separate deletions, the arithmetic of the overstatement, and why deflating a Sharpe does nothing.

More on these topics

Topics

Also in the library