30 puntos por gogokow27 2025-06-15 | 4 comentarios | Compartir por WhatsApp

Introducción a Kent Beck

  • Creador de Extreme Programming (XP)
  • Coautor del Manifiesto Ágil (primer firmante en orden alfabético)
  • Pionero de TDD (desarrollo guiado por pruebas)
  • Una leyenda de la industria con 52 años de experiencia programando
  • Actualmente está escribiendo "Tidy Together" (diseño de software y trabajo en equipo)
  • Pasa "la etapa más divertida de su vida programando" mientras programa entre 6 y 10 horas al día con herramientas de IA

1. Herramientas de programación con IA y la metáfora del 'genio'

Concepto clave: un genio impredecible

  • Compara a los agentes de IA con un "genio impredecible"
  • "No hacen exactamente lo que quiero decir"
  • "Tienen su propia agenda"

Experiencia trabajando con IA

Aspectos positivos:

  • A veces resuelven grandes problemas de diseño como si fuera magia
  • Implementan funciones útiles e inesperadas (ej.: un stress tester para árboles B+)

Aspectos negativos:

  • Interpretan mal la intención del usuario
  • Intentan borrar o modificar pruebas
  • Se comportan de forma traviesa intentando "resolver" problemas con tablas de búsqueda

Una experiencia adictiva

  • Recompensas intermitentes como una tragamonedas
  • "Paso frente a la computadora por la noche y pienso: '¿y si pruebo un prompt más?'"
  • "Lanzo un prompt de una hora y me voy a salir"

2. Cambios en las habilidades en la era de la IA

Reconfiguración del valor de las habilidades

"El 90% de las habilidades pierde valor, y el 10% aumenta 1000 veces"

Habilidades que ganaron valor:

  • Definir visión
  • Gestionar hitos
  • Controlar la complejidad

Habilidades que perdieron valor:

  • Detalles específicos de cada lenguaje (como la posición de &, *, [] en Rust)

Cambio de perspectiva sobre los lenguajes de programación

Antes: fuerte apego emocional a Smalltalk
Ahora:

  • El apego a los lenguajes desapareció porque "me han roto demasiado el corazón"
  • Está cansado de la separación identitaria entre "desarrollador Java" y "desarrollador Clojure"
  • "Aprendizaje por ósmosis": gracias a la IA, se puede programar sin conocer los detalles del lenguaje

Lenguajes que ha probado recientemente: Swift, Go, Rust, Haskell, C++, JavaScript

Proyecto ambicioso actual: Server Smalltalk

  • Persistencia: funciona como una base de datos
  • Transaccional: permite commit y abort
  • Paralelismo: procesamiento en paralelo entre múltiples hilos y máquinas
  • Manejo de grandes volúmenes de datos

3. Historia del Manifiesto Ágil

Contexto de su nacimiento (2001)

  • Búsqueda de una alternativa al modelo en cascada
  • Resultado de años de workshops sobre metodologías de software
  • Reunión preparatoria para un crucero en Noruega → reunión final en Utah

Aporte de Kent Beck

  • Agregó la palabra "daily" ("interacción diaria" en uno de los 12 principios)
  • Fue el primer firmante por orden alfabético

Molestia con el término "ágil"

Problema:

  • Preveía que se abusaría del término porque era "demasiado atractivo"
  • Y efectivamente aparecieron organizaciones que se decían ágiles sin seguir sus principios

Alternativa que prefería: "conversational"

  • Enfatiza la comunicación bidireccional en vez de un flujo unidireccional
  • No fue adoptado por no resultar lo bastante atractivo

4. Extreme Programming (XP)

Origen

Experiencia inicial en consultoría:

  • Al principio era consultor técnico (tuning de rendimiento, manipulación de bits)
  • Cada vez le pedían más consejos de gestión de proyectos
  • Descubrió la importancia del entorno: solo cambiando la disposición de los asientos se veía una mejora dramática

Proyecto en Chrysler:

  • Transformó un proyecto que iba al fracaso en uno exitoso
  • Llevó todas las prácticas efectivas "al máximo nivel (hasta 11)"

Principios centrales de XP

Dividir el tiempo en ciclos pequeños para realizar 4 actividades en paralelo o secuencia:

  1. Definir qué se va a hacer
  2. Diseñar con qué estructura se hará
  3. Implementar la funcionalidad
  4. Verificar que funcione como se espera

