Skip to main content

Command Palette

Search for a command to run...

Principio: Demuestre, no solo diga

Updated
3 min readView as Markdown
Principio: Demuestre, no solo diga

Esta diapositiva transmite una idea muy importante cuando trabajas con Claude Code, ChatGPT o cualquier agente de IA:

No basta con decirle las reglas. Hay que enseñarle ejemplos.

Por eso el título dice:

Show, Don't Just Tell

Muestra, no solo digas.

Un ejemplo con personas

Imagina que contratas a un desarrollador nuevo.

Opción 1: Solo le dices la regla

Le dices:

"Escribe código limpio."

¿Qué significa "código limpio"?

Para una persona puede significar una cosa y para otra, otra diferente.

La regla es demasiado abstracta.

Opción 2: Le enseñas ejemplos

Le dices:

No hagas esto

public Point(double x, double y) {

this.x = x;

this.y = y;

}

Porque no valida los datos.

Luego le muestras:

Haz esto

if (Double.isNaN(x) || Double.isNaN(y)) {

throw new IllegalArgumentException( "Coordinates cannot be NaN");

}

Ahora ya no hay duda.

El desarrollador sabe exactamente qué esperas.

Con la IA ocurre exactamente lo mismo.

¿Por qué el ejemplo es mejor?

La IA no entiende "código limpio" como un ser humano.

Si le dices:

Escribe código limpio.

Puede generar diez versiones distintas.

Pero si le dices:

Siempre valida los parámetros del constructor.

Y además le muestras cómo hacerlo:

if (Double.isNaN(x)) {

throw ...

}

Entonces empezará a repetir ese patrón.

¿Qué significa "Never do this"?

La caja roja dice:

public Point(double x, double y) {

this.x = x;

this.y = y;

}

Parece correcto.

Pero tiene un problema.

¿Qué pasa si alguien hace?

Point p = new Point(Double.NaN, 10);

o

Point p = new Point(15, Double.NaN);

NaN significa "Not a Number", un valor especial de double.

El objeto se crea igual.

Ahora tienes un objeto inválido.

Más adelante alguien hace cálculos:

double distancia = p.x + 100;

Resultado:

NaN

Todo empieza a propagarse.

¿Qué propone la caja verde?

Antes de guardar los valores:

if (Double.isNaN(x) || Double.isNaN(y)) {

throw new IllegalArgumentException( "Coordinates cannot be NaN");

}

Si alguien intenta crear un objeto inválido:

new Point(Double.NaN, 20);

El programa responde inmediatamente:

IllegalArgumentException

Es decir:

"No voy a permitir crear un objeto inválido."

Ese es un principio muy usado en DDD:

Los objetos deben proteger sus propias invariantes.

¿Y la "War Story"?

Abajo aparece:

En enero de 2025 ocurrió un incidente en producción porque llegaron coordenadas NaN y todo el proceso de exportación falló.

La enseñanza es:

Siempre validar en los constructores.

¿Por qué incluyen esta historia?

Porque las personas y la IA recuerdan mejor el motivo de una regla cuando conocen la consecuencia de no seguirla.

No es solo:

Valida los parámetros.

Sino:

Valida los parámetros porque una vez un sistema completo cayó por no hacerlo.

Eso hace que la regla tenga más peso.

No lo olvide: La IA aprende mucho mejor a partir de ejemplos concretos que de reglas generales, porque puede identificar y reproducir patrones de forma consistente.

Enjoy!

Joe