
Si vienes del desarrollo de software, acercarte por primera vez a la computación cuántica puede producir una sensación extraña y hasta ser algo intimidante. Muchos tiran la toalla, me temo, porque comienza la casa por el tejado, pensando que esto trata de programar con una librería diferente y poco más. Y para nada es así.
Quizá reconoces palabras como algoritmo, circuito, estado o compilación, pero de pronto aparecen cúbits, amplitudes complejas, superposición, entrelazamiento y mediciones probabilísticas. El vocabulario parece conocido y ajeno al mismo tiempo.
La buena noticia es que no hace falta comenzar estudiando toda la mecánica cuántica para construir una primera imagen útil de este paradigma (aunque, si te ocurre como a mí, terminarás profundizando cada vez más en ésta). Sí necesitamos, en cambio, comprender unas cuantas ideas fundamentales y, sobre todo, evitar algunas simplificaciones que suelen llevarnos por el camino equivocado.
Si eres programador, considera los quince conceptos siguientes como un pequeño mapa. No pretenden cubrir toda la disciplina, sino proporcionarte el vocabulario mínimo para que después puedas profundizar con algo más de orden.
1. Cúbit
El cúbit (quantum bit) es la unidad básica de información cuántica. Si el bit clásico puede encontrarse en 0 o 1, un cúbit puede describirse mediante una combinación lineal de los estados base y :
Aquí, y son amplitudes complejas que satisfacen . Es importante no interpretar el cúbit simplemente como un bit que «vale 0 y 1 al mismo tiempo». Esa frase puede servir como primera intuición, pero es demasiado pobre para comprender cómo se programa realmente un ordenador cuántico.
2. Superposición
La expresión anterior introduce la superposición. Un estado cuántico puede contener amplitudes asociadas a diferentes estados de la base computacional antes de realizar una medida.
Para un desarrollador hay una precaución importante: superposición no significa probar todas las soluciones de un problema a la vez y poder leerlas después gratuitamente. La información que podemos obtener está limitada por la medición. La utilidad computacional aparece cuando un algoritmo manipula las amplitudes para aumentar la probabilidad de observar resultados relevantes.
El concepto de superposición es uno de los más importantes y a la vez de los menos comprendidos con exactitud.
3. Amplitudes de probabilidad
En computación clásica solemos trabajar directamente con valores. En computación cuántica trabajamos con amplitudes, que pueden ser números complejos.
Cuando medimos un cúbit como el anterior en la base computacional, la probabilidad de observar 0 es y la de observar 1 es . Esta distinción entre amplitud y probabilidad es esencial porque las amplitudes conservan información de fase y pueden interferir entre sí.
Y justo ahí comienza una parte importante de la potencia de los algoritmos cuánticos.
4. Interferencia
La interferencia permite que distintas amplitudes se refuercen o se cancelen. Si has programado algoritmos clásicos durante años, quizá este sea uno de los cambios de mentalidad más interesantes: un algoritmo cuántico no consiste solamente en crear una gran superposición, sino en transformarla de manera que determinados resultados terminen siendo más probables y otros menos.
Al principio, esta forma de enfocar los problemas, puede parecer extraña, pero terminas acostumbrándote a este nuevo paradigma.
Dicho de otro modo, preparar muchos estados posibles no basta. Hay que hacer que sus amplitudes «trabajen» a favor del resultado que buscamos.
5. Puertas cuánticas
Las puertas cuánticas son las operaciones elementales que transforman el estado de uno o varios cúbits. Puertas como X, H, Z, CNOT o distintas rotaciones cumplen un papel aproximadamente análogo al de las puertas lógicas dentro del modelo clásico, aunque matemáticamente se representan mediante transformaciones unitarias.
La puerta Hadamard (H), por ejemplo, es habitual para preparar superposiciones. CNOT, por su parte, actúa sobre dos cúbits y es una pieza fundamental en numerosos circuitos.
Para un programador, aprender unas pocas puertas y observar visualmente qué hacen es una forma mucho más práctica de comenzar que memorizar una larga colección de matrices.
6. Circuito cuántico
Un circuito cuántico describe una secuencia organizada de puertas aplicadas sobre un conjunto de cúbits, seguida normalmente de alguna medición. Es probablemente la abstracción más familiar para quien llega desde el software.
Podemos pensar en el circuito como una representación del cálculo: los cúbits avanzan a través de operaciones que transforman su estado. Frameworks como Qiskit, Cirq o Amazon Braket permiten definir estos circuitos mediante código y ejecutarlos posteriormente en simuladores o en hardware cuántico.
7. Entrelazamiento
Dos o más cúbits pueden encontrarse entrelazados cuando el estado global del sistema no puede describirse simplemente como estados independientes de cada cúbit.
Un ejemplo clásico es uno de los estados de Bell:
Aquí lo importante no es pensar que dos bits clásicos están sincronizados, sino comprender que debemos describir el sistema como un estado conjunto. El entrelazamiento es un recurso fundamental en información cuántica y aparece en protocolos y algoritmos de muy distinta naturaleza.
8. Medición
Hasta ahora hemos hablado de estados y amplitudes, pero tarde o temprano necesitamos obtener información clásica. Para eso realizamos una medición.
Al medir en la base computacional obtenemos bits clásicos según las probabilidades determinadas por el estado. La medición modifica el estado cuántico, de modo que no podemos tratar un cúbit como una variable clásica que inspeccionamos tantas veces como queramos sin consecuencias.
Esta característica condiciona profundamente la forma de diseñar y depurar programas cuánticos.
9. Shots
Puesto que muchas ejecuciones producen resultados probabilísticos, un circuito suele ejecutarse repetidamente. Cada repetición se denomina habitualmente shot.
Si ejecutamos un circuito 1.000 veces podemos obtener, por ejemplo, un histograma de resultados y estimar sus probabilidades. Esto explica por qué cuando trabajas con un SDK cuántico aparecen continuamente conceptos como shots, counts o distribuciones de resultados.
Una ejecución aislada rara vez cuenta toda la historia.
10. Ruido y decoherencia
Los cúbits físicos son sistemas extremadamente sensibles a su entorno (al menos con la tecnología actual). Interacciones no deseadas, imperfecciones en las puertas y errores de lectura introducen ruido, mientras que la pérdida de las propiedades cuánticas del sistema a lo largo del tiempo se relaciona con la decoherencia.
Para el desarrollador esto tiene una consecuencia directa: el circuito matemáticamente correcto no tiene por qué comportarse igual en un dispositivo real que en un simulador ideal. El hardware introduce restricciones y errores que forman parte del problema de ingeniería.
No estamos ante un detalle secundario de implementación.
11. Transpilación
El circuito que escribimos no suele ejecutarse directamente tal cual sobre el procesador. Antes debe adaptarse al conjunto de puertas y a la conectividad que admite un dispositivo concreto. Este proceso se denomina habitualmente transpilación.
Aquí aparece un terreno especialmente familiar para quienes conocemos compiladores: descomposición de operaciones, asignación de cúbits lógicos a físicos, routing, inserción de operaciones SWAP y optimización del circuito. Esto es un mundo especializado en sí mismo.
Dos circuitos lógicamente equivalentes pueden tener costes físicos muy diferentes. En hardware ruidoso, reducir profundidad y número de puertas puede resultar especialmente importante.
Uno de los retos actuales en computación cuántica es que el proceso de transpilación utilice el menor número de puertas posibles.
12. Algoritmos cuánticos
Un algoritmo cuántico es mucho más que un circuito con varias puertas. Es un procedimiento diseñado para explotar propiedades de la información cuántica y resolver un problema concreto bajo un determinado modelo de computación.
Shor, Grover, Deutsch-Jozsa o los algoritmos variacionales aparecen continuamente cuando comenzamos a estudiar esta disciplina. Sin embargo, conviene no confundir la existencia de una mejora teórica con disponer hoy de una ventaja práctica en cualquier problema real. Las ventajas dependen del algoritmo, del modelo de acceso a los datos, del tamaño del problema, del hardware y del coste completo de la ejecución.
Si quieres profundizar en este punto, estudiar Deutsch-Jozsa es un buen ejercicio didáctico para comprender superposición, oráculos, interferencia y medición dentro de un único circuito relativamente pequeño.
13. Algoritmos híbridos cuántico-clásicos
Buena parte del software cuántico práctico adopta hoy una arquitectura híbrida: una parte del cálculo se ejecuta en un procesador cuántico y otra en recursos clásicos.
Los algoritmos variacionales son un ejemplo conocido. Un circuito cuántico depende de ciertos parámetros; el procesador cuántico permite estimar una función objetivo y un optimizador clásico modifica esos parámetros iterativamente.
Esta arquitectura es especialmente interesante para un ingeniero de software porque desplaza el error conceptual típico de que «el ordenador cuántico sustituirá al clásico» hacia algo bastante más realista: integrar distintos recursos de computación y utilizar cada uno donde resulte adecuado.
14. Corrección de errores y tolerancia a fallos
Corregir errores cuánticos es mucho más complicado que repetir un bit clásico, entre otras razones porque un estado cuántico desconocido no puede copiarse arbitrariamente. La corrección de errores cuánticos utiliza codificaciones y medidas cuidadosamente diseñadas para detectar y corregir determinados errores sin destruir la información lógica que queremos proteger.
Un ordenador cuántico tolerante a fallos pretende realizar cálculos largos de forma fiable incluso cuando sus componentes físicos presentan errores por debajo de ciertos umbrales y se aplica la arquitectura de corrección adecuada.
Conviene distinguir, por tanto, entre un cúbit físico y un cúbit lógico protegido: no son recursos equivalentes ni tienen el mismo coste.
15. Ventaja cuántica
Por último, llegamos a una expresión que conviene utilizar con cuidado: ventaja cuántica.
Que un algoritmo tenga una complejidad teórica mejor que otro clásico no demuestra automáticamente que una máquina cuántica actual vaya a resolver antes un problema industrial concreto. Hay que definir qué estamos comparando, contra qué algoritmo clásico, con qué hardware, para qué tamaño de entrada y contabilizando qué costes.
Esta prudencia me parece especialmente importante para quienes venimos de ingeniería. Ante una nueva tecnología, lo razonable no es buscar dónde introducirla a toda costa, sino determinar primero si resuelve mejor un problema. Una evaluación seria necesita siempre un baseline clásico contra el que comparar.
Un mapa, no el territorio (como diría Michel Houellebecq)
Estos quince conceptos no hacen a nadie experto en computación cuántica, claro está. Pero sí proporcionan algo más útil al principio: un mapa mental con el que ordenar lo que vas encontrando.
Cúbits, superposición, amplitudes e interferencia explican cómo representamos y manipulamos información. Puertas, circuitos, mediciones y shots nos acercan al modelo de programación. El entrelazamiento introduce estados genuinamente multipartitos. Ruido, transpilación y corrección de errores nos recuerdan que debajo del SDK existe hardware físico con restricciones muy reales. Finalmente, los algoritmos cuánticos, los enfoques híbridos y la ventaja cuántica sitúan toda esa maquinaria frente a la pregunta que realmente nos interesa como ingenieros: ¿qué problemas podemos resolver mejor y bajo qué condiciones?
Si eres desarrollador, mi recomendación es que después de asimilar este vocabulario construyas circuitos pequeños en un simulador y observes los resultados, y que leas mucho, muchísimo, claro. Un estado de Bell, un generador cuántico sencillo de bits aleatorios o Deutsch-Jozsa enseñan mucho más cuando los ejecutas y modificas que cuando te limitas a leer su descripción. Te aseguro que después de un tiempo largo en esto, sigo observando en mí el efecto ajá (ahora lo pillo).
Y, a partir de ahí, profundizar en álgebra lineal, algoritmos y arquitectura de computadores cuánticos deja de parecer un conjunto disperso de conceptos extraños, aunque no necesariamente, todo dependerá de la especialización que te interese más desarrollar.
Empieza a parecerse a lo que realmente es: otra disciplina de computación con unas reglas muy diferentes de las que llevamos décadas utilizando.
Para seguir profundizando
Como punto de entrada práctico, IBM Quantum Learning dispone de material introductorio sobre estados, puertas, circuitos, entrelazamiento, algoritmos y corrección de errores. También merece la pena estudiar con algo más de profundidad un texto académico de referencia como Quantum Computation and Quantum Information, de Michael A. Nielsen e Isaac L. Chuang, aunque reconozco que en una primera lectura puede parecer abrumador.
Para un desarrollador, combinar una buena referencia teórica con experimentos pequeños en Qiskit suele ser una buena manera de avanzar sin separar demasiado pronto la teoría de la práctica.
Por último, te dejo una infografía a modo de recordatorio sobre todos estos conceptos esenciales:
