Para ser un programador profesional, ¿qué debo aprender en matemáticas?

  • Suma, resta, división y multiplicación : y, de todos modos, la computadora estará sumando, restando, dividiendo y multiplicando por ti. Solo tiene que saber cuándo necesita hacer estas operaciones.
  • Mod : la operación de modificación es el “resto” y su signo suele ser el signo de porcentaje. Entonces 23 dividido entre 7 es 3 con un resto de 2. Pero 23 mod 7 es 2.
  • El truco de la prueba de modificación par / impar : si desea saber si un número es impar o par, modifíquelo en 2. Si el resultado es 0, el número es par. Si el resultado es 1, el número es impar. 23 mod 2 es 1, entonces sabes que 23 es impar. 24 mod 2 es 0, entonces sabes que 24 es par. Si x mod 2 es 0, sabe que cualquier número almacenado en la variable x es par.
  • Para obtener un porcentaje de un número , multiplique ese número por el número de porcentaje con el punto decimal delante. Entonces, para obtener el 54% de 279, múltiples 0.54 * 279. Es por eso que 1.0 a menudo significa 100% y 0.0 significa 0%.
  • Sepa qué son los números negativos . Un número negativo multiplicado por un número negativo es positivo. Un negativo multiplicado por un positivo es negativo. Eso es todo.
  • Sepa qué es un sistema de coordenadas cartesianas . En programación, el origen (0, 0) es la esquina superior izquierda de la pantalla o ventana, y el eje Y aumenta al descender.
  • Conozca el teorema de Pitágoras , y que puede usarse para encontrar la distancia entre dos puntos en un sistema de coordenadas cartesianas. El teorema de Pitágoras es a ^ 2 + b ^ 2 = c ^ 2. Lo que esto generalmente significa en la programación es que la distancia entre las coordenadas (x1, y1) y (x2, y2) solo será sqrt ((x1 – x2) ^ 2 + (y1 – y2) ^ 2).
  • Sepa qué son los sistemas de numeración decimal, binario y hexadecimal. Los números decimales son los números a los que estamos acostumbrados que tienen diez dígitos: 0 a 9. Se cree comúnmente que los humanos desarrollan este sistema porque tenemos diez dedos y contamos con nuestros dedos.

Las computadoras funcionan con datos binarios, que es un sistema de números con solo dos dígitos: 0 y 1. Esto se debe a que construimos computadoras con componentes electrónicos donde es más barato hacer que solo reconozcan dos estados diferentes (un estado representa 0 y el otro para representar 1).

Los números siguen siendo exactamente los mismos, pero están escritos de manera diferente porque hay un número diferente de dígitos en cada sistema. Como el hex tiene 6 dígitos más de los que pueden proporcionar los números 0-9, usamos las letras A a F para los dígitos anteriores a 9. La forma más fácil de mostrar estos sistemas de números es con un odómetro. Los siguientes tres odómetros siempre muestran el mismo número , pero están escritos de manera diferente en diferentes sistemas de números:

Vea la página de Sistemas de números de cuentakilómetros en una nueva ventana.

Ni siquiera tiene que saber las matemáticas de convertir un número de un sistema de números a otro. Cada lenguaje de programación tiene funciones que pueden hacer esto por usted.

(En una nota al margen, el hexadecimal se usa porque un dígito hexadecimal puede representar exactamente cuatro dígitos binarios. Por lo tanto, dado que 3 en hexadecimal representa 0011 en binario y A en hexadecimal representa 1010. Esto tiene el efecto agradable de que el número hexadecimal 3A (que es 58 en decimal) está escrito en binario como 00111010. El hexadecimal se usa en programación porque es una abreviatura de binario. A nadie le gusta escribir todos esos y ceros).

Y eso es todo. Además de las cosas del sistema de números, probablemente ya sabía todas las matemáticas que necesitaba saber para programar. A pesar de la concepción popular, las matemáticas no se usan mucho en programación. Necesitaría saber matemáticas para escribir programas que, por ejemplo, simuladores de terremotos. Pero se trata más de la necesidad de saber matemáticas para terremotos que de saber matemáticas para programar un simulador de terremotos.

Matemática avanzada en algunas áreas de programación

