¿Qué tienen que ver las matemáticas con la programación? [cerrado]


89

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 ...


49
La programación es matemática. en.wikipedia.org/wiki/Discrete_mathematics
SK-logic

25
@Dave, por eso le di un enlace en el comentario, no como respuesta.
SK-logic

77
@FiascoLabs, incluso más que eso: la estructura y la lógica del lenguaje también son subdominios de las matemáticas. La programación no es más que matemática aplicada.
SK-logic

19
En una nota no relacionada, comenzar con Java no es "desde abajo".
Matt H

55
@ CharlesE.Grant, muchos estudiantes de matemáticas hacen lo mismo (y aún pasan sus exámenes).
SK-logic

Respuestas:


137

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:

Si eso es hacer matemáticas, entonces toda actividad humana es una forma de matemáticas. Si ese es el caso, entonces la palabra matemática no tiene un significado útil, porque no se puede usar para distinguir una actividad de otra.

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:

  1. 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.

  2. 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 .

  3. 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 Vectorque significa que podemos hacer todo lo que Vectorhace 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:

Un matemático y un físico asistieron a un seminario sobre un nuevo modelo que involucra un espacio de 24 dimensiones. Después, lo estaban discutiendo y el físico comentó: "Eso fue realmente difícil. Quiero decir, ¿cómo se visualiza el espacio de 24 dimensiones?" a lo que el matemático respondió: "Oh, es fácil. Simplemente visualice el espacio n-dimensional y luego configure n = 24.".


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:

  1. 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 ).

  2. 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.

  1. 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é.

  2. 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.

  3. 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 .


19
Esta es una de las mejores respuestas que he leído en SE; Por cierto, hay es un gran libro de "Matemáticas para los programadores"; Se llama Concrete Mathematics y está coescrito por el autor de TeX, Donald Knuth. Acabo de recibir una copia, y es fantástico. Me siento como tu inverso; Me tomé en serio la programación cuando me di cuenta de que la mejor manera (para mí) de comprender los conceptos en la clase de matemáticas era escribir un programa que lo hiciera por mí. Por supuesto, entonces quería usar el programa en lugar de hacer un cálculo manual a mano, y a mis profesores de matemáticas no les gustó.
Jason Lewis

Amigo, +100 por eso.
Barry Brown

2
Registrado solo para votar esto
leo

Exactamente. No puedes programar bien sin el pensamiento analítico que te enseñan las matemáticas.
Fiasco Labs

1
¿Hay un buen libro sobre la programación matemática de OF (mirando la programación matemáticamente)?
qed

27

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.


66
1) No hay nada de malo en los singletons per se, 2) la teoría de la información algorítmica, los lenguajes formales y la semántica denotativa son directamente relevantes para esas cosas simples que le preocupan por alguna razón (no son tan importantes para la programación en general).
SK-logic

19
su experiencia debe ser algo limitada entonces. Los singletons son necesarios e inevitables, siempre que formen parte de un modelo de dominio. Y cómo construir un modelo de dominio es un problema matemático, nada más. Y sí, aquellos que ignoran la teoría de los idiomas formales están produciendo modelos horribles y lenguajes horribles.
SK-logic

10
@dave: el peligro en ese método es que cualquiera puede desviarlo de una posición sensata y bien razonada al establecer una muy diferente, no importa cuán estúpido sea. Tomar promedios no es un sustituto útil para evaluar argumentos.
Michael Borgwardt

44
@ SK-logic: ¿Es posible que ustedes dos simplemente estén hablando de diferentes nociones de qué es exactamente un "Singleton"? Me parece que SK-logic está hablando de la idea abstracta de tener solo una instancia de una determinada entidad en un sistema, que a veces es exactamente lo que se requiere. Desafortunadamente, este concepto abstracto se vinculó estrechamente con los detalles de implementación horriblemente malos de tener un método público de fábrica estática porque el libro de GoF lo dio como un ejemplo de cómo se podría acceder a un Singleton.
Michael Borgwardt

55
Por favor, no más Off Discusión del tema re Singtons
mattnz

20

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.


Las matemáticas no pueden ayudarlo a garantizar que su programa encuentre una respuesta. Eso sería resolver el problema de detención, que es imposible.
DeadMG

66
@DeadMG Es imposible para programas arbitrarios. Se puede demostrar que un programa dado termina o no termina, en algunos casos.
Luc Danton

66
@DeadMG, ese es un malentendido común del problema de detención. El problema de detención no dice que no puede probar si un programa en particular se detiene o no, dice que no hay un algoritmo único o prueba que pueda aplicarse a todos los programas para decidir si se detienen o no. Ver por ejemplo en.wikipedia.org/wiki/Halting_problem y programmers.stackexchange.com/questions/125882/… .
Charles E. Grant

