¿Por qué las matemáticas son mucho más difíciles que la programación?

No se sobre eso.

Personalmente, encuentro que la programación es igual de difícil que las matemáticas. Es solo que son dos campos bastante no relacionados, por lo que puede ser difícil alinearlos. Personalmente, encuentro que la programación competitiva es tan difícil (y satisfactoria) como las matemáticas competitivas.

Las matemáticas, como la programación, exigen creatividad y una habilidad especial para resolver problemas. Por supuesto, hacer un sitio web simple es fácil y directo, pero tiene aproximadamente la misma complejidad que multiplicar números pequeños en su cabeza (y es igualmente aburrido en mi perspectiva). Hay un patrón a seguir y hay reglas para su implementación.

Por ejemplo:

Supongamos que le pido que cree un laberinto al azar sobre un campo de juego de cuadrados. Algo como esto:

Muy fácil, las paredes al azar funcionarán.

Ah, vamos a lanzar otro requisito: cada dos cuadrados en el laberinto tienen exactamente un camino entre ellos.

Bueno, probemos el algoritmo de Kruskal, o el algoritmo de Prim, dando a cada borde un peso aleatorio.

Ahora un requisito adicional:

El tamaño del laberinto es efectivamente infinito. A pesar de esto, todavía debe haber exactamente un camino de tamaño finito entre cada dos cuadrados.

Hmm Podría saber algo que podría funcionar. Tengo que pulirlo y probarlo.

Fin de ejemplo.

La mayoría de las preguntas matemáticas son como el ejemplo anterior: necesita comprender el problema, alinearlo con lo que ya sabe y probar diferentes enfoques para resolverlo. Intenta llegar a un teorema que pueda simplificarlo o cambiarlo a un caso conocido. Lo mismo para esas preguntas de programación. Comprenda el problema, encuentre los algoritmos que necesita para resolverlo (¡o inventelos usted mismo!) Y diseñe el programa para que haga su trabajo.

Por otra parte, alguien inventó la solución para usted, como el mejor diseño para un sitio web. Y a partir de ese momento, es solo multiplicar enteros en tu cabeza.

PD: prueba Haskell.

Fui doble licenciatura en Matemáticas e Informática en la universidad y obtuve buenos resultados en ambos (con puntajes en las pruebas de materias GRE para probarlo). Aunque ciertamente hay mucho espacio para la opinión personal, tiendo a estar de acuerdo en que, en general, las matemáticas son más difíciles que las ciencias de la computación.

Creo que la razón de esto se debe a dos factores. Primero, la relativa madurez del campo de las Matemáticas. Muchas personas muy inteligentes han estado haciendo matemáticas durante mucho tiempo. En general, se necesita un poco de estudio para llegar al punto en que se dirige a lo desconocido en Matemáticas. Una de las razones por las que realmente me gustaron mis clases en autómatas finitos fue la rapidez con la que uno podía llegar al borde de lo que se probó. Además, hay áreas que son más fáciles que otras. Encontré que mis clases de Álgebra abstracta y Matemática discreta son particularmente divertidas y fáciles, mientras que, en el otro extremo de la escala, la Teoría avanzada de conjuntos y la Topología requieren mucho más trabajo.

En segundo lugar, la programación (ligeramente diferente a la informática) es una habilidad aplicada. No tienes que ser un experto para construir algo. Por supuesto, el conocimiento y la experiencia le permiten abordar mejor los problemas más complejos, pero puede hacer cosas útiles a medida que se convierta en problemas más avanzados. Básicamente estoy argumentando que es mucho más fácil convertirse en un buen programador que convertirse en un buen matemático. (También mencionaría que si no tiene al menos un título universitario en Matemáticas, entonces probablemente no tenga una muy buena idea de lo que se trata Mathematics).

Desde otra perspectiva, mi experiencia personal es que, en el día a día, la cantidad de energía mental que tengo que aplicar a los problemas de diseño de software es mucho menor que cuando me concentraba en Matemáticas. Con el software, es raro que una buena noche de sueño y una larga ducha caliente no aclaren los problemas. Eso no quiere decir que no haya desafíos de ingeniería al agregar una característica al software existente, lidiar con especificaciones imprecisas, lidiar con plazos poco realistas, etc., pero para mí todo este tipo de cosas están en un nivel diferente al cosas que comenzaba a ver en mi trabajo de estudio independiente al final de mi carrera universitaria.

Comencé a programar en la escuela primaria y siempre tuve la intención de seguir con las computadoras. Solo obtuve mi título de Matemáticas porque también era bueno en eso y pensé que mejoraría mis habilidades de razonamiento (lo que hizo). Entonces, tal vez soy mejor en programación. Mi opinión personal es que me sedujo la alegría de construir cosas que obviamente marcaron una diferencia en la vida de las personas.

