13. Importancia de los conocimientos de programación

La inteligencia artificial reduce el esfuerzo de escribir ciertas instrucciones, pero comprender datos, lógica, arquitectura, errores y pruebas sigue siendo necesario para dirigir el trabajo y evaluar sus resultados.

13.1 Introducción

El Vibe Coding permite comenzar una aplicación mediante lenguaje natural. Esta facilidad puede crear la idea de que aprender programación dejó de ser importante. Sin embargo, generar una primera versión y desarrollar software confiable son objetivos diferentes.

Los conocimientos técnicos permiten describir mejor el problema, reconocer decisiones ocultas, comprender las modificaciones y comprobar que el resultado funciona más allá de una demostración.

No es necesario dominar todos los lenguajes antes de utilizar IA. Podemos aprender mientras construimos, siempre que la herramienta amplíe nuestra comprensión en lugar de reemplazarla.

La IA puede escribir una gran parte del código. La persona sigue necesitando criterio para decidir qué código hace falta, qué significa que sea correcto y qué riesgos puede introducir.

13.2 Cambia la forma de producir, no los fundamentos

Antes de los asistentes modernos, una persona escribía cada estructura y consultaba documentación para recordar detalles. Ahora puede describir una intención y recibir una propuesta completa. Lo que no desaparece es la necesidad de razonar sobre el sistema.

Actividad Aporte de la IA Conocimiento humano necesario
Definir una función Propone código y nombres. Comprender entradas, salidas y reglas.
Elegir una estructura Enumera alternativas. Evaluar restricciones y consecuencias.
Corregir un error Sugiere causas y cambios. Reproducir, aislar y confirmar la causa.
Crear pruebas Genera casos y automatización. Definir el comportamiento esperado.
Revisar seguridad Señala patrones conocidos. Comprender amenazas, datos y permisos.
Aceptar el cambio Resume lo realizado. Asumir responsabilidad por el resultado.

13.3 Leer código antes de aceptarlo

Leer código no significa memorizar cada detalle de sintaxis. Significa poder seguir el flujo y explicar qué sucede con los datos.

Ante una función generada deberíamos identificar:

  • Qué parámetros recibe y qué tipos espera.
  • Qué condiciones cambian el resultado.
  • Qué funciones externas invoca.
  • Qué valor devuelve.
  • Qué estado, archivo o dato modifica.
  • Qué errores puede producir o capturar.
function obtenerActivos(usuarios) {
  return usuarios
    .filter(usuario => usuario.activo)
    .map(usuario => usuario.nombre);
}

Para aprobar este ejemplo debemos comprender que primero conserva usuarios activos y luego devuelve solamente sus nombres. También debemos preguntar qué ocurre si usuarios no es una lista o si un elemento no contiene las propiedades esperadas.

13.4 Descomponer problemas

Programar implica transformar un objetivo amplio en operaciones pequeñas y ordenadas. Esta habilidad mejora tanto el código escrito manualmente como las instrucciones dirigidas a una IA.

La solicitud “creá un sistema de turnos” puede dividirse en preguntas:

  1. ¿Qué personas y recursos participan?
  2. ¿Cómo se representa una franja disponible?
  3. ¿Qué impide reservar dos veces el mismo horario?
  4. ¿Cómo se crea, confirma o cancela un turno?
  5. ¿Qué información se muestra a cada rol?
  6. ¿Qué ocurre ante una operación simultánea?

Sin esta descomposición, la IA debe inventar gran parte del producto. Con ella, cada etapa puede convertirse en una tarea verificable.

Una buena instrucción técnica suele ser el resultado de haber pensado el problema antes de pedir código.

13.5 Variables, tipos y estructuras de datos

Las aplicaciones reciben, transforman y conservan información. Elegir cómo representarla determina qué operaciones son sencillas y qué errores pueden aparecer.

Concepto Pregunta que permite responder Error que ayuda a evitar
Tipo de dato ¿Es texto, número, fecha o valor lógico? Sumar texto como si fuera un número.
Lista ¿Existe una colección ordenada de elementos? Tratar varios resultados como uno solo.
Objeto ¿Qué propiedades describen una entidad? Confundir campos con significados distintos.
Identificador ¿Cómo distinguimos dos entidades semejantes? Modificar el registro equivocado.
Ausencia ¿Cómo representamos un dato que no existe? Acceder a propiedades de un valor inexistente.

