Actualmente soy programador, tengo casi 16 años y he reducido mis carreras a algo relacionado con un título en Ciencias de la Computación o Ingeniería Eléctrica (sé que son bastante diferentes, pero esta pregunta es sobre mi amigo), pero mi amigo no está tan seguro
Está muy interesado en las matemáticas y es muy bueno en eso, y creo que disfrutaría de la programación, pero no está dispuesto a probarlo ( editar , está dispuesto a intentarlo pero nunca lo ha hecho antes). ¿Alguien puede darme sugerencias para un lenguaje o herramienta que podría incursionar en la programación (supongo que a un nivel razonablemente básico) para resolver problemas matemáticos o involucrar algún tipo de matemática.
Como digo, disfruta mucho de las matemáticas, pero creo que disfrutaría de la programación, el problema es que no quiero que se desanime por las cosas que no son relevantes en los niveles introductorios, como la asignación de memoria, etc. Sé que eso es muy importante, pero el punto es que quiero que aprenda un poco de programación con las matemáticas y, con suerte, si está lo suficientemente interesado, puede comenzar a aprender programación como programación.
Editar: No es que no esté completamente interesado, más que no haya explorado activamente el área antes, tal vez porque no está informado al respecto. No me gustaría obligarlo a hacer algo que no quiere, veo esto como un pequeño empujón para que pueda aprender sobre programación. Si no le gusta, lo suficientemente justo, no puedo controlar eso y no quiero, pero si resulta que lo disfruta, este impulso habrá sido lo correcto.
Respuestas:
Si quieres un lenguaje "matemático", Haskell es tu mejor amigo (para tu mejor amigo). Puede crear fácilmente nuevas funciones sin problemas. Es la mejor recomendación de idioma que puedo darle para su amigo. Aquí hay algunos enlaces:
Mathematica
Wolfram's Mathematica es otro interés que puede tener.
Aunque es caro, vale la pena. Aquí hay algunos enlaces:
Algoritmos
Los algoritmos son importantes para cualquier programa, pero su amigo debe comenzar con estos cuando se sienta cómodo con un idioma. Aquí hay algunos enlaces más:
¡Espero que esto ayude! Si tiene alguna pregunta o comentario, ¡no dude en comentar! Por cierto, todos estos enlaces son para liberar recursos. Si quieres un libro impreso, tengo algunas recomendaciones, ¡solo deja un comentario!
fuente
x = x + 1
es ridículo.La programación funcional y los lenguajes de la familia ML o Haskell tienden a encajar bastante bien en las mentes de los matemáticos.
fuente
Si se especializa en matemáticas, sin duda terminará haciendo bastante programación, si no en lenguajes de bajo nivel como C ++, luego en lenguajes de nivel superior, específicos de matemática, como Maple o Mathematica dependiendo de lo que esté haciendo.
Además, dependiendo de su área de investigación, puede terminar haciendo matemática aplicada o análisis estático, los cuales requerirán una cantidad significativa de programación. Es mejor acostumbrarse a la programación ahora, independientemente de lo que decida.
fuente
Enséñale a Haskell. Es un lenguaje donde puedes pensar igual que en matemáticas:
Te sugiero que le muestres http://learnyouahaskell.com , uno de los mejores tutoriales para Haskell.
fuente
Como alguien que estudió matemáticas (tengo una licenciatura en matemáticas puras y acabo de recibir mi maestría en matemáticas aplicadas / estadística) y luego me di cuenta de la diversión / practicidad / importancia de la programación más adelante en mi carrera, realmente aprecio esta pregunta. Desearía tener un amigo como tú hace 10 años para empujarme hacia la programación.
Ambos deberían consultar el Proyecto Euler . ¿Qué es?
Aunque no es una sugerencia específica del idioma, sería un gran motivador para comenzar a programar (especialmente si ya hay un interés en las matemáticas). Los problemas comienzan muy fácil y accesible pero rápidamente se vuelven muy difíciles y / o difíciles. Un buen desafío y motivación que es probable que ambos disfruten.
En cuanto a qué lenguaje usar, tengo experiencia con C ++, R, Matlab y Mathematica, que son geniales y ampliamente utilizados dentro de la comunidad matemática. Pero más específicamente, le sugiero que aprenda Python, que es muy útil para las matemáticas, pero no está tan restringido a las matemáticas como algunos de los otros (en caso de que quiera más opciones más adelante en la vida). Es fácil comenzar con Python, pero hay toneladas de cosas que aprender. También es gratis a diferencia de algunos de los otros. C ++ también podría ser una buena opción, pero podría tener más obstáculos desde el principio.
fuente
Para los matemáticos, la mayor activación son los algoritmos. Tu amigo debe comenzar a implementarlos en Python (es amigable).
Los entornos informáticos numéricos como MATLAB serán útiles para manipulaciones matriciales, trazado de funciones y datos, implementación de algoritmos.
fuente
Depende del área de matemáticas que le interese.
Si le gusta más el álgebra abstracta o la combinatoria, probablemente le gustaría Haskell ya que el sistema de tipo complejo permite la programación directa de una variedad de matemáticas. ATS también podría ser una opción.
Recomiendo Learn You a Haskell for a Great Good para un tutorial de introducción y estructuras de datos puramente funcionales para algoritmos.
Si le gustan más el análisis matricial, las ecuaciones diferenciales o los sistemas dinámicos, le recomendaría Matlab , NumPy u Octave . APL es a través de Dyalog también podría ser de interés; aunque no lo comenzaría con eso. Las recetas numéricas , mientras que en C ++ se pueden adaptar para servir como una buena guía de algoritmos.
Si quiere hacer estadísticas, entonces R es la opción natural.
fuente
Soy un estudiante graduado en matemáticas, e hice mi licenciatura en ciencias de la computación. Mantengo un blog llamado Math ∩ Programming en el que exploro las aplicaciones de las matemáticas a la programación (y viceversa), y debo admitir que encuentro que la mayoría de los aspectos menos matemáticos de la informática son bastante secos y poco inspirados (básicamente, mi oposición a todos los trucos ridículos que entran en la programación de sistemas en mi experiencia en la industria).
Por otro lado, en mi blog miro problemas como el reconocimiento facial (bastante álgebra lineal), métodos de encriptación, máquinas Turing y autómatas celulares, modelos para predecir la actividad de los asesinos en serie, motores de búsqueda y muchos otros conceptos matemáticos. . ¡La mejor parte es que puedo implementar las ideas, y cualquiera de las mías!
Para obtener su amigo para la programación amor al igual que el resto de nosotros, a encontrar una verdaderamente interesanteproyecto. El aspecto de la programación no se mantendrá sin su trabajo hacia un producto que encuentre hermoso. En cuanto a los idiomas, recomiendo Mathematica, Racket (un derivado de Scheme muy amigable, pero aún poderoso), Python y Haskell. Mathematica es probablemente el mejor, porque puede implementar selectivamente sus propias funciones matemáticas y usar las bibliotecas integradas de Mathematica para finalizar el proyecto (por ejemplo, escribir una función que calcule los coeficientes de Fourier y luego usar Mathematica para hacer el resto del análisis, como como filtrado, generación de imágenes, etc.). Incluso los temas básicos como la integración ofrecen algunos proyectos fascinantes (diferentes reglas de cuadratura, integración de Monte Carlo, una transición suave al aprendizaje automático con grandes conjuntos de datos).
Además, parece que muchas de las respuestas aquí provienen de personas que no hacen matemáticas o que no han usado los lenguajes que sugieren que usen software matemático. La razón por la que la gente recomienda a Haskell es porque es lo más parecido posible a una implementación literal de la teoría de categorías y encaja bien con algunas definiciones matemáticas de algunos conceptos básicos. Pero si su amigo es cercano a su edad, entonces no está preparado para la teoría de categorías matemáticamente (esa madurez es más o menos inútil hasta la escuela de posgrado, y es muy difícil de aprender), y como primer idioma Haskell tiene la mayor inclinacióncurva de aprendizaje de los idiomas sugeridos (tal vez Prolog es más pronunciado). Utilicé Haskell para implementar un compilador de Javascript, y terminé con un código elegante muy hermoso, pero para cosas intuitivas como la mutación variable, ya tienes que incursionar en mónadas no triviales.
Python y Mathematica serán mucho más amigables, y Mathematica tiene la curva de aprendizaje más superficial simplemente porque todas las bibliotecas están empaquetadas en una interfaz de usuario agradable con una documentación impresionante (¡simplemente presione F1!). Por otro lado, hay un libro del que he oído hablar (pero que no he leído) que proporciona tanto una transición a las matemáticas avanzadas como una introducción a Haskell simultáneamente . Parece que tiene críticas positivas de Amazon, por lo que es posible que desee verlo. Puede pasar a lenguajes como C # y Java si alguna vez quiere hacer cosas de la industria, pero es más probable que nunca necesite ingresar a esa jungla (y muchas cosas de matemáticas de la industria son Matlab puro de todos modos).
Pero como dije, con el proyecto correcto aprender el idioma se convierte en una alegría, sea cual sea el proyecto.
fuente
Si su amigo disfruta de la lógica formal y encuentra interesante la Inteligencia Artificial, le gustaría echar un vistazo a Prolog .
Con este lenguaje, usted establece sus predicados (suposiciones iniciales, "hechos") y sus reglas de inferencia ("relaciones"), y luego hace preguntas.
Luego, Prolog se apaga y determina si la pregunta se puede responder utilizando solo los hechos y las relaciones, y si es así, le dice la respuesta.
Entonces le dices que "Tom es un gato" y "todos los gatos son animales" y preguntas "¿Tom es un animal?" y obtendrás la respuesta "verdadero".
O puede pedirle que "enumere todos los animales que conoce" y obtendrá la lista de elementos "tom".
Por supuesto, la sintaxis es un poco más complicada que eso, pero se entiende la idea general.
fuente
La mejor manera de alentar a tu amigo a intentarlo podría ser que comience a programar sin pensar demasiado en el hecho de que está programando.
Una vez que esté listo para lidiar más con la "programación", ambos pueden comenzar con el mismo libro y aprender a programar desde una base más matemática. Dos de mis libros favoritos actuales son:
"Estructura e interpretación de programas informáticos" SICP (Abelson / Sussman)
"Land of Lisp: ¡Aprende a programar en Lisp, un juego a la vez!" (Barski) , enseña programación a través de ejercicios de programación de juegos.
SICP se puede ver libremente en el sitio web de MIT Press .
Si tu amigo tiene una inclinación matemática, Lisp no presentará ninguna dificultad y te liberará de tener que aprender cualquier sintaxis especial. Creo que Lisp es más fácil de aprender que Haskell.
fuente
Estoy de acuerdo con Haskell, pero desde un punto de vista práctico, también debería aprender un idioma en una máquina abstracta muy utilizada. Me refiero a un lenguaje JVM o lenguaje .NET, por supuesto.
Hay idiomas en estas plataformas que son un poco más interesantes que los idiomas emblemáticos. En la JVM, eche un vistazo a Clojure y Scala. En la plataforma .NET, eche un vistazo a F #.
También había un lenguaje .NET de Microsoft Research llamado c-omega que era muy interesante, pero que era solo un proyecto de investigación.
fuente
Matlab se usa comúnmente para la programación matemática y científica. Es un lenguaje basado en script, no es difícil de aprender y todos los problemas de memoria están ocultos para el usuario.
La ingeniería de software y la ingeniería eléctrica se pueden combinar en ingeniería informática.
fuente
Si su amigo no está dispuesto a probar la programación, no veo por qué quiere forzar el problema. Creo que una clave para ser programador es estar dispuesto a aprender, y si él no está dispuesto a aprender, entonces la programación probablemente no sea para él
Pero dicho esto, su mejor opción podría ser crear un pequeño programa usted mismo y mostrárselo. Quizás deje algunas partes sin terminar y vea si puede interesarlo para que lo ayude a terminarlo. Lo sé para mí, los algoritmos y la lógica detrás de un programa son mucho más interesantes que escribir la sintaxis, así que tal vez intente que le ayude con la lógica del programa, y luego vaya y codifique la cosa y déjelo ver el resultados de la misma.
Si muestra algún interés en el código fuente, muéstrele cómo escribir sus propias cosas. Personalmente, creo que el lenguaje en sí no importa siempre que sea fácil de aprender y tenga mucha documentación.
fuente
Hay toda una biblioteca matemática y comunidad gratuitas construidas alrededor de Python. Comenzaría con "Sage", realmente debería disfrutar de usarlo y aprenderá a programar en Python por cierto.
fuente
Creo que deberías mostrarle a tu amigo algunas variantes diferentes, como:
Creo que C y LISP son buenos puntos de partida, que muestran que diferentes lenguajes pueden ser más adecuados para diferentes tareas. No creo en usar Haskell o Erlang para todo.
El código de máquina (o ensamblador) para un procesador simple también puede ser interesante. Siempre me ha encantado haber comenzado con el código de máquina en mi primer C64 . ( MOS 6510 ) Experiencia práctica que es difícil de obtener como adulto con un tiempo limitado para "desperdiciar".
fuente
Para mí, la programación comienza por querer "hacer algo", un "¿y si?" pregunta:
"Me gustaría crear mi propio sitio web", así que aprenda sobre HTML, etc.
"Odio tener que hacer clic en X o que veo Y en este sitio web cada vez que lo visito. ¿No hay una manera de automatizar eso?" Entonces aprende sobre bookmarklets o escribir extensiones de navegador.
"Quiero catalogar toda mi música y ninguna de las herramientas que he visto lo hace de la manera que quiero", para que aprendas sobre las bases de datos.
"Quiero hacer un seguimiento de los gastos de mi Club de Matemáticas", para que aprenda sobre hojas de cálculo, macros de programación o incluso bases de datos.
Para que la unidad realmente esté allí, el problema subyacente tiene que venir de él. . Intentaría encontrar un problema que él quiera resolver y luego elegir una herramienta / idioma / sistema que le permita automatizar / programar la solución.
fuente
Haskell y Mathematica son el camino a seguir, en mi opinión. La mayoría de los lenguajes funcionales también son buenos para las matemáticas. Python también es bueno, revisa la documentación matemática .
fuente