Pair programming

  • Un enfoque experimental, no una obligación
  • En la experiencia inicial del equipo, todos los bugs encontrados después del desarrollo venían del código hecho en solitario
  • "Cero defectos en producción cuando se hacía pair programming"

Estrategia detrás del nombre

  • Eligió "Extreme" como un nombre provocador que su competidor (Grady Booch) no usaría
  • Coincidió con la época de auge de los deportes extremos
  • "Un atleta extremo está perfectamente preparado o muere": una buena metáfora

Factores de éxito

  • En plena burbuja puntocom, atrajo a desarrolladores desesperados por los ciclos de 18 meses del modelo en cascada
  • Prometía resultados más rápidos y más predecibles

5. Desarrollo guiado por pruebas (TDD)

Origen e inspiración (años 70)

Sistemas tape-to-tape:

  • Conoció el concepto en un libro de programación de su padre
  • Entrada real → escribir manualmente la salida esperada → escribir el código → comparar con la salida real
  • Lo leyó entre los 8 y 12 años, pero no lo entendió

Desarrollo de S-Unit:

  • Lo desarrolló para ayudar a clientes a escribir pruebas
  • Probó la idea "absurda" de "escribir el valor esperado antes de escribir el código"

Primera experiencia con TDD: implementar una pila

Personalidad ansiosa:

  • "Soy una persona ansiosa. Me preocupo mucho"
  • "Programar es una fuente constante de ansiedad" (¿qué olvidé?, ¿qué rompí?)

Resultado de aplicar TDD:

  • "La ansiedad desapareció por completo"
  • "Estoy seguro de que esto funciona"
  • Cambió la experiencia emocional de programar

Valor de TDD

Ventajas técnicas:

  • Menor densidad de defectos
  • Feedback rápido sobre elecciones de API
  • Posibilidad de evolucionar el diseño de la implementación

Ventajas emocionales:

  • "Vale la pena solo por el costo del tratamiento contra la ansiedad técnica"

Respuesta a las críticas sobre diseño

Crítica de John Osterhout: "TDD no ayuda al diseño y solo se enfoca en los detalles"

Respuesta de Kent Beck:

  • "Es una cuestión de elección"
  • En la práctica, quienes desarrollan se mueven constantemente entre niveles de abstracción al tomar decisiones de diseño
  • El momento de "alivio de tensión" del ciclo Red-Green da más libertad para pensar en diseño a mayor escala

6. Agentes de IA y TDD

Aplicación práctica

Siempre escribir primero las pruebas:

  • Las pruebas comunican lo que la IA pasó por alto
  • Bloquean los intentos de la IA de modificar o borrar pruebas

Mejoras necesarias:

  • Hace falta una "anotación inmutable"
  • "Esto está bien. Si lo cambias, despertarás por siempre en la oscuridad"

Limitaciones de la IA

  • No sabe reducir el acoplamiento ni aumentar la cohesión
  • Carece de sentido de diseño
  • Tiende a tomar decisiones con efectos colaterales lejanos

Estrategia de respuesta

  • Una gran suite de pruebas que corre en 300 milisegundos
  • Detección en tiempo real de roturas accidentales en el código causadas por la IA

7. Experiencia en Facebook (2011-2017)

El shock al entrar en 2011

Cero asistentes a una clase de TDD:

  • Habilidades avanzadas de Excel: lleno total + lista de espera
  • Tango argentino: lleno total + lista de espera
  • TDD: ningún asistente

Estrategia de respuesta:

  • "Olvidar todo mi conocimiento de ingeniería de software"
  • Decidió "mirar al mono e imitarlo"

Entorno de desarrollo único de Facebook

Fuerte sentido de responsabilidad:

  • Quienes programan están de guardia nocturna
  • "Sienten directamente el dolor de sus propios errores"

Bucles de feedback multinivel:

  • Servidor de desarrollo rápido (ver de inmediato un cambio de azul → verde)
  • Code review
  • Despliegue interno (el personal lo usa para trabajo y vida personal)
  • Rollout gradual (diario/semanal)
  • Excelente observabilidad

Cultura organizacional:

  • "En Facebook nada es problema de otra persona"
  • Si una abuela llegaba con un problema de acoso hacia su nieto, "eso también es tu problema"

Por qué TDD no encajaba ahí

Áreas reales de problema:

  • Problemas de configuración
  • Relaciones entre subsistemas
  • Cosas difíciles de atrapar con pruebas

