En informática, ¿qué es más importante: las matemáticas o la habilidad de codificación?

Ninguno.

La informática es una ciencia , y lo más importante en el estudio de la ciencia es la capacidad de simplificar la experiencia diversa en un modelo abstracto que tiene poder explicativo y predictivo. Es posible que necesite o no habilidades de codificación para configurar sus experimentos, y puede que necesite o no habilidades matemáticas para expresar su modelo. Pero si tiene ambos y no puede dar ese salto de abstracción, no creo que pueda ser un científico informático exitoso.

Déjame hacer esto un poco más concreto. El Departamento de Energía de los Estados Unidos quisiera tener una computadora exascale en los próximos años que (con suerte) no consuma más de 20 megavatios. Tal máquina podría tener mil millones de núcleos de procesador. Si eres matemático, esto podría hacerte repensar cómo abordarías problemas como la cuantificación de la incertidumbre. Si eres programador, definitivamente estás repensando cómo puedes hacer que MPI funcione (en absoluto).

Sin embargo, la cuestión de la informática, comenzando con la proposición de que la utilización de la medición se debe hacer desde el escaso recurso, estamos pasando de escasez de FLOPS a escasa potencia, por lo que una máquina totalmente utilizada debería extraer 20MW desde el momento en que se pone el piso de la sala de máquinas hasta su desmantelamiento. Nunca antes tuvimos que pensar en cómo ejecutar simulaciones físicas en un entorno con restricciones de potencia, por lo que la pregunta científica es: ¿qué significa eso? ¿Cómo modela las aplicaciones para comprender cómo reaccionarán ante un entorno con restricciones de energía? ¿Cómo modela el sistema para que la energía pueda reasignarse dentro de él donde sea más beneficioso? ¿Cómo modela trabajos para que el algoritmo de programación de trabajos pueda tener en cuenta el tiempo, el recuento de nodos y los vatios?

La codificación y las matemáticas son ciertamente habilidades útiles para tener en cuenta estos problemas, pero la mayoría de las soluciones reales parecen provenir de mirar gráficos de datos experimentales y garabatear en la pizarra.

La programación es un subconjunto de las matemáticas.

Todavía hoy tuve un colega que intentó simplificar rápidamente una expresión booleana “compleja” y falló. La razón es que lo resolvió usando un lenguaje sencillo.
Me tomó literalmente un segundo porque lo hice de manera abstracta. Lo resolví matemáticamente y luego usé el lenguaje de “negocios”.

Cuando se me asigna una tarea, lo primero que hago es ver cómo modelarla. Entonces empiezo a escribir código. Este análisis se centra en la teoría de tipos, la teoría de conjuntos, … Conceptos matemáticos.
Para ir más rápido, me gusta demostrar que mi programa está haciendo lo que intento. Hay pruebas, pero también una forma de escribir software como tal, cada parte es fácil de probar. En la mayoría de los idiomas, eso significa muchas funciones cortas. (Y lamento que la mayoría de ellos no tengan una palabra clave en línea )

Fuera de los conceptos matemáticos que usa de inmediato, las matemáticas mejoran sus habilidades de codificación . La codificación no es codificación . Se trata de cómo estructurar y representar información en su mental. (Tu estructura mental)
Con una codificación eficiente, tiene menos obstáculos para mantener la información y jugar con ella.

Además, hacer muchas matemáticas te hace aprender un hecho interesante: nada es realmente intuitivo y cuando parece, probablemente te estás perdiendo algo.

Las matemáticas te enseñarán mucho sobre dominios y te ayudarán mucho en las pruebas.

Como ejemplo, cuando se pregunta a los evaluadores cuántos valores de prueba se requieren para probar una función “está en el intervalo [1,2]”, dicen “3”:

  • uno antes de 1
  • uno entre 1 y 2
  • one aftet 2

donde se requieren al menos 9 valores:

  • Uno antes de 1
  • Uno cerca de 1 desde la izquierda
  • 1
  • Uno cerca de 1 desde la derecha
  • Uno entre 1 y 2
  • Uno cerca de 2 desde la izquierda
  • 2
  • Uno cerca de 2 desde la derecha
  • Uno después de 2

Y puede agregar pruebas de números negativos. Y en algún idioma: nulo, NaN, indefinido, + Inf, -Inf

De hecho, un tipo “inteligente” puede haber definido entre esto:
entre (x, a, b): = abs (x- (a + b) / 2)

¿Cómo puede estar seguro de que hace lo que pretende hacer sin algunas ideas matemáticas y buenos casos de prueba?

Y aquí está cómo resolverlo matemáticamente:
En la línea real, (a + b) / 2 te da c, que es el centro de [a, b].
En la línea real, abs (ba) te da la distancia entre a y b.
Entonces, nos preguntamos: “¿es la distancia desde x hasta el medio de [a, b] más corta que la mitad de la longitud de [a, b]?”
Y, por supuesto, si comienzas desde el medio de [a, b] y sumas un sustrato menor que la distancia [a, b] terminas en [a, b]. Entonces el código hace lo que tiene que hacer (pero de manera bastante ineficiente)

Las matemáticas le permiten evaluar la complejidad del programa, contar el número de caminos (complejidad ciclomática), etc.

Pocos desarrolladores son conscientes de que las matemáticas son la base de la programación. Esta es la razón por la cual la mayoría de ellos realmente apesta. De Verdad.

Entonces, las matemáticas primero.

Bueno, esto depende de su elección de especialidad. Creo que las personas que hacen código de diseño no necesitan matemática de alto nivel. Por otro lado, las personas que trabajan en el algoritmo para un programa necesitan las matemáticas de alto nivel para hacer el análisis del algoritmo. Las matemáticas solo pueden convertirte en un mejor programador. Es difícil imaginar que alguien sea un excelente programador pero un terrible solucionador de problemas. Entonces ambos son importantes.

¿Qué pasa si digo ambas?
En realidad, la necesidad de programación surge debido a las matemáticas. La computadora se hizo debido a las matemáticas (para el cálculo del proyectil de misiles en la Segunda Guerra Mundial, que manualmente lleva días). Por lo tanto, la programación no puede existir sin las matemáticas. En cada código habría un uso directo o indirecto de las matemáticas.

Mi impresión es que solo puedes programar consistentemente bien si tienes un modelo de trabajo bastante correcto de lo que estás haciendo en tu cabeza. La mayoría de la programación está modelando algunas preocupaciones del mundo real utilizando IO, lógica y aritmética, con una idea de los recursos de tiempo y espacio necesarios. ¿Qué es eso si no se aplican las matemáticas?

La habilidad matemática / recordar fórmulas, etc. no es tan clave, siempre puedes buscar eso, suponiendo que tienes una base de los principios.

Tener un proceso de pensamiento lógico / binario: eso es importante y conduce al éxito a largo plazo en la industria de TI. También le permite resolver problemas matemáticos desde cero.

“Se dice que las matemáticas son la madre de todas las ciencias”. No hay una respuesta absoluta a esta pregunta, pero como científico de la computación, debes saber las matemáticas suficientes para poder entender la belleza de las matemáticas en materias como Algoritmos, donde es muy crucial.

Como informático, no depende de ninguno de los dos, pero a medida que mejore en ambos, mejorará el resto de sus habilidades mucho más fácilmente.

En cuanto a un ser humano, ¿qué es más importante, la comida o el agua?

Espero que responda tu pregunta.