¿De qué manera aprender matemáticas avanzadas me haría un mejor programador?

Depende de lo que quieras decir con “matemáticas avanzadas”. Para mí, la frase significa el tipo de matemática que hacen los matemáticos profesionales, que no será útil para los programadores de computadoras, excepto quizás el caso específico que discuto al final. Sin embargo, creo que la mayoría de las personas se refieren a las matemáticas de nivel universitario cuando hacen esta pregunta, o incluso a nivel de escuela secundaria avanzada, en cuyo caso la respuesta depende en gran medida del tipo de trabajo de ingeniería de software que esté haciendo o esté interesado en hacer. Varía según el dominio:

  1. Si está haciendo algo con gráficos por computadora, debe comprender todas las matemáticas de la escuela secundaria. En particular, debe tener una trigonometría internalizada hasta el punto de no pensar en ello. Más allá de eso, si está haciendo algo relacionado con 3D, tendrá que sentirse cómodo con al menos el álgebra lineal básica. Necesita saber qué es un vector, qué es una matriz y para qué sirve. El cálculo puede ser útil si desea poder leer y comprender documentos académicos sobre algoritmos en procesamiento de imágenes o renderizado 3D, pero generalmente no es necesario para la programación gráfica diaria.
  2. Si está interesado en la ciencia de datos, necesitará tener un conocimiento profundo de las estadísticas a nivel de pregrado, particularmente las estadísticas bayesianas. Debería haber internalizado la noción de varianza, correlación y los demás términos del arte; debe saber para qué sirven todas las diferentes distribuciones y cómo usarlas, y, por supuesto, para comprender realmente la mayor parte de este material, necesitaría conocer el cálculo multivariable como requisito previo. Los llamados algoritmos de “aprendizaje automático” son todos algoritmos de optimización estadística básicamente iterativos, por lo que primero querrá comprender algoritmos de optimización más tradicionales, por ejemplo, programación lineal a través del método simplex, etc.
  3. Si está interesado en compiladores y analizadores y tecnología relacionada, necesita conocer la “teoría de la computación”, que se llama diferentes cosas en diferentes currículos: el MIT la llama “teoría de la computación”; Creo que Carnegie Mellon llama a este programa “Lógica y Computación”, etc., pero básicamente esta es la parte de la informática que es tan abstracta que sin lugar a dudas es una parte de las matemáticas. Es el estudio de varias máquinas abstractas que forman una jerarquía que los matemáticos han usado para definir una jerarquía de complejidad computacional.
  4. En todos los dominios, a menudo es útil haber estado expuesto a matemáticas discretas: combinatoria, optimización combinatoria, teoría de grafos, etc., particularmente teoría de grafos. Los gráficos tienen una forma de aparecer en lugares inesperados y es útil haber estado expuesto a ellos formalmente antes de que necesite implementar un algoritmo gráfico en un contexto profesional.

Más allá de lo anterior, las matemáticas verdaderamente avanzadas son de interés si quieres dedicarte a la informática en lugar de la ingeniería de software, ya que la informática es esencialmente una rama de las matemáticas. En la industria, es importante entender esta visión del campo si uno se involucra con la programación funcional de manera seria. La perspectiva que uno debe adoptar para convertirse en un buen, digamos, el programador Haskell está más cerca de una postura matemática que de la postura de ingeniería tradicional. Para hacer un buen trabajo no trivial en Haskell, uno necesita convertirse básicamente en un matemático en actitud.

La mayoría de las veces, no necesitas matemáticas avanzadas para escribir software. Creo que puedes pasar mucho tiempo (tal vez una carrera completa) como ingeniero de software sin necesidad de matemáticas avanzadas.

Sin embargo, creo que te lo estarías perdiendo. Proporcionaré solo una muestra .

En primer lugar, depende de lo que quieras decir con matemáticas avanzadas. Las matemáticas son un campo amplio, y la gama de software que podría escribir es quizás igual de grande.

Las matemáticas discretas y la teoría de gráficos son casi la “matemática de los algoritmos”. Los gráficos son una estructura de datos importante, y las operaciones en gráficos son herramientas importantes para resolver muchos problemas útiles. Esto incluye la programación, el enrutamiento de la red, la clasificación, la búsqueda, la verificación de restricciones … la lista continúa.

La teoría de la información impregna la informática. Proporciona la base para la compresión de datos, tanto sin pérdida como con pérdida.

El cálculo y las ecuaciones diferenciales, además de proporcionar las herramientas básicas para muchas otras técnicas matemáticas, se vuelven importantes por sí mismas en las simulaciones numéricas. Eso incluye cálculos físicos como los que puedes encontrar en un videojuego, o tal vez un modelo climático, y así sucesivamente.

Los campos, como los campos de Galois, aparecen en criptografía, códigos de corrección de errores y otros lugares sorprendentes. El humilde CRC es un ejemplo omnipresente. Es probable que su disco duro esté protegido por un código Reed Solomon.

Los números primos y sus propiedades muestran muchos lugares, incluyendo generaciones de números aleatorios, hash, criptografía, etc.

El análisis de Fourier y el concepto general de dominio de frecuencia versus dominio de tiempo tienen muchas aplicaciones. La mayoría de los códecs de medios que encontrará se crean a partir de este marco matemático.

El álgebra lineal respalda gran parte de la ola actual de aplicaciones de aprendizaje automático y minería de datos que abundan hoy en día, sin mencionar muchos de los protocolos de comunicación inalámbrica que usa solo para hacer una llamada de teléfono celular.

La probabilidad y las estadísticas le brindan herramientas para analizar sistemas y datos.

Podría continuar … He omitido muchas áreas posibles de las matemáticas, y entre las áreas que he mencionado, he omitido muchos campos interesantes para los que esas áreas de las matemáticas son importantes, en cuanto a programación.