Aaaah Mi error, entonces. Estúpido bloqueo de voto ... si pudieras editar tu publicación para que yo pueda desestimarla?
DeadMG

44
@DeadMG, ¿está usted consciente del hecho de la mayor parte de las tareas de programación típicos no necesitan un lenguaje Turing completo en absoluto ? Y para el resto de los casos, casi siempre hay una prueba de detención especializada.
SK-logic

12

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 .

El cálculo relacional consta de dos cálculos, el cálculo relacional de tuplas y el cálculo relacional de dominio, que forman parte del modelo relacional para bases de datos y proporcionan una forma declarativa de especificar consultas de bases de datos. Esto en contraste con el álgebra relacional, que también es parte del modelo relacional, pero proporciona una forma más procesal para especificar consultas.

El álgebra relacional podría sugerir estos pasos para recuperar los números de teléfono y los nombres de las librerías que suministran algunos libros de muestra:

Join book stores and titles over the BookstoreID.
Restrict the result of that join to tuples for the book Some Sample Book.
Project the result of that restriction over StoreName and StorePhone.

El cálculo relacional formularía una forma descriptiva y declarativa:

Get StoreName and StorePhone for supplies such that there exists a title BK with the same BookstoreID value and with a BookTitle value of

Un libro de muestra.

El álgebra relacional y el cálculo relacional son esencialmente lógicamente equivalentes: para cualquier expresión algebraica, hay una expresión equivalente en el cálculo, y viceversa. Este resultado se conoce como teorema de Codd.

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.

SEMANA 1:

Conceptos básicos de probabilidad Localización de automóviles con filtros de partículas

SEMANA 2:

Gaussianos y probabilidad continua Rastreo de otros autos con filtros Kalman

SEMANA 3:

Procesamiento de imágenes y aprendizaje automático Encontrar objetos en los datos del sensor

SEMANA 4:

Planificación y búsqueda Determinar dónde conducir con búsqueda A * Encontrar rutas óptimas con programación dinámica

SEMANA 5:

Controles Control de dirección y velocidades con PID

SEMANA 6:

Poniendo todo junto Programar un auto sin conductor

SEMANA 7:

Examen final Examen que prueba tus conocimientos


Supongo que esto cae dentro del ámbito de la IA, pero la mayoría de las personas tienen en mente este pastel en la imagen del cielo cuando se usa ese término. De todos modos, casi cualquier programa que simule el mundo real casi siempre requiere alguna forma de matemática más avanzada. Además, cualquier sistema con sensores casi siempre requiere alguna forma de matemática avanzada.
Dunk

11

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.


Estoy de acuerdo. Realizo mucho desarrollo empresarial y no he visto la necesidad de utilizar muchas matemáticas avanzadas, aunque definitivamente es bueno saberlo, ya que definitivamente puede ayudar. Yo diría que cada programador debería haber tomado al menos Cálculo 1. Otros tipos de programas pueden utilizar cosas como Transformadas de Fourier, modelos estadísticos y la programación 3D utiliza matrices a menudo.
Makotosan

@Makotosan, gracias por tu comentario. Sin embargo, las matemáticas son muy interesantes, dado el poco tiempo que tiene un programador, el esfuerzo se dedica mejor a lo que realmente aumenta la productividad. La información adicional se convierte en lujo para aquellos que pueden pagarla.
NoPuerto

Creo que las matemáticas son solo los conocimientos de dominio necesarios para su programa, de la misma manera que comprender las finanzas es importante para los desarrolladores de Excel.
sixtyfootersdude

9

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+1siempre será igual a 2, y las set a = 1medias asiempre 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 13x13convierta 13x10 + 13x3, lo cual es mucho más fácil para mi cerebro trabajar, y necesito hacer un seguimiento de eso 13x10=130 + 13x3=39, entonces 130+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.


Y algunas matemáticas básicas son el trampolín habitual para obtener ese proceso sistemático y lógico de resolución de problemas. La estructura del lenguaje, algo que ya no se enseña en la escuela es también otro peldaño. Hay una razón por la que un compilador tiene un analizador sintáctico y cuanto mejor analices y prestes atención a la estructura de tu código, más probabilidades tendrás de programar bien.
Fiasco Labs

5

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)


4

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.


4

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):

  1. Los motores de búsqueda utilizan el cálculo vectorial para buscar datos.
  2. La factorización matricial se puede utilizar para muchas cosas, como el análisis de sentimientos.
  3. Necesitas saber Cálculo, Sumaciones para descubrir la complejidad del código que escribes.
  4. La probabilidad se usa mucho en la recuperación / búsqueda de información probabilística
  5. El Teorema ingenuo de Bayes se utiliza en el análisis predictivo.
  6. Necesita saber cosas como el hiperplano, etc. para un concepto llamado SVM que nuevamente se usa en Machine Learning para resolver problemas de categorización.
  7. Debe comprender Entropy para hacer cosas de procesamiento de lenguaje natural.
  8. La indexación semántica latente / análisis de componentes principales utilizados por los motores de búsqueda depende en gran medida del álgebra matricial. & pronto......

