¿Temas o campos de matemáticas que aumentan la competencia en programación de computadoras? [cerrado]

14

En general, los programadores de computadoras que son matemáticos o tienen conocimientos de matemáticas son muy buenos en términos de algoritmos y programación de computadoras en general.

Lo que no estoy diciendo:

Se necesitan las matemáticas para ser un buen programador de computadoras. Las matemáticas son necesarias para la programación. Los buenos matemáticos son buenos programadores y viceversa.

Que estoy diciendo

Me gustaría aprender algunas matemáticas porque creo que me hará un mejor programador. ¿Qué áreas / temas de matemáticas me ayudarán a ser un mejor programador? math topic - corresponding cs areaSe agradecerán las respuestas del formulario .

NB: pregunté esto en StackOverflow donde se declaró fuera de tema. Quiero aprenderlo durante mi tiempo libre tal como lo he estado haciendo con la programación de computadoras. Gracias por adelantado.

Charitoo
fuente
1
Me sorprende que StackOverflow haya declarado que esta pregunta está fuera de tema. Desde mi punto de vista (un programador retirado), esta pregunta debería ser una de las preguntas más importantes para SO.
scaaahu
1
StackOverflow es realmente más sobre problemas de programación específicos. Esto sería mejor en CSEducators, y puede haber trabajado en SoftwareEngineering.
Nat
1
Hemos tenido preguntas como esta antes, y todas tienen el mismo problema: son demasiado amplias y demasiado subjetivas. La única respuesta consensuada es: todo .
Raphael
@Raphael Primero, respeto la decisión de Mod. Sin embargo, me gustaría hacer una pregunta en nombre del OP. ¿Hay alguna forma de mejorar la pregunta para que pueda volver a abrirse? Si no hay forma de mejorarlo, ¿hay algún otro SE al que el OP pueda recurrir para hacer esta pregunta? (Obviamente, el OP ya intentó SO y sé que puede no encajar en Academia SE porque no está estrechamente relacionado con Academia.)
scaaahu
Las preguntas que piden soluciones formales a problemas específicos estarían bien. Las preguntas de asesoramiento de estudio generalmente no son adecuadas para el formato SE; ¡La razón de cierre "basada en la opinión" se aplica a todos los sitios!
Raphael

Respuestas:

19

Entonces, hay muchos campos de las matemáticas que son relevantes para la Ciencia de la CS, pero para la programación específicamente:

  • Teoría de grafos : este es el más grande. Gráficos y árboles están en todas partes. Redes, mapas, caminos en videojuegos. Incluso cosas como resolver un cubo de Rubik pueden modelarse como un algoritmo gráfico y resolverse con A *.

  • Matemáticas discretas : aparte de la teoría de grafos, es útil conocer esta área en general. Está lleno de pruebas por inducción, que son muy útiles para comprender la recursividad, lo cual es muy útil en la programación, particularmente con estructuras de datos. Saber sobre conjuntos, conteo, inclusión-exclusión, lógica booleana, etc. puede ser útil de vez en cuando.

  • Teoría de tipos: como era de esperar, conocer la teoría de tipos ayuda a comprender la programación en lenguajes mecanografiados y, en términos más generales, a utilizar los tipos como una forma de garantizar ciertas propiedades de corrección. Conocer la teoría de los subtipos le ayuda a comprender la covarianza y la contravarianza en lenguajes similares a Java. Obviamente, conocer cosas como el polimorfismo paramétrico es útil al aprender un lenguaje de tipo pesado como Haskell o Purescript, pero los idiomas como Scala, TypeScript y Rust son cada vez más frecuentes en la industria, y los tipos están en sus núcleos.

    Si lleva esto al extremo, obtendrá cosas como Coq y Agda e Idris, que se pueden usar para probar propiedades de corrección extremadamente precisas sobre los programas.

  • Teoría de la computabilidad y la complejidad : es útil saber cuándo un problema es insoluble o NP-difícil, porque no perderá horas atormentando su cerebro por una forma rápida de hacerlo. Del mismo modo, conocer algo de la teoría detrás de los algoritmos de aproximación, la trazabilidad de parámetros fijos o los algoritmos exponenciales de base baja, puede ayudar cuando realmente necesite resolver un problema NP-difícil.

  • Teoría de autómatas: muchos problemas se pueden modelar con varias máquinas de estado, por lo que es útil comprender sus propiedades.

También hay algunas áreas específicas de campo:

  • Estadísticas: si estás haciendo aprendizaje automático o big data, esto es imprescindible.

  • Álgebra lineal / cálculo de vectores : ambos son importantes para el aprendizaje automático, los gráficos, las simulaciones o el procesamiento de imágenes / audio.

  • Teoría del enrejado : si está haciendo algún trabajo con compiladores u optimización de programas, este aparece todo el tiempo. ¡Puntos fijos en todas partes!

  • Teoría de categorías: no es necesario codificar, pero es útil para cualquier cosa profundamente empapada en la teoría de tipos.

Editar: no puedo creer que lo olvidé:

  • Criptografía : si está interesado en la seguridad, el hash, las firmas digitales y demás, asegúrese de aprender algo de teoría de números, teoría de grupos, teoría de campos, teoría de curvas elípticas, etc.
jmite
fuente