Lo que hace la matemática avanzada es proporcionarle herramientas. Las herramientas solo son útiles si está atacando espacios problemáticos que los necesitan. Pero si no conoce las herramientas y lo que le ofrecen, es posible que no sepa que ya existe una herramienta útil que facilitaría un desafío de programación en particular, o incluso lo haría posible.

Cuantas menos matemáticas entiendas, más te limitarás en términos del tipo de software que puedes desarrollar. Con los años, he encontrado con frecuencia la necesidad de escribir código que use álgebra lineal, trigonometría, cálculo, física, análisis estadístico, ecuaciones diferenciales, varios tipos de filtrado y transformación, etc. Las matemáticas avanzadas aparecen con frecuencia en gráficos de computadora, procesamiento de imágenes , análisis de audio, procesamiento de señal digital, aprendizaje automático, diseño y análisis de ingeniería, robótica y muchas otras áreas.

Es posible ser un desarrollador de software y no tener que tocar estos conceptos, pero estaría limitado en los tipos de software que desarrolla. Tener una comprensión de las matemáticas avanzadas abre una gama más amplia de proyectos y trabajos.

Podría, y puede que no. No he conocido a ningún programador avanzado que use muchas matemáticas en su trabajo. Hay ciertos campos en la programación, como los gráficos y la programación de juegos que requieren una buena comprensión de las matemáticas, como el Álgebra lineal, por ejemplo. Tuve un colega que dejó nuestra empresa para unirse a un equipo de desarrollo de productos de telecomunicaciones y se le pidió que aprendiera las transformadas de Fourier para el procesamiento de señales. El conocimiento de la teoría de grafos y el álgebra abstracta definitivamente podría ayudarlo a comprender mejor las redes y el análisis de algoritmos. Si te gusta la programación de bajo nivel, entonces no necesitarías más matemáticas de las que aprendiste hasta quizás el décimo grado.

Sin embargo, hay una forma en que ayudaría. Le enseñaría a pensar sobre un problema de manera lógica y constante durante semanas. Si ha obtenido con éxito muchas matemáticas avanzadas en su sistema, entonces la disciplina mental es una de las cosas que gana con ella. Pero tenga en cuenta que leer matemáticas avanzadas y seguirlas al mismo tiempo requiere mucha dedicación. No estoy seguro de que le quede mucho tiempo para trabajar como programador a tiempo completo.

Como ya han sugerido uno o dos, lo que muchas personas llaman ‘matemáticas avanzadas’ no es tan avanzado. No voy a vencer ese problema hasta la muerte porque no es lo que pediste.

Como programador, es posible que necesite comprender lo que significa la palabra ‘gráfico’, por ejemplo, en contexto. Para empezar, ¿la palabra significa una trama o una estructura que consiste en arcos y nodos? Si se trata de un gráfico en el último sentido, debe poder buscar y comprender lo que sea necesario para completar la tarea que se ha establecido para usted. Como parte de este proceso, sabrá que hay varias formas de procesar gráficos disponibles, con diferentes características, y que debe elegir entre ellas para optimizar el rendimiento de su aplicación.

Es posible que deba tomar 10,000 decisiones sobre si los puntos dados están dentro de triángulos dados o no. Claramente, es probable que el tiempo sea un factor de recurso. Es posible que no sepa cómo abordar esto, es posible que ni siquiera entienda las soluciones matemáticas que encuentra. Debería haber reunido la sofisticación matemática necesaria para poder leer y comprender lo que sustenta esas soluciones para que pueda aplicarlas.

Ahora, obviamente, en los viejos tiempos cuando la mayoría de nosotros trabajaba en los registros contables, no hacíamos cosas como esta. Era Cobol y no había bases de datos, no ‘net. Diferente ahora, eh.

Tienen algoritmos de resolución de problemas y de búsqueda en común, por lo que se llevan unos a otros en ese sentido. Además, es conveniente que un buen programador estudie combinatoria y matemáticas discretas.

Algoritmo

Combinatoria

Matemáticas discretas

Aprender matemáticas avanzadas no lo convertirá en un mejor programador a menos que necesite las matemáticas para los programas que está produciendo o se especialice en el diseño de algoritmos.

More Interesting

¿Cuándo son dos algoritmos isomorfos?

¿Cuáles son los mejores momentos 'aha' que tiene cuando resuelve problemas de matemáticas / programación?

¿Qué significa shift / reduce en el análisis?

No puedo encontrar el máximo / mínimo de este problema del multiplicador de Lagrange sin obtener un número complejo cerca del final. ¿Qué estoy haciendo mal?

No estoy interesado en los cursos de cálculo y matemáticas, ¿CS CS es la opción correcta?

¿Cómo puede cuantificarse, sumarse y luego compararse métricamente la cantidad de verdad en una declaración compleja con su cantidad de falsedad?

¿Se pueden replicar completamente todas las funciones matemáticas utilizando una secuencia de operadores '+', '-', 'x', '/' (como puede y para la potencia x)?

¿Por qué los signos de división y multiplicación generalmente no están estandarizados a diferencia de los signos de suma y resta?

Cómo hacer un simulador de máquina de turing para realizar la suma binaria

¿Qué es la criptografía de clave pública en términos simples? ¿Cómo se relaciona con los números primos?

¿Cuál es el propósito del software matemático computacional?

¿Puedo ser un gran programador si no soy bueno en matemáticas? ¿Cómo puedo mejorar mis habilidades matemáticas?

¿Cuáles son los problemas finales más interesantes del cálculo?

Me gustan las matemáticas y la programación. ¿Qué área de cálculo funciona con ambos?

¿Cuál es el significado del teorema de Barrington?