Hay algunas áreas de programación en las que se pueden necesitar conocimientos matemáticos adicionales (pero para el 95% del software que escribirá, no necesita saberlo).

Juegos en 3D y gráficos en 3D : las cosas en 3D generalmente implicarán conocer la trigonometría y el álgebra lineal (es decir, las matemáticas que tratan con matrices). Por supuesto, hay muchas bibliotecas de gráficos 3D que implementan toda esta programación matemática para usted, por lo que no necesita saber las matemáticas.

Física 2D (como Angry Birds) y física 3D (como muchos juegos populares en 3D) : para hacer una programación que involucre física, necesitarás aprender algunas ecuaciones y fórmulas físicas (específicamente mecánica, que es el tipo de física con resortes, gravedad, y bolas rodando por planos inclinados.) Sin embargo, hay varios motores de física y bibliotecas de software que implementan estas cosas para usted, por lo que realmente no necesita conocer las ecuaciones de física para hacer un juego como Angry Birds.

Criptografía : y realmente, por criptografía, me refiero a RSA. En ese caso, tendrías que aprender algunas matemáticas sobre cómo funcionan los números primos y cómo hacer el mayor divisor común (que es un algoritmo muy simple, aunque muchos lenguajes de programación tienen la función gcd () que hace esto por ti). Otro cifrado los cifrados son principalmente datos móviles en pasos específicos. Por ejemplo, esta animación Flash muestra los pasos en el cifrado AES “Rijndael”. Básicamente, todos los pasos son sustituir números por otros números, cambiar filas de números, mezclar columnas de números y realizar sumas básicas con números.

Y eso es solo si desea escribir sus propios cifrados de cifrado (lo cual no debe hacer, porque ya hay muchos buenos y sin experiencia, su cifrado probablemente será malo y se descifrará fácilmente). Si solo desea escribir un programa que cifra datos, ya hay bibliotecas de software que implementan funciones de cifrado y descifrado.

Entonces, incluso para las situaciones anteriores, no necesita saber las matemáticas para hacer programas con gráficos 3D, física o cifrado. Solo aprende a usar las bibliotecas.

Lo que necesitas aprender a hacer programación

Lo que debe aprender es cómo modelar datos y diseñar algoritmos . Básicamente, esto significa cómo tomar algunos cálculos del mundo real o algún procesamiento de datos, y escribir el código que hace que la computadora lo haga . Por ejemplo, en el juego Dungeons and Dragons, los personajes y monstruos tienen varias estadísticas diferentes para el combate:

  • HP , o puntos de vida, es la cantidad de daño que una persona puede recibir antes de morir. Más HP significa que puedes recibir más daño antes de morir.
  • AC , o clase de armadura, es una medida de la probabilidad que tiene tu armadura de bloquear un ataque. Cuanto más bajo es el CA, más protectora es la armadura.
  • THAC0 (pronunciado “thay-co”), o “To Hit Armor Class 0”, es una medida de cuán hábil es la persona para golpear con éxito a un oponente. Cuanto más bajo es el THAC0, más preciso es el ataque de la persona.
  • El daño del arma se escribe como algo así como 1d6 + 2. Esto significa que el daño es la cantidad de tirar 1 dado de seis lados y luego sumarle 2. Una estadística de daño de 2d4 sería lanzar 2 dados de cuatro lados y sumarlos. (Dungeons and Dragons usa dados de 4, 6, 8, 10, 12 y 20 lados).

Para ver si un atacante golpea a un defensor, el atacante tira un dado de veinte lados. Si este número es igual o mayor que el THAC0 del atacante menos el CA del defensor, entonces el golpe es exitoso y el defensor recibe daño. De lo contrario, el defensor ha esquivado o bloqueado el ataque y no sufre daños.

Tomemos dos personajes de Dungeon and Dragons, Alice y Bob, con las siguientes estadísticas:

  • Alice: HP 14, AC 5, THAC0 18, DAÑO 1d6
  • Bob: HP 12, AC 7, THAC0 16, DAÑO 2d4