3

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.


Particularmente me gusta la parte "como la mayoría de nosotros lo sabemos". Esa es la dificultad que veo al leer la mayoría de las respuestas aquí: la "mano izquierda" no sabe lo que está haciendo la "mano derecha".
Loop Space

Supongo que "la mano izquierda no sabe lo que está haciendo la derecha" lo resume. El OP dijo que está "comenzando desde abajo" con Java. La programación en Java es algo así como construir algo a partir de tornillos y madera de la ferretería, en lugar de mecanizar esos tornillos y convertir árboles vivos en madera (que sería más como programar en Assembler)
Rice Flour Cookies

2

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.


3
Depende de tu dominio. Si solo quieres ser un programador, entonces realmente no necesitas saber matemáticas. Si desea convertirse en una parte clave del negocio (en muchos dominios), es esencial poder encontrar soluciones a los problemas del dominio. Con mucha frecuencia, esas soluciones solo pueden derivarse al tener una sólida base matemática. Es posible que no necesite ser un experto en ningún área matemática específica, pero debe saber cómo aplicar una amplia gama de matemáticas para poder descubrir qué matemáticas podrían resolver su problema particular del momento.
Dunk

2

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?


2

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.


1

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.


Hay una intersección de cosas que están relacionadas con las matemáticas y la programación. Ninguno de los dos es un subconjunto apropiado del otro. Si supieras más MATEMÁTICAS, lo sabrías. Dibujemos un diagrama de Venn y veamos si podemos encontrar un elemento en cada área. El álgebra está relacionada con las matemáticas y la programación. Los principios de la programación orientada a objetos no están estrictamente relacionados con las matemáticas, sino que son abstracciones, ya que las matemáticas son una abstracción. Las matemáticas discretas son increíblemente útiles para los programadores, como lo son las estadísticas. El cálculo rara vez aparece para la mayoría de los programadores, nunca para mí en 30 años.
Warren P

0

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.


3
Si alguien puede o no resolver un problema financiero tiene mucho que ver con si es o no competente en ese dominio, casi nada tiene que ver con la aptitud de programación. Trabajo con un software de procesamiento de señales que contiene muchas matemáticas que se me pasan por la cabeza. Mi trabajo no es hacer las matemáticas, es convertir lo que producen los matemáticos y los ingenieros, para quienes la programación no está en su dominio de experiencia, en un buen software. Porque ese es mi dominio.
Blrfl

En la mayoría de los campos prácticos, los dos están separados: alguien tiene el modelo y alguien tiene que programarlo. Entonces sí, tienes razón. Pero para que alguien aprenda a programar desde el principio, tiene que saber las matemáticas. De lo contrario, será difícil. Tienen que saber sobre variables, expresiones y diferentes propiedades matemáticas. He trabajado con el equipo de optimización. Estaban trabajando en solucionadores. Si no tuvieran conocimiento de las matemáticas, nunca habrían trabajado en ello. Respondí desde el punto de vista del aprendizaje y sabiendo que él es solo un nuevo alumno que está entrando en la programación.
Noname

Desde el punto de vista del aprendizaje, es imperativo tener un fondo matemático, de lo contrario, no habrá aprendizaje.
Noname

Los solucionadores son en gran medida un problema de dominio matemático, lo que haría lógico que se requiriera una comprensión de las matemáticas involucradas para trabajar en ellos. No estoy diciendo que no haya conceptos matemáticos involucrados en la programación, pero como @DeadMG señaló en su respuesta, hay muchos aspectos muy prácticos del proceso donde las matemáticas no proporcionan absolutamente ninguna ayuda.
Blrfl

1
@Birfl, DeadMG es, bueno, un poco ignorante (y casi siempre está equivocado). Las matemáticas siempre ayudarían en todas esas áreas "blandas". La psicología se basa en gran medida en las matemáticas. La sociología es aún más matemática. Y en el caso del diseño de sistemas, es mejor que no lo toque sin tener una muy buena experiencia en semántica (que es de matemática discreta). No hay aspectos en la programación que no sean matemáticos. El diseño GUI y la codificación CRUD están incluidos.
SK-logic

0

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.


0

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.


Definitivamente necesitarás conocer tus matemáticas trigonométricas y vectoriales para los juegos.
Alan B

