¿Por qué los programadores necesitan aprender cálculo y matemáticas discretas?

Es posible obtener una respuesta larga basada en la teoría matemática abstracta, etc., pero creo que puedo responderla de manera bastante breve y práctica.

El cálculo es la práctica matemática de modelar cómo cambian las cosas. En su nivel más básico y fundamental, el cálculo nos muestra cómo modelar el cambio continuo al dividir los cambios en “piezas” infinitesimales y sumarlas. Al hacer esas piezas cada vez más pequeñas hasta que lleguen a 0, es posible encontrar la respuesta en cuestión. Encontrar el modo de calcular lo que sucede en ese límite (cuando la “pieza” alcanza el tamaño 0) es el foco principal del cálculo analítico.

SIN EMBARGO, ese límite no siempre tiene una respuesta, o puede ser muy difícil obtener la respuesta. Pero muchas veces no necesitamos una respuesta * exacta *, solo necesitamos una respuesta “suficiente” cercana. Entonces, en lugar de llegar a 0, es posible que necesitemos que la “pieza” infinitesimal sea lo suficientemente pequeña para que la respuesta sea lo suficientemente precisa para nuestro uso. Ahora, en lugar de ser “continuo” (lo que sería si fueran de tamaño 0), nuestro modelo es “discreto”, es decir, los fragmentos son de un tamaño finito conocido. Si el modelo está configurado de esta manera, ahora es esencialmente solo un conjunto de ecuaciones aritméticas (o algebraicas), aunque (dependiendo de cuán pequeña sea nuestra “pieza”) un * lote * de ellas.

Entonces, ¿cuál es un buen método para resolver muchas ecuaciones similares? ¡Programación! Los bucles y las matrices se prestan particularmente bien para resolver aproximaciones numéricas discretas de modelos matemáticos continuos.

Toda el área de Ingeniería (enseño una clase sobre ella) que estudia métodos numéricos para resolver ecuaciones diferenciales depende en gran medida de la programación y los métodos informáticos. Todo, desde las desviaciones en los haces hasta las concentraciones de contaminantes en los biorreactores, se puede modelar de esta manera mediante la programación, a menudo con mucha facilidad.

Los programadores en general no necesitan aprender cálculo, pero las matemáticas discretas son absolutamente esenciales.

Sin embargo, para cualquier otro tema STEM, incluidas las estadísticas, comprender el cálculo es esencial para comprenderlo por completo.

Las dos cosas más fundamentales para saber en matemáticas discretas para programadores son el álgebra booleana y algo de teoría básica de grafos.

Como ya sabe, las variables booleanas tienen solo dos valores, a veces llamados “0” y “1”, y a veces llamados “falso” y “verdadero”. Con dos variables de entrada, hay dieciséis posibles funciones booleanas, la mayoría de las cuales son aburridas. Simplemente dibuje una cuadrícula de 3 × 3 tic-tac-toe, deje el cuadrado superior izquierdo vacío, escriba 0 y 1 en la primera fila y columna, y le quedan cuatro cuadrados, cada uno de los cuales puede llenarse solo con 0 o 1 – de ahí las 2 ^ 4 = 16 funciones diferentes. Por ejemplo, “Y” se llena con “0, 0, 0, 1” (en orden de lectura) y “NAND” con “1, 1, 1, 0”. Las cuadrículas rellenas con solo 0 o solo 1 son funciones triviales (y constantes), y las que tienen “0, 0, 1, 1” y “0, 1, 0, 1” simplemente tiran una entrada. De todos modos, en el mundo real, puede tener más de dos valores booleanos, lo que significa 256 funciones diferentes de tres variables, etc., y a los programadores les gusta poder simplificar esto.

La teoría de gráficos es de interés para los programadores porque los árboles y los gráficos dirigidos (acíclicos) aumentan varias veces en informática, en algoritmos y en compiladores, por ejemplo.

Las estadísticas se basan en la probabilidad (discreta), y tal vez la razón por la que se le enseña en lugar del cálculo es que esto último requiere un poco más de tiempo para enseñar a un nivel universitario aceptable. Es bastante común que las ciencias sociales incluyan un elemento estadístico que es desafiante sin ser extremadamente difícil.

Pero el cálculo puede ser relativamente simple si se hace usando una computadora. Por ejemplo, si desea calcular qué tan lejos viaja dada una cierta aceleración a , puede comenzar con la posición xy la velocidad v de cero, incrementar el tiempo t en pasos dt t de 0.1 o 0.01 segundo, y efectivamente escribir v + = a * dt; x + = v * dt . Del mismo modo, si tiene una función f (x) , puede estimar su pendiente utilizando dy_dx = (f (x + dx) – f (x)) / dx . De hecho, esta última expresión es casi exactamente lo que se hace en algoritmos simples de aprendizaje automático, ¡excepto potencialmente por muchas más variables! Sin embargo, para hacerlo, se deben entender algunos conceptos básicos de cálculo y métodos numéricos.

