En ingeniería de software , la depuración con patito de goma (o rubberducking ) es un método de depuración de código mediante la articulación de un problema en lenguaje natural hablado o escrito . El nombre es una referencia a una historia del libro The Pragmatic Programmer en la que un programador llevaba consigo un patito de goma y depuraba su código obligándose a explicarlo, línea por línea, al pato. [1] Existen muchos otros términos para esta técnica, que a menudo implican diferentes objetos (normalmente) inanimados o mascotas como un perro o un gato. Los osos de peluche también se utilizan mucho. [2] Cuando hay humanos involucrados, se conoce como programación confesional. [3]
Muchos programadores han tenido la experiencia de explicar un problema a otra persona, posiblemente incluso a alguien que no sabe nada de programación, y luego dar con la solución en el proceso de explicar el problema. Al describir lo que se supone que debe hacer el código y observar lo que realmente hace, cualquier incongruencia entre estos dos se hace evidente. [4] De manera más general, enseñar una materia obliga a evaluarla desde diferentes perspectivas y puede proporcionar una comprensión más profunda . [5] Al utilizar un objeto inanimado, el programador puede intentar lograr esto sin tener que interrumpir a nadie más y con mejores resultados que los que se han observado con solo pensar en voz alta sin una audiencia. [6] Este enfoque se ha enseñado en cursos de informática e ingeniería de software. [7] [8]
El 1 de abril de 2018, Stack Exchange introdujo un avatar de pato de goma en sus sitios web como una nueva "función" llamada Quack Overflow como una broma del Día de los Inocentes . El pato aparecía en la esquina inferior derecha de la ventana gráfica del navegador e intentaba ayudar a los visitantes escuchando sus problemas y respondiendo con soluciones. Sin embargo, el pato simplemente producía un sonido de graznido después de aparentemente pensar y escribir. Hizo referencia al uso del pato de goma como un método poderoso para resolver problemas. [9]