Entonces, Alice tiene dos puntos de vida más que Bob y una mejor armadura (recuerda, una CA más baja es mejor). Pero es más probable que Bob tenga un golpe exitoso (recuerde, bajar THAC0 es mejor) y hace más daño. Podemos decir que el daño de Bob es mejor porque 2d4 resultará en 2 a 8 puntos de daño, mientras que el 1d6 de Alice causará 1 a 6 puntos de daño. (Si supiera matemática estadística, podría calcular que el valor de daño esperado de Bob es 5, que es mayor que el valor de daño esperado de Alice es 3.5).

Entonces, ¿apostarías a que Alice o Bob ganen en una pelea? Es difícil de decir, parecen bastante parejos. Incluso si conociera muchas estadísticas, hacer todos estos cálculos sería una molestia. Pero no necesitas saber estadísticas para escribir un programa que simule el combate de mazmorras y dragones (es decir, modele este proceso) y luego ejecute varios cientos o miles de peleas simuladas y vea quién gana en promedio.

Este es un programa escrito en Python: (Fuente de descarga)

importe al azar, copie NUM_FIGHTS = 1VERBOSE = Verdadero # Los valores más bajos de thac0 y ac más bajos son mejores. Mayor daño y valores de HP son mejores.aliceTemplate = {‘name’: ‘Alice’, ‘hp’: 14, ‘ac’: 5, ‘thac0’: 18, ‘dmgnum’: 1, ‘dmgsize’: 6, ‘ dmgmod ‘: 0} bobTemplate = {‘ name ‘:’ Bob ‘,’ hp ‘: 12,’ ac ‘: 7,’ thac0 ‘: 16,’ dmgnum ‘: 2,’ dmgsize ‘: 4,’ dmgmod ‘: 0} def pantalla (s): if VERBOSE: print (s) def attack (atacante, defensor): if random.randint (1, 20)> = atacante [‘thac0’] – defensor [‘ac’]: daño = 0 para i en rango (atacante [‘dmgnum’]): daño + = random.randint (1, atacante [‘dmgsize’]) daño + = atacante [‘dmgmod’] display (‘% s (% s hp) hits % s (% s hp) para% s puntos de daño.% s se reduce a% s hp. ‘% (atacante [‘ nombre ‘], atacante [‘ hp ‘], defensor [‘ nombre ‘], defensor [‘ hp ‘], daño, defensor [‘ nombre ‘], defensor [‘ hp ‘] – daño)) defensor [‘ hp ‘] – = daño más: mostrar (‘% s falla% s. ‘% (atacante [‘ nombre ‘], defensor [‘ nombre ‘])) aliceWins = 0bobWins = 0para i en rango (NUM_FIGHTS): display (‘ ====================== ‘) display (‘Inicio del combate #% s’% (i + 1)) alice = copy.deepcopy (aliceTemplate) bob = copy.deepcopy (bobTemplate) while True: ataque (alice, bob) if bob [‘hp’] <= 0: break attack (bob, alice) if alice ['hp'] <= 0: break if alice ['hp'] <= 0: display ('Alice ha muerto') bobWins + = 1 if bob ['hp'] <= 0: display ('Bob ha muerto') aliceWins + = 1print () print ('Alice ganó% s (% s% %) peleas. Bob ganó% s (% s %%) peleas '. % (aliceWins, round (aliceWins / NUM_FIGHTS * 100, 2), bobWins, round (bobWins / NUM_FIGHTS * 100, 2)))

Cuando ejecuta este programa, produce resultados como este:

====================== Inicio del combate # 1 Alice pierde a Bob.Bob (12 hp) golpea a Alice (14 hp) por 6 puntos de daño. Alice se reduce a 8 hp. Alice echa de menos a Bob.Bob echa de menos a Alice.Alice echa de menos a Bob.Bob echa de menos a Alice.Alice echa de menos a Bob.Bob echa de menos a Alice.Alice (8 CV) golpea a Bob (12 CV) por 5 puntos de daño. Bob se reduce a 7 hp. Bob echa de menos a Alice.Alice echa de menos a Bob.Bob echa de menos a Alice.Alice echa de menos a Bob.Bob (7 CV) golpea a Alice (8 CV) por 2 puntos de daño. Alice se reduce a 6 hp. Alice (6 hp) golpea a Bob (7 hp) por 6 puntos de daño. Bob se reduce a 1 hp. Bob echa de menos a Alice. Alice (6 hp) golpea a Bob (1 hp) por 1 punto de daño. Bob se reduce a 0 hp. Bob ha muerto. Alice ganó 1 (100.0%) peleas. Bob ganó 0 (0.0%) peleas.