Técnicamente, las matemáticas y la programación de computadoras son idénticas. Pueden resolver exactamente el mismo conjunto de problemas, hacerlo exactamente de la misma manera y tener exactamente las mismas limitaciones (ver Kurt Godel para más detalles) aunque precisamente los mismos ideales (ver Bertrand Russell para más detalles). Incluso hay métodos para traducir directamente entre los dos, aunque la generación de código directamente desde Z tiende a ser ineficiente.

La principal diferencia está en la perspectiva. Sin embargo, eso es cierto para cualquier cosa en matemáticas. Por eso hay tantas ramas. Una rama puede considerarse como la perspectiva que funciona mejor para lo que desea hacer. Probablemente puede hacer álgebra matricial en lógica de conjunto, pero hacerlo en álgebra matricial le ahorrará mucho tiempo y envejecimiento innecesario. Por lo general, hay esfuerzos para degradar o eliminar esta rama o aquella. La geometría era un objetivo popular hacia fines del siglo XIX hasta mediados del siglo XX, pero aunque se podían obtener los mismos resultados (IIRC, un grupo francés intentó demostrar que los diagramas y la geometría eran males innecesarios, proclamando la muerte a los triángulos), personas como Coxeter siguió obteniendo resultados mucho más interesantes y novedosos que nadie y, finalmente, surgió una especie de tregua.

La programación de computadoras puede hacer absolutamente cualquier cosa clasificada como Computable por Alan Turing, que es idéntica al conjunto de cosas que puede describir la lógica. No intentaría usarlo para explorar los infinitos de Cantor. Los números reales son un problema, por lo que la mayoría del trabajo se centra en los cocientes (que son mucho más fáciles) y las aproximaciones. El cálculo infinitesimal también es problemático. Estoy seguro de que estás empezando a ver surgir un patrón. Aunque puede hacer algunas cosas muy ingeniosas para evitar las limitaciones, siempre está limitado por la memoria finita y el tiempo finito. Los infinitos (e infinitesimales) son, por su naturaleza, imposibles de expresar directamente con recursos finitos. Sin embargo, todo lo que necesita es una transformación que convierta el problema que no puede resolver en uno que sí pueda, y luego una transformación inversa para volver a convertirlo.

Entonces, si tiene un problema de naturaleza puramente lógica y directamente solucionable como tal, desea utilizar la programación lógica / informática. El mismo problema casi seguramente tendrá un equivalente en topología, de nuevo, todo lo que necesita es una transformación adecuada, pero lo más probable es que sería mucho más difícil de manipular de esa manera.

Edward de Bono a menudo habla de la perspectiva como mirar un problema como las laderas de una colina. No entiendes la colina hasta que hayas visto todos los lados. En este caso, su problema es que quiere la pendiente más suave hacia arriba, o al menos una aproximación decente. Entonces comienzas con lo que crees que debería ser más fácil y, si está dentro de los límites aceptables, no necesitas considerar los demás. Ahí es donde suele encajar la programación de computadoras. Por lo general, es el lugar adecuado para comenzar, pero es posible que deba caminar un poco más.

Bueno, déjame ponerlo de esta manera.

  • Cuando escribe un programa, lo prueba y espera que funcione en todas las circunstancias posibles a las que pueda estar expuesto. Casi cualquier programa contiene errores, cuanto más complejo es el programa, más errores hay. Esencialmente, nunca se sabe si un programa es correcto, solo que funciona en los casos que pensó probar.
  • En matemáticas probamos cosas. Cualquier declaración sin prueba se considera fuera del ámbito de las matemáticas. Hay conjeturas (siempre me ha gustado que la palabra húngara utilizada para esto sea más expresiva: sejtés que significa esencialmente adivinar ), por supuesto, pero cualquier cosa que haga uso de una también es una conjetura.
  • En principio, también es posible probar que los programas son correctos. Se basa en el uso de un sistema formal de algún tipo para describir el significado de los programas (el Método de Desarrollo de Viena y la semántica denotativa son dos enfoques bastante diferentes) y luego intentar mostrar formalmente usando el formalismo que un programa realmente implementa correctamente alguna función. El problema es que las pruebas se vuelven muy largas y complejas incluso para los programas más cortos.

Me preguntaba lo mismo hace un tiempo. Al principio, no podía entenderlo: la programación tiene abstracciones, símbolos y un conjunto de reglas, al igual que en matemáticas, construyes cosas desde piezas pequeñas hasta sistemas completos. Intuitivamente deberían estar muy cerca, pero no lo están. También existe un mito que vincula la programación con las matemáticas, probablemente porque muchos programadores son buenos en matemáticas aplicadas.