Ventajas únicas de Facebook:

  • Pruebas en vivo a gran escala con millones de usuarios
  • Excelente observabilidad
  • Feature flags
  • Un entorno difícil de reproducir en una empresa común

Caso concreto:

  • Implementación de la función de estado de relación (agregar unión civil/convivencia a soltero/casado)
  • Usó TDD, pero fue "una pérdida de tiempo"
  • Hubo un problema por acoplamiento implícito en el código de notificaciones → otra persona hizo un hotfix

Cambios con el tiempo

2011 (2,000 personas):

  • Máximo nivel de posibilidad, escala y sentido de pertenencia
  • Mandos medios que pensaban en optimización global
  • Colaboración pensando en "quién realmente necesita ayuda"

2017 (15,000 personas):

  • Política, pensamiento de suma cero y microoptimización
  • Se volvió más difícil ver el panorama completo
  • Choques de intereses entre áreas (ej.: textos largos vs equipo que optimiza likes/comentarios)

Vivir esa escala

  • Messenger API: 1 cuatrillón de llamadas por semana
  • Un grupo experimental del tamaño de "Nueva Zelanda" (un millón de personas)
  • 1 cuatrillón = un millón × mil millones

8. El futuro del desarrollo de software en la era de la IA

Cambio de paradigma

Reconfiguración total de la estructura de costos:

  • "La frontera entre lo barato y lo caro cambió por completo"
  • Cosas que antes se consideraban caras se volvieron "ridículamente baratas"

Desafío de adaptación para las organizaciones

Desechar más código:

  • Se pueden generar 10 veces más artefactos
  • Pero sigue habiendo solo uno valioso
  • Hace falta un sistema de incentivos para "tirar experimentos ya terminados"

Aumento cuantitativo de la experimentación:

  • La cantidad de ideas exploradas será una ventaja competitiva
  • Es una era en la que "hay que experimentar con todo"

Cambio personal

  • Programar volvió a ser divertido
  • Ahora puede tener ambiciones más grandes
  • Se volvieron realizables ideas "enormemente ambiciosas"

9. Q&A rápida

Preferencias personales

  • Lenguaje favorito: Smalltalk
  • Segundo lenguaje: JavaScript (similar a Smalltalk)
  • Herramienta de IA actual: Claude (motor interno de Cursor y Augment)
  • Libro recomendado: "The Timeless Way of Building" de Christopher Alexander

Ideas clave

1. La importancia absoluta del contexto

  • La misma metodología puede funcionar de forma totalmente distinta según el entorno
  • El entorno masivo de Facebook vs. el entorno de transacciones pequeñas de un banco

2. La relación entre emoción y tecnología

  • El verdadero valor de TDD es "aliviar la ansiedad"
  • El cambio emocional importa más que la lógica técnica

3. Una nueva forma de pensar en la era de la IA

  • La visión y la capacidad de diseño emergen como habilidades clave
  • Los detalles de los lenguajes ya no importan tanto
  • Aumentar la cantidad de experimentos se vuelve una ventaja competitiva

4. El poder de la cultura organizacional

  • Un sentido de ownership basado en "nada es problema de otra persona"
  • La diferencia entre optimización global vs. optimización individual
  • La importancia de alinear incentivos

4 comentarios

 
mse9000 2025-06-20

El entorno de desarrollo único de Facebook
Fuerte sentido de responsabilidad:
los programadores están de guardia nocturna
"Sienten directamente el dolor de sus propios errores"

...¿No es tan diferente del entorno de desarrollo coreano...?

 
helloppfm 2025-06-16

Todavía sigue por aquí.

Hace tiempo di un seminario sobre TDD en una empresa de maquinaria, y todavía no olvido las miradas de todos como diciendo: “¿y esto qué es?”.

Creo que TDD está bien, pero no sale tan bien como uno espera...
Estoy haciendo pruebas de integración como si fueran TDD. Claro, esto no es TDD. ^^

 
kandk 2025-06-16

Todavía siguen peleando los creyentes ciegos del TDD vs. los que dicen que no sirve para nada,
me gustaría que sacaran una versión v2 del TDD adaptada otra vez a la situación actual de la industria.
Hoy en día la IA resuelve fácilmente las cosas pequeñas, así que también estaría bueno ver cómo aprovecharlo cuando se necesita una gran cantidad de contexto...

 
codemasterkimc 2025-06-15

Es un buen artículo.