¿Qué temas importantes en matemáticas deberían saber todos los programadores?

Muchos dominios de aplicación tienen matemáticas específicas que deben entenderse para que funcionen en ellos, pero las cosas que se aplican a todos los programadores son las que subyacen a las computadoras digitales y la teoría computacional. No tiene que saber todo esto, pero conocer cualquiera de ellos lo ayudará independientemente del problema en el que esté trabajando.

0. Aritmética. Increíble cuántas personas no pueden hacerlo.
1. Conceptos básicos de la representación de datos: bases numéricas, complemento de dos, coma flotante, etc. De lo contrario, quedará atrapado todo el tiempo por interrupciones en la abstracción
2. Teoría de gráficos, porque casi todos los programas modernos tienen algún tipo de gráfico como su estructura de datos principal.
3. Inducción, porque es vital poder razonar sobre la recursividad y así es como se hace. Ver también el punto 3.
4. Máquinas de estados finitos. Todos los programas de computadora en realidad son máquinas de estados finitos y, en muchos casos, modelar el programa de esta manera ayuda a comprenderlo.
5. Computabilidad e intractabilidad: la prueba del teorema de detención y de que SAT es NP-completo y lo que esto implica.
6. Teoría básica del tipo formal. No es necesario dejarse llevar, pero la familiaridad con la covarianza y contravarianza del sistema de tipos Hindley-Milner ayuda a comprender incluso lenguajes como C ++ y Java, cuyos sistemas de tipos son mucho menos formales

Ahora eso depende completamente de para qué escribes los programas.

  • Si se trata de un simple editor de texto o cualquier software normal, no necesitará ninguna matemática.
  • Si se trata de un editor con función de autocorrección disponible, y no tiene la intención de utilizar una biblioteca existente para eso, entonces debería conocer los métodos probabilísticos y estadísticos para sugerir la mejor corrección posible
  • Si es un juego que estás escribiendo, deberías ser bueno con la geometría, las matemáticas vectoriales, el álgebra lineal, etc.
  • Para el procesamiento del lenguaje natural y las aplicaciones de aprendizaje automático, necesita una buena comprensión de la probabilidad y la estadística (incluso para comprender algoritmos populares como los algoritmos de Viterbi o Baum Welch).

Por lo tanto, es mejor aprender las matemáticas correspondientes cuando tenga la intención de construir algún software utilizando eso. Una vez más, qué tan profundo debes profundizar en las matemáticas depende de si:

  1. Desea desarrollar e implementar su propio algoritmo que mejore los estándares existentes
  2. Solo desea utilizar el mejor algoritmo disponible y darle un buen uso a través de su software

Para el primer caso, debe comprender las matemáticas extremadamente bien e ir a la raíz misma de las cosas. Tan bien, que puedes razonar matemáticamente sobre cada concepto, sobre por qué las cosas son como son.

Para el segundo caso, debe comprender las matemáticas lo suficiente como para darle una idea clara de lo que hace el algoritmo, cómo lo hace y por qué es el mejor o el más eficiente para esa tarea. La última parte, porque es posible que desee agregar algunos ajustes para extraer el mejor rendimiento.

Matemáticas básicas.

¿Por qué? Las matemáticas tienen varias vías de estudio. Un desarrollador en la industria financiera tendrá diferentes requisitos matemáticos frente a un desarrollador en la industria de desarrollo de juegos. Sin embargo, los requisitos matemáticos para estos diferentes caminos se dividirán en matemáticas básicas.

La suma, la resta, la multiplicación y la división parecen ser todo un desafío para muchos desarrolladores. Los errores en ecuaciones simples han llevado a algunos de los errores de software más infames en la historia (¿Cuáles son algunos de los errores más infames en la historia del desarrollo de software?).

Depende del area.

Habilidades básicas de matemáticas para cualquier programación: álgebra de secundaria
Sistemas de información y bases de datos: teoría de conjuntos
Juegos: análisis vectorial, matemática discreta, geometría sólida, álgebra lineal, cálculo (una vez leí el uso del método de aproximación de Newton en el terremoto: http://betterexplained.com/artic …)
Análisis textual : matemática discreta, relaciones de recurrencia e incluso teoría de grafos
Inteligencia empresarial y análisis estadístico: estadísticas, teoría de conjuntos
Optimización : teoría de grafos, álgebra lineal, quizás algunos temas de investigación de operaciones
Cálculo preciso: cálculo y otros campos avanzados.

Copiando mi respuesta a una pregunta similar (¿Qué temas importantes de teoría de números debería saber todo programador?):
Para los programadores en el área de Inteligencia Artificial y Aprendizaje Automático, el conocimiento de los cálculos de Matrix (matemáticas) y el análisis numérico es imprescindible. También será útil cierta comprensión básica de la ecuación diferencial y la ecuación integral.

Teoría básica de los gráficos: se pueden modelar muchas cosas como gráficos, y es muy útil tener esto en el cofre de herramientas. El conocimiento relevante es saber qué es un gráfico, ser capaz de reconocer si su problema es un problema de gráficos disfrazado y estar familiarizado con los algoritmos básicos en los gráficos.

Razonamiento recursivo: la recursividad aparece por todas partes, por lo que es bueno sentirse cómodo con ella. Es útil haber realizado pruebas por inducción.

Matemáticas discretas.