# Introduction

In the build phase, you create quantum programs that represent the problem you are solving. The foundation of quantum programs are quantum circuits, which consist of operations - including gates, measurement, and reset - that manipulate qubits in the quantum computer. Depending on your needs, you can use Qiskit or OpenQASM to create your circuits.

All tasks require building one or more quantum circuits. Some tasks additionally require constructing quantum operators to define properties of quantum states that you want to estimate or measure.

Qiskit enables working with circuits (and, to some extent, operators) at various abstraction levels: abstract, virtual, physical, scheduled, and pulse programs. At the most abstract level is a task-oriented lens in the circuit library. You can also express operations in abstract mathematical terms using operators, isometries, and classical/Boolean functions. For virtual circuits, mathematical abstractions take on a concrete representation in terms of a concrete gate set. At the physical level, those instructions are mapped to specific physical qubits, and instructions are re-written to reflect the connectivity and native gate set of a target hardware platform. Scheduled circuits introduce timing information, and pulse programs represent signals on channels.

Qiskit and OpenQASM further support the notion of extended circuits, which expand the set of allowed operations to include real-time computations on classical values. Qiskit's tooling for working with this richer family of circuits is found in the section on Classical feedforward and control flow.