Pero tal vez Alice tuvo suerte en esta pelea. Reprogramamos este programa para apagar la salida detallada (mostrar texto en la pantalla lleva mucho más tiempo que ejecutar la simulación) y aumentar el número de peleas a 30,000 (esto solo cambia la variable NUM_FIGHTS a 30000 y la variable VERBOSE a False ):

Alice ganó 12909 (43.03%) peleas. Bob ganó 17091 (56.97%) peleas.

Entonces podemos ver que con las estadísticas dadas, Bob tiene una ligera ventaja. La computadora acaba de ejecutar 30,000 peleas simuladas. Si jugáramos 30,000 peleas de mazmorras y dragones con lápiz, papel y dados físicos, tomaría meses calcularlo. Pero mi computadora portátil tuvo los resultados en menos de 8 segundos.

Pero, ¿qué pasaría si aumentamos los puntos de vida de Alice de 14 a 20. ¿Quién ganaría entonces?

Alice ganó 19438 (64.79%) peleas. Bob ganó 10562 (35.21%) peleas.

Vemos que esos 6 puntos de golpe adicionales cambian las cosas y le dan a Alice la ventaja. ¿Qué tal si sus puntos de golpe solo aumentaran a 16 en lugar de 20?

Alice ganó 15176 (50.59%) peleas. Bob ganó 14824 (49.41%) peleas.

Vemos que solo ajustar las estadísticas por 2 puntos de golpe es suficiente para igualar las ventajas que Bob obtiene de su mayor nivel de daño.

Y cuando observa este programa, la única matemática que usa es la suma, la resta y la multiplicación y división para encontrar un porcentaje . Incluso si hiciéramos la simulación más sofisticada para dar cuenta de los efectos de hechizos mágicos, pociones curativas, atacantes múltiples y cambiar a diferentes armas en el medio del combate, no necesitaríamos saber más matemáticas o haber obtenido buenas calificaciones en matemáticas para hacer La programación para ello.

Claro, adelante y aprende más matemáticas. Solo puede ayudarlo a convertirse en un mejor programador. Pero, ¿cuántas matemáticas necesitas saber para programar? Muy poco, en realidad.

ACTUALIZACIÓN: supongo que agregaría álgebra básica al conocimiento requerido, pero solo en la medida en que X * 3 = 12 sabiendo por qué X es 4.

Para la mayoría de la codificación empresarial, solo necesita matemáticas de nivel escolar más algunas de las cosas mencionadas en otras respuestas

Necesitarás matemáticas más avanzadas para la programación científica y posiblemente la programación del juego.

Para trabajar con datos necesitará un conocimiento de estadísticas y algoritmos.

Entonces, además de lo anterior, es posible que necesite

Estadística, trigonometría 3D, teoría de números básica / intermedia, cierta apreciación de las matemáticas / análisis numéricos.

Pero para un trabajo de vainilla, el sentido común de calidad rara más las matemáticas escolares deberían sofocar y puedes aprender el resto lentamente

Solo necesita conocer los conceptos básicos y las matemáticas discretas para dominar la programación. La programación no está muy relacionada con las matemáticas.

Simplemente lea un libro de matemáticas de la escuela secundaria o tome el curso de matemáticas del MIT. Después de leerlo, busque matemáticas discretas y eso será suficiente. A medida que programe, aprenderá más cosas sobre matemáticas como la teoría de números, la criptografía, etc., pero podrá hacerlas junto con la programación.

Buena pregunta. Sobre las matemáticas de la programación. Al menos deberías aprender matemáticas discretas para mejorar la programación. Y si programa en el campo de la ciencia y / o la ingeniería, una buena habilidad en métodos numéricos es un buen conjunto de habilidades.

Termina la escuela secundaria, luego toma Matemáticas discretas.

Todo lo demás es agradable pero no necesario.

Escrito para su propósito:

Graham, Knuth y Ptashnik, “Matemáticas concretas”.

Es un gran libro.