Dado que la programación va a ser cada vez más abstracta, ¿necesitamos estudiar más matemáticas para ser buenos en eso?

Alexandre De Moura gracias por su solicitud. Es un placer escribir una respuesta para usted.

Voy contra la corriente y digo que sí, necesitas una mentalidad matemática . La mayoría de la gente piensa que las matemáticas son aritméticas o memorizan fórmulas arcanas. Esto es como preguntar si necesita una ortografía perfecta o un vocabulario extraordinario para ser un buen escritor.

La escritura se trata de comunicación, y las matemáticas / programación se trata del proceso de pensamiento claro y lógico (de una manera que no se puede cometer errores; la ecuación no se equilibra o el programa no se compila). Específicamente, ese pensamiento lógico se manifiesta en:

  • Capacidad para estimar / comprender las diferencias entre los números: O (n ^ 2) vs O (lg (n)), sentido intuitivo de KB vs MB vs GB, qué tan lento se compara el disco con la RAM. Si no se da cuenta de lo pequeño que es un KB en comparación con un GB, perderá tiempo optimizando cosas que no importan.
  • Funciones / programación funcional (¿es una coincidencia que la ecuación f (x) = x ^ 2 sea tan similar a cómo escribirías ese método? Las palabras “algoritmo” y “función” existían en el mundo matemático mucho antes de nació la primera computadora
  • Álgebra básica para crear y reordenar sus propias ecuaciones, tomar promedios, estadísticas básicas

Entonces, diré que necesita una mentalidad matemática, poder construir y manipular modelos mentales de lo que está haciendo su programa, en lugar de una colección de hechos y teoremas. Ciertos campos como los gráficos o las bases de datos también tendrán ciertos datos que necesita, pero para mí esa no es la esencia de ser “bueno en matemáticas”.

¡Espero que esto ayude!

¿Necesitar? No. ¿Es beneficioso? Si.

La programación no se volverá más o menos abstracta; va en todas las direcciones a la vez. ¿Hay trabajos para personas con habilidades matemáticas especializadas y fuertes habilidades de programación? ¡Absolutamente! ¿Son la mayoría de los programadores muy matemáticamente sofisticados? ¡Absolutamente no!

Sigo a muchas personas tecnológicas geniales y brillantes en Twitter. Stephanie Hurlburt tiene una startup que hace compresión de texturas. Su licenciatura es en matemáticas. Sospecho que tiene una gran comprensión del álgebra lineal. Susan Potter (@SusanPotter) | Twitter está en DevOps, y usa Haskell ampliamente; su interés está en el álgebra abstracta, lo cual tiene sentido debido a la teoría de tipos involucrada en Haskell.

Sin embargo, cuando me preguntaron sobre la idea más poderosa que encontré en la programación, fue el uso de la metáfora. ¿Significa eso que los programadores deberían pasar más tiempo en las humanidades, y especialmente en la literatura? De nuevo, es beneficioso, pero no es la única forma de ser.

Creo que cualquier estructura organizativa estructurada tendrá una forma de prestarse a la programación, y existen y continuarán existiendo muchos tipos diferentes de programación. Si bien el menor más común para mis alumnos es la matemática, no lo recomiendo (ni lo desaliento), y la mayoría de mis alumnos no son matemáticos menores (solo más que cualquier otro campo). Tengo estudiantes en idiomas, arte, justicia penal, escritura creativa … lo que sea.

Matemáticas y CS tienen mucho en común, y eso se traduce en la programación como un campo aplicado relacionado con CS. Sin embargo, CS no es una forma o subdisciplina de las matemáticas; fusiona fortalezas e ideas de muchos campos. Mis segundas residencias durante mi doctorado fueron psicología cognitiva y estudios de comunicación.

La programación para la mayoría de las personas será cada vez menos abstracta, a medida que haya más herramientas / bibliotecas específicas del dominio disponibles.

Por supuesto, para los pocos que están implementando dichas herramientas específicas de dominio, se vuelven más abstractas. Pero eso es solo para <0.01% de los programadores.

Esto es lo que uno de mis instructores de Java me dijo hace mucho tiempo. Tomé una clase de programación Java en un colegio comunitario local cuando trabajaba en Denver. Me gusta hacer esto porque es una forma económica de obtener instrucción en la sala de clase, y me gusta superponer los tipos de aprendizaje uno encima del otro para algo que quiero aprender realmente bien.

En cualquier caso, este instructor se especializó en seguridad que tiene muchos elementos matemáticos y números enterrados. Así que me sorprendió cuando denunció el fuerte énfasis en las matemáticas en los currículos de informática.

Su teoría era que la programación estaba transformando en gran medida el pensamiento y las ideas en símbolos. Ahora, ciertamente esto ocurre en álgebra, geometría, cálculo y muchos tipos de matemáticas. Pero, esta transformación del pensamiento y las ideas en símbolos también está presente en el arte, en la música, en la literatura y también en los juegos. De hecho, no puedo pensar en muchas mejores formas de aprender a pensar de manera abstracta cuando algunos de los datos son retenidos y son incognoscibles que jugar al Texas Hold Em Poker. Así que creo que los mejores desarrolladores deberían y se involucrarán en una variedad de estas actividades, y estarán mucho mejor por ello.

Verá, mi instructor sintió que estábamos perdiendo a muchas personas talentosas al no tratar de atraer a la gente que era experta en lo que supongo que muchos llamarían las artes liberales. Odio dibujar generalidades, pero esto puede ser parte de la solución para abrir nuestro campo a una fuerza laboral más diversa.

Necesitamos estudiar diferentes matemáticas, que en teoría podrían enseñarse mucho antes, pero actualmente no. Cosas como la teoría de tipos son más importantes ahora, mientras que el álgebra lineal se está volviendo más útil en un dominio específico.

More Interesting

¿Qué pasaría si pudiéramos demostrar que AGI está más allá del poder computacional de la máquina Turing?

Si tuviera la oportunidad de rediseñar el programa de cuatro años de Ciencias de la Computación de su universidad, entonces, ¿qué programa diseñaría?

¿Cuáles son las aplicaciones de las matemáticas en la programación?

¿Cómo es útil la optimización convexa en la industria tecnológica?

Cómo diseñar un algoritmo eficiente cuando me enfrento a un problema

¿Cuál es la banda de transición máxima permitida del filtro de paso bajo utilizado en el núcleo de reconstrucción para un CD con una frecuencia de voz máxima de 4 kHz?

Si una persona tuviera un nuevo modelo de física fundacional de calidad nacido de la informática, no de las matemáticas, ¿cuál sería la mejor manera de presentarlo?

¿Cómo evitan los programas de aprendizaje automático / IA la trampa de quedar encerrados en una forma de hacer algo una vez que han encontrado un método exitoso para completar una tarea? ¿Pueden calcular otras soluciones competidoras en paralelo?

¿Cuáles son las aplicaciones de la teoría de autómatas?

¿Qué es la notación de sintaxis abstracta uno?

¿Qué problemas matemáticos se pueden hacer con las computadoras? ¿Cómo?

¿Cuál es el límite y cómo puedo probar: [math] \ lim_ {n \ rightarrow \ infty} {n ^ dn ^ c} [/ math] cuando [math] 0 \ leq c <d [/ math]?

¿Es correcto que 'todos los lenguajes de computadora converjan a LISP'? ¿Por qué?

¿Qué tan rápido es el algoritmo de clasificación altamente paralelo más rápido, teóricamente? Quiero decir, la clasificación puede hacer tantos hilos separados como desee y todos se ejecutan simultáneamente. ¿Mejoraría sobre el límite [math] \ Omega (n \ log n) [/ math] para un solo subproceso?

¿Cómo puedo calcular los fallos de página a partir de la cadena de referencia y los marcos disponibles?