Entonces, pensé que la diferencia más importante entre las matemáticas y la programación es un tipo de abstracción. En la programación eres muy preciso al construir tipos, funciones y clases. Pero en matemáticas, puedes decirlo en inglés. Esto coloca a las matemáticas en una posición donde tiene el poder del razonamiento humano completo y la expresividad del lenguaje natural. Porque no está obligado a un sistema formal estricto como lo es la programación. Existe una jerga matemática que se usa comúnmente al escribir matemáticas, pero la interpretación del texto real no es fija: requiere que el lector entienda lo que dice. Y lo más importante, entienda por qué funciona. En matemáticas, hay múltiples niveles donde puedes describir sistemas formales que son bastante similares a la programación. Tomemos un ejemplo de lógica de primer orden. Describir cosas en la lógica de primer orden es casi como programar porque tiene todos los elementos que tiene la programación: sistema formal muy estricto que permite solo un pequeño subconjunto de símbolos y todos tienen un significado muy preciso. Sin embargo, este sistema no puede describirse a sí mismo: se describe en un nivel superior de matemáticas donde el poder total de las matemáticas está al alcance de la mano.

Técnicamente, la programación es una forma de matemática aplicada.

La realidad es que la programación es fácil: es como aprender vocabulario y cómo escribir oraciones. Desarrollar se trata de resolver problemas, es como escribir, tienes que saber algo sobre tu tema y cómo resolver problemas; de lo contrario, solo eres un mono que dice tonterías.

Y … una gran cantidad de los problemas difíciles son intensivos en matemáticas. Si, por ejemplo, está escribiendo un juego de disparos en primera persona, necesita saber sobre física (trayectorias), procesamiento de imágenes y muchas otras cosas, todos los cuales son problemas matemáticos.

Un profesor que tuve para un curso de Diseño y Análisis de Algoritmos me preguntó por qué los estudiantes encuentran que presentar pruebas algorítmicas es tan desafiante cuando esos mismos estudiantes pueden encontrar un algoritmo matemáticamente correcto.

Se preguntó acerca de la diferencia entre escribir un algoritmo correcto y probar la exactitud de un algoritmo que aprendió o se le ocurrió.

Mi respuesta fue: cuando escribes un programa en una computadora, puedes escribir pruebas y depurar hasta que estés seguro de que estás en el camino correcto. Con el tiempo, no tendrá que depurar tanto como mejore al darse cuenta de sus conceptos erróneos sobre lo que es correcto. Le dije que el depurador para una prueba de algoritmo es él (el profesor), y que desafortunadamente debido a las limitaciones en el presupuesto de las universidades y su tiempo personal, los estudiantes nunca podrían tener la misma cantidad de acceso que tienen con un depurador.

Más tarde ese semestre, abrió su oficina todas las tardes hasta altas horas de la noche para que cualquier estudiante viniera y discutiera con él sobre por qué cualquier persona lógica estaría de acuerdo con la exactitud de su algoritmo. Pasaría una cantidad generosa de tiempo explicando las suposiciones que los estudiantes hicieron erróneamente, actuando como un depurador de pruebas.

Hay muchos ejemplos de donde la programación es más difícil que las matemáticas, y los casos en que las matemáticas son más difíciles que la programación. También hay casos en los que van de la mano.

Cuando las matemáticas son más difíciles que la programación: producir el resultado de una ecuación diferencial. Suponiendo que no solo desea una aproximación numérica, debe resolver la ecuación usted mismo, lo que puede ser difícil (siempre que esto sea difícil para usted).

Cuando la programación es más difícil que las matemáticas: aproximaciones usando regresión lineal. La razón es que las matemáticas no tienen que resolverse simbólicamente, ni ser completamente conocidas. Sin embargo, debe crear las matrices de regresión lineal y resolverlas.

Cuando las matemáticas y la programación van de la mano: simulaciones de cuadrícula para ecuaciones de Navier-Stokes con condiciones de contorno. Tienes que poner las matemáticas en el programa y lidiar con toneladas de trabajo que pueden ser paralelos, pero no simplificados.

Las matemáticas son más difíciles porque no hay pruebas unitarias, depuradores o registros. Esa es literalmente la única razón. Recientemente, comencé a escribir programas relacionados con las matemáticas que estoy aprendiendo (por lo general, los teoremas matemáticos más útiles van acompañados de un algoritmo). La dificultad desapareció.