Absolutamente. Sin embargo, también descubrí que escribir juegos puede ser una forma increíble de volver a aprender matemáticas que quizás hayas olvidado de la escuela secundaria, siempre y cuando no tengas una fecha límite.
kcunning

0

¡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!


0

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.


0

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.


0

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/ schemeson los primeros mejores lenguajes para programación. Para empezar, los idiomas tipados estáticos como Java/ C++no son los mejores. Opencourseware publicado por "MIT / UOC-Berkeley / Stanford" puede guiarlo mejor que un plan de estudios universitario regular. ¡¡¡Te apuesto!!!


-1

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.


-2

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


Nuevamente, vea la publicación a continuación. Estás haciendo matemáticas, simplemente eliges no admitirlo.
James

1
Vi, pero también encontré otras publicaciones que respondían a la primera pregunta sobre el interés matemático para un estudiante (que conoce la base, no las especialidades) con -1 ^ n cuando hablaban de lógica en latín, filosofía, idioma ... real vida. ¿Es matemático dar una mente tan limitada que todo lo que no está en la ecuación es rechazado, sin comprender la vida, y olvidando que Newton comienza con una intuición dada por una manzana? Quizás sea para el moderador abrir las mentes a los otros mundos, cuando sea posible, esto enriquecerá ambos lados de la discusión. No obstante, tendré cuidado en mi escritura.
cl-r

-2

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.


66
-1 para el anuncio hominem al final.
Charles E. Grant

@charles ad hominem ¿contra quién? El cartel original? Creo que el punto sobre las patentes es perspicaz (incluso si pudiera haberse redactado mejor).
gcbenison

@gcbenison, "Cualquiera que diga que la programación no es matemática ... o tiene un motivo oculto" es un ataque clásico ad hominem: no tengo que responder a tu argumento porque eres una mala persona. Lo encontré irritante porque no creo que la programación sea matemática, y creo que las patentes de software son una abominación. Tengo una maestría en Matemática Aplicada, aunque si sé de lo que estoy hablando ciertamente está abierto a debate.
Charles E. Grant

@ comentaristas: gracias. Solía ​​ignorar esos comportamientos porque son miseria auto proyectada imputada a otros. --- a Bruce Ediger: Duda signo de reflexión en progreso.
cl-r

@ cl-r: Estaba pensando en ejemplos muy específicos, como la campaña SCO anti-Linux, y nature.com/news/… Si nosotros, como programadores, dejamos que los abogados definan las matemáticas para beneficio de los abogados, entonces hacemos un mal servicio a toda la civilización .
Bruce Ediger

-2

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 * deltaTimeo int x = x - speed * deltaTimepodrí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.

Este es el algoritmo de Elo explicado

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.


-4

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.


8
Un niño le dice a su madre que no necesitará matemáticas porque va a crecer y ser un jugador de béisbol millonario. Su madre le dice "Necesitarás matemáticas para contar tus millones".
Nav

2
Lo siento, tengo que estar en desacuerdo. Estudiar matemáticas te enseña a pensar lógicamente. Si no puede pensar lógicamente, todo lo que va a escribir es un montón de código que no escala. No estoy diciendo que tenga que ser un experto en matemáticas o incluso que le gusten las matemáticas, ni que deba usarlo en su vida diaria. Pero debe estudiarlo si desea resolver problemas de programación reales.
jmort253

2
@ jmort253: Estudiar matemáticas no te convierte en una persona que piensa lógicamente. Es algo que está conectado a tu mente o no. Odio las matemáticas desde la escuela, pero soy una persona muy lógica. La programación no es matemática, estoy en la programación de sistemas por más de 10 años, y puedo decirlo con 100% de confianza, y puede esperar incluso menos matemática cuando está en desarrollo web o administración de SQL. Su tarea no es desarrollar nuevas teorías matemáticas, su tarea es hacer que las cosas funcionen utilizando recursos limitados de manera sostenible utilizando los algoritmos y contenedores más eficientes.
Codificador

2
@Nav: Tiene sentido para cada persona para las matemáticas básicas, hasta ecuaciones con x e y. Pero contar sus millones suele ser lo que hacen los contadores y abogados, porque de lo contrario se perderá alguna ley estatal que tiene que ver con la declaración y perderá todo de cualquier manera. Debe ser lo suficientemente inteligente como para comprender lo que está sucediendo, pero una vez que se destaca en algo, es más rentable utilizar servicios especializados que harán las cosas por usted de manera correcta, rápida y puntual, mientras mantiene su forma en el gimnasio, para mantener ese top 5 ganado con tanto esfuerzo.
Codificador

10
Las matemáticas no son el proceso de resolver ecuaciones. Si la única matemática que has visto es la matemática que se enseña en la escuela, nunca has visto matemática real .
doppelgreener
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.