Para alguien que no sabe nada de informática, ¿por qué el conocimiento de las matemáticas es tan importante para ser un buen programador?

No necesariamente diría que necesitas ser un genio de las matemáticas, pero he conocido muy pocos buenos desarrolladores que no eran buenos también en matemáticas. Este es el por qué…

Las probabilidades de que necesite usar trigonometría en el mundo real son escasas (a menos que esté trabajando en un GPS o CAD o una aplicación de mapeo), pero sentirse cómodo con la lógica booleana es bastante esencial. Lo mismo ocurre con los poderes de 2. Lo mismo ocurre con una base distinta de la base 10 en la que vive la mayor parte del mundo, por ejemplo, la base 16, también conocida como hexadecimal.

Las probabilidades de que un desarrollador de calidad tenga que recordar el cálculo son misericordiosamente escasas, sin embargo, las probabilidades de que un desarrollador tenga que tener una comprensión decente de la probabilidad y las estadísticas (media vs mediana vs modo vs dev estándar) son en realidad extremadamente altas.

He observado que las personas que son “malas para las matemáticas” nunca comprenden completamente las implicaciones de AND vs OR vs XOR o incluso las responsabilidades de usar NOT o NULL en una declaración.

La gran mayoría de la ingeniería de software no se trata de recordar los detalles arcanos de la resolución de ecuaciones diferenciales, sino de recordar todo sobre la lógica numérica central, especialmente la lógica booleana y la aritmética binaria.

Actualización: también los conceptos básicos de la teoría de conjuntos son esenciales: intersección, unión, diferencia, etc. Si los diagramas de Venn lo confunden, esa puede ser la pistola humeante que sus limitadas habilidades matemáticas limitarán a su vez su valor como programador.

La conexión principal no es tanto el conocimiento de las matemáticas , sino más bien las habilidades desarrolladas al obtener ese conocimiento.

  • pensamiento lógico y abstracto
  • buena memoria (la memorización no es necesariamente de memoria)
  • resolviendo problemas difíciles
  • Expresarse de manera clara, inequívoca y precisa en un lenguaje formal
  • averiguar y explicar por qué algo siempre debe ser cierto (pruebas en matemáticas): esto es útil para depurar programas que no funcionan correctamente en casos excepcionales
  • aprender cosas nuevas rápidamente, especialmente a través de la lectura

El conocimiento real de las matemáticas también es útil. Por ejemplo, ayuda a estimar cuánto tiempo tarda un programa en ejecutarse: puede contar cuántas operaciones debe realizar en entradas de tamaño [matemático] N [/ matemático] (por ejemplo ~ [matemático] N ^ 2 [/ matemático ], ~ [matemática] N ^ 3 [/ matemática] o en algunos casos ~ [matemática] N ^ {\ log_23} [/ matemática]). A veces, encontrar estas expresiones requiere resolver ecuaciones.

En general, la programación y otras tareas de CS son más fáciles si eres fluido con

  • números
  • matrices
  • lógica
  • gráficos

Las matemáticas más avanzadas pueden aparecer de maneras sorprendentes. Por ejemplo, las transformadas de Fourier ayudan a multiplicar grandes números más rápido, y esto es útil en criptografía (que de todos modos se basa en gran medida en la teoría de números).

No es cierto que necesite tener conocimientos de matemáticas para ser un buen programador … a menos que comience a trabajar en problemas específicos que requieren soluciones matemáticas o que solo pueden expresarse bien en matemáticas (por ejemplo, realiza una búsqueda particular algoritmo, expresado matemáticamente, demuestra que se quedará sin memoria y se bloqueará si el espacio de búsqueda crece).

Muchos grandes programadores pasan la mayor parte de su tiempo en problemas que requieren solo un pensamiento lógico (si-entonces-de lo contrario), algo de aritmética rudimentaria de sumar, restar, multiplicar y dividir, y una mente ordenada que divide cada proyecto en sus piezas más pequeñas y diseña métodos limpios y simples para lidiar con ellos y documenta meticulosamente lo que hace su código y por qué.

