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

StackOverflow https://stackoverflow.com/questions/52176

Pregunta

Desde que me gradué de una escuela muy pequeña en 2006 con un programa obsoleto y mal diseñado (soy extranjero y no conocía ninguna escuela mejor en ese momento), me di cuenta de que me perdía muchos conceptos básicos de una Perspectiva matemática y de software que son en su mayoría los fundamentos de otros conceptos superiores.

Es decir.Intenté escuchar/ver el material educativo abierto del MIT el Introducción a los algoritmos pero rápidamente me di cuenta de que me faltaban varios conceptos matemáticos para comprender mejor el curso.

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

¿Fue útil?

Solución

Matemáticas para programadores.Una buena lectura.

Otros consejos

El álgebra booleana es fundamental para comprender 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 Morgan.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 de gran ayuda para comprender el rendimiento de diversos algoritmos y estructuras de datos.

Como menciona Baltimark, la inducción matemática es muy útil para razonar sobre bucles y recursividad.

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 habitualmente una variedad de técnicas empíricas para construir cosas como techos y escaleras.Sin embargo, el conocimiento de la geometría le permite resolver problemas para los que no tiene una regla general "fijada".Es como aprender a leer mediante la fonética versus el reconocimiento visual de un vocabulario básico.Más del 90% de las veces no hay mucha diferencia.Pero cuando te encuentras con una situación desconocida, es MUY bueno tener las herramientas para encontrar la solución tú mismo.

Finalmente, el rigor/precisión que requieren 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 en las especificaciones) que he visto en mi carrera tienen como causa raíz un pensamiento descuidado.

Yo elegiría los campos que Landon declaró:

Matemáticas discretas, álgebra lineal, combinatoria, probabilidad y estadística, teoría de grafos

y agregar lógica matemática.

Esto le permitiría controlar la mayoría de los campos de la informática.Si quieres adentrarte en campos especiales, debes sumergirte en algunas áreas especialmente:

Computer graphics -> Linear Algebra
Gaming -> Linear Algebra, Physics
Computer Linguistics -> Statistics, Graph Theory
AI -> Statistics, Stochastics, Logic, Graph Theory

En orden de importancia:

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

Cualquier cosa más avanzada que eso suele ser específica de un algoritmo o de un dominio.Dependiendo de las áreas que le interesen, lo siguiente también puede 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).

Comprender las funciones también es útil (no recuerdes cuál es el término matemático para esa área), pero si sabes programar probablemente ya lo sepas.

Mi punto es:Un niño de diez años debería saber suficientes matemáticas para poder entender la programación.Realmente no se necesitan muchas matemáticas para la comprensión básica de las cosas.En realidad, se trata de lógica.

La "prueba por inducción" es un concepto matemático central que los programadores deben conocer.

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

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.

Comience con lo que nosotros, la gente de informática, llamamos "matemáticas discretas".El cálculo y el álgebra lineal también pueden resultar muy útiles porque abren la puerta a muchos dominios de aplicación.Una vez que haya dominado esos tres, opte por la teoría de la probabilidad.Esos 4 le permitirán adquirir competencia en el 95% (lo inventé) de los dominios de aplicación.

Matemáticas Concretas cubre la mayoría de los temas principales.Un buen libro sobre matemáticas discretas, como el de Rosen. Matemáticas discretas y sus aplicaciones, llenará cualquier vacío.

Creo que depende de tu enfoque.Hace unos años compré el juego El arte de la programación informática de Donald Knuth.Después de mirar los libros, me di cuenta de que casi todo son pruebas de cálculo.Si está interesado en desarrollar sus propios algoritmos genéricos y pruebas para ellos, le recomiendo poder comprender los libros anteriores, ya que es con lo que se enfrentaría en ese mundo.Por otro lado, si solo desea/necesita utilizar varias clasificaciones/búsquedas/árboles/etc...Las rutinas, entonces la notación O grande como mínimo, las matemáticas booleanas y el álgebra general estarán bien.Si se trata de 3D, entonces también la geometría y la trigonometría.

Tiendo a estar más en el lado del uso que en el de 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 darte es aprender lo que necesitas para tu campo, pero exponte a niveles más altos para saber que existe y cuánto más hay que aprender; de lo contrario, no obtendrás mucho crecimiento.

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

El álgebra básica y la estadística son buenos puntos de partida y la base para muchos otros campos.

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

El capítulo 1 de "El arte de la programación informática" pretende proporcionar exactamente esto.

Hubo un libro que me recomendaron... el título era algo así como Matemáticas Concretas.Fue recomendado en algunas preguntas.

En la escuela, uno de mis instructores dijo que para aplicaciones comerciales, todo lo que necesitas saber es sumar, restar, multiplicar y dividir.Todas las demás fórmulas el solicitante las conocerá y le informará de lo que necesita.Ahora tenga en cuenta que esto es para financiar la escuela centrada en la presentación de informes y aplicaciones.Hasta el día de hoy, esto ha sido cierto para mí.Nunca he necesitado saber más que eso.

revisa el libro Fundamentos de la informática
Este libro está escrito por:Al Aho y Jeff Ullman y el libro completo están disponibles en línea.

Esto es lo que dicen los autores en su Prefacio sobre el objetivo 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 nivel de segundo año en informática
ciencia en estructuras de datos.Ha sido nuestra intención seleccionar la matemática
fundamentos con miras a lo que el usuario de la computadora realmente necesita, en lugar de
lo que un matemático podría elegir."

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

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

Matemáticas discretas
Álgebra lineal
combinatoria
Probabilidades y estadísticas
Teoría de grafos

  • Álgebra de Boole
  • Teoría de conjuntos
  • Matemáticas discretas

Bueno, eso depende de cuál sea tu objetivo.Como alguien dijo, el álgebra lineal, la combinatoria, la probabilidad y estadística y la teoría de grafos son importantes si te gusta resolver problemas difíciles.El crecimiento asintótico de funciones (notación bit-Oh) es muy importante.También necesitará dominar las sumas y las series si necesita trabajar en el análisis de algunos algoritmos más complejos (consulte el apéndice sobre Introducción a los algoritmos de Cormen y otros).

Incluso si le gusta "Java para empresas" o "PHP del lado del servidor", encontrará algunas estadísticas y complejidad de algoritmos (de ahí la combinatoria, inducción, sumatorias, series, etc.) útiles cuando su jefe quiera que obtenga el servidor. trabajar más rápido y agregar nuevo hardware no parece ayudar.:-) Ya pasé por eso una vez.

  • Álgebra de Boole
  • Teoría de conjuntos

¿Por qué todo el mundo incluye la probabilidad y la estadística en la lista dorada sin mencionar el cálculo?No se puede entender de qué se tratan la probabilidad y la estadística sin al menos un conocimiento práctico de límites, derivadas, integrales y series.Y en definitiva, el cálculo (junto con el álgebra lineal) es el caballo de batalla de todo matemáticas.

Creo que los algoritmos y la teoría son de gran importancia.Ser capaz de idear un ayuno y correcto La solución 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: inducción, contradicción, etc.) es igualmente importante.

Sí, diría que una comprensión básica de la inducción ayuda a comprender lo que n representa en los algoritmos.También son útiles algunas estructuras lógicas y discretas.

Probabilidades y estadísticas son muy útiles si alguna vez tienes que hacer algo parecido al aprendizaje automático.

Cubro lo básico en mi "Calculando tu habilidad"publicación de blog donde analizo cómo funciona el algoritmo de clasificación y emparejamiento TrueSkill de Xbox Live.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top