<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/"
    xmlns:atom="http://www.w3.org/2005/Atom" xmlns:media="http://search.yahoo.com/mrss/" version="2.0">
    <channel>
        
        <title>
            <![CDATA[ quantum computing - freeCodeCamp.org ]]>
        </title>
        <description>
            <![CDATA[ Browse thousands of programming tutorials written by experts. Learn Web Development, Data Science, DevOps, Security, and get developer career advice. ]]>
        </description>
        <link>https://www.freecodecamp.org/news/</link>
        <image>
            <url>https://cdn.freecodecamp.org/universal/favicons/favicon.png</url>
            <title>
                <![CDATA[ quantum computing - freeCodeCamp.org ]]>
            </title>
            <link>https://www.freecodecamp.org/news/</link>
        </image>
        <generator>Eleventy</generator>
        <lastBuildDate>Fri, 07 Aug 2026 00:35:50 +0000</lastBuildDate>
        <atom:link href="https://www.freecodecamp.org/news/tag/quantum-computing/rss.xml" rel="self" type="application/rss+xml" />
        <ttl>60</ttl>
        
            <item>
                <title>
                    <![CDATA[ Why 2D Trapped-Ion Quantum Computers Could Be Easier to Scale Than 1D Architectures
 ]]>
                </title>
                <description>
                    <![CDATA[ I still remember the first time I ran a Bell-state circuit on a quantum simulator. The code was only a few lines long, but it felt magical. Two qubits became entangled, and the simulator returned almo ]]>
                </description>
                <link>https://www.freecodecamp.org/news/why-2d-trapped-ion-quantum-computers-could-be-easier-to-scale-than-1d-architectures/</link>
                <guid isPermaLink="false">6a74fbb23d5ed45ab0356528</guid>
                
                    <category>
                        <![CDATA[ quantum computing ]]>
                    </category>
                
                    <category>
                        <![CDATA[ scaling ]]>
                    </category>
                
                    <category>
                        <![CDATA[ computer architecture ]]>
                    </category>
                
                    <category>
                        <![CDATA[ Python ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Casmir Onyekani ]]>
                </dc:creator>
                <pubDate>Thu, 06 Aug 2026 21:25:06 +0000</pubDate>
                <media:content url="https://cdn.hashnode.com/uploads/covers/5e1e335a7a1d3fcc59028c64/be6df167-b53e-4e99-939d-ccd8fb150f32.png" medium="image" />
                <content:encoded>
                    <![CDATA[ <p>I still remember the first time I ran a Bell-state circuit on a quantum simulator.</p>
<p>The code was only a few lines long, but it felt magical. Two qubits became entangled, and the simulator returned almost perfect results. Then I sent the same circuit to real hardware.</p>
<p>The magic faded a little.</p>
<p>The output was still recognizable, but the clean 50/50 distribution had become noisy. Additional errors appeared, and the circuit no longer behaved like the ideal version I had tested locally.</p>
<p>That moment taught me something important: the future of quantum computing isn't only about better algorithms. It's also about better architecture.</p>
<p>For years, many trapped-ion quantum computers have been built around <strong>one-dimensional (1D) linear chains of ions</strong>. These systems have achieved some of the highest gate fidelities in the industry, making them excellent platforms for early quantum computing.</p>
<p>But researchers are increasingly exploring a different idea: <strong>native two-dimensional (2D) trapped-ion arrays.</strong></p>
<h3 id="heading-table-of-contents">Table of Contents</h3>
<ul>
<li><p><a href="#heading-prerequisite">Prerequisite</a></p>
</li>
<li><p><a href="#heading-the-road-that-got-us-here">The Road That Got Us Here</a></p>
<ul>
<li><p><a href="#heading-why-error-correction-pushes-quantum-hardware-toward-2d">Why Error Correction Pushes Quantum Hardware Toward 2D</a></p>
</li>
<li><p><a href="#heading-a-simple-mental-model">A Simple Mental Model</a></p>
</li>
</ul>
</li>
<li><p><a href="#heading-why-connectivity-becomes-even-more-important-for-error-correction">Why Connectivity Becomes Even More Important for Error Correction</a></p>
<ul>
<li><p><a href="#heading-a-common-2d-error-correction-layout">A Common 2D Error-Correction Layout</a></p>
</li>
<li><p><a href="#heading-does-surface-code-only-work-in-2d">Does Surface Code Only Work in 2D?</a></p>
</li>
</ul>
</li>
<li><p><a href="#heading-what-changes-for-developers">What Changes for Developers?</a></p>
</li>
<li><p><a href="#heading-why-researchers-see-2d-as-a-natural-match">Why Researchers See 2D as a Natural Match</a></p>
<ul>
<li><p><a href="#heading-the-real-caveat">The Real Caveat</a></p>
</li>
<li><p><a href="#heading-current-breakthroughs-in-the-field">Current Breakthroughs in the Field</a></p>
</li>
</ul>
</li>
<li><p><a href="#heading-conclusion">Conclusion</a></p>
</li>
</ul>
<h3 id="heading-prerequisite">Prerequisite</h3>
<p>This article is a developer-friendly story of why that shift matters, what physical evidence supports it, and why 2D architectures may offer a more natural path to scaling quantum computers beyond today’s limits.</p>
<p>This article is written for software developers, computer science students, and curious engineers who want to understand the hardware ideas behind scalable quantum computing without needing a deep background in quantum physics.</p>
<h2 id="heading-the-road-that-got-us-here">The Road That Got Us Here</h2>
<p>Imagine building a city. You start with a single street. It's easy to manage. Every house is visible, and traffic is simple.</p>
<p>That's essentially how a 1D trapped-ion quantum computer works:</p>
<img src="https://cdn.hashnode.com/uploads/covers/647d7b660f441a49aa878a9e/eae4cb78-1b62-4ca1-a336-97c7e3152084.jpg" alt="Linear trapped-ion quantum computer with ions in a row between electrodes and lasers creating entanglement between neighboring ions." style="display:block;margin:0 auto" width="946" height="384" loading="lazy">

<p>In this image, the blocks on the left and right are electrodes that create electromagnetic forces to hold the ions in a straight line. The ions don't touch the electrodes. Rather, they're suspended and controlled very precisely.</p>
<p>The blue laser beams act like extremely accurate control signals. When a laser hits a particular ion, it changes the ion’s quantum behavior.</p>
<p>The highlighted region labeled Entanglement shows two ions becoming linked together. After this operation, measuring one ion gives information about the other, even though they're separate particles.</p>
<p>This approach has produced some of the most accurate quantum operations ever demonstrated. Researchers have achieved extremely high gate fidelities, long coherence times, and precise control over individual qubits. For early quantum computing, the 1D linear chain was a brilliant engineering choice.</p>
<p>So why are researchers looking beyond it?</p>
<p>Because the same simplicity that makes a short chain elegant becomes a limitation when the chain grows longer.</p>
<p>Think about that city again: a single street works well when there are ten houses. Add a hundred houses, then a thousand, and eventually every delivery truck, emergency vehicle, and commuter is forced to use the same narrow road.</p>
<p>Something similar happens in a long ion chain.</p>
<p>As more ions are added, the collective vibrational motion becomes increasingly complex. Addressing one ion without disturbing others becomes harder. Interactions between distant qubits may require additional operations, and the control system must manage a much larger set of coupled dynamics.</p>
<p>The challenge isn't that 1D architectures stop working. The challenge is that they become progressively harder to scale efficiently.</p>
<p>To see why this matters for developers, consider a simple quantum circuit:</p>
<pre><code class="language-python">from qiskit import QuantumCircuit

qc = QuantumCircuit(8)

# We want distant qubits to interact
qc.cx(0, 7)

print(qc)
</code></pre>
<p>On an ideal simulator, this is a single logical operation.</p>
<p>On real hardware, the compiler may need to insert additional routing operations depending on the device’s connectivity. Each extra operation is another opportunity for noise.</p>
<p>This is the hidden lesson many beginners miss: hardware topology affects software performance. A circuit that looks small in code may become much larger after compilation.</p>
<p>Now imagine a different city.</p>
<p>Instead of one long street, you build a neighborhood grid:</p>
<img src="https://cdn.hashnode.com/uploads/covers/647d7b660f441a49aa878a9e/6400905e-fdc0-4bc1-8ed6-e87f97d3b70c.jpg" alt="2D trapped-ion quantum chip with ions arranged across a grid and arrows showing multidirectional movement" style="display:block;margin:0 auto" width="1028" height="645" loading="lazy">

<p>This image shows a quantum chip where ions are spread across a two-dimensional grid instead of a single row. The arrows represent the possible paths for moving ions around the chip, giving the system more freedom to connect nearby qubits and avoid the traffic bottlenecks that can occur in long 1D ion chains.</p>
<p>The geometric difference is profound.</p>
<p>1D chain: Capacity grows roughly with length</p>
<p>2D array: Capacity grows with area</p>
<p>If you double the length of a 1D chain, you roughly double the number of available ion sites.</p>
<p>If you double both dimensions of a 2D array, you can roughly quadruple the number of sites.</p>
<p>That may sound like a mathematical detail, but it changes the scaling story dramatically.</p>
<p>Researchers are exploring native 2D layouts because they can offer shorter average distances between qubits, richer connectivity, fewer routing operations, and a geometry that aligns more naturally with many quantum error-correction schemes.</p>
<p>One of the most important distinctions is between native 2D arrays and architectures that are still fundamentally based on elongated linear tracks.</p>
<p>A native 2D design is built around two-dimensional geometry from the beginning, rather than extending a linear architecture with additional zones.</p>
<p>Why does that matter physically? Because distance is expensive in quantum computing.</p>
<p>Imagine four qubits that need to interact frequently.</p>
<p>With a linear chain:</p>
<pre><code class="language-plaintext">                q0 — q1 — q2 — q3
</code></pre>
<p>For q0 to interact with q3, the system may require multiple routing or transport steps.</p>
<p>With a 2D grid:</p>
<pre><code class="language-plaintext">                    q0 q1 

                    q2 q3
</code></pre>
<p>Now several pairs can be close simultaneously.</p>
<p>This becomes especially important for algorithms with many entangling operations, such as quantum chemistry, optimization, and error correction.</p>
<p>And that brings us to one of the strongest arguments for 2D architectures: quantum error correction is naturally two-dimensional.</p>
<h3 id="heading-why-error-correction-pushes-quantum-hardware-toward-2d">Why Error Correction Pushes Quantum Hardware Toward 2D</h3>
<p>Earlier, we saw that qubits in a long 1D chain may need extra routing operations to interact with distant qubits.</p>
<p>Now let’s ask a bigger question: what happens when we need not just a few qubits, but thousands of qubits that must constantly check and correct each other’s errors?</p>
<p>That's the goal of quantum error correction.</p>
<h3 id="heading-a-simple-mental-model">A Simple Mental Model</h3>
<p>Think of a classroom where every student must periodically compare answers with nearby classmates to catch mistakes.</p>
<p>If the students sit in a 2D seating arrangement, each student can quickly talk to neighbors on the left, right, front, and back.</p>
<img src="https://cdn.hashnode.com/uploads/covers/647d7b660f441a49aa878a9e/96fe503c-6170-4726-8304-a645d5edc853.jpg" alt="Grid of interconnected qubits arranged in a two-dimensional lattice." style="display:block;margin:0 auto" width="819" height="819" loading="lazy">

<p>This image shows a two-dimensional lattice of qubits. Each blue dot is a qubit, and the lines indicate which nearby qubits can interact with one another. The grid illustrates the kind of local connectivity that is useful for large-scale quantum computing, because qubits can exchange information with nearby neighbors without relying on long, complex communication paths across the chip.</p>
<p>This is very similar to how many leading quantum error-correction methods work.</p>
<h2 id="heading-why-connectivity-becomes-even-more-important-for-error-correction">Why Connectivity Becomes Even More Important for Error Correction</h2>
<p>You've seen that a 2D trapped-ion layout can reduce the distance between qubits and potentially require fewer routing operations.</p>
<p>That's already useful for ordinary quantum algorithms. But there's an even bigger reason researchers care so much about connectivity: <strong>quantum error correction</strong>.</p>
<p>A real quantum computer will make mistakes continuously. Qubits lose information through noise, imperfect gates, and imperfect measurements.</p>
<p>To build a useful large-scale machine, the computer must repeatedly detect and correct errors while the computation is running.</p>
<p>Think of it like a spell-checker that works while you're typing, not after you finish the document.</p>
<h3 id="heading-a-common-2d-error-correction-layout">A Common 2D Error-Correction Layout</h3>
<p>One of the most studied examples is the surface-code.</p>
<p>I’m introducing it here because it directly connects to the connectivity problem we just discussed.</p>
<p>The important idea is that qubits are arranged in a 2D neighborhood, and error checks are performed mainly between nearby qubits.</p>
<p>A simplified example looks like this:</p>
<pre><code class="language-plaintext">D — M — D 
|   |   | 
M — D — M 
|   |   | 
D — M — D


key: D = data qubit, M = measurement/check qubit
</code></pre>
<p>Notice what's happening:</p>
<ul>
<li><p>Each qubit talks mostly to its nearest neighbors.</p>
</li>
<li><p>The pattern is naturally two-dimensional.</p>
</li>
<li><p>The code doesn't require every qubit to connect directly to every other qubit.</p>
</li>
</ul>
<h3 id="heading-does-surface-code-only-work-in-2d">Does Surface Code Only Work in 2D?</h3>
<p>Not exactly. And this is a subtle but important point.</p>
<p>You can simulate or implement surface-code-style operations on hardware that's not physically arranged as a perfect 2D grid. Researchers can use additional routing, transport, or intermediate operations to reproduce the required interactions.</p>
<p>But doing so usually introduces extra overhead.</p>
<p>Think of it this way: with native 2D hardware, neighbors are already nearby. With 1D hardware, extra operations may be needed to create those neighbor interactions</p>
<p>So the question isn't "Can surface code run on 1D hardware?" The better question is, "How much additional work is required to make a 1D device behave like the 2D layout that the code expects?"</p>
<h2 id="heading-what-changes-for-developers">What Changes for Developers?</h2>
<p>Suppose you write a quantum algorithm with many entangling operations.</p>
<p>On a sparse 1D topology, the compiler may insert many extra operations. On a richer 2D topology, fewer extra operations may be needed. That can lead to:</p>
<ol>
<li><p>Fewer routing operations: less work moving quantum information around</p>
</li>
<li><p>Shorter effective distances: qubits that interact often can stay physically closer</p>
</li>
<li><p>Shallower compiled circuits: fewer additional gates inserted by the compiler</p>
</li>
<li><p>Less manual topology optimization: developers may spend less effort rearranging circuits for hardware constraints.</p>
</li>
</ol>
<p>Notice that none of these benefits require a new algorithm. They come from changing the geometry of the hardware.</p>
<h2 id="heading-why-researchers-see-2d-as-a-natural-match">Why Researchers See 2D as a Natural Match</h2>
<p>Researchers view native 2D trapped-ion architectures as an attractive long-term direction.</p>
<p>The argument is not that 2D automatically solves error correction.</p>
<p>The argument is this: Many leading error-correction schemes are based on local 2D neighborhoods, so hardware that already provides a 2D neighborhood may require less additional routing and coordination.</p>
<p>In other words, the geometry of the hardware is more closely aligned with the geometry of the error-correction scheme.</p>
<h3 id="heading-the-real-caveat">The Real Caveat</h3>
<p>You should know that “easier to scale” doesn't mean “already scalable.”</p>
<p>Native 2D trapped-ion architectures may reduce routing overhead and provide more flexible connectivity, but researchers still have to solve several difficult engineering problems:</p>
<ul>
<li><p>maintaining very high gate fidelity as arrays grow,</p>
</li>
<li><p>moving ions reliably across larger 2D structures,</p>
</li>
<li><p>keeping crosstalk and unwanted interactions low,</p>
</li>
<li><p>building control electronics that can manage hundreds or thousands of qubits,</p>
</li>
<li><p>and demonstrating fault-tolerant quantum computation, not just small laboratory experiments.</p>
</li>
</ul>
<p>So when people say that 2D trapped-ion quantum computers may be easier to scale, they don't mean that scaling is easy.</p>
<p>They mean that the geometry may remove one important source of scaling difficulty: the mismatch between a linear hardware layout and the highly connected, locally interacting structures needed for large-scale quantum error correction.</p>
<h3 id="heading-current-breakthroughs-in-the-field">Current Breakthroughs in the Field</h3>
<p>Researchers are pursuing an architecture intended to address these scaling problems, but it hasn't publicly demonstrated that those problems are solved.</p>
<p>Some of these researchers includes:</p>
<ul>
<li><p>ZuriQ / ETH Zürich trapped-ion laboratory</p>
</li>
<li><p>NIST trapped-ion quantum computing laboratory</p>
</li>
<li><p>University of Innsbruck / IQOQI trapped-ion laboratory</p>
</li>
</ul>
<p>They have shown that a 2D array can be built and controlled, but they have not yet publicly shown that very large 2D arrays can maintain the extremely low error rates required for fault-tolerant computing.</p>
<p>One of the most interesting aspects of their architecture is that traditional 1D-based layouts often move ions through linear tracks and junctions. ZuriQ emphasize that ions can be moved more freely in a 2D geometry using a combination of electric and magnetic fields.</p>
<p>What this suggests:</p>
<ul>
<li><p>They're explicitly working on the ion-movement problem.</p>
</li>
<li><p>Their architecture is designed to make movement less constrained by 1D junctions.</p>
</li>
</ul>
<p>What's still unknown:</p>
<ul>
<li><p>How reliable that movement remains as the array becomes much larger.</p>
</li>
<li><p>Whether movement can be performed repeatedly without introducing significant additional error.</p>
</li>
</ul>
<p>So this isn't just a theoretical concern. It's a central engineering target of their approach.</p>
<h2 id="heading-conclusion">Conclusion</h2>
<p>This article explained why researchers are exploring native 2D trapped-ion quantum architectures as a potentially more scalable alternative to traditional 1D linear ion chains.</p>
<p>While 1D systems have achieved excellent gate fidelity and coherence, they become increasingly difficult to scale because distant qubits require extra routing operations, increasing noise and compilation overhead.</p>
<p>We looked at city-road and classroom-grid analogies to show how 2D layouts provide shorter qubit distances, richer connectivity, and better alignment with leading quantum error-correction methods such as the surface code.</p>
<p>We also discussed what these geometric advantages could mean for developers (like fewer routing operations, shallower compiled circuits, and less manual topology optimization) while emphasizing that large-scale fault-tolerant quantum computing remains an unsolved engineering challenge despite recent experimental progress in controllable 2D ion arrays.</p>
 ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ Why Your Quantum Circuit Works in a Simulator but Fails on Real Hardware [Full Handbook] ]]>
                </title>
                <description>
                    <![CDATA[ If the exact same quantum circuit works perfectly in a simulator, why does it often produce different results on a real quantum computer? That question catches almost every quantum developer by surpri ]]>
                </description>
                <link>https://www.freecodecamp.org/news/why-your-quantum-circuit-works-in-a-simulator-but-fails-on-real-hardware-full-handbook/</link>
                <guid isPermaLink="false">6a711081f297e5e86c13916d</guid>
                
                    <category>
                        <![CDATA[ handbook ]]>
                    </category>
                
                    <category>
                        <![CDATA[ quantum computing ]]>
                    </category>
                
                    <category>
                        <![CDATA[ hardware ]]>
                    </category>
                
                    <category>
                        <![CDATA[ Python ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Casmir Onyekani ]]>
                </dc:creator>
                <pubDate>Mon, 03 Aug 2026 22:04:49 +0000</pubDate>
                <media:content url="https://cdn.hashnode.com/uploads/covers/5fc16e412cae9c5b190b6cdd/8e79825e-752f-4667-88fd-548e3687455d.png" medium="image" />
                <content:encoded>
                    <![CDATA[ <p>If the exact same quantum circuit works perfectly in a simulator, why does it often produce different results on a real quantum computer?</p>
<p>That question catches almost every quantum developer by surprise. Understanding it is essential if you plan to build larger, more reliable quantum applications.</p>
<p>This tutorial assumes you're already comfortable creating and executing basic quantum circuits in <a href="https://www.ibm.com/quantum/qiskit">Qiskit</a>.</p>
<p>The first time you execute a circuit on real hardware, you'd expect the output to match the simulator. After all, the code, algorithm, and compiler remain the same. Yet the results often do.</p>
<p>Sometimes the difference is barely noticeable. Other times, a circuit that looked perfect in simulation suddenly produces outputs that are difficult to explain. As your circuits become deeper, involve more qubits, or include more gates, those differences become increasingly significant.</p>
<p>When I first encountered this behavior, my instinct was the same as many beginners: <em>I must have made a mistake somewhere.</em></p>
<p>I reviewed my code, checked my gates, and compared the circuit diagrams. I reran the simulator. Everything looked correct. The problem wasn't the algorithm. It was the hardware.</p>
<p>Unlike the ideal environment simulated by Qiskit Aer, real quantum processors operate in a world filled with imperfections. Qubits gradually lose their quantum information. Gates are never perfectly accurate. Measurements introduce uncertainty. Even qubits waiting for their turn in a computation continue interacting with their environment, accumulating errors before they perform another operation.</p>
<p>These challenges are collectively known as <strong>quantum noise</strong>, and they are one of the biggest obstacles preventing today's quantum computers from performing long, complex calculations reliably.</p>
<p>Fortunately, quantum researchers haven't been standing still. Over the years, they've developed a growing collection of techniques to reduce the impact of noise and improve the quality of quantum computations. Broadly speaking, these techniques fall into two categories:</p>
<ul>
<li><p><strong>Error mitigation</strong>, which estimates and compensates for errors after a circuit has executed.</p>
</li>
<li><p><strong>Error suppression</strong>, which attempts to prevent many of those errors from occurring in the first place while the circuit is running.</p>
</li>
</ul>
<p>More recently, these advanced techniques have started becoming accessible through developer-friendly tools instead of requiring researchers to manually tune every circuit.</p>
<p>One of the newest examples is <strong>Orbit</strong>, an automated quantum error suppression solution available through the Qiskit Functions Catalog. Rather than requiring developers to become specialists in techniques like dynamical decoupling, Orbit is designed to integrate advanced error suppression into existing Qiskit workflows with minimal additional effort.</p>
<p>But before we can appreciate why tools like Orbit matter, we first need to understand the problem they're solving.</p>
<p>That's exactly what we'll do in this tutorial. Instead of jumping straight into a new tool, we'll investigate one of the most common and most important questions in quantum computing:</p>
<p><strong>Why do quantum circuits behave differently on real hardware than they do in a simulator?</strong></p>
<p>Along the way, you'll learn where quantum errors come from, how to reproduce many of them locally using Qiskit Aer, why larger circuits become increasingly difficult to execute reliably, and how modern error suppression techniques help developers get more useful results from today's quantum computers.</p>
<p>By the end of this guide, you'll understand not only <em>what</em> causes quantum circuits to fail on real hardware, but also <em>what developers can do about it</em>.</p>
<h2 id="heading-table-of-contents"><strong>Table of Contents</strong></h2>
<ul>
<li><p><a href="#heading-the-experiment-running-the-same-circuit-in-a-simulator-and-on-real-hardware">The Experiment: Running the Same Circuit in a Simulator and on Real Hardware</a></p>
<ul>
<li><p><a href="#heading-starting-with-a-familiar-circuit">Starting with a Familiar Circuit</a></p>
</li>
<li><p><a href="#heading-step-1-running-the-circuit-on-the-simulator">Step 1: Running the Circuit on the Simulator</a></p>
</li>
<li><p><a href="#heading-step-2-running-the-same-circuit-on-a-real-quantum-computer">Step 2: Running the Same Circuit on a Real Quantum Computer</a></p>
</li>
</ul>
</li>
<li><p><a href="#heading-what-happens-inside-a-real-quantum-computer">What Happens Inside a Real Quantum Computer?</a></p>
<ul>
<li><p><a href="#heading-from-python-code-to-physical-qubits">From Python Code to Physical Qubits</a></p>
</li>
<li><p><a href="#heading-every-quantum-operation-is-a-physical-process">Every Quantum Operation Is a Physical Process</a></p>
</li>
<li><p><a href="#heading-what-is-quantum-noise">What Is Quantum Noise?</a></p>
</li>
<li><p><a href="#heading-four-common-sources-of-quantum-noise">Four Common Sources of Quantum Noise</a></p>
</li>
<li><p><a href="#heading-why-simulators-dont-show-these-problems">Why Simulators Don't Show These Problems</a></p>
</li>
</ul>
</li>
<li><p><a href="#heading-simulating-quantum-noise-with-qiskit-aer">Simulating Quantum Noise with Qiskit Aer</a></p>
<ul>
<li><p><a href="#heading-creating-a-simple-noise-model">Creating a Simple Noise Model</a></p>
</li>
<li><p><a href="#heading-running-the-bell-state-with-noise">Running the Bell State with Noise</a></p>
</li>
<li><p><a href="#heading-comparing-the-results">Comparing the Results</a></p>
</li>
<li><p><a href="#heading-making-the-noise-worse">Making the Noise Worse</a></p>
</li>
<li><p><a href="#heading-why-not-just-remove-the-noise">Why Not Just Remove the Noise?</a></p>
</li>
</ul>
</li>
<li><p><a href="#heading-error-mitigation-vs-error-suppression-whats-the-difference">Error Mitigation vs. Error Suppression: What's the Difference?</a></p>
<ul>
<li><p><a href="#heading-what-is-error-mitigation">What Is Error Mitigation?</a></p>
</li>
<li><p><a href="#heading-what-is-error-suppression">What Is Error Suppression?</a></p>
</li>
<li><p><a href="#heading-comparing-the-two-approaches">Comparing the Two Approaches</a></p>
</li>
<li><p><a href="#heading-why-error-suppression-is-becoming-more-important">Why Error Suppression Is Becoming More Important</a></p>
</li>
<li><p><a href="#heading-introducing-dynamical-decoupling">Introducing Dynamical Decoupling</a></p>
</li>
<li><p><a href="#heading-where-orbit-fits">Where Orbit Fits</a></p>
</li>
</ul>
</li>
<li><p><a href="#heading-how-automated-error-suppression-fits-into-a-modern-quantum-workflow">How Automated Error Suppression Fits into a Modern Quantum Workflow</a></p>
<ul>
<li><p><a href="#heading-moving-from-manual-optimization-to-automated-workflows">Moving from Manual Optimization to Automated Workflows</a></p>
</li>
<li><p><a href="#heading-what-orbit-publicly-says-it-does">What Orbit Publicly Says It Does</a></p>
</li>
<li><p><a href="#heading-a-real-hardware-example">A Real Hardware Example</a></p>
</li>
<li><p><a href="#heading-should-you-use-orbit">Should You Use Orbit?</a></p>
</li>
</ul>
</li>
</ul>
<h2 id="heading-the-experiment-running-the-same-circuit-in-a-simulator-and-on-real-hardware">The Experiment: Running the Same Circuit in a Simulator and on Real Hardware</h2>
<p>One of the biggest advantages of learning quantum computing with Qiskit is that you don't need immediate access to a quantum computer. You can write, test, and debug your circuits locally using Qiskit Aer before running them on real IBM Quantum hardware.</p>
<p>Let's begin with one of the first circuits you may likely build as a quantum developer: <strong>the Bell State</strong>.</p>
<h3 id="heading-starting-with-a-familiar-circuit">Starting with a Familiar Circuit</h3>
<p>The Bell State is often the first example developers encounter when learning quantum programming because it demonstrates one of quantum computing's most fascinating properties: <a href="https://quantum.microsoft.com/en-us/insights/education/concepts/entanglement"><strong>entanglement</strong></a>.</p>
<p>Create <code>bell_state.py</code> file:</p>
<pre><code class="language-python">from qiskit import QuantumCircuit

# Create a quantum circuit with two qubits and two classical bits 
qc = QuantumCircuit(2, 2)

# Place the first qubit into superposition 
qc.h(0)

# Entangle the second qubit with the first 
qc.cx(0, 1) 

# Measure both qubits 
qc.measure([0, 1], [0, 1]) 

print(qc)
</code></pre>
<p>In this code, the Hadamard gate places the first qubit into a superposition, while the CNOT gate entangles the second qubit with it. Once measured, both qubits should always produce matching values.</p>
<p>In an ideal quantum computer, you should expect only two measurement outcomes:</p>
<ul>
<li><p><code>00</code></p>
</li>
<li><p><code>11</code></p>
</li>
</ul>
<p>Each outcome should appear with roughly the same probability.</p>
<p>States like <code>01</code> and <code>10</code> shouldn't appear at all because they violate the expected Bell State correlations.</p>
<h3 id="heading-step-1-running-the-circuit-on-the-simulator">Step 1: Running the Circuit on the Simulator</h3>
<p>You will begin by executing the circuit using the Qiskit Aer simulator:</p>
<pre><code class="language-python">from qiskit_aer import AerSimulator

simulator = AerSimulator()

result = simulator.run(
    qc,
    shots=4096
).result()

counts = result.get_counts()

print(counts)
</code></pre>
<p>Adding your simulator to <code>bell_state.py</code>, you now have:</p>
<pre><code class="language-python">from qiskit import QuantumCircuit
from qiskit_aer import AerSimulator

qc = QuantumCircuit(2, 2)

qc.h(0)

qc.cx(0, 1)

qc.measure([0, 1], [0, 1])

simulator = AerSimulator()

result = simulator.run(
    qc,
    shots=4096
).result()

counts = result.get_counts()

print(counts)
</code></pre>
<p>Make sure your virtual environment is activated (<code>source .venv/bin/activate</code>), and you installed Qiskit and Qiskit Aer (<code>pip install qiskit qiskit-aer</code>).</p>
<p>Run: <code>python bell_state.py</code>, a typical output looks like this:</p>
<pre><code class="language-plaintext">{'00': 2039, '11': 2057}
</code></pre>
<p>Your numbers will likely be slightly different because quantum measurements are probabilistic. However, the overall pattern should remain the same.</p>
<p>Only <code>00</code> and <code>11</code> appear. There are no unexpected measurement outcomes, and everything behaves exactly as quantum theory predicts.</p>
<p>At this point, it's easy to feel confident that your circuit is correct. And it is. But there's an important detail hiding behind these perfect results.</p>
<blockquote>
<p>Note: The simulator assumes an ideal quantum computer.</p>
</blockquote>
<p>It doesn't have to worry about hardware limitations because it's simply calculating the mathematical evolution of your quantum state.</p>
<p>Among other things, the simulator assumes that:</p>
<ul>
<li><p>Every quantum gate is executed perfectly.</p>
</li>
<li><p>Qubits never lose their quantum state.</p>
</li>
<li><p>Measurements are always accurate.</p>
</li>
<li><p>The environment never interferes with the computation.</p>
</li>
<li><p>No additional noise is introduced while the circuit runs.</p>
</li>
</ul>
<p>Those assumptions make simulators incredibly valuable for learning, debugging, and verifying quantum algorithms.</p>
<p>Unfortunately, real quantum processors don't operate under ideal conditions.</p>
<h3 id="heading-step-2-running-the-same-circuit-on-a-real-quantum-computer">Step 2: Running the Same Circuit on a Real Quantum Computer</h3>
<p>Now imagine taking this exact same circuit and executing it on a real quantum processor.</p>
<p>Notice that nothing changes. Not the code, algorithm, or the Bell State itself. The only thing we're changing is <strong>where the circuit runs</strong>.</p>
<p>If you submit this circuit to a real quantum computer, you might expect results that closely match the simulator. After all, if the algorithm is correct, shouldn't the output be the same?</p>
<p>In reality, you'll often observe something more like this:</p>
<pre><code class="language-plaintext">{
    '00': 1912,
    '11': 1834,
    '01': 161,
    '10': 189
}
</code></pre>
<p>The first thing that stands out is the appearance of two unexpected outcomes: <code>01</code> and <code>10</code>.</p>
<p>Those states weren't present in the simulator. So where did they come from? The answer isn't that your code suddenly became incorrect.</p>
<p>The Bell State circuit hasn't changed. The simulator wasn't misleading you.</p>
<p>Instead, the quantum hardware is introducing small imperfections while your circuit executes.</p>
<p>A gate may be applied with slightly less than perfect accuracy. A qubit may begin losing its quantum information before the computation finishes. A measurement may occasionally report the wrong value.</p>
<p>Individually, these errors are usually very small. Collectively, they begin to change the final measurement statistics. For a simple Bell State, the differences are relatively minor.</p>
<p>But quantum algorithms rarely stop at two qubits and two gates.</p>
<p>As circuits become deeper and more complex, these small imperfections accumulate. Eventually, they can overwhelm the quantum information your algorithm is trying to preserve, making the final results less reliable.</p>
<p>This is one of the biggest challenges facing today's quantum computers.</p>
<p>A simulator shows us <strong>how a quantum algorithm is expected to behave</strong> under ideal conditions.</p>
<p>Real hardware shows us <strong>how that same algorithm behaves in the presence of noise</strong>. Closing that gap is one of the central goals of modern quantum computing research.</p>
<p>Before you explore techniques like <strong>quantum error suppression</strong> or see how tools like <strong>Orbit</strong> help automate parts of that process, you first need to understand where these errors come from.</p>
<h2 id="heading-what-happens-inside-a-real-quantum-computer">What Happens Inside a Real Quantum Computer?</h2>
<p>At this point, we've established something that surprises almost every new quantum developer:</p>
<p>The same quantum circuit can produce different results depending on where it runs.</p>
<p>But that naturally leads to another question:</p>
<blockquote>
<p><strong>What exactly is happening inside a real quantum computer that doesn't happen inside a simulator?</strong></p>
</blockquote>
<p>To answer that, you need to look beyond your Python code and understand what happens after you click <strong>Run</strong>.</p>
<h3 id="heading-from-python-code-to-physical-qubits">From Python Code to Physical Qubits</h3>
<p>When you execute a circuit with Qiskit Aer, the simulator performs mathematical calculations to determine how the quantum state evolves. It works with complex numbers and linear algebra, faithfully applying each gate exactly as quantum mechanics predicts.</p>
<p>Nothing interferes with the computation unless you explicitly introduce a noise model.</p>
<p>Real quantum computers work very differently. Instead of manipulating mathematical objects, they manipulate <strong>physical qubits</strong>.</p>
<p>Depending on the hardware architecture, these qubits might be:</p>
<ul>
<li><p>superconducting circuits cooled to temperatures colder than outer space</p>
</li>
<li><p>trapped ions suspended by electromagnetic fields</p>
</li>
<li><p>neutral atoms held in optical tweezers</p>
</li>
<li><p>another emerging quantum technology.</p>
</li>
</ul>
<p>Although these platforms use different hardware, they all share one important characteristic:</p>
<p><strong>Qubits are extremely fragile.</strong></p>
<p>Unlike classical bits, which remain either <code>0</code> or <code>1</code> until they're changed, qubits must preserve delicate quantum properties such as superposition and entanglement throughout an entire computation.</p>
<p>Maintaining those properties is far more difficult than it sounds.</p>
<h3 id="heading-every-quantum-operation-is-a-physical-process">Every Quantum Operation Is a Physical Process</h3>
<p>When you write code like this:</p>
<pre><code class="language-python">qc.h(0)
qc.cx(0, 1)
</code></pre>
<p>It looks almost effortless. Two lines of Python, less than a second to execute.</p>
<p>Behind the scenes, however, the quantum processor performs a carefully orchestrated series of physical operations.</p>
<p>Control electronics generate microwave pulses or laser pulses. Those signals travel through specialized hardware.</p>
<p>The pulses interact with individual qubits for incredibly short periods of time. The timing must be extraordinarily precise.</p>
<p>If any part of this process deviates even slightly from what was intended, the resulting quantum state can change.</p>
<p>Now imagine repeating this process dozens, hundreds, or even thousands of times within a single algorithm. Tiny imperfections begin to accumulate.</p>
<p>Eventually, those small errors become noticeable in the final measurement results. This is what we broadly refer to as <strong>quantum noise</strong>.</p>
<h3 id="heading-what-is-quantum-noise">What Is Quantum Noise?</h3>
<p>This is a general term for anything that causes a quantum computer to drift away from the ideal behavior predicted by quantum mechanics.</p>
<p>It doesn't usually mean something dramatic has happened.</p>
<p>Most of the time, the errors are incredibly small.</p>
<p>A gate may rotate a qubit by an angle that's only slightly different from the intended value.</p>
<p>A qubit may lose a little of its quantum information while waiting for another operation. A measurement might occasionally report the wrong state.</p>
<p>Each error seems insignificant on its own. The challenge is that quantum algorithms often involve many operations.</p>
<p>Even tiny inaccuracies begin to add up. Imagine trying to copy a handwritten page. One typo probably doesn't matter.</p>
<p>Copy the same page hundreds of times, introducing one small typo during each copy, and eventually the final document barely resembles the original.</p>
<p>Quantum circuits behave in much the same way. The longer the computation continues, the more opportunities there are for errors to accumulate.</p>
<h3 id="heading-four-common-sources-of-quantum-noise">Four Common Sources of Quantum Noise</h3>
<p>Although researchers study many different types of quantum errors, most developers encounter four major categories.</p>
<p>Understanding these will help you make sense of why quantum hardware behaves differently from an ideal simulator.</p>
<p><strong>1. Decoherence</strong></p>
<p>One of the biggest challenges in quantum computing is <strong>decoherence</strong>. A qubit can maintain its quantum state only for a limited amount of time. Eventually, interactions with its surrounding environment cause it to lose the information stored in its superposition.</p>
<p>Think of spinning a coin on a table. When you first spin it, the coin exists in a rapidly changing state that's neither clearly heads nor tails. As time passes, friction slows it down until it finally settles.</p>
<p>Qubits experience a similar loss of information. Except instead of friction, they're affected by tiny interactions with the surrounding environment.</p>
<p>If your circuit takes too long to execute, some qubits may begin losing their quantum information before the computation finishes.</p>
<p><strong>2. Gate Errors</strong></p>
<p>Every quantum gate is a physical operation. Ideally, a Hadamard gate always performs exactly the same transformation. In reality, no hardware is perfect.</p>
<p>The pulse implementing the gate may be slightly stronger, weaker, or slightly delayed than intended. These tiny inaccuracies create <strong>gate errors</strong>.</p>
<p>One imperfect gate isn't usually a problem, hundreds of imperfect gates quickly become one</p>
<p>This is one reason deeper quantum circuits tend to perform worse than shallow ones.</p>
<p><strong>3. Measurement Errors</strong></p>
<p>Even if your computation completes successfully, there's still one final challenge:</p>
<p>Reading the result.</p>
<p>Measuring a qubit is itself a physical process. Sometimes the hardware incorrectly identifies a qubit as <code>1</code> when it should be <code>0</code>, or vice versa.</p>
<p>Imagine stepping on a bathroom scale that occasionally reports your weight two kilograms heavier than it actually is.</p>
<p>The measurement instrument — not you — is introducing the error.</p>
<p>Quantum computers face a similar problem when reading qubit states.</p>
<p><strong>4. Idle Errors</strong></p>
<p>One of the least intuitive sources of quantum noise occurs when a qubit isn't doing anything at all.</p>
<p>Suppose one qubit is waiting while another qubit is being measured or participating in a multi-qubit operation.</p>
<p>Although it appears idle, it doesn't freeze in time. The qubit continues interacting with its environment. During that waiting period, it can gradually lose coherence.</p>
<p>As quantum circuits become larger, these idle periods become more common.</p>
<p>Reducing the impact of these waiting times is one of the motivations behind advanced <strong>error suppression</strong> techniques such as <strong>dynamical decoupling</strong> — a technique we'll explore later when we discuss Orbit.</p>
<h3 id="heading-why-simulators-dont-show-these-problems">Why Simulators Don't Show These Problems</h3>
<p>If you've only worked with Qiskit Aer so far, you may wonder why you've never encountered any of these issues.</p>
<p>The answer is simple.</p>
<p>By default, the simulator isn't trying to model an imperfect quantum computer. It's trying to model <strong>an ideal one</strong>.</p>
<p>That makes it an excellent learning environment because you can verify whether your algorithm is logically correct without worrying about hardware limitations.</p>
<p>But it also means a simulator can't fully prepare you for what happens on real quantum devices.</p>
<p>To understand that difference, you need to recreate it yourself.</p>
<p>Fortunately, Qiskit gives us a way to do exactly that.</p>
<p>Instead of waiting until you have access to a real quantum computer, you can intentionally introduce realistic noise into your local simulator and observe how your Bell State begins to change.</p>
<h2 id="heading-simulating-quantum-noise-with-qiskit-aer">Simulating Quantum Noise with Qiskit Aer</h2>
<p>So far, you've compared two different worlds.</p>
<p>In the first world, our Bell State circuit runs inside an ideal simulator, where every quantum operation is mathematically perfect.</p>
<p>In the second world, that same circuit runs on a real quantum processor, where qubits are constantly affected by noise from their surrounding environment.</p>
<p>The obvious challenge is this:</p>
<p><strong>What if you don't have access to a quantum computer?</strong></p>
<p>Can you still learn how noise affects your algorithms? Fortunately, you can.</p>
<p>One of Qiskit's most useful features is its ability to simulate realistic hardware imperfections locally using <strong>Qiskit Aer</strong>. Instead of waiting until your circuit reaches a real quantum processor, you can inject different kinds of noise into your simulator and observe how those imperfections influence the final results.</p>
<p>This allows you to experiment, debug, and better understand the behavior of quantum algorithms — all from your own computer.</p>
<p>Let's see how it works.</p>
<h3 id="heading-creating-a-simple-noise-model">Creating a Simple Noise Model</h3>
<p>Qiskit Aer includes a collection of tools for building custom noise models. These models let you simulate many of the errors you've just learned about, including gate errors, measurement errors, and qubit decoherence.</p>
<p>For your first experiment, keep things simple by introducing a small amount of random error after every single-qubit and two-qubit gate:</p>
<pre><code class="language-python">from qiskit_aer.noise import NoiseModel, depolarizing_error

# Create an empty noise model
noise_model = NoiseModel()

# Define gate errors
single_qubit_error = depolarizing_error(0.01, 1)
two_qubit_error = depolarizing_error(0.03, 2)

# Apply errors to common quantum gates
noise_model.add_all_qubit_quantum_error(
    single_qubit_error,
    ["h", "x", "y", "z"]
)

noise_model.add_all_qubit_quantum_error(
    two_qubit_error,
    ["cx"]
)
</code></pre>
<p>In this code you created an empty <code>NoiseModel</code> and defined two <strong>depolarizing errors</strong>.</p>
<p>A depolarizing error is one of the most common ways to simulate hardware noise. Instead of applying a gate perfectly every time, the simulator introduces a small probability that the qubit's state becomes partially randomized.</p>
<p>Think of it like taking a slightly blurry photograph.</p>
<p>The picture still resembles the original, but every small imperfection makes it a little harder to recover the exact details.</p>
<p>That's essentially what depolarizing noise does to a quantum state.</p>
<p>Notice that we're using two different error probabilities:</p>
<ul>
<li><p><strong>1%</strong> for single-qubit gates</p>
</li>
<li><p><strong>3%</strong> for two-qubit gates</p>
</li>
</ul>
<p>This reflects an important reality of today's quantum hardware.</p>
<p>Two-qubit operations are generally more difficult to perform accurately than single-qubit operations, which is why they often have lower fidelities on real quantum processors.</p>
<h3 id="heading-running-the-bell-state-with-noise">Running the Bell State with Noise</h3>
<p>Rename the <code>bell_state.py</code> we used earlier to <code>bell_state_noise.py</code> to specify adding a <code>NoiseModel</code>.</p>
<p>Reconfigure the simulator with our noise model:</p>
<pre><code class="language-python">from qiskit_aer import AerSimulator

noisy_simulator = AerSimulator(
    noise_model=noise_model
)

compiled = transpile(qc, noisy_simulator)

job = noisy_simulator.run(
    compiled,
    shots=4096
)

result = job.result()

counts = result.get_counts()

print(counts)
</code></pre>
<p>At this point your <code>bell_state_noise.py</code> should look like this:</p>
<pre><code class="language-python">from qiskit import QuantumCircuit
from qiskit_aer import AerSimulator
from qiskit_aer.noise import NoiseModel, depolarizing_error

# Step 1: Build the Bell State circuit
qc = QuantumCircuit(2, 2)

# Put qubit 0 into superposition
qc.h(0)

# Entangle qubit 1 with qubit 0
qc.cx(0, 1)

# Measure both qubits
qc.measure([0, 1], [0, 1])

print("Bell State Circuit")
print(qc)


# Step 2: Run on the ideal simulator

ideal_simulator = AerSimulator()

ideal_result = ideal_simulator.run(
    qc,
    shots=4096
).result()

ideal_counts = ideal_result.get_counts()

print("\nIdeal Simulator Results")
print(ideal_counts)


# Step 3: Create a noise model
noise_model = NoiseModel()

single_qubit_error = depolarizing_error(0.01, 1)
two_qubit_error = depolarizing_error(0.03, 2)

noise_model.add_all_qubit_quantum_error(
    single_qubit_error,
    ["h", "x", "y", "z"]
)

noise_model.add_all_qubit_quantum_error(
    two_qubit_error,
    ["cx"]
)

# Step 4: Run with simulated noise
noisy_simulator = AerSimulator(
    noise_model=noise_model
)

noisy_result = noisy_simulator.run(
    qc,
    shots=4096
).result()

noisy_counts = noisy_result.get_counts()

print("\nNoisy Simulator Results")
print(noisy_counts)
</code></pre>
<p>For windows, to run:</p>
<p>Activate your virtual environment <code>source .venv/Scripts/activate</code> then run <code>python bell_state_noise.py</code></p>
<p>You may see output similar to this:</p>
<img src="https://cdn.hashnode.com/uploads/covers/647d7b660f441a49aa878a9e/99956b1a-edbd-4568-bd43-d7bc77c9071b.png" alt="terminal output" style="display:block;margin:0 auto" width="1019" height="412" loading="lazy">

<p>Your exact numbers will be different, but one thing should immediately stand out.</p>
<p>Unlike the ideal simulator, two unexpected states have appeared:</p>
<ul>
<li><p><code>01</code></p>
</li>
<li><p><code>10</code></p>
</li>
</ul>
<p>These outcomes shouldn't exist in a perfect Bell State.</p>
<p>Yet they now appear because we intentionally introduced hardware imperfections into the simulation.</p>
<p>Without changing a single line of our quantum algorithm, the results became noticeably less reliable.</p>
<h3 id="heading-comparing-the-results">Comparing the Results</h3>
<p>Let's compare all three scenarios we've discussed so far.</p>
<table>
<thead>
<tr>
<th>Environment</th>
<th>Typical Results</th>
</tr>
</thead>
<tbody><tr>
<td>Ideal simulator</td>
<td>Only <code>00</code> and <code>11</code></td>
</tr>
<tr>
<td>Noisy simulator</td>
<td>Mostly <code>00</code> and <code>11</code>, with a few <code>01</code> and <code>10</code></td>
</tr>
<tr>
<td>Real hardware</td>
<td>Similar behavior, but influenced by the actual device's physical characteristics</td>
</tr>
</tbody></table>
<p>The noisy simulator isn't trying to perfectly reproduce a specific IBM Quantum processor. Instead, it helps you understand <strong>how quantum noise changes the behavior of an algorithm</strong>.</p>
<p>That's an important distinction. You're no longer asking whether your Bell State circuit is correct. You already know it is.</p>
<p>Instead, you're asking a new question:</p>
<blockquote>
<p><strong>How resilient is my circuit when the hardware isn't perfect?</strong></p>
</blockquote>
<p>That's the kind of question quantum developers ask every day.</p>
<h3 id="heading-making-the-noise-worse">Making the Noise Worse</h3>
<p>To see how quickly errors accumulate, try increasing the depolarizing probabilities.</p>
<p>For example, change the code to:</p>
<pre><code class="language-python">single_qubit_error = depolarizing_error(0.05, 1)
two_qubit_error = depolarizing_error(0.10, 2)
</code></pre>
<p>Run the circuit again.</p>
<p>You'll likely notice that the incorrect outcomes become much more common.</p>
<p>The Bell State begins to lose its characteristic correlation, and the measurement distribution drifts farther away from the ideal 50/50 split.</p>
<p>This simple experiment illustrates an important principle of quantum computing.</p>
<p>Small increases in hardware noise can have a surprisingly large impact on the quality of your results.</p>
<p>Now imagine running a circuit containing hundreds of gates instead of just two.</p>
<p>Each additional operation introduces another opportunity for error.</p>
<p>By the time the computation finishes, the accumulated noise may overwhelm the useful quantum information your algorithm was trying to preserve.</p>
<p>This is why reducing noise has become one of the biggest priorities in quantum computing.</p>
<h3 id="heading-why-not-just-remove-the-noise">Why Not Just Remove the Noise?</h3>
<p>At this point, you might wonder:</p>
<blockquote>
<p><strong>If noise causes so many problems, why can't you simply eliminate it?</strong></p>
</blockquote>
<p>Researchers have been working toward that goal for decades.</p>
<p>The challenge is that quantum systems are extraordinarily sensitive.</p>
<p>Completely isolating qubits from their environment while simultaneously controlling and measuring them is one of the hardest engineering problems in modern science.</p>
<p>Instead of waiting for perfect hardware, researchers have developed techniques that help quantum computers produce more reliable results even when noise is unavoidable. These techniques fall into two categories as mentioned: <em><strong>Error mitigation* and *Error suppression</strong></em></p>
<p>Although both approaches aim to improve the quality of quantum computations, they solve the problem in fundamentally different ways.</p>
<p>Understanding that distinction is essential before we explore how Orbit brings automated error suppression into modern Qiskit workflows.</p>
<h2 id="heading-error-mitigation-vs-error-suppression-whats-the-difference">Error Mitigation vs. Error Suppression: What's the Difference?</h2>
<p>After seeing how even a small amount of noise can change the outcome of a simple Bell State circuit, it's natural to ask an important question:</p>
<blockquote>
<p><strong>If quantum hardware is so noisy, how do researchers still run useful quantum algorithms?</strong></p>
</blockquote>
<p>The answer is that they rarely rely on raw hardware results alone. Instead, they use <strong>error mitigation</strong> and <strong>error suppression</strong> to improve the quality of quantum computations.</p>
<p>Although these terms are sometimes used interchangeably, they solve two different problems.</p>
<p>Understanding the difference is essential because <strong>Orbit</strong> belongs to one of these categories — not the other.</p>
<p>Let's look at each approach.</p>
<h3 id="heading-what-is-error-mitigation">What Is Error Mitigation?</h3>
<p>Imagine taking a slightly blurry photograph. Once the picture has been taken, you open an editing application to sharpen the image, adjust the colors, and reduce the blur.</p>
<p>You didn't prevent the camera from capturing a blurry image. Instead, you improved the image <strong>after</strong> it was captured.</p>
<p>That's essentially what <strong>error mitigation</strong> does.</p>
<p>Error mitigation doesn't stop errors from occurring while the quantum circuit runs. Instead, it uses mathematical and statistical techniques to estimate how much noise affected the computation and then attempts to compensate for it after execution.</p>
<p>The goal isn't to create a perfect quantum computer. The goal is to extract a better approximation of the correct answer from imperfect hardware.</p>
<p>A simplified workflow looks like this:</p>
<pre><code class="language-text">Write Circuit
       ↓
Run on Noisy Hardware
       ↓
Collect Results
       ↓
Estimate Hardware Errors
       ↓
Correct the Final Output
</code></pre>
<p>This approach has become an important part of today's quantum computing landscape because it doesn't require fault-tolerant quantum hardware.</p>
<p>Instead, it works with the devices we have today.</p>
<p>Some common error mitigation techniques include:</p>
<ul>
<li><p>Measurement error mitigation</p>
</li>
<li><p>Zero-noise extrapolation (ZNE)</p>
</li>
<li><p>Probabilistic error cancellation (PEC)</p>
</li>
<li><p>Clifford data regression (CDR)</p>
</li>
</ul>
<p>You don't need to understand these techniques in detail right now.</p>
<p>The important takeaway is that error mitigation tries to improve the final answer after the computation has already finished.</p>
<h3 id="heading-what-is-error-suppression">What Is Error Suppression?</h3>
<p>Error suppression takes a very different approach.</p>
<p>Instead of correcting errors after the circuit finishes, it tries to <strong>prevent many of those errors from happening in the first place</strong>.</p>
<p>Imagine you're hiking through a muddy trail. Error mitigation is like cleaning your boots after the hike. Error suppression is like wearing waterproof boots before you start walking.</p>
<p>Both approaches improve the final outcome. One acts <strong>after</strong> the problem occurs. The other acts <strong>during</strong> the journey to reduce the problem altogether.</p>
<p>A simplified workflow looks like this:</p>
<pre><code class="language-text">Write Circuit
      ↓
Reduce Noise During Execution
      ↓
Execute Circuit
      ↓
Measure Results
</code></pre>
<p>Instead of estimating corrections afterward, error suppression focuses on protecting fragile quantum information while the computation is taking place.</p>
<p>This often involves techniques that reduce the impact of environmental noise, improve gate execution, or protect qubits during idle periods.</p>
<p>One of the best-known examples is dynamical decoupling, a technique you'll explore shortly</p>
<h3 id="heading-comparing-the-two-approaches">Comparing the Two Approaches</h3>
<p>Although both methods improve quantum computations, they operate at different stages of the workflow.</p>
<table>
<thead>
<tr>
<th>Error Mitigation</th>
<th>Error Suppression</th>
</tr>
</thead>
<tbody><tr>
<td>Applied after circuit execution</td>
<td>Applied while the circuit executes</td>
</tr>
<tr>
<td>Estimates and compensates for errors</td>
<td>Attempts to reduce errors before they accumulate</td>
</tr>
<tr>
<td>Focuses on improving measured results</td>
<td>Focuses on protecting the quantum state itself</td>
</tr>
<tr>
<td>Often relies on classical post-processing</td>
<td>Often modifies or augments the quantum circuit</td>
</tr>
</tbody></table>
<p>Neither approach completely eliminates quantum noise.</p>
<p>Instead, they complement each other.</p>
<p>In fact, you'll often get better results by combining both techniques</p>
<h3 id="heading-why-error-suppression-is-becoming-more-important">Why Error Suppression Is Becoming More Important</h3>
<p>As quantum algorithms become larger, the number of opportunities for noise to accumulate also increases.</p>
<p>Imagine a circuit containing only two gates, a tiny error may have almost no noticeable effect.</p>
<p>Now imagine a circuit containing hundreds or thousands of gates. Those same tiny errors can accumulate until the final result becomes unreliable.</p>
<p>This is especially challenging for algorithms that require qubits to remain coherent over longer periods or spend time waiting while other operations complete.</p>
<p>In these situations, reducing noise during execution becomes increasingly valuable.</p>
<p>Rather than trying to recover lost information afterward, researchers look for ways to preserve that information before it disappears.</p>
<p>That's where error suppression techniques have attracted significant attention.</p>
<h3 id="heading-introducing-dynamical-decoupling">Introducing Dynamical Decoupling</h3>
<p>This is one of the most widely studied error suppression techniques. The name sounds intimidating, but the underlying idea is surprisingly intuitive.</p>
<p>Imagine balancing a broomstick upright on your hand. If you leave your hand perfectly still, the broomstick quickly falls over. But if you make small, carefully timed adjustments, you can keep it balanced much longer.</p>
<p>You're not changing the broomstick. You're continually making tiny corrections that prevent small disturbances from growing into larger problems.</p>
<p>Dynamical decoupling works in a similar way.</p>
<p>While a qubit is temporarily idle, carefully chosen pulse sequences are applied to help reduce the effects of environmental noise and preserve its quantum state for longer.</p>
<p>The underlying theory has been studied for decades and has become one of the foundational techniques in quantum error suppression research.</p>
<p>However, applying these techniques hasn't always been straightforward.</p>
<p>Developers often needed specialized knowledge to determine when and where these pulse sequences should be inserted into a circuit.</p>
<p>For many software developers, that level of hardware expertise sits well outside their day-to-day workflow.</p>
<h3 id="heading-where-orbit-fits">Where Orbit Fits</h3>
<p>This brings us to the motivation behind <strong>Orbit</strong>.</p>
<p>Rather than expecting every developer to become an expert in dynamical decoupling and other advanced error suppression techniques, Orbit is designed to make those capabilities more accessible through a familiar Qiskit workflow.</p>
<p>Conceptually, the workflow changes from this:</p>
<pre><code class="language-text">Write Circuit
     ↓
Manually Analyze Idle Periods
     ↓
Design Error Suppression Strategy
     ↓
Modify Circuit
     ↓
Execute on Hardware
</code></pre>
<p>to something much simpler:</p>
<pre><code class="language-text">Write Circuit
     ↓
Orbit Applies Error Suppression
     ↓
Execute on Hardware
</code></pre>
<p>Notice what hasn't changed. You still design your quantum algorithm. You still write your Qiskit circuit. You still execute it on quantum hardware.</p>
<p>The difference is that the error suppression strategy can become part of the workflow instead of another manual optimization task.</p>
<p>In other words, Orbit isn't trying to replace Qiskit.</p>
<p>It's designed to help developers get more reliable results from the quantum circuits they already know how to build.</p>
<h2 id="heading-how-automated-error-suppression-fits-into-a-modern-quantum-workflow">How Automated Error Suppression Fits into a Modern Quantum Workflow</h2>
<p>By this point, we've established two important ideas.</p>
<p>First, today's quantum computers are inherently noisy. As circuits become larger and more complex, even small hardware imperfections accumulate and reduce the quality of the final results.</p>
<p>Second, developers have two broad ways to deal with that noise: <strong>error mitigation</strong>, which improves results after execution, and <strong>error suppression</strong>, which attempts to reduce errors while the circuit is running.</p>
<p>The obvious question now is:</p>
<blockquote>
<p><strong>How do developers actually apply error suppression in practice?</strong></p>
</blockquote>
<p>Historically, the answer hasn't been particularly simple.</p>
<p>Many error suppression techniques require a deep understanding of quantum hardware. Developers often need to analyze their circuits, identify where qubits remain idle, experiment with different optimization strategies, and repeatedly execute the circuit to determine which approach produces the best results.</p>
<p>That process can be both time-consuming and highly specialized.</p>
<p>Even worse, a strategy that improves one circuit may provide little benefit for another.</p>
<p>As Quantum Elements explains in its recent technical blog, developers often end up repeating a cycle of testing, tuning, and rerunning experiments because there isn't a one-size-fits-all solution to quantum noise.</p>
<h3 id="heading-moving-from-manual-optimization-to-automated-workflows">Moving from Manual Optimization to Automated Workflows</h3>
<p>Modern software development has steadily moved toward automation.</p>
<p>We use formatters instead of manually adjusting indentation. We use linters instead of searching for style issues ourselves. We use CI/CD pipelines instead of deploying applications by hand.</p>
<p>Quantum software is beginning to follow the same pattern.</p>
<p>Instead of asking every developer to become an expert in hardware-aware optimization techniques, newer tools aim to automate parts of that workflow while allowing developers to continue writing standard Qiskit circuits.</p>
<p>One example is <strong>Orbit</strong>, which Quantum Elements recently made available as a <strong>Qiskit Function</strong> for IBM Quantum Network members.</p>
<p>Conceptually, the workflow changes from something like this:</p>
<pre><code class="language-text">Write Quantum Circuit
        ↓
Study Hardware Characteristics
        ↓
Experiment with Error Suppression
        ↓
Modify Circuit
        ↓
      Execute
</code></pre>
<p>To a simpler workflow:</p>
<pre><code class="language-text">Write Quantum Circuit
        ↓
Apply Automated Error Suppression
        ↓
      Execute
</code></pre>
<p>The important thing to notice is that <strong>your algorithm doesn't change</strong>.</p>
<p>You still design the circuit and write Qiskit code. The goal is to make advanced optimization techniques easier to integrate into an existing development workflow.</p>
<h3 id="heading-what-orbit-publicly-says-it-does">What Orbit Publicly Says It Does</h3>
<p>Quantum Elements has shared a high-level overview of how Orbit works without disclosing its proprietary implementation.</p>
<p>Orbit accepts an existing Qiskit circuit through the Qiskit Functions interface and prepares it for execution by applying a combination of techniques that may include:</p>
<ul>
<li><p>circuit-level optimization during transpilation,</p>
</li>
<li><p>measurement error mitigation, and</p>
</li>
<li><p>advanced <strong>dynamical decoupling</strong> sequences inserted during idle periods where qubits would otherwise accumulate additional noise.</p>
</li>
</ul>
<p>Notice that none of these techniques require developers to redesign their algorithms from scratch.</p>
<p>Instead, the emphasis is on improving how an existing circuit executes on today's quantum hardware.</p>
<p>Exactly how those optimizations are chosen internally is part of Orbit's implementation, but from a developer's perspective the workflow remains familiar:</p>
<ol>
<li><p>Build your quantum circuit.</p>
</li>
<li><p>Submit it through the supported workflow.</p>
</li>
<li><p>Execute the optimized circuit on compatible IBM Quantum hardware.</p>
</li>
</ol>
<h3 id="heading-a-real-hardware-example">A Real Hardware Example</h3>
<p>So far, you've seen how noise affects a simple Bell-state circuit. But the real challenge appears when circuits become larger and qubits spend more time waiting for other operations to finish.</p>
<p>That's exactly the kind of situation Quantum Elements used in a recent public benchmark for Orbit.</p>
<p>In the experiment, the circuit was executed on IBM's ibm_aachen quantum processor. The goal wasn't to show a completely different quantum algorithm. It was to test what happens when a circuit contains more operations, more waiting periods, and more opportunities for noise to accumulate.</p>
<p>As circuits grow, some qubits often remain idle while other qubits are being measured or processed. Earlier in this article, you learned that idle qubits don't freeze in time. They continue interacting with their environment, and that interaction can gradually destroy the quantum information you're trying to preserve.</p>
<p>According to Quantum Elements' published benchmark, Orbit applies error-suppression techniques during these idle periods and combines them with other circuit-level optimizations.</p>
<p>The company compared three versions of the same workload:</p>
<ul>
<li><p>a standard implementation,</p>
</li>
<li><p>a dynamic implementation without additional protection, and</p>
</li>
<li><p>the dynamic implementation with Orbit enabled.</p>
</li>
</ul>
<p>The reported results showed that the protected version maintained stronger performance across multiple runs on ibm_aachen.</p>
<p>Quantum Elements also reported an increase in the effective qubit lifetime for this particular experiment, which allowed larger versions of the circuit to remain usable for longer.</p>
<p>The important takeaway isn't that every quantum circuit will improve by the same amount.</p>
<p>The more useful lesson is the one you've been building throughout this tutorial:</p>
<p>As quantum circuits become larger and qubits spend more time idle, reducing the accumulation of noise becomes just as important as designing the algorithm itself.</p>
<p>That's why automated error suppression is becoming an increasingly interesting part of modern quantum software workflows. Instead of manually analyzing every idle period and tuning every optimization yourself, tools such as Orbit aim to make those hardware-aware improvements easier to apply to circuits you've already written in Qiskit.</p>
<h3 id="heading-should-you-use-orbit">Should You Use Orbit?</h3>
<p>If you're just beginning your quantum-computing journey, probably not yet.</p>
<p>Your time is better spent learning how quantum circuits work, becoming comfortable with Qiskit, and understanding concepts such as superposition, entanglement, quantum noise, and circuit depth.</p>
<p>However, once you start running larger circuits on IBM Quantum hardware, you'll likely encounter situations where noise becomes a practical limitation rather than just a theoretical concept.</p>
<p>That's the kind of workflow automated error-suppression tools are designed to support.</p>
<p>At the time of writing, Quantum Elements is offering developers <strong>three months of complimentary access</strong> to Orbit for eligible users through a request process. If you're already experimenting with IBM Quantum hardware and would like to evaluate how automated error suppression fits into your workflow, you can request access from <a href="https://quantumelements.ai/orbit-access">Quantum Elements</a>.</p>
<p>Whether you eventually use Orbit or another solution, the bigger lesson remains the same:</p>
<p>Writing a correct quantum algorithm is only part of the challenge. Learning how that algorithm behaves on real quantum hardware — and learning how to reduce the impact of noise — is becoming an increasingly important skill for every quantum developer.</p>
 ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ How to Write Your First Quantum Circuit in Python: A Beginner's Step-by-Step Guide ]]>
                </title>
                <description>
                    <![CDATA[ Imagine opening your laptop and writing code that follows the laws of Quantum Physics. Sounds like science fiction, right? That's exactly what I thought the first time I heard about quantum computing. ]]>
                </description>
                <link>https://www.freecodecamp.org/news/how-to-write-your-first-quantum-circuit-in-python-a-beginner-s-step-by-step-guide/</link>
                <guid isPermaLink="false">6a43087a41950d02c662e901</guid>
                
                    <category>
                        <![CDATA[ quantum computing ]]>
                    </category>
                
                    <category>
                        <![CDATA[ Python ]]>
                    </category>
                
                    <category>
                        <![CDATA[ beginner ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Casmir Onyekani ]]>
                </dc:creator>
                <pubDate>Tue, 30 Jun 2026 00:06:18 +0000</pubDate>
                <media:content url="https://cdn.hashnode.com/uploads/covers/5e1e335a7a1d3fcc59028c64/ce5d0476-b953-4865-810b-3f86021152c7.png" medium="image" />
                <content:encoded>
                    <![CDATA[ <p>Imagine opening your laptop and writing code that follows the laws of Quantum Physics. Sounds like science fiction, right?</p>
<p>That's exactly what I thought the first time I heard about quantum computing. I assumed quantum computers were machines hidden inside secret laboratories. I imagined researchers in white coats working with equipment worth millions of dollars.</p>
<p>Then I discovered something surprising: you can write and run your first quantum program using Python on a regular laptop.</p>
<p>No quantum computer required. No physics degree required. No advanced mathematics required.</p>
<p>Just Python.</p>
<p>In this tutorial, you'll learn how to build your first quantum circuit using Python and Qiskit.</p>
<p>By the end, you'll understand what a quantum circuit is, how qubits work, and how to create one of the most famous experiments in quantum computing called a Bell State.</p>
<p>Let's get started.</p>
<h3 id="heading-table-of-contents">Table Of Contents</h3>
<ul>
<li><p><a href="#heading-what-is-quantum-computing">What Is Quantum Computing?</a></p>
<ul>
<li><a href="#heading-why-should-python-developers-care-about-quantum-computing">Why Should Python Developers Care About Quantum Computing?</a></li>
</ul>
</li>
<li><p><a href="#heading-what-is-a-quantum-circuit">What Is a Quantum Circuit?</a></p>
</li>
<li><p><a href="#heading-quantum-gates-explained-like-a-python-developer">Quantum Gates Explained Like a Python Developer</a></p>
<ul>
<li><p><a href="#heading-x-gate-the-quantum-light-switch">X Gate: The Quantum Light Switch</a></p>
</li>
<li><p><a href="#heading-classical-example">Classical Example</a></p>
</li>
<li><p><a href="#heading-quantum-example">Quantum Example</a></p>
</li>
<li><p><a href="#heading-h-gate-the-spinning-coin-trick">H Gate: The Spinning Coin Trick</a></p>
</li>
<li><p><a href="#heading-example">Example</a></p>
</li>
<li><p><a href="#heading-cx-gate-making-two-qubits-work-together">CX Gate: Making Two Qubits Work Together</a></p>
</li>
<li><p><a href="#heading-how-to-set-up-your-python-environment">How to Set Up Your Python Environment</a></p>
</li>
</ul>
</li>
<li><p><a href="#heading-building-your-first-quantum-circuit">Building Your First Quantum Circuit</a></p>
<ul>
<li><p><a href="#heading-creating-superposition">Creating Superposition</a></p>
</li>
<li><p><a href="#heading-creating-entanglement-with-the-cnot-gate">Creating Entanglement With the CNOT Gate</a></p>
</li>
<li><p><a href="#heading-measuring-the-qubits">Measuring the Qubits</a></p>
</li>
<li><p><a href="#heading-running-the-circuit-on-a-quantum-simulator">Running the Circuit on a Quantum Simulator</a></p>
</li>
<li><p><a href="#heading-your-complete-bell-state-program">Your Complete Bell State Program</a></p>
</li>
<li><p><a href="#heading-for-windows-users-a-common-qiskit-aer-error">For Windows Users: A Common Qiskit Aer Error</a></p>
</li>
<li><p><a href="#heading-other-common-mistakes-beginners-make">Other Common Mistakes Beginners Make</a></p>
</li>
</ul>
</li>
<li><p><a href="#heading-visualizing-results-with-a-histogram">Visualizing Results With a Histogram</a></p>
</li>
<li><p><a href="#heading-understanding-what-just-happened">Understanding What Just Happened</a></p>
</li>
<li><p><a href="#heading-what-is-a-bell-state">What Is a Bell State?</a></p>
<ul>
<li><a href="#heading-why-bell-states-matter">Why Bell States Matter</a></li>
</ul>
</li>
<li><p><a href="#heading-real-world-applications-of-quantum-entanglement">Real World Applications of Quantum Entanglement</a></p>
<ul>
<li><p><a href="#heading-quantum-cryptography">Quantum Cryptography</a></p>
</li>
<li><p><a href="#heading-quantum-networking">Quantum Networking</a></p>
</li>
<li><p><a href="#heading-drug-discovery">Drug Discovery</a></p>
</li>
<li><p><a href="#heading-financial-modeling">Financial Modeling</a></p>
</li>
</ul>
</li>
<li><p><a href="#heading-beginner-experiments-to-try">Beginner Experiments to Try</a></p>
<ul>
<li><p><a href="#heading-experiment-1-remove-the-hadamard-gate">Experiment 1: Remove the Hadamard Gate</a></p>
</li>
<li><p><a href="#heading-experiment-2-increase-the-number-of-shots">Experiment 2: Increase the Number of Shots</a></p>
</li>
<li><p><a href="#heading-experiment-3-add-an-x-gate">Experiment 3: Add an X Gate</a></p>
</li>
<li><p><a href="#heading-experiment-4-create-three-qubits">Experiment 4: Create Three Qubits</a></p>
</li>
</ul>
</li>
<li><p><a href="#heading-what-should-you-learn-next">What Should You Learn Next?</a></p>
<ul>
<li><p><a href="#heading-build-larger-circuits">Build Larger Circuits</a></p>
</li>
<li><p><a href="#heading-explore-real-quantum-hardware">Explore Real Quantum Hardware</a></p>
</li>
<li><p><a href="#heading-learn-quantum-algorithms">Learn Quantum Algorithms</a></p>
</li>
</ul>
</li>
<li><p><a href="#heading-final-thoughts">Final Thoughts</a></p>
</li>
</ul>
<h2 id="heading-what-is-quantum-computing">What Is Quantum Computing?</h2>
<p>Most software developers work on <strong>regular computers</strong>, just like yours - a laptop, smartphone, or gaming console.</p>
<p>Every one of these devices processes information using bits. A bit can only have one value at a time: <code>0 or 1</code> Nothing in between.</p>
<p>Quantum computers use something different. They use <strong>qubits</strong>. A qubit can behave like a <code>0</code> and a <code>1</code> at the same time until it's measured.</p>
<p>Don't worry if that sounds strange. It sounds strange to everyone the first time.</p>
<p>Think about a coin. When a coin is lying flat on a table, it's either heads or tails. That's exactly how a regular computer bit works. But now, imagine spinning that coin. While it's spinning, it's a blur of both heads and tails at the same time. That's exactly how a quantum bit works</p>
<p>This isn't a perfect explanation. But it's a useful one for beginners.</p>
<p>This ability allows quantum computers to solve certain types of problems differently from regular computers.</p>
<h3 id="heading-why-should-python-developers-care-about-quantum-computing">Why Should Python Developers Care About Quantum Computing?</h3>
<p>You might be thinking: "I'm a Python developer. Why should I learn quantum computing?"</p>
<p>Good question.</p>
<p>The truth is that quantum computing is still in its early stages, but so was artificial intelligence a few years ago. Developers who learn early often gain an advantage.</p>
<p>Python has become one of the most popular languages for quantum programming because it is simple and beginner friendly. Many major quantum platforms provide Python libraries. These include:</p>
<ul>
<li><p><a href="https://www.ibm.com/quantum/qiskit">IBM Qiskit</a></p>
</li>
<li><p><a href="https://medium.com/@adnanmasood/quantum-sundays-24-cirq-for-noisy-intermediate-scale-quantum-nisq-circuit-programming-c2c3f951d21d">Google Cirq</a></p>
</li>
<li><p><a href="https://aws.amazon.com/braket/">Amazon Braket</a></p>
</li>
</ul>
<p>Among these options, Qiskit is one of the easiest places to start. That's what you'll use in this tutorial.</p>
<p>If you already know variables, functions, and basic Python syntax, you're ready to begin.</p>
<h2 id="heading-what-is-a-quantum-circuit">What Is a Quantum Circuit?</h2>
<p>If you've built web applications before, you're probably familiar with workflows.</p>
<p>For example:</p>
<pre><code class="language-yaml">User clicks button 
        ↓ 
Data is validated 
        ↓ 
Request is sent 
        ↓ 
Response is returned
</code></pre>
<p>A quantum circuit works in a similar way. Instead of processing user input, it processes qubits.</p>
<p>A quantum circuit is simply a sequence of instructions applied to qubits.</p>
<p>Here's a simplified view:</p>
<pre><code class="language-yaml">Create qubits 
      ↓
Apply quantum gates 
      ↓ 
Measure results 
      ↓ 
Display output
</code></pre>
<p>At its core, a quantum circuit simply involves initializing qubits, performing operations, and measuring the results.</p>
<h2 id="heading-quantum-gates-explained-like-a-python-developer">Quantum Gates Explained Like a Python Developer</h2>
<p>If you've written Python before, you've probably changed values many times.</p>
<p>For example:</p>
<pre><code class="language-python">light = False

light = not light

print(light)
</code></pre>
<p>Output:</p>
<pre><code class="language-python">True
</code></pre>
<p>The <code>not</code> operator changes the value. It takes <code>False</code> and turns it into <code>True</code>.</p>
<p>Quantum computers also need ways to change values. Instead of using operators like <code>not</code>, they use something called <strong>quantum gates</strong>.</p>
<p>Think of quantum gates as special instructions that tell a qubit what to do.</p>
<p>Just like Python has:</p>
<ul>
<li><p><code>not</code></p>
</li>
<li><p><code>+</code></p>
</li>
<li><p><code>-</code></p>
</li>
<li><p><code>*</code></p>
</li>
</ul>
<p>Quantum computing has:</p>
<ul>
<li><p>X Gate</p>
</li>
<li><p>H Gate</p>
</li>
<li><p>CX Gate</p>
</li>
</ul>
<p>Let's understand them one at a time.</p>
<h3 id="heading-x-gate-the-quantum-light-switch">X Gate: The Quantum Light Switch</h3>
<p>Imagine the light switch in your room.</p>
<p>When the switch is OFF: <code>OFF</code>. Press the switch. Now it becomes: <code>ON</code>. Press it again. It becomes <code>OFF</code>.</p>
<p>The switch keeps flipping between the two states, and that's exactly what the X Gate does.</p>
<h3 id="heading-classical-example">Classical Example</h3>
<pre><code class="language-plaintext">0 → 1
1 → 0
</code></pre>
<h3 id="heading-quantum-example">Quantum Example</h3>
<pre><code class="language-plaintext">qc.x(0)
</code></pre>
<p>This means: Apply an X Gate to qubit <code>0</code>.</p>
<p>If qubit <code>0</code> was behaving like a <code>0</code>, it now behaves like a <code>1</code>.</p>
<p>If it was behaving like a <code>1</code>, it becomes a <code>0</code>.</p>
<p>Think of the <code>X Gate</code> as the quantum version of a light switch or a Python <code>not</code> operator.</p>
<h3 id="heading-h-gate-the-spinning-coin-trick">H Gate: The Spinning Coin Trick</h3>
<p>Now things get interesting. Imagine I place a coin on a table. It can only be <code>Heads</code> or <code>Tails</code>, right?</p>
<p>That's how a normal computer works. A bit is either <code>0</code> or <code>1</code></p>
<p>Now imagine I spin that coin. While it's spinning, can you confidently say it's heads at any given moment?</p>
<p>No.</p>
<p>Can you confidently say it's tails?</p>
<p>No.</p>
<p>It hasn't landed yet. It's in a special state where both outcomes are possible.</p>
<p>That's the easiest way to think about what the <a href="https://www.quera.com/glossary/hadamard-gate">H Gate</a> (or Hadamard Gate) does.</p>
<h3 id="heading-example">Example</h3>
<pre><code class="language-plaintext">qc.h(0)
</code></pre>
<p>This tells Qiskit to put qubit <code>0</code> into a superposition.</p>
<p>In beginner language, the qubit is no longer locked to just <code>0</code> or just <code>1</code>. It now has a chance of becoming either when we measure it. Think of it like a spinning coin waiting to land.</p>
<h4 id="heading-before-h-gate">Before H Gate:</h4>
<pre><code class="language-plaintext">0
</code></pre>
<h4 id="heading-after-h-gate">After H Gate:</h4>
<pre><code class="language-plaintext">0 and 1 are both possible
</code></pre>
<p>This idea is one of the reasons quantum computers are so powerful.</p>
<p>Instead of exploring only one possibility at a time, they can work with multiple possibilities.</p>
<h3 id="heading-cx-gate-making-two-qubits-work-together">CX Gate: Making Two Qubits Work Together</h3>
<p>The <strong>CX Gate</strong>, also called the <strong>CNOT (Controlled NOT Gate)</strong>, is different from the X and H gates because it works with two qubits instead of one.</p>
<p>To understand how it works, let's use a simple real-life example.</p>
<p>Imagine you and your friend are playing a game. Before the game starts, you both agree on one rule.</p>
<p>If you raise your hand, your friend must immediately switch what they're doing. If they were standing, they should sit. If they were sitting, they should stand.</p>
<p>But if you keep your hand down, your friend does nothing and stays exactly as they are.</p>
<p>Notice something important: your friend's action depends entirely on what you do. They don't decide on their own.</p>
<p>That's very similar to how the CX Gate works.</p>
<p>Here's how we use it in Qiskit:</p>
<pre><code class="language-plaintext">qc.cx(0, 1)
</code></pre>
<p>This line tells Qiskit: "Use qubit <code>0</code> to control what happens to qubit <code>1</code>."</p>
<p>In this case:</p>
<pre><code class="language-plaintext">Qubit 0 → Control qubit

Qubit 1 → Target qubit
</code></pre>
<p>The control qubit makes the decision, and the target qubit responds.</p>
<h4 id="heading-heres-what-happens-behind-the-scenes">Here's what happens behind the scenes:</h4>
<p>If the control qubit is <code>0</code>, nothing happens. The target qubit stays exactly the same.</p>
<p>If the control qubit is <code>1</code>, the target qubit flips: <code>0</code> becomes <code>1</code>.</p>
<p>Think of the control qubit as a manager giving instructions to an employee. The employee doesn't act randomly. They only change what they're doing when the manager gives the signal.</p>
<p>By itself, the CX Gate is already useful.</p>
<p>But when we combine it with the Hadamard gate, something amazing happens. The two qubits become connected in a special way called entanglement. You'll learn about that later in this tutorial. Now, it's time to practice what you've learned using Python.</p>
<h3 id="heading-how-to-set-up-your-python-environment">How to Set Up Your Python Environment</h3>
<p>Here comes the fun part. Let's prepare your machine. Before you continue, make sure Python is installed on your local computer. For this tutorial, use Python version <code>3.12.8</code> or <code>3.13.8</code>. Those versions work well with all the dependencies you'll be installing.</p>
<pre><code class="language-properties">3.12.8
</code></pre>
<h4 id="heading-step-1-create-a-new-project-folder">Step 1: Create a New Project Folder</h4>
<p>Create a folder called: <code>quantum-python</code> and then open it in VS Code.</p>
<h4 id="heading-step-2-create-a-virtual-environment">Step 2: Create a Virtual Environment</h4>
<p>In your terminal (here I'm using Git Bash), run:</p>
<pre><code class="language-plaintext">python -m venv .venv
</code></pre>
<p>Then activate it. On Windows using Git Bash, run:</p>
<pre><code class="language-shell">source .venv/Scripts/activate
</code></pre>
<p>And on MacOS/Linux:</p>
<pre><code class="language-plaintext">source .venv/bin/activate
</code></pre>
<h4 id="heading-step-3-install-qiskit">Step 3: Install Qiskit</h4>
<p>Run:</p>
<pre><code class="language-shell">pip install qiskit qiskit-aer matplotlib
</code></pre>
<p>This installs:</p>
<ul>
<li><p>Qiskit</p>
</li>
<li><p>Quantum simulator</p>
</li>
<li><p>Chart visualization tools</p>
</li>
</ul>
<h4 id="heading-step-4-verify-installation">Step 4: Verify Installation</h4>
<p>Create a file called:</p>
<pre><code class="language-plaintext">test.py
</code></pre>
<p>Add:</p>
<pre><code class="language-python">import qiskit

print(qiskit.__version__)
</code></pre>
<p>Run:</p>
<pre><code class="language-shell">python test.py
</code></pre>
<p>If you see a version number, you're ready.</p>
<p>Congratulations! You've officially entered the world of quantum programming.</p>
<h2 id="heading-building-your-first-quantum-circuit">Building Your First Quantum Circuit</h2>
<p>Create a new file called <code>bell_state.py</code>. This file will contain your first quantum program.</p>
<p>Now you need to import Qiskit. Add:</p>
<pre><code class="language-python">from qiskit import QuantumCircuit

qc = QuantumCircuit(2, 2)
</code></pre>
<p>This imports the <code>QuantumCircuit</code> class.</p>
<p>What does this mean? QuantumCircuit(2, 2) creates 2 qubits and 2 classical bits.</p>
<p>The classical bits will store the final results after measurement.</p>
<p>Let's print the circuit.</p>
<pre><code class="language-python">print(qc)
</code></pre>
<p>Output:</p>
<pre><code class="language-plaintext">q_0:
q_1:
c:
</code></pre>
<p>Right now, nothing is happening. The circuit is empty. You're about to change that.</p>
<h3 id="heading-creating-superposition">Creating Superposition</h3>
<p>Let's add our first quantum gate: <code>qc.h(0)</code>.</p>
<p>This applies a Hadamard Gate to qubit <code>0</code>.</p>
<p>Your code becomes:</p>
<pre><code class="language-python">from qiskit import QuantumCircuit

qc = QuantumCircuit(2, 2)

qc.h(0)

print(qc)
</code></pre>
<p>Output:</p>
<pre><code class="language-plaintext">
      ───
q_0: ┤ H  ├
      ───
q_1: ─────
          
c: 2/═════
</code></pre>
<p>The H gate places qubit <code>0</code> into superposition. This is where quantum behavior begins.</p>
<p>You have officially created your first quantum state.</p>
<h3 id="heading-creating-entanglement-with-the-cnot-gate">Creating Entanglement With the CNOT Gate</h3>
<p>So far, we've only worked with a single qubit. Let's do something much more interesting.</p>
<p>You can make two qubits work together. This phenomenon is called <strong>entanglement</strong>.</p>
<p>If you've spent time on tech Twitter or watched science videos on YouTube, you've probably heard people call entanglement "spooky action at a distance."</p>
<p>Don't worry about the fancy name, just focus on the code.</p>
<p>Add this line beneath your Hadamard gate: <code>qc.cx(0, 1)</code>.</p>
<p>Your program should now look like this:</p>
<pre><code class="language-python">from qiskit import QuantumCircuit

qc = QuantumCircuit(2, 2)

qc.h(0)

qc.cx(0, 1)

print(qc)
</code></pre>
<p>Output:</p>
<pre><code class="language-plaintext">      ───     
q_0: ┤  H ├─■──
      ───  ─┴─
q_1: ────┤ X  ├
            ───
c: 2/══════════
</code></pre>
<p>But what exactly happened?</p>
<p>The first qubit entered superposition when we applied the H gate. The CNOT gate then linked the second qubit to the first. Now the two qubits behave as a connected system, not two separate pieces of information. Just one shared quantum state.</p>
<p>Think about two perfectly synchronized dice. Every time you roll them, they somehow always show the same number.</p>
<p>Sounds impossible, right? That's because it is impossible in normal classical computing.</p>
<p>But quantum mechanics plays by different rules.</p>
<h3 id="heading-measuring-the-qubits">Measuring the Qubits</h3>
<p>Right now our qubits exist in a quantum state, but computers can't display quantum states directly.</p>
<p>We need to measure them. Measurement converts quantum information into classical information.</p>
<p>Add the following line: <code>qc.measure([0, 1], [0, 1])</code>.</p>
<p>Your code now becomes:</p>
<pre><code class="language-python">from qiskit import QuantumCircuit

qc = QuantumCircuit(2, 2)

qc.h(0)

qc.cx(0, 1)

qc.measure([0, 1], [0, 1])

print(qc)
</code></pre>
<p>What does this line do?</p>
<p>It means:</p>
<ul>
<li><p>Measure qubit <code>0</code></p>
</li>
<li><p>Store result in classical bit <code>0</code></p>
</li>
</ul>
<p>and</p>
<ul>
<li><p>Measure qubit <code>1</code></p>
</li>
<li><p>Store result in classical bit <code>1</code></p>
</li>
</ul>
<p>At this point our circuit is complete. Now we need to execute it.</p>
<h3 id="heading-running-the-circuit-on-a-quantum-simulator">Running the Circuit on a Quantum Simulator</h3>
<p>Here's the cool part. You don't need a quantum computer. Your laptop can simulate one.</p>
<p>Create a new section beneath your circuit.</p>
<pre><code class="language-python">from qiskit_aer import AerSimulator

simulator = AerSimulator()

result = simulator.run(
    qc,
    shots=1024
).result()

counts = result.get_counts()

print(counts)
</code></pre>
<p>Let's break it down.</p>
<h4 id="heading-what-is-aersimulator-that-you-installed">What Is AerSimulator That You Installed?</h4>
<p>AerSimulator is Qiskit's local quantum simulator.</p>
<p>Instead of sending your program to a real quantum machine, it runs everything on your computer.</p>
<p>This is perfect for learning and experimentation, and it's completely free.</p>
<h4 id="heading-what-are-shots">What Are Shots?</h4>
<p>Notice this line: <code>shots=1024</code>.</p>
<p>A shot is a single execution of the quantum circuit. Quantum outcomes are probabilistic, which means that one execution isn't enough.</p>
<p>Running 1,024 shots lets us see the overall pattern.</p>
<p>Think of it like flipping a coin. One flip tells you nothing but a thousand flips reveal the probabilities.</p>
<h3 id="heading-your-complete-bell-state-program">Your Complete Bell State Program</h3>
<p>At this point your file should look like this:</p>
<pre><code class="language-python">from qiskit import QuantumCircuit
from qiskit_aer import AerSimulator

qc = QuantumCircuit(2, 2)

qc.h(0)

qc.cx(0, 1)

qc.measure([0, 1], [0, 1])

simulator = AerSimulator()

result = simulator.run(
    qc,
    shots=1024
).result()

counts = result.get_counts()

print(counts)
</code></pre>
<p>Save the file.</p>
<p>Run: <code>python bell_state.py</code>.</p>
<p>You should see something similar to:</p>
<pre><code class="language-plaintext">{
    '00': 504,
    '11': 520
}
</code></pre>
<p>Your numbers will be slightly different, which is normal. The important thing is that you see: <code>00</code>and <code>11</code>.</p>
<p>You should never see: <code>01</code> or <code>10</code></p>
<p>And that's the clue that tells us entanglement is working.</p>
<h3 id="heading-for-windows-users-a-common-qiskit-aer-error">For Windows Users: A Common Qiskit Aer Error</h3>
<p>If you're using Windows, you might run into this error when importing <code>AerSimulator</code>:</p>
<pre><code class="language-plaintext">ImportError: DLL load failed while importing controller_wrappers:
The specified module could not be found.
</code></pre>
<p>This usually isn't a problem with your code. It happens because Microsoft Visual C++ Redistributable 2015–2022 (x64) isn't installed on your system.</p>
<p>To fix it:</p>
<ol>
<li><p>Download and install the Microsoft Visual C++ Redistributable 2015–2022 (x64) from the official <a href="https://learn.microsoft.com/en-us/cpp/windows/latest-supported-vc-redist?view=msvc-170">Microsoft website</a>.</p>
</li>
<li><p>Restart your computer.</p>
</li>
<li><p>Reopen your terminal and run your program again.</p>
</li>
</ol>
<p>Once the runtime is installed, <code>AerSimulator</code> should import successfully, and you can continue with the rest of the tutorial.</p>
<h3 id="heading-other-common-mistakes-beginners-make">Other Common Mistakes Beginners Make</h3>
<p>If your code doesn't work immediately, don't panic. Everyone hits errors.</p>
<p>Common issues include:</p>
<h4 id="heading-module-not-found">Module Not Found</h4>
<pre><code class="language-plaintext">ModuleNotFoundError
</code></pre>
<p>Solution: <code>pip install qiskit</code>.</p>
<h4 id="heading-wrong-virtual-environment">Wrong Virtual Environment</h4>
<p>Make sure your virtual environment is activated before running the script.</p>
<h4 id="heading-missing-simulator">Missing Simulator</h4>
<p>Install: <code>pip install qiskit-aer</code>.</p>
<h4 id="heading-indentation-errors">Indentation Errors</h4>
<p>Remember that Python cares about spacing. Check your indentation carefully.</p>
<h2 id="heading-visualizing-results-with-a-histogram">Visualizing Results With a Histogram</h2>
<p>Developers love visual feedback. A chart makes quantum behavior easier to understand. You can create one.</p>
<p>Add:</p>
<pre><code class="language-python">from qiskit.visualization import plot_histogram
import matplotlib.pyplot as plt

plot_histogram(counts)

plt.show()
</code></pre>
<p>Your <code>bell_state.py</code> file will now look like this:</p>
<pre><code class="language-python"># IMPORT DEPENDENCIES
from qiskit import QuantumCircuit
from qiskit_aer import AerSimulator
from qiskit.visualization import plot_histogram 
import matplotlib.pyplot as plt

# Create a Quantum Circuit with 2 qubits and 2 classical bits
qc = QuantumCircuit(2, 2)

# Create a Bell state (entanglement) using a Hadamard and a CNOT gate
qc.h(0)
qc.cx(0, 1)

# Measure all qubits into their corresponding classical bits
qc.measure([0, 1], [0, 1])


# Initialize the Aer simulator and execute the circuit for 1024 shots
simulator = AerSimulator()
result = simulator.run(
    qc,
    shots=1024
).result()

# Gather the resulting measurement counts
counts = result.get_counts()

# Print raw text counts and plot the histogram data
print(counts)
plot_histogram(counts) 
plt.show()
</code></pre>
<p>Run your program again, a histogram should appear.</p>
<p>It will look something like this:</p>
<img src="https://cdn.hashnode.com/uploads/covers/647d7b660f441a49aa878a9e/d9740d20-8a20-4e74-941b-e3db07d2e28b.png" alt="Bell State quantum circuit histogram generated with Python and Qiskit" style="display:block;margin:0 auto" width="1364" height="713" loading="lazy">

<p>For the complete project folder, you can get it from <a href="https://github.com/nuelcas/quantum-python.git">Github</a>.</p>
<h2 id="heading-understanding-what-just-happened">Understanding What Just Happened</h2>
<p>Let's pause for a second because something incredible just happened.</p>
<ul>
<li><p>You created entanglement using Python on your laptop without owning a quantum computer.</p>
</li>
<li><p>The first qubit entered superposition.</p>
</li>
<li><p>The second qubit became linked to it.</p>
</li>
</ul>
<p>When measurement happened, both became <code>0</code> or both become <code>1</code>. The outcome was random, but they always agreed. That's the key observation.</p>
<h2 id="heading-what-is-a-bell-state">What Is a Bell State?</h2>
<p>The Bell State is one of the most famous examples in quantum computing. It's often the first experiment beginners learn.</p>
<p>Why? Because it demonstrates two important quantum ideas:</p>
<ul>
<li><p>Superposition</p>
</li>
<li><p>Entanglement</p>
</li>
</ul>
<p>Without Bell States, many quantum algorithms wouldn't exist because:</p>
<ol>
<li><p>Quantum communication systems depend on them.</p>
</li>
<li><p>Quantum cryptography depends on them.</p>
</li>
<li><p>Future quantum networks depend on them.</p>
</li>
</ol>
<p>The Bell State is basically the "Hello World" of quantum computing. Every quantum developer encounters it sooner or later.</p>
<h3 id="heading-why-bell-states-matter">Why Bell States Matter</h3>
<p>At first glance, this experiment seems small: Two qubits, Two gates, and a few lines of Python. Yet, the idea behind it is huge.</p>
<p>Bell States do much more than demonstrate entanglement. Researchers use them as benchmark experiments to verify that quantum hardware can reliably create and measure entangled qubits.</p>
<p>For example, Bell State circuits are commonly executed on superconducting quantum processors to evaluate how accurately the hardware prepares entangled states before running more complex quantum algorithms.</p>
<p>Bell States also play an important role in quantum communication and serve as building blocks for larger quantum algorithms.</p>
<p>Think of them like functions in programming. A single function may seem small but complex applications are built from thousands of them.</p>
<p>The same idea applies here. Large quantum systems are built from smaller quantum operations.</p>
<h2 id="heading-real-world-applications-of-quantum-entanglement">Real World Applications of Quantum Entanglement</h2>
<p>A common question beginners ask is: "When will I actually use this?"</p>
<p>Fair question.</p>
<p>Here are some real examples.</p>
<h3 id="heading-quantum-cryptography">Quantum Cryptography</h3>
<p>While traditional encryption relies on mathematical difficulty, quantum cryptography relies on the laws of physics, ensuring that any attempt to intercept data changes the quantum state and makes eavesdropping immediately detectable.</p>
<h3 id="heading-quantum-networking">Quantum Networking</h3>
<p>Researchers developing quantum internet technologies are heavily leveraging quantum entanglement to connect quantum devices across large distances.</p>
<h3 id="heading-drug-discovery">Drug Discovery</h3>
<p>Quantum computers may eventually simulate molecules more accurately than classical computers. This could help researchers discover new medicines, improve materials, and understand chemical reactions.</p>
<h3 id="heading-financial-modeling">Financial Modeling</h3>
<p>Large financial institutions are exploring quantum algorithms for:</p>
<ul>
<li><p>Portfolio optimization</p>
</li>
<li><p>Risk analysis</p>
</li>
<li><p>Market simulation</p>
</li>
</ul>
<p>The field is still developing, but the potential is enormous.</p>
<h2 id="heading-beginner-experiments-to-try">Beginner Experiments to Try</h2>
<p>The best way you can learn quantum computing is exactly how developers learn programming:</p>
<ul>
<li><p>Break things.</p>
</li>
<li><p>Experiment.</p>
</li>
<li><p>Change the code.</p>
</li>
<li><p>Observe the results.</p>
</li>
</ul>
<p>Let's try a few simple experiments.</p>
<h3 id="heading-experiment-1-remove-the-hadamard-gate">Experiment 1: Remove the Hadamard Gate</h3>
<p>Delete: <code>qc.h(0)</code> and run the circuit again. What changes?</p>
<p>Observe the output. Why do you think that happened?</p>
<h3 id="heading-experiment-2-increase-the-number-of-shots">Experiment 2: Increase the Number of Shots</h3>
<p>Change: <code>shots=1024</code> to <code>shots=100000</code>.</p>
<p>Run the simulation again. Notice how the results become more balanced. This is probability in action.</p>
<h3 id="heading-experiment-3-add-an-x-gate">Experiment 3: Add an X Gate</h3>
<p>Insert: <code>qc.x(1)</code> before the CNOT gate.</p>
<p>Run the circuit.</p>
<p>While studying the new output distribution, try predicting the results before running the code.</p>
<h3 id="heading-experiment-4-create-three-qubits">Experiment 4: Create Three Qubits</h3>
<p>Change: <code>QuantumCircuit(2, 2)</code> to <code>QuantumCircuit(3, 3)</code>.</p>
<p>Can you create a larger entangled system? Experiment and see.</p>
<h2 id="heading-what-should-you-learn-next">What Should You Learn Next?</h2>
<p>You've now built your first quantum circuit. That's a big milestone.</p>
<p>Here are some great next steps you can explore through <a href="https://quantum.cloud.ibm.com/learning/en">IBM Quantum Platform</a>:</p>
<ul>
<li><p>X Gate</p>
</li>
<li><p>Y Gate</p>
</li>
<li><p>Z Gate</p>
</li>
<li><p>S Gate</p>
</li>
<li><p>T Gate</p>
</li>
</ul>
<h3 id="heading-build-larger-circuits">Build Larger Circuits</h3>
<p>Try:</p>
<ul>
<li><p>GHZ States</p>
</li>
<li><p>Quantum Teleportation</p>
</li>
<li><p>Deutsch Algorithm</p>
</li>
</ul>
<h3 id="heading-explore-real-quantum-hardware">Explore Real Quantum Hardware</h3>
<p>IBM allows developers to run circuits on actual quantum computers. This is one of the coolest experiences in modern programming.</p>
<h3 id="heading-learn-quantum-algorithms">Learn Quantum Algorithms</h3>
<p>Once you're comfortable with circuits, explore:</p>
<ul>
<li><p>Grover's Algorithm</p>
</li>
<li><p>Shor's Algorithm</p>
</li>
<li><p>Quantum Fourier Transform</p>
</li>
</ul>
<h2 id="heading-final-thoughts">Final Thoughts</h2>
<p>A few years ago, quantum computing felt impossible to approach. It seemed reserved for physicists and researchers.</p>
<p>Today, that's no longer true. If you know Python, you already have a pathway into quantum development.</p>
<p>In this tutorial, you learned:</p>
<ul>
<li><p>What quantum computing is</p>
</li>
<li><p>How qubits differ from bits</p>
</li>
<li><p>What quantum gates do</p>
</li>
<li><p>How to install Qiskit</p>
</li>
<li><p>How to create a Bell State</p>
</li>
<li><p>How to simulate a quantum circuit</p>
</li>
<li><p>How to visualize results</p>
</li>
<li><p>Why entanglement matters</p>
</li>
</ul>
<p>Most importantly, you wrote your first quantum program. That's how every quantum developer starts.</p>
<p>One circuit. One experiment. One curiosity-driven question at a time.</p>
<p>Now open your editor and modify the code. Break things. Try new gates. And start exploring the quantum world for yourself.</p>
 ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ Learn the Algorithms Behind Quantum Computing ]]>
                </title>
                <description>
                    <![CDATA[ Quantum computing leverages the principles of quantum mechanics to process information at incredible speeds. We just posted a Quantum Computing course on the freeCodeCamp.org YouTube channel. This course, created by Michael from Quantum Soar, is desi... ]]>
                </description>
                <link>https://www.freecodecamp.org/news/learn-the-algorithms-behind-quantum-computing/</link>
                <guid isPermaLink="false">6644db24c3045e03b45dc8f0</guid>
                
                    <category>
                        <![CDATA[ quantum computing ]]>
                    </category>
                
                    <category>
                        <![CDATA[ youtube ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Beau Carnes ]]>
                </dc:creator>
                <pubDate>Wed, 15 May 2024 15:56:20 +0000</pubDate>
                <media:content url="https://cdn.hashnode.com/res/hashnode/image/upload/v1715788225832/18aece93-fa0f-4650-a264-04bcb64ee75d.png" medium="image" />
                <content:encoded>
                    <![CDATA[ <p>Quantum computing leverages the principles of quantum mechanics to process information at incredible speeds.</p>
<p>We just posted a Quantum Computing course on the freeCodeCamp.org YouTube channel. This course, created by Michael from Quantum Soar, is designed to provide a solid foundation in quantum computing, guiding you from the basics to a thorough understanding of popular quantum algorithms.</p>
<p>Unlike classical computers, which use bits as the smallest unit of data (0 or 1), quantum computers use qubits. Qubits can represent and store data in multiple states simultaneously thanks to a property known as superposition. Additionally, quantum entanglement allows qubits that are entangled to be correlated in such a way that the state of one qubit can depend on the state of another, even across large distances. These properties enable quantum computers to solve certain types of problems much more efficiently than classical computers.</p>
<p>Here are some reasons you may want to learn about Quantum Computing:</p>
<ol>
<li><p><strong>Future Technology</strong>: Quantum computing is at the forefront of technological innovation. Learning about it now can place you ahead of the curve as the field grows.</p>
</li>
<li><p><strong>Problem-Solving</strong>: Quantum computers are capable of solving complex problems in areas such as cryptography, optimization, and simulations, which are currently beyond the reach of classical computers.</p>
</li>
<li><p><strong>Career Opportunities</strong>: As quantum computing technology evolves, there will be an increasing demand for professionals with expertise in this field.</p>
</li>
<li><p><strong>Intellectual Challenge</strong>: Understanding quantum computing involves grasping complex mathematical and physical concepts, which could be a rewarding intellectual challenge.</p>
</li>
</ol>
<p>The course is divided into two main sections: foundational mathematics and the mechanics of quantum computers. Here’s what you can expect:</p>
<h4 id="heading-section-1-essential-mathematics"><strong>Section 1: Essential Mathematics</strong></h4>
<ul>
<li><p>0.1 Introduction to Complex Numbers</p>
</li>
<li><p>0.2 Complex Numbers on the Number Plane</p>
</li>
<li><p>0.3 Introduction to Matrices</p>
</li>
<li><p>0.4 Matrix Multiplication to Transform a Vector</p>
</li>
<li><p>0.5 Unitary and Hermitian Matrices</p>
</li>
<li><p>0.6 Eigenvectors and Eigenvalues</p>
</li>
</ul>
<h4 id="heading-section-2-mechanics-of-quantum-computers"><strong>Section 2: Mechanics of Quantum Computers</strong></h4>
<ul>
<li><p>1.1 Introduction to Qubits and Superposition</p>
</li>
<li><p>1.2 Introduction to Dirac Notation</p>
</li>
<li><p>1.3 Representing a Qubit on the Bloch Sphere</p>
</li>
<li><p>1.4 Manipulating a Qubit with Single Qubit Gates</p>
</li>
<li><p>1.5 Introduction to Phase</p>
</li>
<li><p>1.6 The Hadamard Gate and +, -, i, -i States</p>
</li>
<li><p>1.7 The Phase Gates (S and T Gates)</p>
</li>
</ul>
<h4 id="heading-advanced-topics-and-algorithms"><strong>Advanced Topics and Algorithms</strong></h4>
<ul>
<li><p>2.1 Representing Multiple Qubits Mathematically</p>
</li>
<li><p>2.2 Quantum Circuits</p>
</li>
<li><p>2.3 Multi-Qubit Gates</p>
</li>
<li><p>2.4 Measuring Singular Qubits</p>
</li>
<li><p>2.5 Quantum Entanglement and the Bell States</p>
</li>
<li><p>2.6 Phase Kickback</p>
</li>
<li><p>3.1 Superdense Coding</p>
</li>
<li><p>3.2.A Classical Operations Prerequisites</p>
</li>
<li><p>3.2.B Functions on Quantum Computers</p>
</li>
<li><p>3.3 Deutsch's Algorithm</p>
</li>
<li><p>3.4 Deutsch-Jozsa Algorithm</p>
</li>
<li><p>3.5 Bernstein-Vazirani Algorithm</p>
</li>
<li><p>3.6 Quantum Fourier Transform (QFT)</p>
</li>
<li><p>3.7 Quantum Phase Estimation</p>
</li>
<li><p>3.8 Shor's Algorithm</p>
</li>
</ul>
<p>This comprehensive course is a great opportunity to get acquainted with the world of quantum computing. By the end of the course, you will have a strong understanding of both the theoretical and practical aspects of quantum computing.</p>
<p>Watch the full course <a target="_blank" href="https://www.youtube.com/watch?v=tsbCSkvHhMo">on the freeCodeCamp.org YouTube channel</a> (2-hour watch).</p>
<div class="embed-wrapper">
        <iframe width="560" height="315" src="https://www.youtube.com/embed/tsbCSkvHhMo" style="aspect-ratio: 16 / 9; width: 100%; height: auto;" title="YouTube video player" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen="" loading="lazy"></iframe></div>
 ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ What is Quantum Computing? Google's Quantum Supremacy Claim Explained ]]>
                </title>
                <description>
                    <![CDATA[ Quantum Supremacy. It kind of sounds like the title of the ruler of the universe. In reality, it could be part of Google's plan to take over the universe. Google recently released a paper showing that its quantum processor, called Sycamore, solved a ... ]]>
                </description>
                <link>https://www.freecodecamp.org/news/what-is-quantum-computing-googles-quantum-supremacy-claim-explained/</link>
                <guid isPermaLink="false">66b20727903dc07a135166af</guid>
                
                    <category>
                        <![CDATA[ quantum computing ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Beau Carnes ]]>
                </dc:creator>
                <pubDate>Tue, 29 Oct 2019 16:38:22 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/news/content/images/2019/10/Googleplex_HQ.jpg" medium="image" />
                <content:encoded>
                    <![CDATA[ <p>Quantum Supremacy. It kind of sounds like the title of the ruler of the universe. In reality, it could be part of Google's plan to take over the universe.</p>
<p>Google recently released <a target="_blank" href="https://www.nature.com/articles/s41586-019-1666-5">a paper</a> showing that its quantum processor, called Sycamore, solved a computing problem in 200 seconds that would have taken the world's best supercomputer 10,000 years to solve.</p>
<p>And Google says this is just the beginning of what quantum computers will be able to do.</p>
<h2 id="heading-what-is-quantum-computing">What is quantum computing?</h2>
<p>Quantum computing is a theory of how to build computers. </p>
<p>Quantum computers perform operations on data using ideas from quantum mechanics, such as <a target="_blank" href="https://en.wikipedia.org/wiki/Quantum_superposition">superposition</a> and <a target="_blank" href="https://simple.wikipedia.org/wiki/Quantum_entanglement">entanglement</a>. </p>
<p>In quantum computation, quantum properties are used to perform operations on data and represent it. This allows quantum computers to process massive and complex datasets more quickly than classical computers like the one you're reading this article with.</p>
<h2 id="heading-bits-vs-qubits">Bits VS Qubits</h2>
<p>Classical computers store information in binary. It's always possible to know the exact state of a piece of data, or "bit."</p>
<p>Each bit can be either on or off. </p>
<p>Quantum computing, however, uses qubits instead of bits. Qubits can be either on or off. Or they can be on and off at the same time.</p>
<p>Quantum computation uses probabilities. You don't always know the exact state of the data. This uncertainty is what makes quantum computing so powerful.</p>
<p>Since quantum computers use the fundamentals of quantum mechanics, they can solve complex computations very quickly. While quantum computers are already used for some purposes such as cybersecurity, they have not been able to do much so far.</p>
<p>A lot of the ideas behind quantum computing are theoretical and it has been challenging to implement them on a large scale. However, this is starting to change.</p>
<div class="embed-wrapper">
        <iframe width="560" height="315" src="https://www.youtube.com/embed/JhHMJCUmq28" style="aspect-ratio: 16 / 9; width: 100%; height: auto;" title="YouTube video player" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen="" loading="lazy"></iframe></div>
<h2 id="heading-so-what-did-google-actually-accomplish">So what did Google actually accomplish?</h2>
<p>First of all, this is not necessarily the first sign that robots are about to enslave humanity. The computing problem solved with quantum computing was not actually that useful but it was something that a standard computer could not do in a reasonable period of time. </p>
<p>This is the definition of "quantum supremacy": getting a quantum computer to do something that a standard classical computer cannot reasonably do.</p>
<p>This was basically the quantum computer equivalent to a "Hello World" program to test the capabilities. The Google researchers used their quantum computer to run a random circuit program a million times and record the outputs.</p>
<p>The problem that Google solved with quantum computing was specifically designed to be very difficult for a classical computer to solve. The problem was to determine the likelihood of different possible outcomes from a quantum version of a random-number generator. </p>
<p>Google controlled for errors in their system enough so the outputs were close to the theoretical results. This has been a hard problem to solve with quantum computers and made Google's achievement even more unique.</p>
<p><img src="https://www.freecodecamp.org/news/content/images/2019/10/image-90.png" alt="Image" width="600" height="400" loading="lazy">
<em>A part of Google's quantum computer. Source: <a target="_blank" href="https://www.youtube.com/watch?v=-ZNEzzDcllU">Google</a>.</em></p>
<h2 id="heading-ibm-on-googles-quantum-supremacy-really-though">IBM on Google's Quantum Supremacy: "Really, though?"</h2>
<p>Google competitor IBM wasn't so sure about Google's claims. According to IBM, Google overestimated the difficulty of the task.</p>
<p>While Google said the problem they solved would take 10,000 years on a classical supercomputer, IBM said it could be solved in 2.5 days. That's a pretty big difference.</p>
<p>In a <a target="_blank" href="https://www.ibm.com/blogs/research/2019/10/on-quantum-supremacy/">blog post</a>, IBM "urge[d] the community to treat claims that, for the first time, a quantum computer did something that a classical computer cannot with a large dose of skepticism."</p>
<p>Google representatives shot back at IBM with a challenge to prove their claim that the same problem their quantum computer had solved in 200 seconds could indeed be solved by a classical computer in 2.5 days.</p>
<h2 id="heading-whats-next">What's Next?</h2>
<p>This is still only the beginning. As Google said in a <a target="_blank" href="https://ai.googleblog.com/2019/10/quantum-supremacy-using-programmable.html">blog post</a>, "Achieving the necessary computational capabilities will still require years of hard engineering and scientific work. But we see a path clearly now, and we're eager to move ahead."</p>
<p>It's still difficult to correct for errors in quantum computing. Google's quantum team recently estimated that we still have at least 10 years before there is an error-corrected quantum computer.</p>
<p>In a <a target="_blank" href="https://www.technologyreview.com/s/614608/google-ceo-quantum-supremacy-interview-with-sundar-pichai/">recent interview</a>, Google CEO Sundar Pichai compared their quantum computing breakthrough to the Wright brothers’ first flight. “To borrow an analogy — the Wright brothers. The first plane flew only for 12 seconds, and so there is no practical application of that. But it showed the possibility that a plane could fly.”</p>
 ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ (Almost) everything you ever wanted to know about quantum computers ]]>
                </title>
                <description>
                    <![CDATA[ By Ashwani Kumar From Schrodinger’s Cat to finding a needle in a haystack _Source: [Wikimedia Commons](https://commons.wikimedia.org/wiki/File:Quantum_Computing;_IonTrapping(5941055642).jpg" rel="noopener" target="blank" title=") With the recent ann... ]]>
                </description>
                <link>https://www.freecodecamp.org/news/almost-everything-you-ever-wanted-to-know-about-quantum-computers-5ee6bc2f40ba/</link>
                <guid isPermaLink="false">66c343c00fa3812cdd5ea991</guid>
                
                    <category>
                        <![CDATA[ algorithms ]]>
                    </category>
                
                    <category>
                        <![CDATA[ Computer Science ]]>
                    </category>
                
                    <category>
                        <![CDATA[ data ]]>
                    </category>
                
                    <category>
                        <![CDATA[ quantum computing ]]>
                    </category>
                
                    <category>
                        <![CDATA[ technology ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ freeCodeCamp ]]>
                </dc:creator>
                <pubDate>Thu, 07 Feb 2019 17:51:46 +0000</pubDate>
                <media:content url="https://cdn-media-1.freecodecamp.org/images/1*6LsnXziArHvmeGk4wSDw1A.jpeg" medium="image" />
                <content:encoded>
                    <![CDATA[ <p>By Ashwani Kumar</p>
<h4 id="heading-from-schrodingers-cat-to-finding-a-needle-in-a-haystack">From Schrodinger’s Cat to finding a needle in a haystack</h4>
<p><img src="https://cdn-media-1.freecodecamp.org/images/TxNdGUyk67ooAR1DCVtREwc9Sy1VOUGHrkaI" alt="Image" width="800" height="546" loading="lazy">
_Source: [Wikimedia Commons](https://commons.wikimedia.org/wiki/File:Quantum_Computing;_Ion<em>Trapping</em>(5941055642).jpg" rel="noopener" target="<em>blank" title=")</em></p>
<p>With the recent announcement of <a target="_blank" href="https://www.research.ibm.com/ibm-q/system-one/">IBM Q System One</a> — the first fully-integrated commercial quantum computer — by IBM at CES 2019, quantum computing is soon to enter mainstream computing. Housed in a nine-foot-tall, nine-foot-wide case of half-inch thick…</p>
 ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ What is a quantum computer? Explained with a simple example. ]]>
                </title>
                <description>
                    <![CDATA[ By YK Sugi Hi everyone! The other day, I visited D-Wave Systems in Vancouver, Canada. It’s a company that makes cutting-edge quantum computers. I got to learn a lot about quantum computers there, so I’d like to share some of what I learned there with... ]]>
                </description>
                <link>https://www.freecodecamp.org/news/what-is-a-quantum-computer-explained-with-a-simple-example-b8f602035365/</link>
                <guid isPermaLink="false">66c3659a02b05aca345bb19c</guid>
                
                    <category>
                        <![CDATA[ Computer Science ]]>
                    </category>
                
                    <category>
                        <![CDATA[ General Programming ]]>
                    </category>
                
                    <category>
                        <![CDATA[ Python ]]>
                    </category>
                
                    <category>
                        <![CDATA[ quantum computing ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ freeCodeCamp ]]>
                </dc:creator>
                <pubDate>Mon, 22 Oct 2018 20:59:54 +0000</pubDate>
                <media:content url="https://cdn-media-1.freecodecamp.org/images/0*juPpwvGEsj0xky-d" medium="image" />
                <content:encoded>
                    <![CDATA[ <p>By YK Sugi</p>
<p>Hi everyone!</p>
<p>The other day, I visited <a target="_blank" href="https://www.dwavesys.com/"><strong>D-Wave Systems</strong></a> in Vancouver, Canada. It’s a company that makes cutting-edge quantum computers.</p>
<p>I got to learn a lot about quantum computers there, so I’d like to share some of what I learned there with you in this article.</p>
<p>The goal of this article is to give you an accurate intuition of what a quantum computer is using a simple example.</p>
<p>This article will not require you to have prior knowledge of either quantum physics or computer science to be able to understand it.</p>
<p>Okay, let’s get started.</p>
<p><strong><em>Edit (Feb 26, 2019):</em></strong> I recently published <a target="_blank" href="https://youtu.be/HdSmIUuGf-I">a video about the same topic</a> on <a target="_blank" href="https://www.youtube.com/csdojo">my YouTube channel</a>. I would recommend watching it (<a target="_blank" href="https://youtu.be/HdSmIUuGf-I">click here</a>) before or after reading this article because I have added some additional, more nuanced arguments in the video.</p>
<h3 id="heading-what-is-a-quantum-computer">What is a quantum computer?</h3>
<p>Here is a one-sentence summary of what a quantum computer is:</p>
<blockquote>
<p>A quantum computer is a type of computer that uses quantum mechanics so that it can perform certain kinds of computation more efficiently than a regular computer can.</p>
</blockquote>
<p>There is a lot to unpack in this sentence, so let me walk you through what it is exactly using a simple example.</p>
<p>To explain what a quantum computer is, I’ll need to first explain a little bit about regular (non-quantum) computers.</p>
<h3 id="heading-how-a-regular-computer-stores-information">How a regular computer stores information</h3>
<p>Now, a regular computer stores information in a series of 0’s and 1’s.</p>
<p>Different kinds of information, such as numbers, text, and images can be represented this way.</p>
<p>Each unit in this series of 0’s and 1’s is called a bit. So, a bit can be set to either 0 or 1.</p>
<h4 id="heading-now-what-about-quantum-computers">Now, what about quantum computers?</h4>
<p>A quantum computer <strong>does not</strong> use bits to store information. Instead, it uses something called qubits.</p>
<p>Each qubit can not only be set to 1 <strong>or</strong> 0, but it can also be set to 1 <strong>and</strong> 0. But what does that mean exactly?</p>
<p>Let me explain this with a simple example. This is going to be a somewhat artificial example. But it’s still going to be helpful in understanding how quantum computers work.</p>
<h3 id="heading-a-simple-example-for-understanding-how-quantum-computers-work"><strong>A simple example for understanding how quantum computers work</strong></h3>
<p>Now, suppose you’re running a travel agency, and you need to move a group of people from one location to another.</p>
<p>To keep this simple, let’s say that you need to move only 3 people for now — Alice, Becky, and Chris.</p>
<p>And suppose that you have booked 2 taxis for this purpose, and you want to figure out who gets into which taxi.</p>
<p>Also, suppose here that you’re given information about who’s friends with who, and who’s enemies with who.</p>
<p>Here, let’s say that:</p>
<ul>
<li>Alice and Becky are friends</li>
<li>Alice and Chris are enemies</li>
<li>Becky and Chris are enemies</li>
</ul>
<p>And suppose that your goal here is to divide this group of 3 people into the two taxis to achieve the following two objectives:</p>
<ul>
<li>Maximize the number of <strong>friend pairs</strong> that share the same car</li>
<li>Minimize the number of <strong>enemy pairs</strong> that share the same car</li>
</ul>
<p>Okay, so this is the basic premise of this problem. Let’s first think about how we would solve this problem using a regular computer.</p>
<h4 id="heading-solving-this-problem-with-a-regular-computer"><strong>Solving this problem with a regular computer</strong></h4>
<p>To solve this problem with a regular, non-quantum computer, you’ll need first to figure out how to store the relevant information with bits.</p>
<p>Let’s label the two taxis Taxi #1 and Taxi #0.</p>
<p>Then, you can represent who gets into which car with 3 bits.</p>
<p>For example, we can set the three bits to <strong>0</strong>, <strong>0</strong>, and <strong>1</strong> to represent:</p>
<ul>
<li>Alice gets into Taxi #0</li>
<li>Becky gets into Taxi #0</li>
<li>Chris gets into Taxi #1</li>
</ul>
<p>Since there are two choices for each person, there are 2<em>2</em>2 = 8 ways to divide this group of people into two cars.</p>
<p>Here’s a list of all possible configurations:</p>
<p>A | B | C<br>0 | 0 | 0<br>0 | 0 | 1<br>0 | 1 | 0<br>0 | 1 | 1<br>1 | 0 | 0<br>1 | 0 | 1<br>1 | 1 | 0<br>1 | 1 | 1</p>
<p>Using 3 bits, you can represent any one of these combinations.</p>
<h4 id="heading-computing-the-score-for-each-configuration">Computing the score for each configuration</h4>
<p>Now, using a regular computer, how would we determine which configuration is the best solution?</p>
<p>To do this, let’s define how we can compute the score for each configuration. This score will represent the extent to which each solution achieves the two objectives I mentioned earlier:</p>
<ul>
<li>Maximize the number of <strong>friend pairs</strong> that share the same car</li>
<li>Minimize the number of <strong>enemy pairs</strong> that share the same car</li>
</ul>
<p>Let’s simply define our score as follows:</p>
<p>(the score of a given configuration) = (# friend pairs sharing the same car) - (# enemy pairs sharing the same car)</p>
<p>For example, suppose that Alice, Becky, and Chris all get into Taxi #1. With three bits, this can be expressed as <strong>111</strong>.</p>
<p>In this case, there is only <strong>one friend pair</strong> sharing the same car — Alice and Becky.</p>
<p>However, there are <strong>two enemy pairs</strong> sharing the same car — Alice and Chris, and Becky and Chris.</p>
<p>So, the total score of this configuration is 1-2 = -1.</p>
<h4 id="heading-solving-the-problem">Solving the problem</h4>
<p>With all of this setup, we can finally go about solving this problem.</p>
<p>With a regular computer, to find the best configuration, you’ll need to essentially go through all configurations to see which one achieves the highest score.</p>
<p>So, you can think about constructing a table like this:</p>
<p>A | B | C | Score<br>0 | 0 | 0 | -1<br>0 | 0 | 1 | 1 &lt;- one of the best solutions<br>0 | 1 | 0 | -1<br>0 | 1 | 1 | -1<br>1 | 0 | 0 | -1<br>1 | 0 | 1 | -1<br>1 | 1 | 0 | 1 &lt;- the other best solution<br>1 | 1 | 1 | -1</p>
<p>As you can see, there are two correct solutions here — 001 and 110, both achieving the score of 1.</p>
<p>This problem is fairly simple. It quickly becomes too difficult to solve with a regular computer as we increase the number of people in this problem.</p>
<p>We saw that with 3 people, we need to go through 8 possible configurations.</p>
<p>What if there are 4 people? In that case, we’ll need to go through 2<em>2</em>2*2 = 16 configurations.</p>
<p>With n people, we’ll need to go through (2 to the power of n) configurations to find the best solution.</p>
<p>So, if there are 100 people, we’ll need to go through:</p>
<ul>
<li>2¹⁰⁰ ~= 10³⁰ = one million million million million million configurations.</li>
</ul>
<p>This is simply impossible to solve with a regular computer.</p>
<h4 id="heading-solving-this-problem-with-a-quantum-computer">Solving this problem with a quantum computer</h4>
<p>How would we go about solving this problem with a quantum computer?</p>
<p>To think about that, let’s go back to the case of dividing 3 people into two taxis.</p>
<p>As we saw earlier, there were 8 possible solutions to this problem:</p>
<p>A | B | C<br>0 | 0 | 0<br>0 | 0 | 1<br>0 | 1 | 0<br>0 | 1 | 1<br>1 | 0 | 0<br>1 | 0 | 1<br>1 | 1 | 0<br>1 | 1 | 1</p>
<p>With a regular computer, using 3 bits, we were able to represent only one of these solutions at a time — for example, 001.</p>
<p>However, with a quantum computer, using 3 <strong>qubits</strong>, we can represent <strong>all 8 of these solutions at the same time</strong>.</p>
<p>There are debates as to what it means exactly, but here’s the way I think about it.</p>
<p>First, examine the first qubit out of these 3 qubits. When you set it to <strong>both</strong> 0 and 1, it’s sort of like creating two parallel worlds. (Yes, it’s strange, but just follow along here.)</p>
<p>In one of those parallel worlds, the qubit is set to 0. In the other one, it’s set to 1.</p>
<p>Now, what if you set the second qubit to 0 <strong>and</strong> 1, too? Then, it’s sort of like creating 4 parallel worlds.</p>
<p>In the first world, the two qubits are set to 00. In the second one, they are 01. In the third one, they are 10. In the fourth one, they are 11.</p>
<p>Similarly, if you set all three qubits to both 0 and 1, you’d be creating 8 parallel worlds — 000, 001, 010, 011, 100, 101, 110, and 111.</p>
<p>This is a strange way to think, but it is one of the correct ways to interpret how the qubits behave in the real world.</p>
<p>Now, when you apply some sort of computation on these three qubits, you are actually applying the same computation in all of those 8 parallel worlds at the same time.</p>
<p>So, instead of going through each of those potential solutions sequentially, we can compute the scores of all solutions at the same time.</p>
<p>With this particular example, in theory, your quantum computer would be able to find one of the best solutions in a few milliseconds. Again, that’s 001 or 110 as we saw earlier:</p>
<p>A | B | C | Score<br>0 | 0 | 0 | -1<br><strong>0 | 0 | 1 | 1 &lt;- one of the best soluti</strong>ons<br>0 | 1 | 0 | -1<br>0 | 1 | 1 | -1<br>1 | 0 | 0 | -1<br>1 | 0 | 1 | <strong>-1</strong><br><strong>1 | 1 | 0 | 1 &lt;- the other best so</strong>lution<br>1 | 1 | 1 | -1</p>
<p>In reality, to solve this problem, you would need to give your quantum computer two things:</p>
<ul>
<li>All potential solutions represented with qubits</li>
<li>A function that turns each potential solution into a score. In this case, this is the function that counts the numbers of friend pairs and enemy pairs sharing the same car.</li>
</ul>
<p>Given these two things, your quantum computer will spit out one of the best solutions in a few milliseconds. In this case, that’s 001 or 110 with a score of 1.</p>
<p>Now, in theory, a quantum computer is able to find one of the best solutions every time it runs.</p>
<p>However, in reality, there are errors when running a quantum computer. So, instead of finding the best solution, it might find the second-best solution, the third best solution, and so on.</p>
<p>These errors become more prominent as the problem becomes more and more complex.</p>
<p>So, in practice, you will probably want to run the same operation on a quantum computer dozens of times or hundreds of times. Then pick the best result out of the many results you get.</p>
<h4 id="heading-how-a-quantum-computer-scales">How a quantum computer scales</h4>
<p>Even with the errors I mentioned, the quantum computer does not have the same scaling issue a regular computer suffers from.</p>
<p>When there are 3 people we need to divide into two cars, the number of operations we need to perform on a quantum computer is 1. This is because a quantum computer computes the score of all configurations at the same time.</p>
<p>When there are 4 people, the number of operations is still 1.</p>
<p>When there are 100 people, the number of operations is still 1. With a single operation, a quantum computer computes the scores of all <strong>2¹⁰⁰</strong> ~= <strong>10³⁰</strong> = <strong>one million million million million million</strong> configurations at the same time.</p>
<p>As I mentioned earlier, in practice, it’s probably best to run your quantum computer dozens of times or hundreds of times and pick the best result out of the many results you get.</p>
<p>However, it’s still much better than running the same problem on a regular computer and having to repeat the same type of computation one million million million million million times.</p>
<h4 id="heading-wrapping-up">Wrapping up</h4>
<p>Special thanks to everyone at D-Wave Systems for patiently explaining all of this to me.</p>
<p>D-Wave recently launched a cloud environment for interacting with a quantum computer.</p>
<p>If you’re a developer and would like actually to try using a quantum computer, it’s probably the easiest way to do so.</p>
<p>It’s called Leap, and it’s at <a target="_blank" href="https://cloud.dwavesys.com/leap">https://cloud.dwavesys.com/leap</a>. You can use it for free to solve thousands of problems, and they also have easy-to-follow tutorials on getting started with quantum computers once you sign up.</p>
<p><strong>Footnote:</strong></p>
<ul>
<li>In this article, I used the term “regular computer” to refer to a non-quantum computer. However, in the quantum computing industry, non-quantum computers are usually referred to as classical computers.</li>
</ul>
 ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ An introduction to Q# — Microsoft’s language for quantum computing ]]>
                </title>
                <description>
                    <![CDATA[ By Ankit Sharma In this article, I’ll introduce you to Q# — the new programming language from Microsoft for quantum computing. We will cover Q# data types, expressions, and statements with the help of code snippets. Prerequisites For an overview of q... ]]>
                </description>
                <link>https://www.freecodecamp.org/news/an-introduction-to-q-64beaff53a00/</link>
                <guid isPermaLink="false">66d45d9acc7f04d2549a3720</guid>
                
                    <category>
                        <![CDATA[ Microsoft ]]>
                    </category>
                
                    <category>
                        <![CDATA[ General Programming ]]>
                    </category>
                
                    <category>
                        <![CDATA[ quantum computing ]]>
                    </category>
                
                    <category>
                        <![CDATA[ tech  ]]>
                    </category>
                
                    <category>
                        <![CDATA[ technology ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ freeCodeCamp ]]>
                </dc:creator>
                <pubDate>Thu, 03 May 2018 09:46:07 +0000</pubDate>
                <media:content url="https://cdn-media-1.freecodecamp.org/images/0*urFjQNWX1O2TNzmM." medium="image" />
                <content:encoded>
                    <![CDATA[ <p>By Ankit Sharma</p>
<p>In this article, I’ll introduce you to Q# — the new programming language from Microsoft for quantum computing. We will cover Q# data types, expressions, and statements with the help of code snippets.</p>
<h4 id="heading-prerequisites">Prerequisites</h4>
<p>For an overview of quantum computing, please visit my earlier article: <a target="_blank" href="http://ankitsharmablogs.com/introduction-quantum-computing/">An Introduction To Quantum Computing</a>. There, I also describe how to install Quantum Development Kit (QDK) in Visual Studio 2017.</p>
<h3 id="heading-what-is-q">What is Q#?</h3>
<p>According to Microsoft:</p>
<blockquote>
<p><em>Q# is a scalable, multi-paradigm, domain-specific programming language for quantum computing.</em></p>
</blockquote>
<p>So, what do these terms actually mean? Let us dive into the details.</p>
<ul>
<li><strong>Scalable</strong><br>Q# allows us to write code that can be executed on machines of varying computing abilities. We can use it to simulate a few Qubits on our local machine, or even thousands of Qubits for an enterprise level application.</li>
<li><strong>Multi-paradigm</strong><br>Q# is a multi-paradigm programming language. It supports both functional and imperative programming styles. If you are new to programming paradigms, I suggest you refer <a target="_blank" href="https://en.wikipedia.org/wiki/Programming_paradigm">here</a>.</li>
<li><strong>Domain-specific</strong><br>Q# is a programming language for quantum computing. It is to be used for writing algorithms and code snippets that are executed on quantum processors.</li>
</ul>
<h3 id="heading-getting-started-with-q-development">Getting started with Q# development</h3>
<p>This article will assume you have already installed QDK for Visual Studio 2017. If not, then you can <a target="_blank" href="http://ankitsharmablogs.com/introduction-quantum-computing/">check my earlier article</a> for instructions.</p>
<p>After you have successfully installed QDK, we need to verify if Visual Studio 2017 has all the required dependencies installed for Q# development. For this, we will clone and execute the quantum sample programs from GitHub provided by Microsoft.</p>
<p>Open VS 2017 and navigate to Team &gt;&gt; Manage Connections.</p>
<p><img src="https://www.freecodecamp.org/news/content/images/2019/06/image-24.png" alt="Image" width="600" height="400" loading="lazy"></p>
<p>Select Clone under Local Git Repositories and enter the URL: <a target="_blank" href="https://github.com/Microsoft/Quantum.git">https://github.com/Microsoft/Quantum.git</a> and click “Clone”.</p>
<p><img src="https://cdn-media-1.freecodecamp.org/images/krnmAb5hG5Aor-xiXb8QtQztnovD28z8vzPo" alt="Image" width="470" height="404" loading="lazy"></p>
<p>The repository will be cloned on your local computer and Visual Studio will switch to the Solution Explorer. It will display all the cloned libraries and samples.</p>
<p><img src="https://cdn-media-1.freecodecamp.org/images/d6Yc06IIXElFdgcFtm9Rbh90KGe51XTk6WYE" alt="Image" width="359" height="337" loading="lazy"></p>
<p>Now, open <em>QsharpLibraries.sln</em> solution.</p>
<p>If you are prompted with the “Install Missing Features<strong>”</strong> popup box, click “Install” to allow the installation of the necessary features. This will download and install F# and other tools used by some of the samples. Make sure that you are connected to the internet.</p>
<p><img src="https://www.freecodecamp.org/news/content/images/2019/06/image-25.png" alt="Image" width="600" height="400" loading="lazy"></p>
<p>To execute a sample program, right-click on the <em>TeleportationSample</em> project in “Samples &gt; 0.Introduction folder” _of QsharpLibrari_es solution, and then click on “Set as Startup Project” and press F5.</p>
<p><img src="https://www.freecodecamp.org/news/content/images/2019/06/image-26.png" alt="Image" width="600" height="400" loading="lazy"></p>
<p>If you can see an output screen similar to the one shown below, then congratulations, your VS 2017 is ready for Q# development.</p>
<p><img src="https://www.freecodecamp.org/news/content/images/2019/06/image-27.png" alt="Image" width="600" height="400" loading="lazy"></p>
<p>Note that your output screen may vary because the data being teleported is random. But it should send 8 rounds of data, with all being successfully teleported.</p>
<h3 id="heading-q-type-model">Q# Type model</h3>
<p>Let us understand what are the various type models provided by Q#:</p>
<h4 id="heading-primitive-type">Primitive Type</h4>
<ul>
<li>Int: — It represents the 64 -bit signed integer. Notice the upper case ‘I’. This is in contrast to <em>int</em> in C# with lower case ‘i’.</li>
<li>Double: — It represents double-precision floating point number. This also has a upper case ‘D’ in contrast to <em>double</em> in C#.</li>
<li>Bool: — It represents the Boolean type and can take two values — <em>true</em> or <em>false.</em></li>
<li>Qubit: — This represents the Quantum bit. Qubit is the fundamental unit of processing information in quantum computers, similar to a <em>bit</em> in classical computers<em>.</em></li>
<li>Pauli: — This type is used to denote the base operation for rotations and to specify the basis of a measurement.</li>
<li>Result: — This represents the result of a measurement. This can take two possible values <em>Zero</em> or <em>One</em></li>
<li>Range: — This represents a sequence of integers.</li>
<li>String: — It represents a sequence of Unicode characters.</li>
</ul>
<h4 id="heading-array-type">Array Type</h4>
<p>We can create an array type of any valid Q# primitive type. Q# does not support rectangular multi-dimensional arrays. Instead, it supports only jagged arrays.</p>
<p><code>Int[], Qubit[][]</code></p>
<p>By default, all variables in Q# are immutable. Their values cannot be changed after they are bound. So, to create an array whose values can be set, we will use the <code>mutable</code> keyword:</p>
<p><code>mutable myArr = new Int [5];</code></p>
<p>This will create an integer array <code>myArr</code> of size 5. The elements of a new array are initialized to a type-dependent default value. In this case it will be 0, the default value for an integer type.</p>
<p>Arrays passed as arguments are immutable. All arrays in Q# are zero-based. That is, the first element of an array <code>arr</code> is always <code>arr[0]</code>.</p>
<h4 id="heading-tuple-type">Tuple Type</h4>
<p>The tuple type represents a tuple of values of any given primitive type. It is represented as <code>(T1, T2, T3,…)</code> where <code>T1</code>, <code>T2</code>, <code>T3</code> are primitive types. The Q# tuple is immutable. We cannot change the contents of the tuple once it has been created.</p>
<p>A tuple expression can contain values of multiple primitive types. So, a tuple of type <code>(Int, Double, Result)</code> is a valid tuple.</p>
<p>We can create a tuple with single element also, like <code>(2)</code>. This is known as a singleton tuple, and it is considered equal to the value of the enclosed type. This property is called singleton tuple equivalence.</p>
<p>For example, <code>(2)</code> is a singleton tuple of type <code>Int</code>, but it is considered equivalent to an integer 2.</p>
<p>We can create a user defined type of any primitive type. We can also create an array of user defined types or can also include it in a tuple. User defined types cannot have cyclic dependency on each other. So, it is not possible to create a recursive type structure.</p>
<p>A user-defined type is a subtype of the <code>base</code> type. This means it can be used anywhere a value of the <code>base</code> type is expected.</p>
<h4 id="heading-operation-type">Operation Type</h4>
<p>A Q# <em>operation</em> is a callable routine, which contains Q# code to carry out a quantum operation. An operation is the basic unit of quantum execution in Q#. The <em>operation</em> can only take single value as input in the form of a tuple. It returns a single value as output, specified after a colon, and may be a tuple.</p>
<p>An operation has a body section which contains the implementation of the operation. It can also have adjoint, controlled, and controlled adjoint sections. These are used to specify specific variants of appropriate operations. The arguments to an operation are specified as a tuple, within parentheses. The return type of the operation is specified after the colon.</p>
<p>Refer to a sample operation below:</p>
<pre><code>operation AddInteger(a: Int, <span class="hljs-attr">b</span>: Int): Int {  
    body {  
        mutable c = <span class="hljs-number">0</span>;  
        set c = a + b;  
        <span class="hljs-keyword">return</span> (c);  
    }  
}
</code></pre><p>Here, we have an operation <code>AddInteger</code> which takes a tuple <code>(Int, Int)</code> as input. It returns an output of type <code>Int</code> after performing addition operations on input integers.</p>
<h4 id="heading-function-type">Function Type</h4>
<p>A Q# Function is classical subroutine used within a Quantum algorithm and can only contain classical code (but no quantum operations). Similar to Q# operations, a function will also take a single value as input and returns a single value as output. Both of them can be a tuple. Functions cannot allocate qubits or call operations.</p>
<p>Let’s look at a sample function.</p>
<pre><code><span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">ProductNumber</span>(<span class="hljs-params">a: Double, b: Double</span>): <span class="hljs-title">Double</span> </span>{  
    mutable c = <span class="hljs-number">0.0</span>;  
    set c = a * b;  
    <span class="hljs-keyword">return</span> (c);  
}
</code></pre><p>Here, we have defined a function <code>ProductNumber</code>, which takes a tuple <code>(Double, Double)</code> as input and returns an output of type <code>Double</code> after performing the product of input values. Also, notice that a <em>function</em> does not have a body section, as in the case of an <em>operation.</em></p>
<h3 id="heading-expressions-in-q">Expressions in Q</h3>
<p>Let’s take a look at various expressions provided in Q#.</p>
<h4 id="heading-numeric-expressions">Numeric Expressions</h4>
<p>There are two types of numeric expressions provided by Q#:</p>
<ul>
<li>Integer numbers: these are represented by Int</li>
<li>Floating point numbers: represented by Double</li>
</ul>
<p>To represent a hexadecimal integer, we use the “0x” prefix.</p>
<p>We can also perform binary operations on numeric expressions to form a new numeric expression. The type of the new expression will be <code>Double</code> if both input expressions are floating point numbers, or will be an <code>Int</code> if both are integers.</p>
<p>Apart from binary operations, the numeric expressions also support modulus, power, bitwise AND, bitwise OR, bitwise XOR, and bitwise complement operations.</p>
<h4 id="heading-qubit-expressions">Qubit Expressions</h4>
<p>Qubit expressions are the symbols that are bound to qubit values or the elements of a qubit array. Q# does not provide any support for qubit literals.</p>
<h4 id="heading-pauli-expressions">Pauli Expressions</h4>
<p>As we have discussed earlier, the primitive type <code>Pauli</code> can take four possible values: <code>PauliI</code>, <code>PauliX</code>, <code>PauliY</code> and <code>PauliZ</code>. These all are valid Pauli expressions. We can also create an array of Pauli types, and the array elements are considered as valid Pauli expressions.</p>
<p>The two possible result values <code>Zero</code> and <code>One</code> are valid Result expressions. One important point to note is that <code>One</code> is not the same as integer 1, and <code>Zero</code> is not same as integer 0. Also, there is no direct conversion between them.</p>
<p>This is in contrast to C# where, boolean <code>true</code> is considered the same as integer 1 and boolean <code>false</code> is considered the same as integer 0.</p>
<h4 id="heading-range-expressions">Range Expressions</h4>
<p>A range expression is represented as <code>start..step..stop</code> where <code>start</code>, <code>step</code>, <code>stop</code> are all integers. The range expression can take values as <code>start</code>, <code>start+step</code>, <code>start+step+step</code> and so on until <code>stop</code> is passed.</p>
<p>If only <code>start</code> and <code>stop</code> are mentioned in a range expression, then it will take the value of the step as set to 1 implicitly.</p>
<p>Let’s understand this with the help of an example:</p>
<ul>
<li><code>1..3</code> — this indicates the range <code>1,2,3</code>. This gives <code>1</code>, <code>1+1</code>, <code>1+1+1</code></li>
<li><code>1..2..6</code> indicates the range <code>1,3,5</code>, or <code>1</code>, <code>1+2</code>,<code>1+2+2</code></li>
<li><code>8..-2..3</code> indicates the range <code>8,6,4</code> or <code>8</code>, <code>8+(-2)</code>, <code>8+(-2)+(-2)</code></li>
</ul>
<h4 id="heading-array-expressions">Array Expressions</h4>
<p>In Q# an array can be represented as a set of element expressions separated by semicolons and enclosed within square brackets. Similar to C#, all elements of an array in Q# should have the same type.</p>
<p>So, <code>[1;2;3]</code> is a valid array, but <code>[1;2.5;Zero]</code> is an invalid array.</p>
<p>We can also use the ‘+’ operator to concatenate two arrays of the same type.</p>
<p>So, <code>[2;4;6] + [8;10;12]</code> will give <code>[2;4;6;8;10;12]</code> as output.</p>
<p>To find the length of an array, we use the <code>Length</code> built-in function.</p>
<p>As an example, if <code>myArr</code> is an integer array having 5 elements, then <code>Length(myArr</code>) will return <code>5</code> as the output.</p>
<h3 id="heading-q-statements">Q# Statements</h3>
<p>Symbols in Q# can be mutable or immutable.</p>
<p>An immutable symbol cannot be changed after it has been bound. We use the let keyword to define and bind an immutable symbol.</p>
<p><code>let i=8;</code></p>
<p>This will bind the symbol <code>i</code> as an integer with value 8. If we try to reset the value of an immutable expression, we will get a compile time error.</p>
<p>Hence <code>set i=10;</code> will give an error in this case.</p>
<p>A mutable symbol value can be changed after it has been bound. We use the <code>mutable</code> keyword to define and bind a mutable symbol.</p>
<p><code>mutable i=8;</code></p>
<p>This will bind the symbol <code>i</code> as an integer with value 8.</p>
<p>To change the value of a mutable symbol, we use the <code>set</code> keyword:</p>
<p><code>set i=10;</code></p>
<p>This will update the value of variable <code>i</code> to 10</p>
<h4 id="heading-for-loops">for-loops</h4>
<p>Q# allows a for-loop to iterate over an integer range. The for statement consists of the keyword <code>for</code>, followed by an identifier, the keyword <code>in</code>, a Range expression, and a statement block.</p>
<p>A range is specified by the first and last integers in the range, for example: <code>1..5</code> represents the range 1, 2, 3, 4, and 5. If a step other than +1 is needed, then three integers with .. between them are used.</p>
<p>So, <code>1..2..10</code> is the range 1, 3, 5, 7, and 9. The range is inclusive at both ends.</p>
<pre><code><span class="hljs-keyword">for</span>(num <span class="hljs-keyword">in</span> <span class="hljs-number">1.</span><span class="hljs-number">.2</span>.<span class="hljs-number">.10</span>)  
{  
   <span class="hljs-comment">//Do something  </span>
}
</code></pre><p>As the name suggests, this loop will repeat until successful operation occurs. This loop is based on the quantum “repeat until success” pattern. It consists of the keyword <code>repeat</code> and its statement block, the keyword <code>until</code>, a Boolean expression, the keyword <code>fixup</code>, and its statement block .</p>
<p>The statement inside the repeat block is executed, and then the boolean condition is evaluated. If the boolean condition evaluates to true, then the loop terminates. Otherwise, the fixup block is executed and the loop repeats once again.</p>
<p>The fixup block is always required — even if there is no fixup to be done — in which case it will be empty.</p>
<pre><code>repeat {  
    <span class="hljs-comment">//do something  </span>
}  
until boolean condition  
fixup {  
    <span class="hljs-comment">// do something  </span>
}
</code></pre><p>Q# supports if statements for conditional execution, similar to C#. The if statement consists of the keyword <code>if</code>, followed by a Boolean expression and the statement block. An if block may have an optional else block, which is represented by the keyword <code>else</code>.</p>
<pre><code><span class="hljs-keyword">if</span> (num % <span class="hljs-number">2</span> == <span class="hljs-number">0</span>) {  
    <span class="hljs-keyword">return</span> <span class="hljs-literal">true</span>;  
} <span class="hljs-keyword">else</span> {  
    <span class="hljs-keyword">return</span> <span class="hljs-literal">false</span>;  
}
</code></pre><p>A conditional statement can consist of a series of if-elseif-else chains. The else-if clause is represented by the keyword <code>elif</code>.</p>
<pre><code><span class="hljs-keyword">if</span> (num == <span class="hljs-number">1</span>) {  
    <span class="hljs-comment">//do something  </span>
}  
elif(num == <span class="hljs-number">2</span>) {  
    <span class="hljs-comment">//do something  </span>
}  
<span class="hljs-keyword">else</span> {  
    <span class="hljs-comment">//do something  </span>
}
</code></pre><h3 id="heading-conclusion">Conclusion</h3>
<p>In this article, we have learned the basics of the Q# programming language. We also installed QDK and verified the Q# execution environment with Visual Studio 2017. Please post your valuable feedback in the comments section and stay tuned for more on Quantum Computing.</p>
<p>You can always refer to my previous articles <a target="_blank" href="http://ankitsharmablogs.com/">here</a>.</p>
<p>You can also find this article at <a target="_blank" href="http://www.c-sharpcorner.com/article/an-introduction-to-q/">C# Corner</a></p>
<p><em>Originally published at <a target="_blank" href="http://ankitsharmablogs.com/an-introduction-to-q/">ankitsharmablogs.com</a> on Jan 16, 2018.</em></p>
 ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ Does Data Compression matter on a Quantum Internet? ]]>
                </title>
                <description>
                    <![CDATA[ By Colt McAnlis Disclaimer: This is a hypothetical think piece. It is a personal opinion and doesn’t represent the opinion of any of the companies (or secret societies) I may (..or may not) be involved with. If you tear a hole through space-time afte... ]]>
                </description>
                <link>https://www.freecodecamp.org/news/does-data-compression-matter-on-a-quantum-internet-f6b986473c1c/</link>
                <guid isPermaLink="false">66c349845ced6d98e4bd32c1</guid>
                
                    <category>
                        <![CDATA[ data compression ]]>
                    </category>
                
                    <category>
                        <![CDATA[ General Programming ]]>
                    </category>
                
                    <category>
                        <![CDATA[ quantum computing ]]>
                    </category>
                
                    <category>
                        <![CDATA[ Science  ]]>
                    </category>
                
                    <category>
                        <![CDATA[ technology ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ freeCodeCamp ]]>
                </dc:creator>
                <pubDate>Wed, 28 Jun 2017 15:37:24 +0000</pubDate>
                <media:content url="https://cdn-media-1.freecodecamp.org/images/1*jB_VRVuG5z8Dtp2i4N1o9g.png" medium="image" />
                <content:encoded>
                    <![CDATA[ <p>By Colt McAnlis</p>
<p><em>Disclaimer: This is a hypothetical think piece. It is a personal opinion and doesn’t represent the opinion of any of the companies (or secret societies) I may (..or may not) be involved with. If you tear a hole through space-time after reading this article… that’s your own fault.</em></p>
<p>If you haven’t heard, a research team out of China just made a huge leap with respect to realization of using <a target="_blank" href="http://science.sciencemag.org/cgi/doi/10.1126/science.aan3211">Quantum Entanglement as a valid communication vessel</a>. Their process was to use a low-earth satellite to create a pair of entangled photons and then send them to locations very far apart from each other. Even at never-before-done distances, the photons retained their entanglement, which has set the internet a buzz about the future of communication, and when the new quantum internet will happen.</p>
<p>Now, looking at the math, <strong>I’m still a bit dubious that quantum entanglement</strong> could be viably used for communication. This math person <a target="_blank" href="https://www.forbes.com/sites/chadorzel/2016/05/04/the-real-reasons-quantum-entanglement-doesnt-allow-faster-than-light-communication/#1c0c3f153a1e">explains</a> it a <a target="_blank" href="https://medium.com/starts-with-a-bang/ask-ethan-can-we-use-quantum-entanglement-to-communicate-faster-than-light-e0d7097c0322">bit better than</a> I ever could. However, there’s lots of people hypothesizing that this is the first steps in a new quantum internet where things like <a target="_blank" href="http://spectrum.ieee.org/telecom/security/two-steps-closer-to-a-quantum-internet">Entanglement Swapping</a> and <a target="_blank" href="https://en.wikipedia.org/wiki/Orbital_angular_momentum_of_light">Twisted Light</a> could bridge those gaps.</p>
<p><strong>Then let’s propose a thought experiment</strong>: let’s assume there’s future where an internet exists, whose technology is based on quantum entanglement. This means that data can be transmitted between two locations, at close to speed-of-light without a physical connecting medium between the locations.</p>
<p>In such a world, does data compression matter any more?</p>
<h3 id="heading-a-small-idea-on-how-a-qe-internet-would-work">A small idea on how a QE internet would work</h3>
<p>We have to assume that due to current technology, the first realization of a QE Internet (QEI) would be very similar to the telegraph systems of the past. The cost to maintain and run these early QEI sites would limit their availability, meaning that communication could only occur between a handful of sites.</p>
<p>These sites would require two primary features:</p>
<ol>
<li>A non-centralized system which can distribute entangled photon pairs to the sites (a low-orbit satellite, for example).</li>
<li>A recording system which logs the results of the entanglement tests and can store / retrieve them.</li>
</ol>
<p><img src="https://cdn-media-1.freecodecamp.org/images/Xp0h0wKzejEnv3nQ4yA-OAbVQ0AZU064giIv" alt="Image" width="800" height="475" loading="lazy"></p>
<p>#2 would be most likely built on today’s modern technology. So you can expect a situation where a billion photon pairs are sent to a site, and sampled in unison, and stored as binary data at the location.</p>
<p>From that point, the data would be most likely distributed to it’s final destination using more conventional methods (e.g. fiber connection).</p>
<h3 id="heading-limitations-of-a-first-generation-qei">Limitations of a first generation QEI</h3>
<p>Obviously, we still end up with some data-based bottlenecks here:</p>
<ol>
<li>There is a physical limit to how many entangled pairs can be stored at a site, thus limiting it’s total bandwidth.</li>
<li>There is a physical limit to the speed in which entangled pairs can be sent from the distributor to the sites on a regular basis, thus limiting total system bandwidth.</li>
<li>Environmental factors will cause loss of data in the transfer of photons to the sites from the distributor system. Thus, there will be a need for redundancy in the process, limiting total system bandwidth.</li>
</ol>
<p>When observing the above, you can quickly seen that the overall bandwidth of a QEI would be limited by the above systems, regardless of the ability for information to travel between sites through quantum means. So obviously, reducing the size of the data being sent through the sites will be important, but will today’s data compression algorithms make sense?</p>
<h3 id="heading-data-compression-for-a-qei">Data compression for a QEI</h3>
<p>There’s a few definitions of “data” which represents it as a physical entity, and as the (potential) realization of a Quantum Internet is realized, the need for photon transferal makes this concept even more real.</p>
<p>In fact, that may be the largest ramification of a quantum entangled internet: your data now has a very physical manifestation and cost involved with it.</p>
<p>So it’s obvious that data compression, as a science, will still be needed in a QEI future, but the real question we should be asking ourselves is: <strong>Are today’s compression algorithms good enough to support a quantum internet?</strong></p>
<p>My opinion? Not even close.</p>
<p><img src="https://cdn-media-1.freecodecamp.org/images/muYjkNnMLxY6BjdD-TiW37VflNvJOFyizCaS" alt="Image" width="256" height="336" loading="lazy"></p>
<p>As explained in “<a target="_blank" href="https://www.amazon.com/Understanding-Compression-Data-Modern-Developers/dp/1491961538">Understanding Compression</a>” today’s systems are still grounded around Shannon’s basic architecture of ‘<em>the most frequent symbol gets the smallest bits.</em>’ There’s a lot of power in this process, but until we move out of symbol space, and start gaining the computational power to handle compression entirely in bit-vector space, <a target="_blank" href="http://ieeexplore.ieee.org/abstract/document/1054929/">we’re going to be leaving a lot of information on the table</a>. (But <em>that’s my own unpopular opinion...</em>)</p>
<p>Let’s look beyond that. Are there potential systems where, rather than applying <a target="_blank" href="https://github.com/google/brotli">Brotli</a> to a data set, we instead can apply in to entangled photons directly? Will we start talking about algorithms to do diff’s against the photons on a site, and the data being transmitted, so we can reduce the number of updated pairs? What happens when we start thinking in terms of <a target="_blank" href="https://en.wikipedia.org/wiki/Qubit">qubits</a>, rather than just bits? Do we have to start thinking about LZ encoding in 8 dimensional space?</p>
<p>Obviously, the realization and standardization of Quantum Computing will create a massive technological shift in how our world works. And I’ve got every reason to believe that Data Compression will be right there, too.</p>
 ]]>
                </content:encoded>
            </item>
        
    </channel>
</rss>
