Acabo de comenzar un diploma en desarrollo de software. En este momento estamos comenzando con Java básico y tal (así que desde el fondo se podría decir), lo cual está bien, no tengo experiencia en programación aparte de saber cómo hacer "Hello World" en Java.
Sigo escuchando que las matemáticas son pertinentes para la codificación, pero ¿cómo es eso? ¿Qué ejemplos generales mostrarían cómo las matemáticas y la programación van juntas, o dependen unas de otras?
Pido disculpas por mi pregunta es vaga, apenas estoy empezando a tener una idea aproximada del tipo de mundo en el que estoy entrando como estudiante de código mono ...
Respuestas:
En primer lugar: soy matemático, profesional (en eso me pagan por hacer matemáticas). Estoy no un programador. Realizo algo de programación, pero definitivamente de la variedad Cargo Cult (vea el primer comentario en https://tex.stackexchange.com/q/451/86 y mi respuesta) y nada del tipo que normalmente me llevaría a esto sitio (de hecho, me registré aquí para publicar esta respuesta después de ver un enlace en la sala de chat de TeX).
El resumen de mi respuesta es: Matemáticas es programación .
Recientemente tuve que enseñar un curso de matemáticas a un grupo de estudiantes no matemáticos. Eran la sección de programación. ¡Pensé que esto era fantástico! Por fin, iba a poder enseñar matemáticas a personas que ya entendían las ideas básicas y que ya tenían un kit de herramientas rudimentario para hacer matemáticas. Estaba increíblemente decepcionado cuando pregunté cuántos de ellos habían escrito realmente un programa y obtuve una respuesta entre 0 y 1.
Antes de continuar, debo aclarar algunas cosas. Hay áreas de las matemáticas que se ocupan directamente de la programación y tienen que ver con la evaluación de algoritmos y la clasificación de lenguajes y similares. No estoy hablando de eso. También hay un programa que está tratando de traducir todas las matemáticas a un lenguaje formal que pueda ser evaluado por una computadora. Esto está un poco más cerca de lo que estoy hablando, pero aun así centrarme en eso extrañaría la parte principal de lo que estoy tratando de decir. Las matemáticas que hago y la programación que hago no tienen relación alguna por tema. La conexión entre ellos está en un nivel diferente.
Donde me gustaría comenzar es con el comentario sobre la pregunta principal:
Sí, eso es hacer matemáticas. Pero "matemáticas" sigue siendo una palabra útil porque, como dice la canción, "No es lo que haces, es la forma en que lo haces". Diría que estoy haciendo matemáticas cuando me estoy acercando a algo de manera matemática . A veces, eso es matemática "núcleo duro": formular definiciones, probar teoremas. A veces no lo es. A veces, está escribiendo pequeños programas tontos para que mis hijos puedan aprender sus palabras de ortografía.
Esto es en lo que me ayudan las matemáticas cuando programo:
Abstracción Esta es probablemente la habilidad transferible más importante de las matemáticas. Con esto, me refiero a la capacidad de eliminar todas las cosas innecesarias y centrarse en las propiedades importantes.
Perspectiva Si solo pudiera elegir una cosa que todos mis alumnos aprenderían, sería: la capacidad de cambiar los puntos de vista para adaptarlos al problema. Comúnmente tratamos esto en álgebra lineal con fórmulas de cambio de base (que conducen a matrices horrendas y complicaciones horrendas), pero es mucho más aplicable que eso. En el fondo, es la idea de que solo porque algo se te haya presentado de una manera, esa no tiene que ser la forma en que trabajas con él. Esto separa las vistas de la cosa misma de la forma en que ha sido presentada. Esto puede ser extremadamente práctico: se trata de hacer algo útil o eficiente. Si tengo una lista de vectores y es más eficiente almacenarlos como una lista de coordenadas xy una lista de coordenadas y, que así sea .
Forma frente a función Liderando desde lo anterior; Si una cosa se puede presentar de muchas maneras diferentes, ya no es justo decir que una presentación en particular es la cosa. Para citar esa canción nuevamente: "No es lo que eres , es lo que haces " lo que importa.
Podría seguir, pero esos son los que me vienen a la mente.
Ahora, probablemente hay muchas reacciones (negativas) a lo que he escrito hasta ahora. Una de ellas será "Eso no es matemática, es solo sentido común". (o mal sentido) a lo que me refiero a mi comentario anterior de acuerdo con el sentimiento de que "toda actividad humana es una forma de matemáticas". Otro será "Ese no es el tipo de matemáticas que se entiende en la pregunta". Esto es casi cierto y aquí realmente simpatizo mucho más con la persona que dijo "Al menos no he tocado las matemáticas en 10 años". Él o ella está equivocado, por supuesto, han estado haciendo matemáticas durante 10 años porque cada vez que escribieron un programa estaban haciendo matemáticas . Simplemente no se dieron cuenta.
De hecho, uso algunas "matemáticas reales" en mis programas. Recientemente codifiqué un divertido explorador de formas 3D que implicaba usar algunas matemáticas para calcular las proyecciones y otras transformaciones que tenía que aplicar a mis datos. ¡Me divirtió un poco encontrarme realmente codificando cuaterniones! Pero, por supuesto, las matemáticas involucradas fueron triviales en comparación con las matemáticas que hago cuando estoy trabajando. Eran cosas del "fondo del sobre". Ese tipo de matemáticas, entonces estoy de acuerdo con el sentimiento de que lo recoges cuando lo necesitas, y si necesitas algo más complicado de lo que puedes encontrar en Wikipedia, entonces encuentras un verdadero matemático para que lo haga por ti. Sin embargo, para poder recogerlo cuando lo necesite, debe haber aprendido algo. Es posible que esa cosa no sea algo que realmente use, pero al haber aprendido que algo hace que sea más fácil recoger lo que realmente usa más adelante en la vida. Así que aquí es donde no estoy de acuerdo con Coder: es necesario aprender algunas matemáticas si alguna vez vas a usar alguna matemática y necesitas aprenderla desde el lado matemático (lo que no significa probar teoremas, por cierto).
Y así, finalmente, a "Matemáticas es programación". Puedes aprender todas estas cosas siendo un buen programador. Y si ha aprendido estas cosas, encontrará las matemáticas mucho más fáciles porque comprenderá que cuando hablamos de un vector en un espacio vectorial, entonces es solo una instancia de la clase, lo
Vector
que significa que podemos hacer todo lo queVector
hace para esa instancia: sumar, restar, escalar, etc. Por eso me encantaría enseñar matemáticas a los programadores. Pero, hablando como matemático, diría que el primerode ellos, "Abstracción", es más fácil de aprender en matemáticas que en programación porque las matemáticas son la búsqueda de la abstracción. Cada vez que vemos algún comportamiento, nuestro entrenamiento siempre es preguntar "¿Qué tiene esa cosa que hace que se comporte de esa manera? ¿Qué pasa si tomo otra cosa que es similar, se comportaría de la misma manera? ¿tendría que perder para que deje de comportarse así? " (Llevar esto al extremo conduce a "matemáticas ciempiés" - busque el término). Pero no hacemos esto con (solo) objetos del "mundo real" (sean lo que sean), hacemos esto con cosas que ya se han abstraído.Esto ha durado lo suficiente, así que permítanme concluir con uno de los clásicos chistes matemáticos:
Añadido 2012-03-2
Hubo bastantes comentarios sobre esta respuesta que expresaron una variedad de puntos de vista. Estos han sido eliminados por un moderador en el entendimiento de que trataría de incorporarlos (o responderlos) en mi respuesta.
Sin embargo, no estoy seguro de poder hacerlo. Al leer esos comentarios y el resto de lo que está en esta página, solo puedo llegar a la conclusión de que hay un gran malentendido sobre lo que realmente son las matemáticas. Además, no me siento lo suficientemente competente como para explicarlo. Afortunadamente, alguien ya se ha vinculado al Lamento de Lockhart, por lo que aplazaré la explicación. Si bien podría haberlo dicho de manera diferente (a medida que crecía en un entorno científico, habría puesto más énfasis en la naturaleza experimental de las matemáticas), no creo que pueda decirlo mejor .
Todavía creo que puedo agregar algo. Así como los malos entendidos en cuanto a lo que la matemática es , también hay malos entendidos en cuanto a lo que "hacer matemáticas" significa. Veo dos posturas casi contradictorias:
Las matemáticas son sobre ecuaciones y fórmulas. Así que no hay necesidad de estudiarlo porque existe Wikipedia (esto es casi lo contrario del desafío apócrifo de Euler a Diderot ).
Las matemáticas son sobre teoremas y definiciones. Así que no hay necesidad de estudiarlo ya que los programas nunca prueban nada (lo cual es una falacia tan completa como ... inserte aquí la falacia favorita).
Si bien las dos posturas se contradicen entre sí, terminan en el mismo lugar: no tiene sentido que un programador aprenda matemáticas, ¡y seguramente no de un matemático! Después de todo, ¿qué es lo que saben acerca de algo? Cualquier cosa que un programador realmente necesite saber se puede encontrar en Wikipedia o se puede quitar a alguien más.
Arriba, me describí como un programador de culto de carga. Apuesto a que la mayoría de ustedes se rieron en privado y pensaron: "Ah, sí, apuesto a que sé cómo son sus programas en ese momento". Probablemente te sentiste un poco petulante y superior (aunque estoy seguro de que te sentiste mal por sentirte presumido y superior).
Lo que acabo de describir es Cargo Cult Mathematics.
Entonces, cuando digo que deberías aprender un poco de matemáticas para entender cómo funcionan las matemáticas, lo digo exactamente por la misma razón que podrías si vieras un código que escribí: "¿Cuánto más fácil es tu vida? sería si dejaras de cortar y pegar código de StackOverflow y aprendieras un poco sobre cómo hacerlo correctamente ".
Sin embargo, lo más importante es que debes aprenderlo de los matemáticos. ¿Porque? Aquí hay una analogía. El idioma en el que soy más experto es el TeX. (¡Lo dice todo, de verdad!). Ahora, supongamos que quiero aprender un poco más sobre TeX y da la casualidad de que Don Knuth está en la ciudad y se ha ofrecido a dar algunos tutoriales sobre TeX. O podría leer sobre esto en Wikipedia. O tal vez es Perl y Larry Wall, o C # (¿es el correcto?) Y Jon Skeet. Bien puede ser que estas personas no sean los mejores maestros , ¡pero lo compensan en la cantidad que conocen!
Y eso es lo que son los matemáticos . Somos las personas que escriben el idioma real, que luego escriben las bibliotecas que usted usa. Por supuesto, no tienes que saber probar un teorema, ¡no vas a escribir una biblioteca! Pero si sabe un poco acerca de cómo pensamos, entonces podría ayudarlo a comprender por qué escribimos la biblioteca de la manera en que lo hicimos, y si comprende que podría ayudarlo a utilizarla mejor.
Hay un punto medio entre buscar ecuaciones en Wikipedia y probar la conjetura de Poincaré, así como, para referirnos al lamento de Lockhart, hay un punto medio entre "Realmente no sé mucho sobre arte, pero sé lo que me gusta" y ser Monet, y entre "¿Dónde está la tecla 'CUALQUIERA'?" y ser Don Knuth. Si todavía estás en la universidad, tienes una oportunidad increíble de aprender de personas que son expertas en su área y que, por alguna razón, están dispuestas a dedicar su tiempo a explicártelo.
El otro punto que quería ampliar un poco era por qué, como programador, no debería tener miedo de aprender un poco más de matemáticas. No son las conexiones profundas, ni la utilidad. Es que su capacidad para programar una computadora puede ayudarlo directamente a aprender matemáticas. Solo quiero mencionar algunos.
Comprender las variables. Muchas personas se confunden con declaraciones simples como "Sea n un número natural ...". O "Deje epsilon> 0". Hay lugares en matemáticas donde es importante recordar el alcance de una variable. Todos estos son comunes en la programación. Aprenda a traducir una declaración matemática en un programa y le resultará mucho más fácil hacer un seguimiento de qué es qué.
La naturaleza de la prueba. Si alguna vez ha escrito una prueba, o ha escrito un programa para ser utilizado por otra persona, entonces comprende el núcleo de las pruebas. Cuando haga eso, debe saber que, independientemente de lo que el usuario ingrese, puede manejarlo (inserte la referencia obligatoria de xkcd aquí). Eso es todo una prueba es! Una demostración de que lo que sea que el "usuario / universo" ponga, la declaración se mantendrá. Los experimentadores se inclinarán por "Si funciona en circunstancias normales, es cierto", pero los programadores saben que siempre hay ese niño que intentará Alt + G + Shift + ÅØÆ solo para ver qué sucede.
SECO. Lamento decírtelo, pero nosotros lo inventamos, no a usted. Hemos estado "sin repetirnos" durante milenios. Es por eso que tengo una copia de los elementos de Euclides en mis estantes y todavía es útil .
Y hay más. Si supiera un poco más sobre programación, escribiría un libro llamado "Matemáticas para programadores", donde el objetivo no era enseñar "Las matemáticas que los programadores deberían saber" sino "las matemáticas que todos deberían saber, pero optimizadas para los programadores". . Pero probablemente nunca sabré lo suficiente sobre programación para escribirlo, ¡a menos que alguien se ofrezca a colaborar conmigo!
Lo dejaré ahí. Probablemente si pensara más, cambiaría lo que he escrito; espero que lo explique mejor. Dentro de unos meses, incluso podría estar en desacuerdo con algunas partes. Si alguien desea discutir más, o comentar lo contrario, probablemente sea mejor no hacerlo en los comentarios aquí. Sabes donde encontrarme .
fuente
No son que estrechamente relacionados. Para la programación, es importante saber acerca de las matemáticas, especialmente aquellas ramas relacionadas, por ejemplo, con el rendimiento del algoritmo, pero el hecho simple es que no hay una rama de las matemáticas que te diga que los Singleton son una idea horriblemente mala, por ejemplo, o cuándo favorecer la herencia sobre la composición, o si realmente va a necesitar esa flexibilidad y no repetirlo, y docenas de otras necesidades básicas de programación.
Las matemáticas pueden expresar lo que hace su programa, pero ciertamente no puede decirle la manera más factible, legible y humana de hacerlo.
fuente
Las matemáticas y la programación están relacionadas de dos maneras.
Una es que las matemáticas se pueden usar para razonar sobre programas de computadora. Puede ayudar a responder preguntas como "¿Cómo cambiará el tiempo de ejecución de mi programa a medida que cambien los datos de entrada?", "¿Se garantiza que mi programa encontrará una respuesta a mi problema?", "¿Es mi programa tan eficiente como podría ser? "," ¿Cómo debo reorganizar mi programa para hacerlo más rápido o usar menos memoria? ". Por lo general, cubre temas como estos en cursos de división superior sobre teoría de la computación, diseño de algoritmos y diseño de lenguaje de computadora.
La segunda forma en que las matemáticas y el programa están relacionados es que la programación se usa para resolver problemas matemáticos. Esto es importante porque muchos problemas de la "vida ordinaria" en realidad pueden ser reformulados como problemas matemáticos y luego resueltos (tal vez aproximadamente) en una computadora. Este tipo de temas aparecerán hasta cierto punto en casi todos sus cursos, pero particularmente en cursos sobre matemática discreta y modelado matemático.
fuente
Dos ejemplos específicos donde una educación matemática es importante para la informática son:
1) Bases de datos relacionales donde se usa el cálculo relacional .
La siguiente área es la inteligencia artificial (IA) y el aprendizaje automático .
Para ver un ejemplo de cómo se usan, eche un vistazo a la clase CS 373 de udacity : PROGRAMACIÓN DE UN COCHE ROBÓTICO .
Descripción: esta clase, impartida por uno de los principales expertos en inteligencia artificial, le enseñará métodos básicos en inteligencia artificial, que incluyen: inferencia probabilística, visión por computadora, aprendizaje automático y planificación, todo con un enfoque en robótica. Extensos ejemplos de programación y tareas aplicarán estos métodos en el contexto de la construcción de automóviles sin conductor. Tendrá la oportunidad de visitar, a través de video, los principales laboratorios de investigación en el campo, y conocer a los científicos e ingenieros que están construyendo autos autónomos en Stanford y Google.
Requisitos previos: el instructor asumirá un sólido conocimiento de la programación, toda la programación estará en Python. El conocimiento de la probabilidad y el álgebra lineal será útil.
fuente
Para el desarrollo de aplicaciones científicas, programación de juegos, sistemas en tiempo real, sistemas de simulación, y tales aplicaciones, se requiere de hecho matemáticas. Después de todo, la programación usa matemáticas y ciencias para resolver problemas. Por otro lado, para programar una aplicación que capture información de los usuarios para registrarlos en su base de datos, no se requiere ningún nivel matemático alto. Sin embargo, todos los programadores se beneficiarían de la teoría básica de números, álgebra, teoría básica de conjuntos y análisis numérico elemental.
Desde el lado del practicante de matemáticas, diferentes temas en matemáticas (así como muchas otras ramas de la ciencia) podrían beneficiarse significativamente de la programación.
fuente
Creo que más que nada, es la similitud del proceso de pensamiento utilizado lo que hace que los dos parezcan tan similares.
Por ejemplo, ambos son extremadamente lógicos. Si sigue el mismo conjunto de pasos o la misma fórmula, siempre obtendrá el mismo resultado. Por ejemplo,
1+1
siempre será igual a2
, y lasset a = 1
mediasa
siempre serán 1 (hasta que lo establezca en otra cosa)Otro ejemplo es la necesidad de pensar espacialmente. En matemáticas, descubrí que a menudo tenía que mantener los números en mi cabeza y visualizar lo que estaba haciendo. Como un ejemplo muy simple, desglosaría los problemas matemáticos para que algo así se
13x13
convierta13x10 + 13x3
, lo cual es mucho más fácil para mi cerebro trabajar, y necesito hacer un seguimiento de eso13x10=130 + 13x3=39
, entonces130+39 = 169
. Esta misma capacidad de visualizar algo no visible, o dividir un problema en problemas más pequeños, a menudo se aplica a la programación.Por lo tanto, creo que aunque no es necesario tener una base matemática para programar, donde las matemáticas se definen como realizar cálculos con números, sí debe tener un proceso de pensamiento y comprensión similar al que usaría al resolver problemas matemáticos.
fuente
Supongo que, hasta la fecha, te han enseñado elementos de cálculo y algo de trigonometría . Y se llama a que las matemáticas. Eso es como llamar a un par de piernas "un ser humano".
El cálculo tiene poco que ver con la programación, y está más estrechamente relacionado con la física y la ingeniería. Necesitará física para los motores de juego y cálculo para el análisis estadístico . (El análisis estadístico genera más trabajos que es cómodo admitir)
El cálculo, para nosotros, se trata más de relacionar la programación con el mundo real. El cálculo computacional es la rama que estudia qué tan mala está yendo esa relación hasta ahora. (spoiler: está yendo bastante mal, pero podemos mantenerlo bajo control indefinidamente )
La trigonometría es un jack loco en la caja que sale cuando menos lo esperas y luego el análisis de señales , la generación de audio y muchas otras cosas dependen de ello.
Repase Algebra 101 y Logic 101 , estudie la historia de Pascal, Leibniz (sí, él casi inventó el cálculo, lo entendió a medias, discutió con Newton hasta que todo comenzó a tener sentido, y aún concibió la codificación binaria) y Babbage y Muchas de sus dudas disminuirán. (Sin embargo, su definición de Matemáticas cambiará para siempre)
fuente
La programación cruza muchas disciplinas académicas tradicionales.
Las matemáticas, especialmente las matemáticas aplicadas , son importantes para la programación porque mucho de lo que le pedimos a las computadoras que hagan son números crujientes. Comprender los métodos numéricos y cómo aplicar la computación de manera eficiente y adecuada es una de las cosas que muchos programadores hacen a diario.
fuente
Aquí le contaré cosas prácticas donde me he encontrado con las Matemáticas al resolver algunos problemas de computación (particularmente en el dominio de Internet):
fuente
Un problema con su pregunta es que "matemáticas" y "programación" son temas muy amplios y profundos sobre los cuales hay más que saber de lo que cualquiera podría dominar en la vida (sin exageración). Yo personalmente tengo una maestría en matemáticas. Durante mi tiempo en la universidad, parecía que cuanto más aprendía, menos sabía en comparación con mis compañeros; se sentía si me volvía menos inteligente con los años. Cuando presenté mi tesis de maestría a un grupo de profesores, incluso la mayoría de ellos parecía no estar familiarizado con lo que estudié.
Del mismo modo, ahora soy un desarrollador de aplicaciones web basado en bases de datos. Si me compara con alguien que hace programación de lenguaje ensamblador integrado, podría pensar en nosotros como dos profesionales muy talentosos, pero tendríamos una experiencia muy diferente a pesar de que ambos somos "programadores".
A medida que avance en su estudio de las matemáticas superiores (más allá del cálculo de primer año), encontrará que las matemáticas inculcan una disciplina para el razonamiento abstracto que le servirá bien cuando programe. Creo que esta disciplina es muy importante porque lidiarás con preocupaciones abstractas a medida que programes.
Claro, en la programación de primer año, probablemente aprenderá sobre aritmética de punteros. Escribirás programas cortos para ilustrar este concepto y tu comprensión de cómo hace que tu computadora obedezca tu voluntad. Sin embargo, aprender cómo funciona la aritmética de punteros en abstracto no lo hará bueno para usar punteros en un programa real. Cuando llegue el momento de asumir un desorden de 10K líneas de código y hacer algunos cambios en la aritmética del puntero, deberá poder razonar a un nivel muy abstracto, tomar decisiones estratégicas para equilibrar las diferentes preocupaciones sobre cómo afectarán sus cambios el código.
Como programador, debe equilibrar la "legibilidad" de su código, el rendimiento de su código, la facilidad de uso de los programas resultantes, entre muchas otras preocupaciones. Debe poder hacer comparaciones muy abstractas para equilibrar estas preocupaciones entre sí. Hará muchas de estas comparaciones todos los días. Ni siquiera he comenzado con la gestión del tiempo. Abstractamente razonará sobre la probabilidad de que algo que haga afecte su capacidad para realizar sus tareas a tiempo, y una vez más, tomará muchas decisiones cada día que afectarán su trabajo.
Finalmente, debe mantener su disciplina filosófica para poder asimilar nuevas ideas y conceptos para poder continuar a medida que las viejas metodologías y prácticas caen en desuso. Una vez más, tendrá que poder evaluar las ideas que surgen y hacer una comparación abstracta de lo que ya sabe.
En resumen, la programación, como la mayoría de nosotros lo sabemos, no tiene mucho que ver con las matemáticas, como la mayoría de nosotros lo sabemos; pero cuando lo miras en un nivel abstracto, tienen mucho en común.
fuente
Matemáticas describe (digamos) una ecuación cúbica.
Un algoritmo describe cómo resolver esa ecuación cúbica.
Construir ese (o cualquier) algoritmo de manera que pueda ser ejecutado por una máquina es la programación .
La informática es el análisis del algoritmo: su eficiencia teórica de tiempo / espacio, límites de error, etc. Esto podría considerarse una rama de las matemáticas. Sin embargo, tenga en cuenta que la informática y la programación no son realmente lo mismo. Es importante tener una base en informática si quieres ser un buen programador, porque te ayuda a diseñar y razonar mejor sobre los algoritmos que desarrollas. Pero no es un requisito.
Un buen programador puede no ser (de hecho, a menudo no lo es) un buen matemático, y viceversa. Son habilidades identificables separadas.
fuente
He visto muchas preguntas sobre estos tipos de foros a través de los años en los que el verdadero problema radica en la escasa comprensión matemática del cartel. Por ejemplo, cualquiera que tenga una buena base en álgebra comprende que no se puede dividir por cero. Pero he visto muchas preguntas en las que el póster no entendió eso y, posteriormente, no entendió el mensaje de error que decía básicamente "no se puede dividir por cero". He visto muchas preguntas en las que estaba claro que el póster no entendía la lógica básica. He visto demasiadas preguntas donde los conceptos de álgebra booleana claramente no se entendieron.
El hecho de que no esté escribiendo pruebas matemáticas o resolviendo ecuaciones directamente como en el libro de texto de matemáticas no significa que no necesite comprender los conceptos detrás de ellas. Por cierto, en muchos años de experiencia laboral, nunca me he encontrado con un mal programador que tuviera una sólida comprensión de las matemáticas.
En algunos campos, utiliza muchas matemáticas directamente, como programación de juegos, programación estadística, programación financiera, algunos sistemas integrados. En algunos de estos casos, se le dan las ecuaciones que necesita en los requisitos y, a veces, no. Sin embargo, incluso cuando se le da la ecuación, traducir esas ecuaciones correctamente en código de programación requiere que comprenda la ecuación para empezar.
Si bien puede pasar con poco más que álgebra básica en su aplicación CRUD básica, la mayoría de los problemas más interesantes y el trabajo más avanzado implica la comprensión matemática. Entonces, ¿por qué querrías limitarte desde el principio al no aprender matemáticas en profundidad?
fuente
Dos ejemplos que vienen a la mente de inmediato son:
funciones : la idea de aplicar una transformación a las variables de entrada para producir una variable de salida está fuertemente arraigada en las matemáticas. La noción de pasar una función como parámetro a otra función aún más. En general, la noción de pensamiento abstracto asociada con la programación es muy parecida a las matemáticas.
BitMasks : este enfoque de programación común para resolver problemas requiere al menos una comprensión básica del álgebra booleana para comprender el concepto.
fuente
Desde la perspectiva de los programadores: las matemáticas son un subconjunto de la programación.
Matemáticas aplicadas en programación:
Cuando se trabaja con colecciones (matrices, listas, mapas, etc.) en programación, se trata de implementaciones del mundo real de abstracciones matemáticas.
Programación sin matemáticas:
Si lo hace
println("Hello World")
, entonces el hecho de que se usen algunas matemáticas para calcular la posición en la pantalla, la longitud de la cadena, etc., es realmente irrelevante.Usando la programación para las matemáticas:
La implementación de las matemáticas y la física en un lenguaje de programación hace posible cosas como el diseño asistido por computadora.
fuente
La programación generalmente se basa en un modelo que generalmente es un modelo matemático.
Tomemos un ejemplo de crear una calculadora de hipotecas. Para esto, necesita saber qué interés tiene, qué es un interés compuesto, etc. Si no comprende las matemáticas subyacentes, otra persona debe proporcionarle esa información. Por lo general, el trabajo del programador es hacer todo. Sin embargo, siempre puedes buscar ayuda si es necesario.
Hay un concepto simple en matemáticas que se usa ampliamente en la programación. Por ejemplo, expresiones, ecuaciones, variables, se usan profundamente en la programación. Si no lo obtienes en matemáticas, es posible que no seas el mejor programador.
Teniendo una matemática sólida, te da más cosas para modelar tu trabajo. Eso finalmente te hace un mejor programador. Por ejemplo, es posible que desee dibujar una ecuación cuadrática en uno de sus proyectos, de esta manera aprende más cosas solo porque es fuerte en matemáticas. O usted escribe un programa para encontrar el área de un círculo, le brinda más experiencia.
En mi corta carrera docente, descubrí que si los estudiantes no tenían experiencia en matemáticas, casi se pierden cuando tienen un problema financiero. Si se pierden con el modelo, aprender el idioma en sí mismo se vuelve más difícil y, sinceramente, muy frustrante.
fuente
La base teórica de la informática (que es más que solo programación) es de naturaleza matemática. Todo, desde la definición misma de computabilidad hasta el análisis y la expresión de algoritmos hasta las especificaciones de los lenguajes de programación, se basan en una amplia variedad de matemáticas. Vea esta página de Wikipedia para conocer el tipo de matemática involucrada.
La mayor parte de lo cual no es realmente necesario saber si todo lo que quiere hacer es código de honda. En lo que respecta a las matemáticas aplicadas, a menos que ingrese a un campo que requiera habilidades serias de cálculo de números (simulaciones físicas detalladas, análisis de señales, análisis y predicción financiera, etc.) probablemente no vaya a usar nada más que álgebra básica en el día a día.
fuente
Honestamente depende de qué tipo de programación estés haciendo.
Si está creando aplicaciones web ligeras con algo de lógica, probablemente no necesite las clases de matemáticas más avanzadas que requieren muchos grados. Si está trabajando con cosas que requieren un poco más de procesador, necesitará más matemáticas. Si está trabajando con cualquier tipo de campo científico, realmente querrá tener a mano sus referencias de cálculo.
Otro lugar donde necesitarás matemáticas es si quieres escribir juegos. En el segundo que quieras moverte en diagonal, deberás comenzar a hacer algunos cálculos cuidadosos para que no termines con personajes que aceleren si te mueves a un bloque hacia el NE.
Dicho esto, no necesariamente necesitas aprender matemáticas, luego aprender programación. Es perfectamente válido aprender programación, luego aprender algunas matemáticas avanzadas. Comencé a codificar antes de poner un pie dentro de una clase Calc o Trig y lo hice bien. Cuando comencé a aprender matemáticas avanzadas, descubrí que la codificación realmente me ayudó, ya que podía explorar el tema más cambiando las variables en un guión rápido que con lápiz y papel.
fuente
¡De ninguna manera soy un experto en matemáticas! Me fue bien en HS Geometry, lo cual fue lógico para mí. Me parece que la programación y la geometría son muy similares. La lógica booleana se vincula muy bien en mi mente a las pruebas geométricas.
Luego hay pequeñas cosas como saber que puede controlar cuántas columnas hay en una fila usando el operador de módulo.
Estoy a favor de la idea de ser un buen programador que tenga un amigo (o colega / consultor) que sea un buen matemático.
Obviamente, si tienes la suerte de tener ambos conjuntos de habilidades, ¡corre con él!
fuente
Respuesta simple; Las matemáticas te hacen rápido . Claro, puedes buscar en google / se / wikipedia tus problemas de codificación, pero haz suficientes cálculos y no tendrás que hacerlo . Lo creas o no, el cerebro humano debidamente entrenado es más rápido que google . Además, mientras más matemáticas conozca, más rápido podrá comprender los resultados que le ofrece google / se / wiki, y menos necesitará profundizar para comprender lo que la gente le dice. En el proceso de resolver sus problemas de programación, terminará aprendiendo matemáticas de todos modos, pero si se enfoca en las matemáticas, será un proceso mucho más eficiente.
Tu pregunta es como un músico de rock preguntando por qué necesitarían entrenamiento musical formal. ¿Es posible tener éxito sin él? Seguro. ¿Te hace mucho más rudo si vas con eso? Absolutamente.
Respuesta un poco más complicada: cuando los matemáticos y los programadores usan la palabra "solución" (para problemas, es decir, no ecuaciones, es decir, "raíces"), significan casi lo mismo. Aprender a resolver problemas matemáticos te ayuda a aprender a resolver problemas de programación.
Por cierto, y sin ofender a nadie, cualquiera que diga que es un buen programador pero que odia las matemáticas es un gran mentiroso. Lo que sucedió fue que un mal profesor o un profesor universitario los rechazó de las matemáticas formales y desde entonces sienten que "no son buenos para las matemáticas". Cualquier persona sin una discapacidad de aprendizaje (es decir, cualquier persona capaz de aprender un idioma OO) es capaz de todo, incluso el cálculo de Sophomore.
fuente
Las acciones de hacer matemáticas y el 99% de la programación tienen muy poco en común. No se requiere que las matemáticas sean un gran programador. He tomado varios cursos de nivel universitario en matemáticas, incluidos, entre otros, elementos de cálculo de álgebra lineal, y otros.
He sido ingeniero de software durante más de 10 años y rara vez necesito usar algo más que matemáticas básicas. Hay algunas excepciones donde se necesitan las matemáticas: como gráficos y otras áreas. Pero el 99% de la ingeniería de programación y software no requiere matemáticas. Requiere pensamiento lógico, algoritmos, OOP, funciones, problemas de descomposición, etc.
fuente
1) A medida que aprenda la programación, se encontrará con jerga técnica (es decir, algoritmo). Para analizar el algoritmo, uno debe tener una idea sobre la naturaleza de las funciones polinómicas, logarítmicas y exponenciales.
2) Basado en una aplicación informática, uno tiene que tener una idea sobre matemáticas discretas y matemáticas continuas para escribir una solución significativa. Uno puede entender más sobre esto al pasar por cursos como-
---> Matemáticas para la informática
---> Codificación de la matriz: álgebra lineal a través de aplicaciones informáticas .
Para un principiante, siento que los lenguajes mecanografiados dinámicos como
python
/scheme
son los primeros mejores lenguajes para programación. Para empezar, los idiomas tipados estáticos comoJava
/C++
no son los mejores. Opencourseware publicado por "MIT / UOC-Berkeley / Stanford" puede guiarlo mejor que un plan de estudios universitario regular. ¡¡¡Te apuesto!!!fuente
Yo personalmente diría que depende del nivel de programación involucrado. Los modelos de datos y las correlaciones entre ellos, los algoritmos de programación involucrados. Por ejemplo: para escribir un programa que emite "Hola Mundo", no veo ningún requisito para familiarizar a alguien con Matemáticas Superiores. El nivel de participación matemática dependería del nivel de complejidad del problema que debe resolverse programáticamente.
fuente
Solo mi experiencia, no más:
no soy matemático. No soy un genio, solo un autodidacta.
... y después de muchos años, me doy cuenta de que trabajo con intuición
Primero aprendí Pick (sistema muerto) desde cero (solo con documentación en papel y muestras),
... después de C, C ++ por diversión y Java por trabajo.
Como dijiste al respecto, puedo decir que aprender este idioma no es un problema matemático (aunque el álgebra básica / minimalista te ayude), sino lógico .
Ahora muchas herramientas (como Eclipse) lo ayudan y corrigen: debe enfocarse en lo que quiere hacer , con solo 52 palabras reservadas ... y muchas bibliotecas que no funcionan para usted.
Entonces, si le gusta el lenguaje, elija un proyecto Java, estudie Diseño de patrones, UML, comprenda JVM y cómo usarlo con Bigloo y Scala, comprenda una y otra vez durante 10 000 horas.
La experiencia en Java le brinda trabajos bien remunerados, y durante mucho tiempo en grandes proyectos industriales, y podrá cambiar a otro entorno porque puede hablar informática , no matemática .
Si entender el lenguaje (palabras, significado, concepto y otras ciencias lógicas ocultas como semántica, ontología, ...) es un buen objetivo para su persona humana, para toda su vida, puede comenzar ahora .
De lo contrario, experimente de otra manera.
Saludos cordiales
Claude
fuente
Alguien casi golpea el clavo en la cabeza de arriba. La programación es matemática. Más específicamente, la programación es una rama de la lógica matemática llamada teoría de la computabilidad o teoría de la recursividad.
Otras ramas de las matemáticas están involucradas directamente, específicamente el lenguaje formal y la teoría de autómatas. Estas ayudan a describir expresiones regulares, utilizadas en la coincidencia de patrones, y gramáticas formales, utilizadas para describir y analizar lenguajes de programación.
Cualquiera que diga que la programación no es matemática o no sabe de qué está hablando, o tiene un motivo oculto, como un maximalista de "Propiedad Intelectual", que espera obtener una patente en un algoritmo o algún otro matemático básico. hecho o descubrimiento.
Algunas referencias para programar como matemáticas y el corolario sin saber de qué estás hablando:
El programa son pruebas: la lógica del siglo XIX y la informática del siglo XXI
Los programas son pruebas: modelos y tipos en cálculo lambda
Wikipedia de Curry-Howard correspondencia artículo
Sobre la efectividad inusual de la lógica en informática
La efectividad irracional de la lógica
Sí, esos son pesados en la parte "lógica" de la lógica matemática, pero las matemáticas generalmente se reconocen como algunos axiomas, y sus consecuencias lógicas se desarrollan a través de la lógica de primer orden.
En cuanto a decir lo contrario y ser un maximalista de "IP" por dinero:
Cómo patentar un algoritmo en los EE . UU . Los algoritmos no son patentables, pero las patentes se otorgan sobre algoritmos al no referirse a ellos como algoritmos. No es difícil encontrar mucho material en la web que señale o intente explicar esa contradicción.
fuente
Las matemáticas tienen que ver con la programación. Por ejemplo, en la programación de juegos necesitas usar matyhs para la física y hacer más y menos todo. Para mover la posición x del jugador en Java, lo haría
int x = x + speed * deltaTime
oint x = x - speed * deltaTime
podría decir que eso es matemática básica, así que pasemos a cosas más avanzadas. Existe un algoritmo para calificar a los jugadores de ajedrez llamado Elo Algorithm.Si todavía piensa que esto es básico, intente esto. ¿Cómo calcula la edad de alguien cuando le dan un día de nacimiento, mes y año? Reste el año de nacimiento de este año y luego verifique si el mes es menor que este mes y si no es restar 1.
No es magia, es trabajo duro y buenas matemáticas.
fuente
Ok, probablemente voy a obtener un montón de votos negativos por esto, pero la programación y las matemáticas son dos cosas completamente ajenas. Alguien puede ser un desarrollador increíble que solo conoce los conceptos básicos como la suma, la multiplicación y las operaciones lógicas básicas.
La mayoría de los desarrolladores no resolverán una sola ecuación durante su carrera profesional, y cosas como la notación O grande también pueden entenderse de manera no matemática. Solo piensa en las cosas, imagina trozos volteados en tu cabeza, y listo, puedes decir qué tipo de O grande es la cosa, si alguien explica qué es el registro y el poder.
A veces las matemáticas pueden hacerlo simple, o pueden hacerte sentir orgulloso de haber probado algo, ya que puedes extender el significado de la programación a un dominio matemático nombrándolo matemática discreta y tal, pero aprendiendo muchas ecuaciones diferenciales e integrales, y cómo probarlo, en mi humilde opinión, no es exactamente la mejor idea de qué hacer si quieres tener éxito como programador.
Al menos no he tocado las matemáticas en 10 años, tuve discusiones con mis profesores de matemáticas todo el tiempo, y cuando necesitaba una matemática para la representación en tiempo real, aprendí todo desde el punto de vista de los programadores, sin probar ningún teorema, y para mí fue simple y fácil de entender en comparación con todas las cosas que los profesores de matemáticas pusieron en nuestras cabezas con un comentario de "no puedes ser un buen programador si no sabes las matemáticas". Claro que puedes, fácil!
Ahora conozco las cosas matemáticas, para poder hablar con los programadores de fondo matemático con todos los diferenciales y cosas del registro, pero solo por la razón para que no se desmayen. Debido a que ese material es inútil el 99.9% del tiempo, y cuando lo es, se puede aprender 1000 veces más efectivamente desde el punto de vista de los programadores.
Diablos, los programadores necesitan al menos 5 años para dominar un lenguaje de programación + marcos + mejores prácticas. ¿Por qué demonios deberían aprender a probar los teoremas? Los estudiantes de matemáticas hacen las cosas de matemáticas, los programadores ejecutan esas cosas, así es como debería funcionar.
fuente