Sin embargo, lo que es cierto es que a medida que se convierta en un buen programador, gradualmente, sin pretenderlo, aprenderá sobre ciertas partes de las matemáticas. Leerá mucha documentación y muchos códigos de otras personas, por lo que pronto se encontrará con operaciones de turno y eso requerirá que se enseñe a sí mismo sobre las representaciones binarias para los números. Entonces se encontrará con extraños problemas de redondeo y aprenderá mucho más sobre los problemas de representar números en varios sistemas de conteo, etc. Un gran codificador puede que nunca aprenda bien la teoría matemática, pero cada gran codificador siempre conoce los problemas prácticos. .

En resumen, para ser un gran programador, debes ser curioso, metódico y persistente: rasgos que también son útiles en matemáticas. Pero no es necesario que ya conozcas las matemáticas. Eso sería como afirmar que para convertirte en un gran codificador ya necesitabas dominar varios lenguajes de programación.

Me gustan todas las respuestas hasta ahora, pero me gustaría agregar que la comunicación con personas alfabetizadas en matemáticas en el campo es mucho más fácil si tienes una base de conocimiento común.

Dije algo el otro día que comenzó con “es como una serie de Taylor, excepto”, y luego expliqué lo que quería decir en relación con el conocimiento común que el oyente y yo compartimos. Se ahorró mucho tiempo en la discusión. Tener algunos conocimientos matemáticos en común puede facilitar la comunicación.

Más allá de los conceptos básicos de CS, una intuición para las estadísticas es probablemente la habilidad matemática más útil que puede tener un programador. Especialmente cuando la escala está involucrada.

No tienes que ser un genio matemático para ser un buen programador. Sin embargo, un cerebro matemático ayuda. La mayoría de las veces, se enfrentará a lógicas complejas para resolver problemas. Por ejemplo, necesita álgebra para optimizar las operaciones logísticas.

Además de las otras buenas respuestas aquí, permítame señalarle una que escribí en respuesta a una pregunta relacionada: la respuesta de Shriram Krishnamurthi a ¿Debería estudiar ciencias de la computación si soy malo en matemáticas? Creo que obtendrás algo de sabiduría sobre el pensamiento matemático que implica la programación.

Estudiar informática es la mejor manera de descubrir exactamente por qué.

More Interesting

¿Cuál es un ejemplo de un operador XOR que utiliza conceptos del mundo real?

¿Cómo generar números aleatorios reales? He estado jugando con la función rand () en C ++. Leí de varias fuentes en línea que los generadores de números aleatorios que vienen con el paquete son bastante básicos. Hay alguna manera de corregir esto

¿Cuál es la longitud esperada de la subsecuencia creciente más larga?

¿Podrá la inteligencia artificial resolver un problema matemático abierto, como la conjetura de Goldbach o la hipótesis de Riemann?

¿No fue [math] flag [B] [/ math] modificado por thread [math] B [/ math] antes de [math] read_ {B} (flag [A] == false) [/ math]? ¿Por qué es una contradicción?

¿Existe un término en matemáticas como 'real-complete' para describir una función que mapea todos los elementos de un conjunto (número real por ejemplo) a otro conjunto, o 'posibilidad-completa' para describir un algoritmo que maneja todas las posibilidades de entrada? ?

¿Por qué este bucle, usado para agregar caracteres adyacentes en un vector, produce una salida extraña?

¿En qué ciencia necesitas pensar más analítica y lógicamente?

¿Cómo es la complejidad del tiempo O (n * sqrt (n))?

¿Hay algún buen sitio web para aprender matemáticas avanzadas paso a paso?

¿Qué ventajas tienen las matemáticas mayores que recién comienzan a estudiar la programación en comparación con la especialización CS?

¿Alguien sabe de una prueba de acceso público de que la poda alfa beta funciona?

¿Dónde debo comenzar si quiero aprender programación de computadoras?

¿Cuáles son algunas aplicaciones de algoritmos en informática teórica a problemas en la práctica?

Dado un conjunto de datos sin clasificar de tamaño n, si usa la selección de clasificación para ordenar los datos, ¿cuántas búsquedas binarias necesitaría realizar en el conjunto de datos sin clasificar para "recomprar" el costo que conlleva la clasificación de sus datos si n = (2 ^ 4)?