Uno de los errores más habituales cuando se aprende a programar es abrir el editor y empezar a escribir código sin haber pensado bien qué se quiere hacer. El resultado suele ser código desordenado, lleno de parches y difícil de corregir cuando algo falla. El pseudocódigo es la solución a ese problema: una forma de planificar la solución antes de preocuparte por la sintaxis del lenguaje.
En esta guía aprenderás qué es el pseudocódigo, cómo escribirlo, para qué sirve en situaciones reales y por qué los programadores con experiencia siguen usándolo aunque ya dominen varios lenguajes.
Qué es el pseudocódigo
El pseudocódigo es una descripción de un algoritmo escrita en lenguaje natural estructurado. No sigue las reglas de ningún lenguaje de programación: no hay sintaxis exacta que respetar, no hay punto y coma obligatorio, no hay que importar librerías. El único objetivo es expresar la lógica de forma clara y ordenada.
"Pseudo" significa falso o imitación. El pseudocódigo imita la estructura del código real pero está escrito para que lo entienda una persona, no un ordenador.
# Pseudocódigo: encontrar si un número es par o impar
INICIO
LEER numero
SI numero MOD 2 == 0 ENTONCES
MOSTRAR "El número es par"
SI NO
MOSTRAR "El número es impar"
FIN SI
FINEse pseudocódigo puede traducirse a cualquier lenguaje en cuestión de segundos:
# Python
numero = int(input("Introduce un número: "))
if numero % 2 == 0:
print("El número es par")
else:
print("El número es impar")
// JavaScript
const numero = parseInt(prompt("Introduce un número:"));
if (numero % 2 === 0) {
console.log("El número es par");
} else {
console.log("El número es impar");
}
La lógica es exactamente la misma. El pseudocódigo te permitió diseñarla sin atarte a ningún lenguaje.
Por qué usarlo antes de programar
La programación tiene dos problemas distintos que hay que resolver a la vez: el problema lógico (¿qué pasos necesito para resolver esto?) y el problema técnico (¿cómo se escribe esto en Python/JavaScript/Java?). Intentar resolver ambos al mismo tiempo es cognitivamente caro y es la fuente de muchos errores.
El pseudocódigo te permite resolver primero el problema lógico sin que el problema técnico te distraiga. Cuando tienes la lógica clara, traducirla al lenguaje es el paso más mecánico y menos propenso a errores.
Tres situaciones concretas donde el pseudocódigo marca una diferencia real:
Cuando el problema es complejo. Si el algoritmo tiene muchas condiciones, bucles anidados o casos especiales, es muy fácil perderse en el código. El pseudocódigo te obliga a verlo como un mapa antes de construirlo.
Cuando trabajas en equipo. El pseudocódigo es lenguaje neutral. Puedes discutir la lógica con un compañero sin que ninguno de los dos tenga que conocer el lenguaje concreto que se va a usar. Es mucho más fácil encontrar un error lógico en pseudocódigo que en código real lleno de detalles de implementación.
Cuando llevas un tiempo bloqueado. Si estás atascado en un problema, escribir pseudocódigo en papel te obliga a pensar de forma diferente. El cambio de medio (de pantalla a papel) y el cambio de abstracción (de código a lenguaje natural) suelen desbloquear el problema.
Cómo se escribe pseudocódigo
No hay un estándar universal. Diferentes libros, profesores y empresas usan convenciones ligeramente distintas. Lo importante es ser consistente dentro del mismo documento y que cualquier persona pueda entenderlo sin conocer ningún lenguaje de programación.
Estas son las convenciones más habituales:
# Entrada y salida
LEER variable
MOSTRAR "texto" o MOSTRAR variable
ESCRIBIR "texto"
# Asignación
variable ← valor
variable = valor (también es habitual)
# Estructuras condicionales
SI condición ENTONCES
instrucciones
FIN SI
SI condición ENTONCES
instrucciones
SI NO
otras instrucciones
FIN SI
SI condición1 ENTONCES
instrucciones
SI NO SI condición2 ENTONCES
otras instrucciones
SI NO
instrucciones por defecto
FIN SI
# Bucles
MIENTRAS condición HACER
instrucciones
FIN MIENTRAS
PARA i DESDE 1 HASTA 10 HACER
instrucciones
FIN PARA
PARA CADA elemento EN colección HACER
instrucciones
FIN PARA CADA
REPETIR
instrucciones
HASTA QUE condición
# Funciones
FUNCIÓN nombre(parámetro1, parámetro2)
instrucciones
DEVOLVER valor
FIN FUNCIÓN
Del problema al pseudocódigo: proceso paso a paso
El pseudocódigo no sale de la nada. Hay un proceso para llegar a él:
Ejemplo 1: calcular la nota media de un alumno
# Paso 1: entender el problema
# Tenemos una lista de notas de un alumno.
# Queremos calcular la media y saber si ha aprobado (media >= 5).
# Paso 2: identificar entradas y salidas
# Entrada: lista de notas (números entre 0 y 10)
# Salida: la media y si ha aprobado o no
# Paso 3: escribir el pseudocódigo
FUNCIÓN calcular_resultado(notas)
SI notas está vacía ENTONCES
MOSTRAR "No hay notas"
DEVOLVER nada
FIN SI
suma ← 0
PARA CADA nota EN notas HACER
suma ← suma + nota
FIN PARA CADA
media ← suma / cantidad de notas
SI media >= 5 ENTONCES
resultado ← "Aprobado"
SI NO
resultado ← "Suspenso"
FIN SI
DEVOLVER media, resultado
FIN FUNCIÓN
# Paso 4: traducir a código (Python)
def calcular_resultado(notas):
if not notas:
print("No hay notas")
return None
media = sum(notas) / len(notas)
resultado = "Aprobado" if media >= 5 else "Suspenso"
return media, resultado
print(calcular_resultado([6, 7, 4, 8, 5])) # (6.0, 'Aprobado')
print(calcular_resultado([3, 2, 4, 1])) # (2.5, 'Suspenso')
print(calcular_resultado([])) # None
Ejemplo 2: sistema de login con límite de intentos
# Problema: verificar usuario y contraseña con un máximo de 3 intentos.
# Si falla 3 veces, bloquear la cuenta.
# Pseudocódigo:
FUNCIÓN verificar_login(usuario, contraseña_introducida)
intentos ← 0
MAX_INTENTOS ← 3
bloqueado ← FALSO
MIENTRAS intentos < MAX_INTENTOS Y NO bloqueado HACER
SI contraseña_introducida == contraseña_real(usuario) ENTONCES
MOSTRAR "Acceso concedido"
DEVOLVER VERDADERO
SI NO
intentos ← intentos + 1
restantes ← MAX_INTENTOS - intentos
SI restantes > 0 ENTONCES
MOSTRAR "Contraseña incorrecta. Intentos restantes: " + restantes
SI NO
bloqueado ← VERDADERO
MOSTRAR "Cuenta bloqueada por demasiados intentos fallidos"
FIN SI
FIN SI
FIN MIENTRAS
DEVOLVER FALSO
FIN FUNCIÓN
# Traducción a Python
def verificar_login(usuario, contrasena_introducida):
MAX_INTENTOS = 3
intentos = 0
while intentos < MAX_INTENTOS:
if contrasena_introducida == obtener_contrasena_real(usuario):
print("Acceso concedido")
return True
intentos += 1
restantes = MAX_INTENTOS - intentos
if restantes > 0:
print(f"Contraseña incorrecta. Intentos restantes: {restantes}")
else:
bloquear_cuenta(usuario)
print("Cuenta bloqueada por demasiados intentos fallidos")
return False
Fíjate en algo importante: al escribir el pseudocódigo ya detectaste un detalle que podrías haber olvidado en el código: qué mostrar cuando quedan intentos vs cuando no quedan. El pseudocódigo te obliga a pensar en esos casos antes de escribir una sola línea de código real.
Ejemplo 3: algoritmo de búsqueda binaria
# Problema: buscar un número en una lista ordenada de forma eficiente.
# La búsqueda binaria divide la lista por la mitad en cada paso.
# Pseudocódigo:
FUNCIÓN busqueda_binaria(lista, objetivo)
izquierda ← 0
derecha ← longitud(lista) - 1
MIENTRAS izquierda <= derecha HACER
medio ← (izquierda + derecha) / 2 (parte entera)
SI lista[medio] == objetivo ENTONCES
DEVOLVER medio ← encontrado en la posición 'medio'
SI NO SI lista[medio] < objetivo ENTONCES
izquierda ← medio + 1 ← el objetivo está en la mitad derecha
SI NO
derecha ← medio - 1 ← el objetivo está en la mitad izquierda
FIN SI
FIN MIENTRAS
DEVOLVER -1 ← no encontrado
FIN FUNCIÓN
# Traducción a Python
def busqueda_binaria(lista, objetivo):
izquierda = 0
derecha = len(lista) - 1
while izquierda <= derecha:
medio = (izquierda + derecha) // 2
if lista[medio] == objetivo:
return medio
elif lista[medio] < objetivo:
izquierda = medio + 1
else:
derecha = medio - 1
return -1
numeros = [2, 5, 8, 12, 16, 23, 38, 45, 61, 72]
print(busqueda_binaria(numeros, 23)) # 5 (índice donde está el 23)
print(busqueda_binaria(numeros, 10)) # -1 (no encontrado)
Un algoritmo como la búsqueda binaria es fácil de entender en pseudocódigo y sorprendentemente fácil de equivocarse al codificar si no has pensado bien los límites del bucle. El pseudocódigo te da la estructura correcta antes de que los detalles del lenguaje te distraigan.
Pseudocódigo vs diagrama de flujo
El diagrama de flujo es la alternativa visual al pseudocódigo: representa el mismo algoritmo con cajas, rombos y flechas en lugar de texto. Ambos tienen el mismo objetivo (planificar la lógica antes de codificar) pero con distintas ventajas:
| Pseudocódigo | Diagrama de flujo |
|---|---|
| Rápido de escribir (texto plano) | Más visual, fácil de seguir el flujo |
| Fácil de modificar y versionar con Git | Mejor para presentar a personas no técnicas |
| Se puede escribir en cualquier editor | Requiere herramienta de diagramas |
| Más cercano al código final | Más cercano al lenguaje natural puro |
| Mejor para algoritmos complejos | Mejor para flujos de proceso y decisión |
En la práctica, muchos programadores usan pseudocódigo para pensar y diagramas de flujo para comunicar. No son excluyentes.
Cuándo el pseudocódigo no es necesario
El pseudocódigo es una herramienta, no un ritual obligatorio. No tiene sentido escribirlo para tareas triviales:
# Para esto NO necesitas pseudocódigo:
# "Sumar dos números y mostrar el resultado"
# Es tan simple que el código y el pseudocódigo son casi idénticos.
# Escribir el pseudocódigo sería perder tiempo.
a = 5
b = 3
print(a + b)
El pseudocódigo añade valor cuando:
- El problema tiene más de 3 o 4 condiciones o bucles.
- No tienes claro por dónde empezar.
- Vas a explicar el algoritmo a alguien más.
- El error que buscas es de lógica, no de sintaxis.
- Estás aprendiendo un nuevo algoritmo y quieres entenderlo antes de ver el código.
Pseudocódigo en papel vs en el editor
Muchos programadores con experiencia escriben el pseudocódigo directamente en el editor como comentarios, antes de escribir el código real. Tiene una ventaja práctica: los comentarios quedan como documentación del algoritmo.
# Python: pseudocódigo como comentarios, luego rellenar el código
def procesar_pedido(pedido, inventario):
# Verificar que todos los productos del pedido tienen stock suficiente
# Si alguno no tiene stock, devolver error con el producto afectado
# Calcular el total del pedido con los precios actuales
# Aplicar descuento si el total supera los 100€
# Reservar el stock de cada producto en el inventario
# Devolver el pedido con el total y el estado 'confirmado'
pass
# Cuando tienes los comentarios, rellenar el código es mucho más directo:
def procesar_pedido(pedido, inventario):
# Verificar que todos los productos del pedido tienen stock suficiente
for linea in pedido.lineas:
if inventario[linea.producto_id] < linea.cantidad:
return {"error": f"Stock insuficiente para {linea.producto}"}
# Calcular el total del pedido con los precios actuales
total = sum(l.cantidad * l.precio_unit for l in pedido.lineas)
# Aplicar descuento si el total supera los 100€
if total > 100:
total *= 0.95
# Reservar el stock de cada producto en el inventario
for linea in pedido.lineas:
inventario[linea.producto_id] -= linea.cantidad
# Devolver el pedido con el total y el estado 'confirmado'
return {"total": total, "estado": "confirmado"}
Este enfoque tiene una ventaja adicional: cuando terminas, el código tiene comentarios que explican qué hace cada bloque, lo que lo hace más fácil de entender para ti mismo en el futuro y para cualquier persona que lo lea.
Resumen
- El pseudocódigo es una descripción de un algoritmo en lenguaje natural estructurado, sin sintaxis de ningún lenguaje de programación. Su objetivo es planificar la lógica antes de escribir código real.
- Separa el problema lógico (¿qué pasos necesito?) del problema técnico (¿cómo se escribe en este lenguaje?). Resolver ambos a la vez es la fuente de muchos errores.
- No hay un estándar universal. Lo importante es ser consistente y claro: que cualquier persona pueda entenderlo sin conocer ningún lenguaje de programación.
- El proceso es: entender el problema → identificar entradas y salidas → escribir el pseudocódigo → traducir al lenguaje. La traducción es el paso más mecánico.
- Escribir pseudocódigo como comentarios en el editor antes del código real es una técnica práctica que además produce código bien documentado.
- No siempre es necesario: para tareas simples es innecesario. Añade valor cuando el algoritmo tiene complejidad lógica, cuando explicas algo a alguien o cuando estás bloqueado.
- Los diagramas de flujo son la alternativa visual al pseudocódigo: útiles para comunicar a personas no técnicas, menos prácticos para pensar algoritmos complejos.
No hay comentarios todavía. Sé el primero en compartir tu opinión.