¿Cuáles son los conceptos matemáticos básicos que un buen desarrollador debe saber? [cerrado]


Desde que me gradué de una escuela muy pequeña en 2006 con un programa mal formado y obsoleto (soy extranjero y no conocía ninguna escuela mejor en ese momento) me he dado cuenta de que me perdí muchos conceptos básicos desde una perspectiva matemática y de software que son principalmente los cimientos de otros conceptos superiores.

Es decir, traté de escuchar / ver el curso abierto del MIT en Introducción a los Algoritmos pero rápidamente me di cuenta de que me faltaban varios conceptos matemáticos para entender mejor el curso.

Entonces, ¿cuáles son los conceptos matemáticos básicos que un buen ingeniero de software debe saber? Y ¿cuáles son los posibles libros/sitios que me recomienda?

Author: Oded, 2008-09-09

27 answers

 62
Author: Gulzar Nazim,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2008-09-09 15:55:21

El álgebra booleana es fundamental para entender las estructuras de control y la refactorización. Por ejemplo, he visto muchos errores causados por programadores que no conocían (o no podían usar) la ley de DeMorgan. Como otro ejemplo, ¿cuántos programadores reconocen inmediatamente que

if (condition-1) {
    if (condition-2) {
        action-1
    } else {
        action-2
} else {
    action-2
}

Se puede reescribir como

if (condition-1 and condition-2) {
    action-1
} else {
    action-2
}

Las matemáticas discretas y la combinatoria son tremendamente útiles para comprender el rendimiento de varios algoritmos y estructuras de datos.

Como menciona Baltimark, la inducción matemática es muy útil en el razonamiento sobre bucles y recursión.

La teoría de conjuntos es la base de las bases de datos relacionales y SQL.

A modo de analogía, permítanme señalar que los carpinteros utilizan rutinariamente una variedad de técnicas de regla de oro en la construcción de cosas como techos y escaleras. Sin embargo, un conocimiento de geometría le permite resolver problemas para los que no tiene una regla general "enlatada". Es como aprender a leer a través de la fonética versus el reconocimiento visual de un básico vocabulario. 90 + % de las veces no hay mucha diferencia. Pero cuando te encuentras con una situación desconocida, es MUY agradable tener las herramientas para resolver la solución por ti mismo.

Finalmente, el rigor/precisión requerido por las matemáticas es una preparación muy útil para la programación, independientemente de la técnica específica. Una vez más, muchos de los errores en la programación (o incluso especificaciones) que he visto en mi carrera han descuidado el pensamiento en su causa raíz.

 19
Author: joel.neely,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2008-09-09 16:57:00

Yo iría con los campos que Landon declaró:

Matemática Discreta, Álgebra Lineal, Combinatoria, Probabilidad y Estadística, Teoría de Grafos

Y añadir lógica matemática.

Esto le daría un control sobre la mayoría de los campos de CS. Si quieres entrar en campos especiales, tienes que bucear en algunas áreas especialmente:

Computer graphics -> Linear Algebra
Gaming -> Linear Algebra, Physics
Computer Linguistics -> Statistics, Graph Theory
AI -> Statistics, Stochastics, Logic, Graph Theory
 12
Author: Ralph M. Rickenbach,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2008-09-09 17:13:28

En orden de importancia:

  • Contando (necesario para bucles)
  • Suma, resta, multiplicación, división.
  • Álgebra (solo se requiere realmente para entender el uso de variables).
  • Álgebra booleana, lógica booleana y binario.
  • Exponentes y logaritmos (es decir, entender la notación O(n)).

Cualquier cosa más avanzada que eso suele ser específica del algoritmo o específica del dominio. Dependiendo de las áreas en las que esté interesado, lo siguiente puede también ser relevante:

  • Álgebra lineal y trigonometría (visualización 3D)
  • Matemáticas discretas y teoría de conjuntos (diseño de bases de datos, diseño de algoritmos, diseño de compiladores).
  • Estadísticas (bueno, para aplicaciones estadísticas y/o científicas/económicas. posiblemente también útil para el diseño de algoritmos).
  • Física (para simulaciones).

Entender funciones también es útil (no recuerde cuál es el término matemático para esa área), pero si sabe cómo programa que probablemente ya lo hagas.

Mi punto es: Un niño de diez años debe saber suficiente matemáticas para ser capaz de entender la programación. Realmente no hay muchas matemáticas necesarias para la comprensión básica de las cosas. Todo se trata de la lógica, en realidad.

 10
Author: Anders Sandvig,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2008-09-09 18:34:09

"Prueba por inducción" es un concepto matemático básico que los programadores deben conocer.

 9
Author: Baltimark,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2008-09-09 15:42:11

Notación Big O en análisis de algoritmos generales, y en relación con colecciones estándar (clasificación, inserción de recuperación y eliminación)

 9
Author: Corin Blaikie,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2008-09-09 15:57:05

Para matemáticas discretas, aquí es un impresionante conjunto de 20 conferencias de la Universidad Arsdigita. Cada uno dura aproximadamente una hora y veinte minutos.

 8
Author: Corey,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2008-09-09 17:12:10

Comience con lo que nosotros los de CS llamamos "matemáticas discretas". El cálculo y el álgebra lineal también pueden ser muy útiles porque te ponen el pie en la puerta de muchos dominios de aplicación. Una vez que haya dominado esos tres, vaya a la teoría de la probabilidad. Esos 4 te llevarán a la competencia en el 95% (lo inventé) de los dominios de aplicación.

 7
Author: Ben Collins,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2008-09-09 15:37:22

Matemáticas concretas cubre la mayoría de los temas principales. Un buen libro sobre Matemáticas Discretas, como la Matemática Discreta de Rosen y Sus Aplicaciones, llenará cualquier vacío.

 7
Author: Bill the Lizard,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-01-20 14:47:50

Creo que depende de tu enfoque. Hace unos años compré el conjunto de Arte de la Programación de Computadoras por Donald Knuth. Después de mirar los libros me di cuenta de que casi todo son pruebas de cálculo. Si estás interesado en desarrollar tus propios algoritmos genéricos y pruebas para ellos, entonces te recomiendo ser capaz de entender los libros anteriores ya que es con lo que estarías lidiando en ese mundo. Por otro lado, si solo desea / necesita usar varios tipos de clasificación / búsqueda/árbol / etc... rutinas entonces notación O grande como mínimo, matemáticas booleanas y álgebra general estarán bien. Si usted está tratando con 3D entonces geometría y trigonometría también.

Tiendo a estar más en el lado de usar que hacer pruebas, y aunque me gustaría pensar que he hecho algunas cosas inteligentes a lo largo de los años, nunca me he sentado y desarrollado una nueva rutina de clasificación. El mejor consejo que puedo dar es aprender lo que necesita para su campo, pero exponerse a niveles más altos para que sepa que existe y cuánto más hay que aprender, usted de lo contrario, no crecerá mucho.

 5
Author: ddowns,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2008-09-09 16:26:43

Yo diría lógica booleana. Y, O, XOR, NO. Descubrí que como programador usamos esto más a menudo que el resto de conceptos matemáticos.

 4
Author: Jimmy Chandra,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2008-09-09 16:11:36

Álgebra Básica y Estadística son buenos puntos de partida, y la base para muchos otros campos.

 3
Author: JosephStyons,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2008-09-09 15:40:50

Aquí hay uno simple que me desconcierta cuando veo desarrolladores que no lo entienden:
- Orden de las Operaciones

 2
Author: Daniel Auger,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2008-09-09 17:13:47

El capítulo 1 de "El Arte de la Programación Informática" tiene como objetivo proporcionar exactamente esto.

 2
Author: Michael Dorfman,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2008-09-18 15:39:46

Había un libro que fue recomendado...el título era algo así como Matemáticas concretas. Se recomendó en algunas preguntas.

 1
Author: Thomas Owens,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2008-09-09 15:38:21

De vuelta en la escuela, uno de mis instructores dijo para las aplicaciones de negocios, todo lo que necesita saber saber sumar, restar, multiplicar y dividir. Todas las demás fórmulas que el solicitante sabrá y le informará lo que se necesita. Ahora darse cuenta de que esto es para la financiación de informes y aplicaciones enfocadas en la escuela. Hasta el día de hoy, esto ha sido cierto para mí. Nunca he necesitado saber más que eso.

 1
Author: Mike Wills,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2008-10-24 20:36:38

Consulte el libro Fundamentos de la Informática
Este libro está escrito por: Al Aho y Jeff Ullman y el libro completo está disponible en línea.

Esto es lo que dicen los autores en su Prefacio sobre la meta de este libro:

"Fundamentos de la Informática cubre temas que a menudo se encuentran divididos
entre un curso de matemáticas discretas y una secuencia de segundo nivel en computer
science in data structures (en inglés). Ha sido nuestra intención seleccione la
fundamentos con un ojo hacia lo que el usuario de la computadora realmente necesita, en lugar de
lo que un matemático podría elegir."

 1
Author: sateesh,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-12-17 12:08:16

Un sitio para repasar las matemáticas: http://www.khanacademy.org /

 1
Author: jaras,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-04-29 13:34:02

Mi formación en matemáticas es muy pobre (Geólogo de formación), pero tomé una clase de matemáticas discretas en la escuela secundaria y uso los conceptos todos los días como programador. Es probablemente la clase más valiosa que tomé en toda mi educación en lo que se refiere a mi profesión actual.

 0
Author: JasonS,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2008-09-09 15:39:51

Matemáticas discretas
Álgebra Lineal
Combinatoria
Probabilidad y Estadística
Teoría de Grafos

 0
Author: Landon,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2008-09-09 17:03:47
  • Álgebra booleana
  • Teoría de conjuntos
  • Matemáticas discretas
 0
Author: mrbradleyt,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2008-09-09 17:38:12

Bueno, eso depende de cuál sea tu objetivo. Como alguien dijo, Álgebra Lineal, Combinatoria, Probabilidad y Estadística y Teoría de Grafos son importantes si te interesa resolver problemas difíciles. El crecimiento asintótico de funciones (notación bit-Oh) es muy importante. También necesitará dominar sumaciones y series si necesita trabajar en el análisis de algunos algoritmos más complejos (vea el apéndice en Cormen&others Intro to Algorithms).

Incluso si te gusta "Java para la empresa" o "PHP del lado del servidor", encontrará algunas Estadísticas y Complejidad de Algoritmos (por lo tanto, combinatoria, inducción, sumaciones, series, etc.) útiles cuando su jefe quiere que el servidor funcione más rápido, y agregar nuevo hardware no parece ayudar. :- ) He pasado por eso una vez.

 0
