Resolver bien un problema no consiste en escribir código rápido. Consiste en entender qué se pide, construir una solución correcta, justificar sus decisiones y comunicarla de forma que otra persona pueda verificarla.
Una entrevista técnica hace visible ese proceso. El código importa, pero también importan las preguntas, los ejemplos, la elección de la estructura, el análisis y la capacidad de corregir el rumbo.
Una afirmación que es verdadera antes y después de cada iteración.
En insertion sort, antes de procesar i, el prefijo array[0..i-1] está ordenado. La iteración inserta el nuevo valor en ese prefijo sin romper el orden.
Decir “BFS es O(V + E)” solo es correcto con una representación y una cola que permitan procesar cada vértice y arista un número constante de veces. Implementarlo con Array.shift() puede introducir desplazamientos lineales en JavaScript.
En lugar de comprobar solo ejemplos, verifica reglas generales:
ordenar conserva la cantidad de elementos;
ordenar conserva las frecuencias;
el resultado está en orden;
aplicar sort dos veces produce el mismo resultado;
insertar y luego extraer de un heap respeta la prioridad.
Property-based testing genera muchas entradas y busca contraejemplos. No sustituye los casos elegidos a mano, pero descubre combinaciones que una persona puede pasar por alto.
Durante la implementación, evita narrar cada carácter. Explica decisiones: “marco el nodo al encolarlo para que no entre varias veces”, no “ahora escribo un if”.
problema
↓
modelo de datos y restricciones
↓
operaciones dominantes
↓
estructura o patrón adecuado
↓
invariante y correctitud
↓
implementación
↓
complejidad y trade-offs
↓
tests y comunicación
Las estructuras de datos describen cómo organizas la información. Los algoritmos describen cómo la transformas. Los patrones ayudan a reconocer familias de problemas. El análisis permite decidir si la solución sigue siendo útil cuando la entrada crece.
comprender
→ implementar una estructura
→ comparar alternativas
→ modificar una implementación
→ resolver un problema guiado
→ resolver una variante
→ justificar correctitud y complejidad
Mantén un registro de errores por causa, no solo por problema: límites, estado insuficiente, mutación, duplicados, elección de estructura o análisis incorrecto. Esa clasificación muestra qué debes estudiar realmente.
¿Por qué una suite con muchos ejemplos concretos todavía puede omitir errores importantes?
Respuesta
Porque los ejemplos cubren entradas elegidas, no necesariamente las propiedades generales del algoritmo. Un bug puede aparecer en una combinación no imaginada. Por eso conviene combinar casos dirigidos, comparación con una referencia y property-based testing.