En mi primer período de trabajo en el Gobierno de Canadá, estaba escribiendo herramientas de conservación de datos para un proyecto en particular en ese momento. Uno de los cuellos de botella, en términos del alcance más amplio del proyecto, era la necesidad de poder contar el número de coincidencias perfectas en gráficos bipartitos arbitrariamente grandes (donde ambas partes tienen la misma cardinalidad) de manera eficiente; esto equivalía a tener la necesidad de escribir un programa de computadora que pudiera calcular de manera equivalente los permanentes de matrices 01 arbitrariamente grandes (cuadradas) de manera eficiente. Pensé que era algo interesante y sorprendente cómo, en teoría, existe una conexión entre el número de coincidencias perfectas en un gráfico bipartito y esta propiedad algebraica de su matriz de biadjacencia conocida como permanente. Sin embargo, en la práctica resulta que el problema de calcular de manera explícita los permanentes de matrices de biadjacencia de gráficos bipartitos arbitrarios es muy difícil e invencible; Mientras trabajaba en mis propias tareas personales para el proyecto allí, mi supervisor estaba investigando posibles formas de aproximar de manera eficiente y estable los permanentes de las matrices de biadjacencia con el grado deseado de precisión. En términos de responder a su pregunta original, creo que gran parte de las matemáticas vive en el mundo de la teoría, donde gran parte de todo funciona o se hace funcionar; Esto no quiere decir que no haya ideas difíciles, saltos de lógica y observaciones sorprendentes que se hacen en teoría, pero la mayor parte del tiempo también parece la gran dificultad de explícitamente calcular soluciones a algunos problemas, incluso cuando algunos Se han hecho conexiones teóricas útiles, simplemente no se pueden reducir cuando se necesitan respuestas concretas reales en casos generales. Las computadoras pueden ser útiles en estas situaciones, pero aún creo que escribir programas para hacer que las computadoras alcancen este tipo de objetivos de poder producir soluciones concretas y precisas para casos generales de un problema en cantidades razonables de tiempo puede resultar difícil tareas no obstante. En conclusión, realmente no sé si iría tan lejos como para afirmar que escribir un programa de computadora que, por ejemplo, pueda aproximar de manera eficiente y estable los permanentes de matrices 01 grandes en la práctica es más difícil que, por ejemplo, hacer la conexión entre esta propiedad algebraica de matrices y contar coincidencias perfectas en gráficos bipartitos, pero creo que finalmente estaría en desacuerdo con la afirmación de que la teoría y las matemáticas son universalmente más difíciles que la programación, con la esperanza de que el tipo de ejemplo que he usado aquí justifique dicho desacuerdo.

Las matemáticas implican muchas ideas y conceptos abstractos que a menudo son difíciles de comprender; implican pura lógica. Es por eso que la mayoría de la gente odia las matemáticas. Los conceptos de programación en su mayor parte son más como conceptos de ingeniería … pragmáticos, creativos, incluso ingeniosos. Tienden a ser más “intuitivos” y divertidos. La mayoría de la gente puede manejar esto.

¿No te has preguntado por qué no hay tantos matemáticos en el mundo?

Porque los ejemplos que estás comparando son parciales o eres mejor programando que las matemáticas; Realmente creo que eso es todo.

More Interesting

¿Cuáles son algunos temas imprescindibles en matemáticas discretas y probabilidad de programación competitiva?

¿Quién decidió que, en una lista de principios científicos, la numeración comienza con cero en lugar de uno?

¿Qué significa que un problema en informática sea NP completo?

¿Cómo convertiría un número binario en un número decimal en la menor complejidad de tiempo?

¿Cuáles son algunos conceptos en el cálculo lambda que es bueno saber antes de aprender programación funcional?

¿Qué temas (en matemáticas y TCS) debe sobresalir un estudiante de matemáticas para seguir la teoría de la complejidad computacional?

¿Hay algún equivalente a lanzar la moneda en informática?

Se nos dan probabilidades [matemáticas] P (A) = P (B) = P (C) \ geq 2/3 [/ matemáticas] y sabemos que [matemáticas] P (A \ cap B \ cap C) = 0 [/ mates]. ¿Qué podemos decir sobre [matemáticas] P (A) [/ matemáticas]?

¿Cuáles son tus 10 idiomas favoritos?

¿Quiénes son los equipos más notables que trabajan para resolver el problema P vs NP?

¿Cuáles son algunas ideas geniales para una presentación del día pi?

¿Cuál es la complejidad temporal de la ecuación T (n) = T (\ sqrt {n}) + n; n> 2 T (n) = C; n = 2?

¿Con qué campos de la ciencia será más emocionante trabajar en el futuro cercano?

¿Qué pasaría si un procesador pudiera procesar más rápido que la velocidad de la luz?

¿Puedo obtener el código fuente para la exponenciación de bases fraccionarias con exponentes fraccionales en Java al igual que la función Math.pow pero sin usar la función?