Author: ,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2008-10-18 15:58:25
  • Álgebra booleana
  • Teoría de conjuntos
 0
Author: Fortyrunner,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2008-10-24 15:29:16

¿Por qué todo el mundo incluye la probabilidad y las estadísticas en la lista de oro sin mencionar el cálculo? Uno no puede entender de qué se trata la probabilidad y las estadísticas sin al menos un conocimiento práctico de límites, derivadas, integrales y series. Y en general, el cálculo (junto con el álgebra lineal) es el caballo de batalla de todas las matemáticas.

 0
Author: Federico A. Ramponi,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2008-10-24 19:47:35

Creo que los algoritmos y la teoría son de gran importancia. Ser capaz de llegar a una solución rápida y correcta es lo que diferencia a los buenos programadores del resto. Además, ser capaz de probar su algoritmo (usando técnicas de prueba estándar induction inducción, contradicción, etc.) es igualmente importante.

 0
Author: Scott Wegner,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2008-11-13 07:25:14

Sí, yo diría que una comprensión básica de la inducción ayuda a entender lo que n representa en algoritmos. También algunas Estructuras Lógicas y Discretas es útil.

 0
Author: Aaron Mc Adam,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-04-14 17:08:42

Probabilidad y Estadística son muy útiles si alguna vez tienes que hacer algo parecido al aprendizaje automático.

Cubro los conceptos básicos en mi entrada de blog " Computing Your Skill" donde discuto cómo funciona el algoritmo de ranking y emparejamiento TrueSkill de Xbox Live.

 0
Author: Jeff Moser,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-04-14 17:14:14