Tan pronto como un matemático vea una imagen como:

entonces están mirando esa área verde debajo de la curva como resultado de una integración. Si echa un vistazo a la distribución Normal (CDF) – Wikipedia, no solo recibirá una buena integral, sino también algo de código:

suma: = suma + valor;

que es muy similar a mi código ” + = ” anterior.

Déjame ver si puedo proporcionar una inclinación a mirar esto. Control Theory es un campo completamente matemático que involucra tanto cálculos como matemáticas discretas, pero describe el mundo real de los programadores que intentan controlar la salida de los sistemas, en función de sus entradas.

Caracterizamos (definimos) el sistema a través del cálculo, y usamos algunos conocimientos de aproximaciones entre derivadas discretas y continuas (la diferencia y el diferencial, respectivamente), en varios espacios (como la frecuencia o los espacios s para discretos espacios z).

A través de esto, los programadores optimizarán el control de sistemas de entrada / salida únicos o múltiples, como el control de temperatura o presión, o el control de un objeto en el espacio 3D utilizando el cálculo de cuaterniones.


En mi observación, los programadores que no han aprendido la teoría del control están en desventaja e intentan hacer cosas como agregar una a la salida si la temperatura es demasiado baja y restar una de la salida si es demasiado alta, lo que puede ser lento y causar una onda en la salida.

En este mundo de Internet de las cosas, es esencial, porque usar el aprendizaje automático para controlar sistemas tan simples es excesivo y no tan eficaz como hacer un cálculo y control simple de un sistema de espacio continuo usando matemáticas discretas.

Con la ayuda de las matemáticas / matemáticas estadísticas, los programadores pueden resolver problemas de manera más eficiente y en un tiempo mucho más rápido que simplemente usando sus habilidades de programación.

El cálculo y las matemáticas discretas le permiten pensar lógicamente y crear un algoritmo que ayudará al sistema general a funcionar con MENOS código. ¿Por qué es menos importante el código? Piénselo de esta manera, tener múltiples líneas de código (especialmente cuando se desarrolla un programa a nivel global) aumentará las posibilidades de errores, lo que en última instancia hace que el programa sea inestable (propenso a las vulnerabilidades en las que un posible pirata informático puede usar para explotar su sistema) – ¡esto no es lo ideal!

Sin embargo, no es un requisito. Aún puede implementar el mismo sistema que el siguiente programador sin él. aprender matemáticas ayuda a fortalecer tus habilidades analíticas y algorítmicas.

Las matemáticas son la disciplina de la resolución de problemas. Te enseña a pensar acerca de abordar cualquier tipo de problema de manera creativa. Todos los programadores tienen que hacer esto en algún nivel, y los programadores más demandados lo hacen extremadamente bien. Las matemáticas son una forma natural y eficiente de aprender esta habilidad.

Las matemáticas discretas son técnicamente lo que harías la mayoría del tiempo, si estás tratando de optimizar el código hardcore (aunque es cierto que esto no es lo que hace la mayoría de la gente de la industria), ya que la mayoría de los problemas de CS son reducibles a algunas matemáticas discretas estándar equivalentes problema.

El cálculo es cómo hacer que esos problemas sean manejables para la intuición cotidiana (porque la combinatoria es difícil y, por lo general, los detalles exactos no importan): el cálculo es mucho más fácil que la combinatoria, por lo que puede hacerlo cuando pueda. Esto le ayuda a comprender por qué su programa no se ejecuta rápidamente (si lo necesita), sin profundizar en cada capa de su programa.

Hablo regularmente con un desarrollador amigo mío. No creo que tuviera que aprender cálculo, en la universidad, pero sé que se lo llevó conmigo en la escuela secundaria. Y estoy bastante seguro de que tomó álgebra lineal. En varias ocasiones, su conclusión suele ser que aprender más matemáticas sería mejor para su carrera que mejorar su programación / etc. La gente le dirá que los problemas en informática son discretos. Creo que aprenden muchas matemáticas discretas y él es muy bueno en eso. Pero en algún momento de su carrera, es probable que deba optimizar algo, mejorar algún tipo de cosa que sea de naturaleza continua y este es el dominio del cálculo. También es posible que tenga que modelar algún tipo de fenómeno, y hay muchas maneras de hacerlo en álgebra lineal y ecuaciones diferenciales.

¿Necesitan aprenderlo? Creo que puede ayudarles en sus carreras porque cuanto más sepa, más podrá hacer. Hay un área grande para desarrolladores full stack.