Si no comprendemos la forma de los datos, resulta difícil evaluar una consulta, una validación o una transformación generada.

13.6 Condiciones, ciclos y estado

Las condiciones deciden qué camino sigue un programa; los ciclos repiten operaciones; el estado conserva información entre acciones. Muchos errores producidos por IA aparecen en sus límites e interacciones.

Al revisar debemos preguntar:

  • ¿La comparación incluye o excluye el valor límite correcto?
  • ¿Existe un camino sin valor de retorno?
  • ¿El ciclo puede no terminar?
  • ¿La colección cambia mientras se recorre?
  • ¿Dos operaciones pueden actualizar el mismo estado?
  • ¿La interfaz refleja el estado actual o una copia desactualizada?

Estos conocimientos permiten detectar fallas lógicas aunque la sintaxis sea válida y la pantalla inicial parezca funcionar.

13.7 Funciones, módulos y responsabilidades

Dividir el sistema en partes con responsabilidades claras facilita entender, probar y modificar el código. Una IA puede generar una función extensa que resuelve todo el flujo, pero esa solución puede volverse difícil de mantener.

Una separación útil distingue, por ejemplo:

  • Lectura y validación de la entrada.
  • Aplicación de reglas del negocio.
  • Acceso a datos.
  • Presentación del resultado.
  • Registro y manejo de errores.

El conocimiento de modularidad permite pedir cambios precisos: “conservá la regla en el servicio y utilizá el componente solo para mostrar el resultado” transmite una decisión que la IA no debería reinventar.

13.8 Comprender el entorno de ejecución

El código no funciona de forma aislada. Depende de un lenguaje, un sistema operativo, bibliotecas, configuración y servicios.

Conocimientos básicos del entorno permiten:

  • Instalar dependencias de manera consciente.
  • Interpretar comandos y códigos de finalización.
  • Distinguir un error de código de uno de configuración.
  • Manejar variables de entorno sin exponer secretos.
  • Comprender rutas relativas y absolutas.
  • Reproducir la aplicación en otra computadora.

Ejecutar ciegamente cada comando sugerido puede modificar el proyecto o el sistema. Antes debemos comprender su propósito, alcance y posibilidad de reversión.

13.9 Depurar en lugar de probar cambios al azar

Depurar consiste en observar el problema, construir hipótesis y producir evidencia. Sin este proceso, una conversación con IA puede convertirse en una sucesión de cambios que ocultan el error original.

Un método básico es:

  1. Definir el resultado esperado y el observado.
  2. Repetir el problema de forma consistente.
  3. Reducirlo al menor caso que todavía falla.
  4. Inspeccionar datos y puntos de decisión.
  5. Proponer una causa que pueda comprobarse.
  6. Realizar un cambio pequeño.
  7. Volver a ejecutar el caso y las pruebas relacionadas.

La IA puede ayudar en cada etapa, pero la evidencia determina qué hipótesis conservar.

13.10 Pruebas y criterios de corrección

Para comprobar código necesitamos expresar qué debería ocurrir. Ese conocimiento no surge del lenguaje de programación, sino de requisitos y reglas del dominio.

Una buena colección de pruebas considera:

  • El caso normal.
  • Valores exactamente en los límites.
  • Entradas ausentes o inválidas.
  • Errores de servicios externos.
  • Operaciones repetidas.
  • Comportamientos anteriores que no deben romperse.

Comprender pruebas permite evitar una trampa frecuente: aceptar casos generados que verifican la implementación actual, pero no el requisito real.

13.11 Seguridad como conocimiento transversal

La seguridad no se agrega al final mediante una única biblioteca. Atraviesa datos, permisos, comunicaciones, configuración y manejo de errores.

Incluso en proyectos pequeños conviene comprender:

  • Por qué no deben escribirse credenciales en el código.
  • La diferencia entre autenticación y autorización.
  • Por qué toda entrada externa necesita validación.
  • Qué información no debe aparecer en mensajes o registros.
  • Por qué las dependencias también forman parte del riesgo.
  • Cómo aplicar el menor nivel de permisos necesario.

