Café y Código

1. No Dependencia y Explicabilidad 🧠

¿Por qué hablar de ética si solo quiero programar?

Las herramientas de inteligencia artificial como GitHub Copilot, Cursor, Antigravity, Codex u OpenCode pueden autocompletar funciones enteras, generar tests y hasta diseñar bases de datos. Eso es poderoso, pero también peligroso si no sabés qué está haciendo el código que aceptás.

"Un programa que funciona no es lo mismo que un programa que es seguro, mantenible y que el desarrollador comprende."

El principio de No Dependencia

La IA debe cumplir un rol de apoyo, no de sustitución de tu razonamiento. Si solo aceptás sugerencias sin poder explicar el porqué de cada decisión, estás desarrollando una dependencia que limita:

  • Tu pensamiento lógico y capacidad de diseño algorítmico.
  • La comprensión de las estructuras de datos que usás.
  • Tu habilidad para detectar errores y vulnerabilidades de seguridad.

¿Cómo saber si tenés dependencia?

Hacete estas preguntas honestas después de terminar una función o un módulo:

🔍 Autodiagnóstico

  • ¿Puedo explicar por qué elegí una lista en vez de un diccionario o un set?
  • ¿Entiendo cómo funciona el try/except que la IA me sugirió?
  • ¿Sé qué riesgo de seguridad evita la validación que se agregó?
  • ¿Puedo modificar el código sin volver a preguntar a la IA?

Si respondés "no" a más de una, estás aceptando código a ciegas. Eso no es usar IA: eso es delegar tu responsabilidad profesional.

Dependencia vs. Uso Responsable

⚠️ Dependencia ✅ Uso Responsable
Aceptar autocompletado sin leer el código. Modificar, ampliar y depurar de forma autónoma.
No justificar decisiones de diseño (ej. lista vs diccionario). Explicar el funcionamiento y justificación de cada bloque.
Desconocer cómo funciona el manejo de excepciones sugerido. Detectar errores de sintaxis y lógicos simples sin IA.
Ignorar riesgos de seguridad del código insertado. Comprender qué vulnerabilidad mitiga cada validación.

Ejemplo práctico: ¿Qué pasa si solo copiás?

Supongamos que Copilot te sugiere esta función para buscar un usuario:

sugerencia_copilot.py
PYTHON
1 def buscar_usuario(nombre, lista):
2 for u in lista:
3 if u["nombre"] == nombre:
4 return u
5 return None

La función funciona. Pero un desarrollador responsable se pregunta:

  • ¿Qué pasa si lista es None? → Se rompe con TypeError.
  • ¿Y si algún diccionario no tiene la clave "nombre"? → KeyError.
  • ¿Es eficiente recorrer toda la lista en cada búsqueda? → Con muchos datos no, quizás un diccionario indexado sería mejor.

Una versión más robusta, que vos deberías poder escribir:

buscar_mejorado.py
PYTHON
1 def buscar_usuario(nombre: str, lista: list[dict] | None) -> dict | None:
2 if not lista:
3 return None
4 for u in lista:
5 if u.get("nombre") == nombre:
6 return u
7 return None

🤖 Desafío: Explicá el código

Abrí tu herramienta de IA favorita y pedile que genere una función que reciba una lista de notas y devuelva el promedio. Antes de aceptar, escribí en un comentario: qué hace cada línea, qué tipo de error podría ocurrir y qué validación agregarías. Si no podés, no la aceptes.

👁️ Ver criterio de evaluación

Deberías poder responder:
• ¿Qué pasa si la lista está vacía? (División por cero).
• ¿Qué pasa si algún elemento no es un número? (TypeError).
• ¿Se modifica la lista original? (No debería).

Quiz: No Dependencia

Ko-fi
Donaciones
Apoyá cafeycodigo con un café en Ko-fi. Colaboradores: insignia, muro y zona exclusiva.