Como estudiante de ciencias de la computación que se adentra en las matemáticas, permítanme aportar mi punto de vista al respecto.
La depuración de las matemáticas es una experiencia completamente diferente a la de los programas. La diferencia es que mientras nosotros tenemos programas, ellos (tienden a ser) imperativo - es decir, enumeran una serie de pasos que hay que seguir.
(Sé que esto es una burda generalización, y que los lenguajes Haskell/LISP/Scheme/Programación Funcional existen y no son así, pero la mayoría de los lenguajes de programación "generales" son imperativo).
En matemáticas, generalmente tienes un conjunto de enunciados que "juntas" para obtener una solución. Es más bien una expresión que un receta si eso tiene sentido para ti.
Sin embargo, lo bueno es que gran parte de la intuición de la depuración se mantiene.
Algunos principios que se trasladan muy bien:
-
Aislar un problema, obtener el mínimo ejemplo de fallo. Esto funciona tanto en matemáticas como en informática. Si tienes una fórmula general, sustituye los valores pequeños como $0$ , $1$ etc., como una comprobación de cordura.
-
Romper las cosas permite comprender mejor su funcionamiento. Cuando leas un teorema o codifiques cualquier cosa, siempre debes ampliar los límites de lo que estás haciendo. Pregúntate a ti mismo: "¿Qué pasaría si no tuviera esta afirmación en mi demostración? "¿Y si elimino esta línea? "¿Es esta suposición realmente ¿es necesario? Jugar con las matemáticas e intentar romperlas a menudo también ayuda a aprenderlas.
Además, algunas ramas de las matemáticas son simplemente extraño y le exigen que construir la intuición sobre ellos - No encontrarás las ideas intuitivas en absoluto cuando empieces (la topología fue así para mí cuando empecé a aprenderla), pero poco a poco vas cogiendo estilos de pensamiento que complementan la rama de las matemáticas que estás estudiando.
Otra gran "herramienta de depuración" es conectar buenos ejemplos en teoremas / problemas cada vez que te enfrentes a algo demasiado genérico. Siempre hay que contar con al menos 3 ó 4 ejemplos para cualquier tema, para poder comprobar rápidamente los hechos (y remitirse a esos ejemplos). También es bueno tener no ejemplos de cosas para saber la diferencia.
Si has cursado cálculo, entonces conocer tus ejemplos sería
- una función discontinua $f(x) = \text{floor}(x)$
- una función continua pero no diferenciable - $f(x) = |x|$
- una función que es continua y diferenciable - $f(x) = \sin x$
- una función no diferenciable en ninguna parte - función de Weierstrass
- una función continua en ninguna parte - la función de base 13 de Conway
Hay libros como contraejemplos en topología que te armará con un montón de ejemplos en los que pensar. Este tipo de cosas son muy útiles cuanto más abstractas son las matemáticas.
Una última cosa que puedes hacer como programador es escribir código que compruebe una corazonada que tienes - esto es un enorme ventaja y no tengas miedo de explotar esto. ¿Crees que algo es cierto pero te da pereza comprobarlo? ¡Codifícalo! No sólo es una práctica, sino que a menudo también te enseña algunos datos matemáticos muy interesantes.
Espero que esto ayude como guía aproximada sobre cómo depurar las matemáticas :)
48 votos
Debe dividir por $3!$ no por $3$ (Terminaría esta afirmación con un signo de exclamación, pero eso lo haría un poco ambiguo).
6 votos
No has encontrado nada porque "depurar las matemáticas" es una forma curiosa de decirlo :-) Mucho mejor sería "encontrar el error" o "cómo estar seguro de que una prueba es correcta". En un programa informático, cometes un error en alguna parte. Sigues mirando cada parte del código hasta que encuentras el problema. En matemáticas se sigue mirando cada parte de un argumento hasta que se encuentra el problema. No hay atajos ni metodologías: Si escribiste "debug" con la idea de que puedes encontrar algún paralelismo como las pruebas unitarias o lo que sea, pues no hay
4 votos
Yo más bien diría que no hay "atajos genéricos", pero si conoces bastante bien tu área de matemáticas y tienes un poco de experiencia, empiezas a saber cuáles pueden ser los errores comunes, y qué tipo de error puede provocar tal o cual error final. Pero todo eso depende mucho de un tema concreto.
2 votos
También cabe destacar que la cita es un poco engañosa: No ha utilizado "los cálculos correctos, el razonamiento"; de hecho, estaban equivocados. Simplemente parece que es cierto, pero no lo es (¡y por eso son importantes las pruebas!). Como dice @barakmanos, deberías dividir por $3! = 3 \cdot 2$ en lugar de sólo $3$ Esto se debe a que no sólo estás contando $TTTH$ tres veces (por lo tanto, dividir por $3$ ) pero también estás contando $TTHT$ dos veces (y debe dividir por $2$ ). Esto es sólo para tener una intuición, no es de ninguna manera rigurosa
3 votos
@Ant El $4\times3\times2$ el cálculo en realidad cuenta $TTTH$ seis veces, no tres. Y de nuevo cuenta $TTHT$ seis veces. Si sobrecontabilizara diferentes resultados por diferentes factores, entonces en general sobrecontabilizaría por un factor de algún tipo de media de los factores individuales, no por el producto de esos factores.
1 votos
Hola @melanchthon-the-iron, tiendo a estar en desacuerdo con la afirmación de Siddharth
Debugging math is a completely different experience from debugging programs. The difference is that while we have programs, they (tend to be) imperative - that is, they list out a series of steps that need to be followed.
. Sin entrar en detalles por falta de tiempo (la señora está esperando en casa), le sugiero que se decante por el clásico definitivo de George Polya -> amazon.com/Cómo-Resolver-Ciencias-Matemáticas-Princeton/dp/ Le deseo lo mejor en su búsqueda del conocimiento.1 votos
¿Cree que deberíamos convertir esto en una pregunta de la lista grande?
0 votos
Creo que te confundes con las palabras
permutation
,combination
yvariation
.0 votos
Las matemáticas son como la programación genérica (que en realidad nunca se instancian). Sólo tienes que probarte a ti mismo que tu plantilla de clase funcionará correctamente con cualquier
T
. No se puede depurar, porque no se puede iterar por todos los tipos del mundo.0 votos
@Agent_L No lo creo, sobre la programación en particular. La plantilla implica la existencia de una serie de operaciones, y debería funcionar con todos los tipos en la medida en que estos estén correctamente implementados. Del mismo modo, en matemáticas, en lugar de operaciones, son reglas como la transitividad, reflexividad, simetría, distributividad sobre algo, etc. - por lo que uno demuestra la corrección de la idea en la medida en que esas reglas son existen.
0 votos
@Hi-Angel no entiendo en qué estás en desacuerdo conmigo. ¿Es por la similitud de las matemáticas con los genéricos o por la imposibilidad de depurar estos últimos?
0 votos
@Agent_L Estoy en desacuerdo con " No se puede depurar, porque no se puede iterar por todos los tipos del mundo. " - puedes, y si surge un problema, sabes que es un problema con una implementación de algunas operaciones usadas del tipo, no de la plantilla.
0 votos
@Hi-Angel Me refería a preparar una clase genérica para que otros la usen - nunca puedes saber con qué van a usar tu clase.