¿Qué tan importante es la matemática aplicada en el desarrollo de software?

El diseño, la ingeniería y la implementación del software tratan principalmente de tres cosas:

  1. lógica
  2. matemáticas
  3. programación

# 1 y # 2 son las disciplinas formales que se aplican en el desarrollo de software, y # 3 es cómo se aplican esas disciplinas formales. Cuanto más sepa sobre los tres, mejor: la lógica desarrolla su pensamiento analítico general, especialmente con el propósito de definir algoritmos; las matemáticas establecen habilidades para especificar esa lógica usando fórmulas cuantitativas; y, la programación en tantos idiomas principales como sea posible es su ‘kit de herramientas’ para implementar esos algoritmos e integrarlos con fuentes de datos e información.

Se necesitan los tres para producir sistemas de software de producción de alta calidad y soluciones de aplicaciones para todos los campos científicos, comerciales y de otro tipo donde se necesiten.

También ayuda, creo, a comprender lo que implica más ampliamente desde una perspectiva semiótica, especialmente si tiene la intención de trabajar en inteligencia artificial, aprendizaje automático y cognición, y otras áreas igualmente avanzadas de tecnología informática digital u otra.

Contestaré esta pregunta, aunque hay muchos mejores para hacerlo que yo. Además, el arco de mi carrera puede ser muy diferente al tuyo. Pero aquí va.

He visto, administrado y participado en muchos, muchos proyectos que involucran a programadores que codifican las matemáticas en varias formas. Entonces, en la situación específica de que estás haciendo algo que realmente incorpora un algoritmo, esp. si en el espacio de I + D que habito, debo responder que es muy importante.

Un ejemplo altamente técnico (¡puede saltear este párrafo!): Acabo de encontrar algo que se perdió en una base de código reciente: para un espacio de probabilidad discreto, el orden de las variables es importante. Los diferentes índices para los estados de variables aleatorias producen diferentes respuestas en algo como la prueba de Kolmogorov-Smirnov (aunque no es culpa de Andrey K., él solo estaba pensando en términos continuos, y esto fue discreto). En este caso, la cosa computacionalmente elegante que tenía que ver con los índices no tenía sentido, ya que se necesitaban varias permutaciones del orden del índice para usar la prueba correctamente. Este no era un código elegante. Y matemáticas aún menos elegantes. Pero fue algo así como “OK”, aproximadamente solucionando el problema.

Ahora, no estoy tratando de probar nada arrojando frases como las anteriores, especialmente. en este foro de personas brillantes. Mi punto esencial es este: en un mundo impulsado por algoritmos, las matemáticas serán importantes, más tarde si no inmediatamente en su carrera. Y no me refiero a “algoritmo” en el lenguaje de la informática, por ejemplo, “algoritmo de clasificación”. Me refiero a objetos matemáticos que deben traducirse a objetos computacionales equivalentes en un script o lenguaje compilado. En el ejemplo anterior, alguien simplemente sacó un paquete R del estante y se atascó en un par de vectores, en lugar de considerar lo que eso significaba matemáticamente. Su inadecuada intuición matemática les falló.

Hay muchos trabajos de programación que necesitan poca o ninguna matemática. Incluso para aquellos, diría que obtener algo de cálculo, matemática discreta y probabilidad en tu haber debe considerarse como herramientas necesarias “por si acaso”. Vivimos en un mundo donde muchos trabajos esperan que los programadores saquen bibliotecas profundas y bien codificadas (por ejemplo, las de la parte de aprendizaje automático de dlib C ++). La presión de los proyectos significa que los desarrolladores simplemente pegan estos paquetes juntos. El desastre puede golpear en un abrir y cerrar de ojos para aquellos ingenuos o con poca educación en matemáticas.

Para aliviar este problema, un proyecto bien dirigido que toca las matemáticas a menudo emparejará a una persona intensiva en matemáticas con un programador atractivo. Usted puede preguntar: ¿eso no me deja libre? No. Incluso aquí, la velocidad de un programador activo puede causar errores de traducción. Mucho, mucho mejor (al menos en mi mundo) es tener un desarrollador que tenga un nivel adecuado de intuición matemática. (Incluso podría agregar álgebra lineal y análisis a los cursos mencionados anteriormente).

La respuesta más práctica a su pregunta original es: depende del arco específico de su carrera. Pero para mí, vivimos en un mundo que incorpora más y más algoritmos en el software, y hacia prácticas de desarrollo que involucran más pegamento y cinta adhesiva. Esto es global: es tan cierto en Vietnam como lo es en los Estados Unidos. ¿Crees que puedes desviar toda tu carrera de estos dos fenómenos globales? Tal vez tal vez no.

Por lo tanto, intente construir una intuición sofisticada para los objetos matemáticos si tiende a trabajos donde las matemáticas tocan el código incluso con un golpe de vista. Después de todo, las matemáticas son solo otro lenguaje computacional. Y al igual que C ++, R, Scala, Java, etc., realmente solo puede aprenderlo al hacerlo. ¿Fue von Neumann quien dijo: nunca entendemos las matemáticas, simplemente nos acostumbramos? Acostumbrarse a esto puede tomar más que un poco de esfuerzo, pero vale la pena. Y por favor busque en Google la cotización para una mejor precisión.