Una función llamada validar o sanitizar no demuestra que el dato esté protegido. Debemos conocer la amenaza y revisar la operación concreta.

13.12 Rendimiento y escalabilidad

Dos soluciones pueden producir el mismo resultado con costos muy diferentes. Una lista pequeña oculta operaciones que se vuelven lentas cuando crecen los datos o la cantidad de personas usuarias.

Los fundamentos permiten preguntar:

  • ¿Cuántas veces se recorre la colección?
  • ¿La aplicación carga más datos de los necesarios?
  • ¿Se repite una consulta dentro de un ciclo?
  • ¿La interfaz realiza cálculos en cada actualización?
  • ¿Qué recurso limita el sistema: procesamiento, memoria, disco o red?

No siempre hace falta optimizar. Primero debemos medir y conocer el volumen esperado. La comprensión técnica evita aceptar tanto una solución lenta como una optimización innecesariamente compleja.

13.13 Evaluar las propuestas de la IA

Una IA puede ofrecer varias soluciones con descripciones igualmente convincentes. Elegir requiere comparar consecuencias y no solamente cantidad de código.

Criterio Pregunta de revisión
Corrección ¿Cumple los requisitos y casos límite?
Simplicidad ¿Existe una forma más directa de resolverlo?
Coherencia ¿Respeta patrones ya utilizados en el proyecto?
Seguridad ¿Cómo trata entradas, permisos y datos sensibles?
Pruebas ¿Podemos comprobar sus afirmaciones?
Mantenimiento ¿Otra persona podrá comprender y modificar el resultado?
Dependencias ¿Agrega herramientas realmente necesarias?

13.14 Conocimientos según el tipo de tarea

No todas las tareas requieren la misma profundidad. La supervisión debe corresponder al alcance y al impacto.

Tarea Conocimiento mínimo para supervisarla
Prototipo visual HTML, CSS, interacción básica y accesibilidad.
Transformación de datos Tipos, estructuras, validación y casos límite.
Integración con una API HTTP, autenticación, errores y contrato del servicio.
Persistencia Modelo de datos, consultas, concurrencia y migraciones.
Inicio de sesión Identidad, sesiones, permisos y amenazas comunes.
Sistema crítico Especialización del dominio, procesos formales y revisión independiente.

Si el conocimiento disponible no alcanza, podemos reducir el alcance, aprender primero o incorporar una persona con experiencia.

13.15 Aprender programación junto con la IA

La IA puede convertirse en una herramienta de aprendizaje si utilizamos un proceso deliberado:

  1. Elegir un concepto pequeño: condición, lista, función o evento.
  2. Pedir una explicación y un ejemplo mínimo.
  3. Escribir una predicción sobre su resultado.
  4. Ejecutar y modificar el ejemplo personalmente.
  5. Resolver una variante sin solicitar la solución completa.
  6. Pedir una revisión y comparar alternativas.
  7. Registrar con palabras propias lo aprendido.

A medida que crece la comprensión, también mejora la calidad de las instrucciones y la capacidad de detectar errores generados.

El objetivo no es recordar todo sin ayuda, sino construir un modelo mental que permita formular preguntas, anticipar resultados y reconocer cuándo algo no encaja.

13.16 Actividad de comprensión

Analizá el siguiente pedido: “creá una función que reciba una lista de ventas y devuelva el total mensual de cada cliente”.

  1. Definí la estructura de una venta y la forma del resultado.
  2. Indicá cómo se identifica un cliente y cómo se representa el mes.
  3. Describí qué debería ocurrir con listas vacías, importes inválidos y ventas anuladas.
  4. Dividí la solución en operaciones pequeñas antes de escribir código.
  5. Prepará al menos seis casos de prueba con resultados esperados.
  6. Recién entonces pedí una implementación a la IA y comparala con tus decisiones.

Marcá qué partes de la respuesta comprendés, cuáles necesitás investigar y qué cambiarías para ajustarla a la especificación. La actividad está completa cuando podés explicar el flujo sin depender de la explicación generada.