La lógica de programación es el conjunto de reglas mentales que usamos para transformar un problema en pasos claros que un programa pueda ejecutar. Un programa no es magia: es una secuencia de instrucciones sincronizadas que siguen un plan para alcanzar un objetivo. En mi caso, antes de tocar cualquier framework, aprendí a pensar en términos de entradas, procesamiento y salidas: ¿qué datos tengo?, ¿qué debo hacer con ellos?, ¿qué quiero obtener?
Piénsalo así: si puedes explicarle a alguien (o a ti mismo) cómo resolver algo paso a paso, ya tienes el 80 % del trabajo. El resto es traducir esos pasos a un lenguaje de programación.
Tres pilares que vas a usar una y otra vez:
Un cuarto pilar que te desbloquea problemas más grandes son las funciones: agrupar pasos que resuelven una mini-tarea y poder reutilizarlos.
Mini-test
Imagina que necesitas convertir grados Celsius a Fahrenheit. ¿Qué es entrada, proceso y salida?
Cuando empecé, me ayudó escribir estos tres renglones antes de cualquier línea de código. Me ahorró tiempo y bugs.
Objetivo: que puedas ir de “tengo un enredo” a “tengo un plan”.
INICIO
LEER numero
SI (numero % 2 == 0) ENTONCES
IMPRIMIR "par"
SINO
IMPRIMIR "impar"
FIN
Plantillas de pensamiento que uso a diario
Ejemplo (JS): decidir precio con descuento simple
const precio = 100; const esVip = true; let total = precio; if (esVip) total = precio * 0.9; console.log(total); // 90
Ejemplo (Python): bucle controlado por condición
saldo = 50
while saldo > 0:
print("Comprando... saldo =", saldo)
saldo -= 15
print("Sin saldo")
En mi caso, interiorizar estas piezas me permitió “leer” cualquier algoritmo ajeno sin conocer el lenguaje al 100 %.
Las funciones encapsulan lógica y te permiten reusar y probar por separado.
Pseudocódigo
FUNCION esPar(n): RETORNAR (n % 2 == 0)
Python
def es_par(n: int) -> bool:
return n % 2 == 0
JavaScript
const esPar = n => n % 2 === 0;
Problema: imprimir del 1 al N. Si el número es múltiplo de 3 → “Fizz”, de 5 → “Buzz”, de ambos → “FizzBuzz”.
Pseudocódigo
LEER N PARA i DESDE 1 HASTA N: SI i%3==0 Y i%5==0: IMPRIMIR "FizzBuzz" SINO SI i%3==0: IMPRIMIR "Fizz" SINO SI i%5==0: IMPRIMIR "Buzz" SINO: IMPRIMIR i
Python
def fizzbuzz(n: int):
for i in range(1, n+1):
out = ""
if i % 3 == 0: out += "Fizz"
if i % 5 == 0: out += "Buzz"
print(out or i)
fizzbuzz(20)
JavaScript
function fizzbuzz(n){
for (let i = 1; i <= n; i++) {
let out = "";
if (i % 3 === 0) out += "Fizz";
if (i % 5 === 0) out += "Buzz";
console.log(out || i);
}
}
fizzbuzz(20);
Errores típicos
Cuando lo practiqué, me forcé a escribir primero el pseudocódigo: redujo la tasa de errores en condiciones compuestas.
Pseudocódigo
INICIO
LISTA numeros
max = -infinito
suma = 0
PARA cada x en numeros:
SI x > max: max = x
suma = suma + x
promedio = suma / longitud(numeros)
IMPRIMIR max, promedio
FIN
Python
def max_y_promedio(nums: list[float]) -> tuple[float, float]:
assert nums, "lista vacía"
maximo = nums[0]
suma = 0
for x in nums:
if x > maximo: maximo = x
suma += x
return maximo, suma / len(nums)
print(max_y_promedio([3, 7, 2, 9, 4]))
JavaScript
function maxYPromedio(nums){
if (!nums.length) throw new Error("lista vacía");
let max = nums[0], suma = 0;
for (const x of nums){
if (x > max) max = x;
suma += x;
}
return { max, promedio: suma / nums.length };
}
console.log(maxYPromedio([3,7,2,9,4]));
Errores típicos
En mi caso, me acostumbré a probar datos con negativos y con un único elemento. Eso detecta media docena de bugs en 2 minutos.
Reglas de ejemplo: longitud ≥ 8, al menos 1 dígito y 1 letra.
Pseudocódigo
FUNCION esContraseniaValida(s):
SI longitud(s) < 8: RETORNAR FALSO
tieneLetra = FALSO
tieneDigito = FALSO
PARA cada c en s:
SI esLetra(c): tieneLetra = VERDADERO
SI esDigito(c): tieneDigito = VERDADERO
RETORNAR (tieneLetra Y tieneDigito)
Python
def es_contrasenia_valida(s: str) -> bool:
if len(s) < 8: return False
tiene_letra = any(ch.isalpha() for ch in s)
tiene_digito = any(ch.isdigit() for ch in s)
return tiene_letra and tiene_digito
JavaScript
const esContraseniaValida = s => s.length >= 8 && /[A-Za-z]/.test(s) && /\d/.test(s);
Errores típicos
Cuando lo implementé por primera vez, olvidé probar cadenas vacías y espacios; desde entonces siempre agrego casos límite a mi lista de pruebas.
Problema: ¿está objetivo en la lista? ¿y cuántas veces?
Python
def esta_y_cuantas(nums, objetivo):
count = 0
for x in nums:
if x == objetivo:
count += 1
return (count > 0), count
print(esta_y_cuantas([1,3,3,7,3,9], 3)) # (True, 3)
JavaScript
function estaYCuantas(nums, objetivo){
let count = 0;
for (const x of nums) if (x === objetivo) count++;
return { esta: count > 0, count };
}
console.log(estaYCuantas([1,3,3,7,3,9], 3)); // {esta:true, count:3}
Errores típicos
Checklist rápida que me salvó muchas veces
En mi experiencia, practicar antes de aprender un framework me dio una base que hizo que cualquier lenguaje “me suene lógico”. La lógica es la gramática; el lenguaje es solo la sintaxis.
La lógica de programación es el cimiento. Si dominas secuencia, condiciones, bucles y funciones, cualquier lenguaje te parecerá un cambio de acento, no de idioma. En mi caso, entender que un programa “solo sigue instrucciones claras para cumplir una meta” me quitó miedo y me hizo avanzar más rápido. Empieza por escribir el plan (pseudocódigo), valida con pruebas de mesa, y recién después codifica. Repite el ciclo con problemas cada vez un poco más complejos y, cuando menos lo notes, estarás resolviendo retos reales con soltura.
¿Cuál es la diferencia entre lógica de programación y algoritmo?
La lógica es la forma de pensar; el algoritmo es el plan detallado (los pasos) que surge de esa forma de pensar.
¿Puedo practicar lógica sin saber un lenguaje?
Sí: con pseudocódigo, diagramas de flujo y pruebas de mesa. Luego traduces a cualquier lenguaje.
¿Qué estructuras de control aprendo primero?
If/else y for/while. Son el 90 % de los casos. Después funciones.
¿Cómo depuro cuando “parece correcto” pero no funciona?
Haz una traza: imprime estados clave, prueba valores de borde y verifica condiciones intermedias.
No hay artículos relacionados en esta categoría.
No hay comentarios aún. ¡Sé el primero en comentar!