---
title: "Why use a new quantum programming language, QUA, and how do I use it?"
date: "2021-05-04T08:00:24+00:00"
modified: "2025-12-18T16:45:47+00:00"
url: "https://www.quantum-machines.co/faq/why-use-a-new-quantum-programming-language-qua-and-how-do-i-use-it/"
description: "Discover why QUA is Quantum Machines’ quantum programming language: ease hardware control, real-time orchestration, and scalable workflow scripting."
---

# Why use a new quantum programming language, QUA, and how do I use it?

Well, there’s the long and the short of it. So let’s start with the short:

**Why:** Because we’ve built it to operate as quickly, efficiently, and easily with the Pulse Processor, giving you an adaptive, intuitive, and fully controllable way to probe your qubits.

**How**: Surprisingly easily!

Now, let’s get into the heart of the matter:

As physicists, we understand the pain of having to learn *yet another* programming language, but writing FPGA and low-level code every time you want to run a Ramsey measurement? That’s a worse kind of pain. How many lines of code do you need to painstakingly write in order to run the experiments of your dreams? Probably more than you care to admit. This is where QUA comes in. QUA is a pulse-level quantum coding language that allows quantum researchers to run any experiment, on any type of qubits, quickly and easily. That Ramsey pulse, for instance, can be written, sent, and measured in just 10 lines of QUA code. But more on that in a minute.

When designing QUA, we set out to find the easiest way to program our pulses and send them to the qubit. We wanted to create a direct line of communication with our FPGA-based Pulse Processor in the [OPX+](https://www.quantum-machines.co/products/opx/), allowing us to have complete control of everything we might want. This quantum language was built *by* quantum physicists *for* quantum physicists, all with the purpose of making your quantum experiments as seamless as can be.

You write QUA the way you would explain it to other physicists in your group. You play this pulse to *that* element, listen on *this* measurement channel, demodulate *that* result.

As for how the language actually works, there are three main steps: *define* a pulse sequence, *play* that pulse sequence, and *measure the readout* of that pulse sequence.

The piece-de-resistance is that the compiler does all of the hard work: translating the pulses to FPGA commands. In other words, you need to program only on the high-level pulse programming language QUA, which is translated into the low-level FPGA. Programming in such a way is very useful; imagine you want to generate parametric Gaussian wavefunctions. With an AWG, you would need to upload a bunch of Gaussian profiles and figure out the timing in between. With QUA, you can set a for loop, which loops over various Gaussian amplitudes, sequentially. Turning your experiment into instructions that the FPGA can understand and run is already taken care of.

Feel free to check out this blog post with [more info on QUA and the OPX+](https://www.quantum-machines.co/blog/keep-your-finger-on-the-pulse-with-qua-a-pulse-level-quantum-programming-language/). And here is a [quick guide covering the essentials of QUA](https://www.quantum-machines.co/a-novice-quantum-programmers-guide-to-qua/).
Do feel free to reach out to us if you would like any more insight or information on how we can help you perform your experiments.
