En primer lugar: soy matemático, profesional (en eso me pagan por hacer matemáticas). Estoy no un programador. Realizo algo de programación, pero definitivamente de la variedad Cargo Cult (vea el primer comentario en https://tex.stackexchange.com/q/451/86 y mi respuesta) y nada del tipo que normalmente me llevaría a esto sitio (de hecho, me registré aquí para publicar esta respuesta después de ver un enlace en la sala de chat de TeX).
El resumen de mi respuesta es: Matemáticas es programación .
Recientemente tuve que enseñar un curso de matemáticas a un grupo de estudiantes no matemáticos. Eran la sección de programación. ¡Pensé que esto era fantástico! Por fin, iba a poder enseñar matemáticas a personas que ya entendían las ideas básicas y que ya tenían un kit de herramientas rudimentario para hacer matemáticas. Estaba increíblemente decepcionado cuando pregunté cuántos de ellos habían escrito realmente un programa y obtuve una respuesta entre 0 y 1.
Antes de continuar, debo aclarar algunas cosas. Hay áreas de las matemáticas que se ocupan directamente de la programación y tienen que ver con la evaluación de algoritmos y la clasificación de lenguajes y similares. No estoy hablando de eso. También hay un programa que está tratando de traducir todas las matemáticas a un lenguaje formal que pueda ser evaluado por una computadora. Esto está un poco más cerca de lo que estoy hablando, pero aun así centrarme en eso extrañaría la parte principal de lo que estoy tratando de decir. Las matemáticas que hago y la programación que hago no tienen relación alguna por tema. La conexión entre ellos está en un nivel diferente.
Donde me gustaría comenzar es con el comentario sobre la pregunta principal:
Si eso es hacer matemáticas, entonces toda actividad humana es una forma de matemáticas. Si ese es el caso, entonces la palabra matemática no tiene un significado útil, porque no se puede usar para distinguir una actividad de otra.
Sí, eso es hacer matemáticas. Pero "matemáticas" sigue siendo una palabra útil porque, como dice la canción, "No es lo que haces, es la forma en que lo haces". Diría que estoy haciendo matemáticas cuando me estoy acercando a algo de manera matemática . A veces, eso es matemática "núcleo duro": formular definiciones, probar teoremas. A veces no lo es. A veces, está escribiendo pequeños programas tontos para que mis hijos puedan aprender sus palabras de ortografía.
Esto es en lo que me ayudan las matemáticas cuando programo:
Abstracción Esta es probablemente la habilidad transferible más importante de las matemáticas. Con esto, me refiero a la capacidad de eliminar todas las cosas innecesarias y centrarse en las propiedades importantes.
Perspectiva Si solo pudiera elegir una cosa que todos mis alumnos aprenderían, sería: la capacidad de cambiar los puntos de vista para adaptarlos al problema. Comúnmente tratamos esto en álgebra lineal con fórmulas de cambio de base (que conducen a matrices horrendas y complicaciones horrendas), pero es mucho más aplicable que eso. En el fondo, es la idea de que solo porque algo se te haya presentado de una manera, esa no tiene que ser la forma en que trabajas con él. Esto separa las vistas de la cosa misma de la forma en que ha sido presentada. Esto puede ser extremadamente práctico: se trata de hacer algo útil o eficiente. Si tengo una lista de vectores y es más eficiente almacenarlos como una lista de coordenadas xy una lista de coordenadas y, que así sea .
Forma frente a función Liderando desde lo anterior; Si una cosa se puede presentar de muchas maneras diferentes, ya no es justo decir que una presentación en particular es la cosa. Para citar esa canción nuevamente: "No es lo que eres , es lo que haces " lo que importa.
Podría seguir, pero esos son los que me vienen a la mente.
Ahora, probablemente hay muchas reacciones (negativas) a lo que he escrito hasta ahora. Una de ellas será "Eso no es matemática, es solo sentido común". (o mal sentido) a lo que me refiero a mi comentario anterior de acuerdo con el sentimiento de que "toda actividad humana es una forma de matemáticas". Otro será "Ese no es el tipo de matemáticas que se entiende en la pregunta". Esto es casi cierto y aquí realmente simpatizo mucho más con la persona que dijo "Al menos no he tocado las matemáticas en 10 años". Él o ella está equivocado, por supuesto, han estado haciendo matemáticas durante 10 años porque cada vez que escribieron un programa estaban haciendo matemáticas . Simplemente no se dieron cuenta.
De hecho, uso algunas "matemáticas reales" en mis programas. Recientemente codifiqué un divertido explorador de formas 3D que implicaba usar algunas matemáticas para calcular las proyecciones y otras transformaciones que tenía que aplicar a mis datos. ¡Me divirtió un poco encontrarme realmente codificando cuaterniones! Pero, por supuesto, las matemáticas involucradas fueron triviales en comparación con las matemáticas que hago cuando estoy trabajando. Eran cosas del "fondo del sobre". Ese tipo de matemáticas, entonces estoy de acuerdo con el sentimiento de que lo recoges cuando lo necesitas, y si necesitas algo más complicado de lo que puedes encontrar en Wikipedia, entonces encuentras un verdadero matemático para que lo haga por ti. Sin embargo, para poder recogerlo cuando lo necesite, debe haber aprendido algo. Es posible que esa cosa no sea algo que realmente use, pero al haber aprendido que algo hace que sea más fácil recoger lo que realmente usa más adelante en la vida. Así que aquí es donde no estoy de acuerdo con Coder: es necesario aprender algunas matemáticas si alguna vez vas a usar alguna matemática y necesitas aprenderla desde el lado matemático (lo que no significa probar teoremas, por cierto).
Y así, finalmente, a "Matemáticas es programación". Puedes aprender todas estas cosas siendo un buen programador. Y si ha aprendido estas cosas, encontrará las matemáticas mucho más fáciles porque comprenderá que cuando hablamos de un vector en un espacio vectorial, entonces es solo una instancia de la clase, lo Vector
que significa que podemos hacer todo lo que Vector
hace para esa instancia: sumar, restar, escalar, etc. Por eso me encantaría enseñar matemáticas a los programadores. Pero, hablando como matemático, diría que el primerode ellos, "Abstracción", es más fácil de aprender en matemáticas que en programación porque las matemáticas son la búsqueda de la abstracción. Cada vez que vemos algún comportamiento, nuestro entrenamiento siempre es preguntar "¿Qué tiene esa cosa que hace que se comporte de esa manera? ¿Qué pasa si tomo otra cosa que es similar, se comportaría de la misma manera? ¿tendría que perder para que deje de comportarse así? " (Llevar esto al extremo conduce a "matemáticas ciempiés" - busque el término). Pero no hacemos esto con (solo) objetos del "mundo real" (sean lo que sean), hacemos esto con cosas que ya se han abstraído.
Esto ha durado lo suficiente, así que permítanme concluir con uno de los clásicos chistes matemáticos:
Un matemático y un físico asistieron a un seminario sobre un nuevo modelo que involucra un espacio de 24 dimensiones. Después, lo estaban discutiendo y el físico comentó: "Eso fue realmente difícil. Quiero decir, ¿cómo se visualiza el espacio de 24 dimensiones?" a lo que el matemático respondió: "Oh, es fácil. Simplemente visualice el espacio n-dimensional y luego configure n = 24.".
Añadido 2012-03-2
Hubo bastantes comentarios sobre esta respuesta que expresaron una variedad de puntos de vista. Estos han sido eliminados por un moderador en el entendimiento de que trataría de incorporarlos (o responderlos) en mi respuesta.
Sin embargo, no estoy seguro de poder hacerlo. Al leer esos comentarios y el resto de lo que está en esta página, solo puedo llegar a la conclusión de que hay un gran malentendido sobre lo que realmente son las matemáticas. Además, no me siento lo suficientemente competente como para explicarlo. Afortunadamente, alguien ya se ha vinculado al Lamento de Lockhart, por lo que aplazaré la explicación. Si bien podría haberlo dicho de manera diferente (a medida que crecía en un entorno científico, habría puesto más énfasis en la naturaleza experimental de las matemáticas), no creo que pueda decirlo mejor .
Todavía creo que puedo agregar algo. Así como los malos entendidos en cuanto a lo que la matemática es , también hay malos entendidos en cuanto a lo que "hacer matemáticas" significa. Veo dos posturas casi contradictorias:
Las matemáticas son sobre ecuaciones y fórmulas. Así que no hay necesidad de estudiarlo porque existe Wikipedia (esto es casi lo contrario del desafío apócrifo de Euler a Diderot ).
Las matemáticas son sobre teoremas y definiciones. Así que no hay necesidad de estudiarlo ya que los programas nunca prueban nada (lo cual es una falacia tan completa como ... inserte aquí la falacia favorita).
Si bien las dos posturas se contradicen entre sí, terminan en el mismo lugar: no tiene sentido que un programador aprenda matemáticas, ¡y seguramente no de un matemático! Después de todo, ¿qué es lo que saben acerca de algo? Cualquier cosa que un programador realmente necesite saber se puede encontrar en Wikipedia o se puede quitar a alguien más.
Arriba, me describí como un programador de culto de carga. Apuesto a que la mayoría de ustedes se rieron en privado y pensaron: "Ah, sí, apuesto a que sé cómo son sus programas en ese momento". Probablemente te sentiste un poco petulante y superior (aunque estoy seguro de que te sentiste mal por sentirte presumido y superior).
Lo que acabo de describir es Cargo Cult Mathematics.
Entonces, cuando digo que deberías aprender un poco de matemáticas para entender cómo funcionan las matemáticas, lo digo exactamente por la misma razón que podrías si vieras un código que escribí: "¿Cuánto más fácil es tu vida? sería si dejaras de cortar y pegar código de StackOverflow y aprendieras un poco sobre cómo hacerlo correctamente ".
Sin embargo, lo más importante es que debes aprenderlo de los matemáticos. ¿Porque? Aquí hay una analogía. El idioma en el que soy más experto es el TeX. (¡Lo dice todo, de verdad!). Ahora, supongamos que quiero aprender un poco más sobre TeX y da la casualidad de que Don Knuth está en la ciudad y se ha ofrecido a dar algunos tutoriales sobre TeX. O podría leer sobre esto en Wikipedia. O tal vez es Perl y Larry Wall, o C # (¿es el correcto?) Y Jon Skeet. Bien puede ser que estas personas no sean los mejores maestros , ¡pero lo compensan en la cantidad que conocen!
Y eso es lo que son los matemáticos . Somos las personas que escriben el idioma real, que luego escriben las bibliotecas que usted usa. Por supuesto, no tienes que saber probar un teorema, ¡no vas a escribir una biblioteca! Pero si sabe un poco acerca de cómo pensamos, entonces podría ayudarlo a comprender por qué escribimos la biblioteca de la manera en que lo hicimos, y si comprende que podría ayudarlo a utilizarla mejor.
Hay un punto medio entre buscar ecuaciones en Wikipedia y probar la conjetura de Poincaré, así como, para referirnos al lamento de Lockhart, hay un punto medio entre "Realmente no sé mucho sobre arte, pero sé lo que me gusta" y ser Monet, y entre "¿Dónde está la tecla 'CUALQUIERA'?" y ser Don Knuth. Si todavía estás en la universidad, tienes una oportunidad increíble de aprender de personas que son expertas en su área y que, por alguna razón, están dispuestas a dedicar su tiempo a explicártelo.
El otro punto que quería ampliar un poco era por qué, como programador, no debería tener miedo de aprender un poco más de matemáticas. No son las conexiones profundas, ni la utilidad. Es que su capacidad para programar una computadora puede ayudarlo directamente a aprender matemáticas. Solo quiero mencionar algunos.
Comprender las variables. Muchas personas se confunden con declaraciones simples como "Sea n un número natural ...". O "Deje epsilon> 0". Hay lugares en matemáticas donde es importante recordar el alcance de una variable. Todos estos son comunes en la programación. Aprenda a traducir una declaración matemática en un programa y le resultará mucho más fácil hacer un seguimiento de qué es qué.
La naturaleza de la prueba. Si alguna vez ha escrito una prueba, o ha escrito un programa para ser utilizado por otra persona, entonces comprende el núcleo de las pruebas. Cuando haga eso, debe saber que, independientemente de lo que el usuario ingrese, puede manejarlo (inserte la referencia obligatoria de xkcd aquí). Eso es todo una prueba es! Una demostración de que lo que sea que el "usuario / universo" ponga, la declaración se mantendrá. Los experimentadores se inclinarán por "Si funciona en circunstancias normales, es cierto", pero los programadores saben que siempre hay ese niño que intentará Alt + G + Shift + ÅØÆ solo para ver qué sucede.
SECO. Lamento decírtelo, pero nosotros lo inventamos, no a usted. Hemos estado "sin repetirnos" durante milenios. Es por eso que tengo una copia de los elementos de Euclides en mis estantes y todavía es útil .
Y hay más. Si supiera un poco más sobre programación, escribiría un libro llamado "Matemáticas para programadores", donde el objetivo no era enseñar "Las matemáticas que los programadores deberían saber" sino "las matemáticas que todos deberían saber, pero optimizadas para los programadores". . Pero probablemente nunca sabré lo suficiente sobre programación para escribirlo, ¡a menos que alguien se ofrezca a colaborar conmigo!
Lo dejaré ahí. Probablemente si pensara más, cambiaría lo que he escrito; espero que lo explique mejor. Dentro de unos meses, incluso podría estar en desacuerdo con algunas partes. Si alguien desea discutir más, o comentar lo contrario, probablemente sea mejor no hacerlo en los comentarios aquí. Sabes donde encontrarme .