Soy un programador de la aplicación de enfoque en la Línea De Negocio (LOB) de las aplicaciones. Yo soy de los no-matemáticas y no CS de fondo. Qué es la matemática debo aprender que me ayude a mejorar mi programación y habilidades para resolver problemas.
Respuestas
¿Demasiados anuncios?Realmente depende de lo que usted está de programación! Algunas áreas de las matemáticas que han sido muy útiles para mí como un programador (pero puede o no puede ser útil para usted) han sido:
- Complejidad computacional (para el diseño y evaluación de algoritmos)
- Combinatoria (se vincula estrechamente con el de arriba - puede ser utilizado para razonar sobre el rendimiento teórico de los límites de un algoritmo)
- La lógica (razonamiento sobre el programa de comportamiento puede ayudar enormemente a la depuración)
- Programación dinámica (para resolver muchos de los problemas que puede dividirse en más fácil de resolver subproblemas)
- Álgebra lineal (para la escritura de un código numérico, por ejemplo, los gráficos, las finanzas, las simulaciones de física)
- Análisis numérico (para la escritura de la PDE solvers)
- Probabilidad (para la escritura de monte carlo rutinas)
- Estadísticas (para la evaluación comparativa de los algoritmos de dibujo de una inferencia a partir de grandes conjuntos de datos, etc)
- La teoría de la información (para la escritura de código que puede asimilar la nueva información en su actual estado del mundo constantemente)
- Aprendizaje de máquina (relacionados con los dos anteriores - se utiliza para escribir el código que puede aprender óptimo de los comportamientos de datos)
Muchos de estos caen en la categoría de matemáticas discretas. El campo está bien resumido en el libro Concreto de las Matemáticas por Graham, Knuth y Patashnik.
En general, debe ser duro-empuja a buscar un área de las matemáticas que no es útil a algún aspecto de la programación. Sin embargo, exactamente lo útil dependerá principalmente de qué es lo que estás tratando de hacer.
Edit: me gustaría añadir (y esta parte es pura opinión) que cualquier desarrollador que dice que usted no necesita saber mucho de matemáticas para ser un desarrollador no es probablemente muy buena. Lo mismo se aplica a cualquier programador que dice que usted sólo necesita saber un idioma, o un paradigma de programación. La programación es un proceso dinámico y muy de campo en rápida evolución. Si no estás constantemente aprendiendo cosas nuevas, a continuación, usted encontrará que es muy difícil avanzar en su carrera.
Muchos de los mejores programadores del mundo se ha visto eran/son también excelentes matemáticos (Thompson, Ritchie, McCarthy, Knuth, Dijkstra, etc). Creo que sería difícil señalar un gran programador que no sabe mucho de matemáticas.
Edit: Basado en los últimos seis meses a un año, que ahora tendría que agregar la Categoría de la Teoría a la lista. Tener una apreciación de lo que significa, matemáticamente, a ser un functor, monoid, la mónada o comonad ha sido útil en lo que me permite captar rápidamente los patrones comunes y estructuras cuando el aprendizaje de la Haskell lenguaje de programación.
En mi programación de la carrera, he usado un montón de matemáticas. La teoría de los números, en su mayoría, pero también curvas elípticas, probabilidad Bayesiana, cuadrados latinos,...
Pida a otro programador, y se podría decir que "el análisis Numérico, en su mayoría, pero también complejidad algorítmica, teoría de colas, teoría de grafos,...".
En cierta medida, se acabará el aprendizaje de las matemáticas que usted necesita para resolver sus problemas de programación. Por otro lado, si ya sabes algo de matemáticas, se tienden a gravitar hacia las áreas de programación que requieren de su experiencia particular.
No muy útil, tengo miedo, pero tu pregunta no es fácil de responder.
Es un tema bastante amplio pregunta abierta. No estoy seguro de que admite un claro "respuesta", ya que depende en gran medida de qué tipo de programación que estás haciendo.
Con toda probabilidad, aprender al menos algo acerca de la aritmética binaria es, probablemente, va a ser útil - aunque sólo sea para saber por qué su programa es escupir números negativos cuando todas las entradas son positivos. Si usted está haciendo cualquier base de datos de trabajo, luego de una mínima comprensión de la teoría de conjuntos es probablemente útil. Puede o no puede ser útil para entender la complejidad algorítmica.
Más allá de eso, es realmente, realmente va a depender de lo que usted está tratando de programa. Si solo tienes que escribir un programa para leer un archivo CSV y escupir algo de SQL, usted no necesita saber mucho de matemáticas. Si usted está construyendo un trazador de rayos... vas a necesitar una diablos de un montón de álgebra lineal!
Creo que voy a tirar mi sombrero en este así. Ciencia de la computación es en grande, una subsección de Discretos de la Ciencia Matemática.
Básicamente, usted debe aprender Matemáticas Discretas con el fin de aumentar su software de desarrollo de capacidad.
En la matemática discreta temas, muchos de los sujetos colapso en conceptos básicos que pueden ser aplicados a través de los sujetos. Cada campo específico, simplemente se requiere tomar estos conceptos básicos y la aplicación de ellos en una manera específica. Esto significa, que mientras yo no lo podría utilizar la teoría de grafos en todos los días en mi trabajo del día, el hecho de que he estudiado la teoría de grafos, la inteligencia artificial, la complejidad computacional, etc, etc, ha desarrollado estos principios básicos Matemáticos Discretos conceptos de tal manera que pueda aplicar a otros problemas.
En mi experiencia, cada campo de la matemática discreta es básicamente la aplicación de los conceptos que has aprendido en el pasado en nuevas formas para resolver cierto tipo de problemas. Porque he aprendido cómo aplicar estos conceptos en dirección X e y, cuando me encuentro con una Z tipo de problema que yo al menos sé por dónde empezar.
Esto significa que mientras que usted no puede utilizar muchos matemáticos campos directamente en el día a día de las operaciones, estos conceptos básicos son útiles y ayudan a corregir la resolución de problemas y decisiones de diseño, así como de depuración.
He sido un desarrollador profesional de más de 15 años y el nivel más alto de matemáticas que he utilizado para cualquier proyecto profesional es básica, trigonometría, álgebra y estadística. Como otros han dicho, aunque, lo que las matemáticas que necesita depende altamente de la actividad para la que trabajan. Yo principalmente a desarrollar aplicaciones para las empresas, incluidas centrado en los datos, aplicaciones, aplicaciones web y backend de las infraestructuras de servicios (lo que se llamaría de aplicaciones LOB). Mi capacidad para pensar de manera abstracta acerca de problemas complejos, sin embargo, ha sido mucho mayor por mi experiencia matemática. Si usted no tiene un campo específico en min que requiere de un sabor particular de las matemáticas, su mejor apuesta aunque probablemente sería desarrollar una base sólida en los algoritmos y estructuras de datos. Independientemente de qué tipo de programación que va a hacer, este tipo de conocimiento siempre será beneficioso. Una buena práctica introducción a este tema se proporciona en los Algoritmos en una cáscara de Nuez.
Para ser más específicos, aquí hay un par de ejemplos concretos de problemas que he encontrado como una empresa desarrolladora de aplicaciones que realmente se requiere un poco de matemáticas para resolver:
Visualización de un informe donde las células en una columna en particular son la sombra de la luz a la oscuridad basado en el valor en la celda. Lo resuelto por la creación de dos listas y interpolando linealmente entre ellos. Una lista que contenía los puntos de datos y la lista de otros contenidos de la gama de colores. Esto requiere de nada, pero la simple álgebra.
Implementar fórmulas de amortización para los diferentes tipos de préstamos (el globo, de tasa ajustable, tasa fija, etc). Esto requiere el uso de la exponencial y el logaritmo de las funciones que supongo que técnicamente se podría argumentar utiliza el cálculo, pero el nivel de matemáticas que se requiere nada de lo que estaba más allá de las básicas de álgebra universitaria - que trata exponenciales/logaritmos.
Por otro lado, hay muchos más casos en los que he tenido que desarrollar más complicados algoritmos de ordenación o sintonizar un lento algoritmo para la eficiencia. Conocimientos básicos de algoritmos y estructuras de datos ha sido muy útil en este sentido.
También puedo decir que no hay una sola potencial empleador durante una entrevista me ha pedido nunca un matemático orientado a la pregunta. Más bien, ellos están preocupados con qué herramientas, lenguajes, plataformas sé, ¿qué patrones arquitectónicos estoy familiarizado con, ¿cómo puedo administrar el software de la complejidad (no "complejidad computacional"), etc. Yo estaría encantado si me preguntaran algo acerca de las matemáticas, pero, por desgracia, nunca ha sucedido.