c++ - primero - política del libro y la lectura
La lista de lectura para programador científico (17)
Estoy trabajando para convertirme en un programador científico. Tengo suficiente experiencia en Matemáticas y Estadística, pero me falta la programación. Me resultó muy difícil aprender a usar un lenguaje para la programación científica porque la mayoría de las referencias para SP son casi triviales.
Mi trabajo involucra modelos estadísticos / financieros y ninguno con el modelo de física. Actualmente, uso Python ampliamente con numpy y scipy. Hecho R / Mathematica. Sé suficiente C / C ++ para leer el código. No hay experiencia en Fortran.
No sé si esta es una buena lista de lenguaje para un programador científico. Si esto es así, ¿cuál es una buena lista de lectura para aprender la sintaxis y el patrón de diseño de estos idiomas en entornos científicos?
El libro de Donald Knuth sobre algoritmos seminuméricos.
En algún momento necesitarás aritmética de punto flotante. Es difícil hacerlo bien, menos difícil hacerlo de manera competente y fácil de hacer mal. Este documento es una lectura obligada:
Lo que todo científico informático debe saber sobre la aritmética de punto flotante
En términos de idiomas, creo que tiene una buena cobertura. Python es ideal para la experimentación y la creación de prototipos, Mathematica es bueno para ayudar con las cosas teóricas y C / C ++ está ahí si necesitas hacer cálculos de números serios.
También podría sugerirle que desarrolle una apreciación de un lenguaje ensamblador y también de un lenguaje funcional (como Haskell), no realmente para usar, sino más bien por el efecto que tienen en sus habilidades y estilo de programación, y sobre los conceptos que traen a casa para ti. También pueden ser útiles algún día.
También consideraría vital aprender sobre la programación paralela (concurrente / distribuida) ya que esta es la única forma de acceder al tipo de potencia de cómputo que a veces es necesaria para los problemas científicos. La exposición a la programación funcional sería muy útil a este respecto, ya sea que use o no un lenguaje funcional para resolver el problema.
Desafortunadamente, no tengo mucho que sugerir en cuanto a la lectura, pero puede que encuentre útil la Guía para el Procesamiento de Señales Digitales de The Scientist and Engineer .
Esto podría ser útil: la naturaleza del modelado matemático.
Leer código fuente también ayuda mucho. Python es genial en este sentido. He aprendido una gran cantidad de información con solo buscar en los códigos fuente de las herramientas científicas de Python. Además de esto, seguir las listas de correo y los foros de sus herramientas favoritas puede mejorar aún más sus habilidades.
Lo recomiendo
C ++ científico y de ingeniería: una introducción con técnicas avanzadas y ejemplos de Barton y Nackman
No se desanime por su edad, es excelente. Las recetas numéricas en su idioma favorito (siempre que sea C, C ++ o Fortran) son compendiosas y excelentes para aprender, no siempre son los mejores algoritmos para cada problema.
también me gusta
Computación científica paralela en C ++ y MPI: un enfoque continuo de los algoritmos paralelos y su implementación por Karniadakis
Cuanto antes comience la computación en paralelo, mejor.
MATLAB se usa ampliamente en ingeniería para diseño, desarrollo rápido e incluso aplicaciones de producción (mi proyecto actual tiene una DLL generada por MATLAB para realizar un procesamiento avanzado de números que fue más fácil de hacer que en nuestro C ++ nativo, y nuestros FPGA utilizan el MATLAB generado núcleos para el procesamiento de la señal también, que es mucho más fácil que codificar a mano en VHDL). También hay una caja de herramientas financiera para MATLAB que puede ser de su interés.
Esto no quiere decir que MATLAB sea la mejor opción para su campo, pero al menos en ingeniería, se usa ampliamente y no va a ninguna parte pronto.
Mi primera sugerencia es que mire las 5 mejores universidades para su campo específico, mire lo que están enseñando y lo que los profesores están usando para la investigación. Así es como puedes descubrir el lenguaje / enfoque relevante.
También eche un vistazo a esta pregunta de ("prácticas para la programación en un entorno científico") .
¿Estás haciendo modelos estadísticos / financieros? Yo mismo uso R en ese campo , y rápidamente se está convirtiendo en el estándar para el análisis estadístico, especialmente en ciencias sociales, pero también en finanzas (ver, por ejemplo, http://rinfinance.com ). Es probable que Matlab sea aún más utilizado en la industria, pero tengo la sensación de que esto puede estar cambiando. Solo recurriría a C ++ como último recurso si el rendimiento es un factor importante.
Mire estas preguntas relacionadas para obtener ayuda para encontrar materiales de lectura relacionados con R:
- suitable-functional-language-for-scientific-statistical-computing
- books-for-learning-the-r-language
- what-can-be-done-in-r-that-cant-be-done-with-python-numpy-scipy
- r-for-finance-tutorials-resources
En cuanto a las recomendaciones de libros relacionadas con estadísticas y finanzas, sigo pensando que la mejor opción general es "Estadísticas y finanzas" de David Ruppert ( puede encontrar la mayoría del código R aquí y el sitio web del autor tiene un código matlab ).
Por último, si su computación científica no es estadística, creo que Mathematica es la mejor herramienta. Parece que se tiene muy poca mención entre los programadores, pero desde mi punto de vista, es la mejor herramienta para la investigación científica pura. Tiene un soporte mucho mejor para cosas como la integración y las ecuaciones diferenciales parciales que matlab. Tienen una buena lista de libros en el sitio web de wolfram .
Ok, aquí está mi lista de libros que he estado usando con el mismo propósito:
Métodos numéricos para científicos e ingenieros
Recetas Numéricas 3ª Edición: El Arte de la Computación Científica
CUDA por ejemplo: Introducción a la programación de GPU de propósito general
Programación paralela en C con MPI y OpenMP
Donald Knuth: Algoritmos seminuméricos, volumen 2 de El arte de la programación de computadoras
También me encontré usando R en lugar de Python últimamente.
Para C ++ genérico en entornos científicos, el diseño moderno de C ++ por Andrei Alexandrescu es probablemente el libro estándar sobre los patrones de diseño comunes.
Para Java recomiendo echar un vistazo a Unit-API.
Las implementaciones son Eclipse UOMo (http://www.eclipse.org/uomo) o JScience.org (trabajo en progreso para Unit-API, existen implementaciones anteriores de JSR-275)
Soy un programador científico que acaba de ingresar al campo en los últimos 2 años. Me gustan más los modelos de biología y física, pero apuesto a que lo que está buscando es bastante similar. Mientras realizaba mi solicitud de empleo y pasantías, había dos cosas que no creía que fuera tan importante saber, pero que me hicieron perder las oportunidades. Uno fue MATLAB, que ya ha sido mencionado. El otro fue el diseño de la base de datos: no importa en qué área de SP esté, probablemente habrá una gran cantidad de datos que deben ser gestionados de alguna manera.
El libro Database Design for Mere Mortals por Michael Hernandez me fue recomendado por ser un buen comienzo y me ayudó mucho en mi preparación. También me aseguraría de que al menos entiendas algo de SQL básico si no lo has hecho ya.
Una vez que esté en funcionamiento, le recomiendo encarecidamente que lea este blog .
Describe cómo usa las plantillas de C ++ para proporcionar unidades de tipo seguro. Entonces, por ejemplo, si multiplicas la velocidad por el tiempo, obtienes una distancia, etc.
Uno de los problemas que enfrentan los programadores científicos es mantener un depósito de código (y datos) que otros pueden usar para reproducir sus experimentos. En mi experiencia, esta es una habilidad que no se requiere en el desarrollo comercial.
Aquí hay algunas lecturas sobre esto:
Estos están en el contexto de la biología computacional, pero supongo que se aplica a la mayoría de la programación científica.
También, mire Python Scripting for Computational Science .
Yo sugeriría que cualquiera de los libros de recetas numéricas (escoja un idioma) sea útil.
Dependiendo de los idiomas que use o si va a hacer visualización, puede haber otras sugerencias.
Otro libro que realmente me gusta es la Implementación de Métodos Numéricos Orientada a Objetos , de Didier Besset. Muestra cómo hacer muchas ecuaciones en Java y smalltalk, pero lo más importante es que hace un trabajo fantástico al ayudar a mostrar cómo optimizar las ecuaciones para usar en una computadora y cómo lidiar con los errores debido a las limitaciones en la computadora.
Donald Knuth: Algoritmos seminuméricos , volumen 2 de El arte de la programación de computadoras
Prensa, Teukolsky, Vetterling, Flannery: Recetas numéricas en C ++ (el libro es genial, solo tenga cuidado con la license )
y eche un vistazo al código fuente de la Biblioteca Científica de GNU .
Escribir software científico: una guía para el buen estilo es un buen libro con consejos generales para la programación científica moderna.