2009-11-04 13 views
44

Estoy trabajando para convertirme en un programador científico. Tengo suficiente formación en matemáticas y estadística, pero me falta bastante experiencia en programación. Me resultó muy difícil aprender a usar un lenguaje para programación científica porque la mayoría de las referencias para SP son casi triviales.La lista de lectura para el programador científico

Mi trabajo implica modelos estadísticos/financieros y ninguno con el modelo de física. Actualmente, utilizo Python extensivamente con numpy y scipy. Hecho R/Mathematica. Sé lo suficiente C/C++ para leer el código. Sin 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 patrón de diseño de estos idiomas en configuraciones científicas.

+0

¿Qué idiomas usará? –

+0

@ James. Cualquier cosa que haga el trabajo rápidamente (en prototipos) o de manera eficiente. No estoy obligado a casi nada, pero debe ser algo legible por los demás. – leon

+0

"patrón de diseño de estos idiomas en entornos científicos": este es el problema. Incluso los libros que pretenden cubrir estas cosas suelen ser bullsh * t. Aprenda C++ y deje que la experiencia (y las recetas numéricas) le enseñen, o quédese con R o Numpy (ambos son geniales). –

Respuesta

10

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 los aspectos teóricos, y C/C++ están ahí si necesita hacer un número serio de crujidos.

También podría sugerir que desarrolle una apreciación de un lenguaje ensamblador y también un lenguaje funcional (como Haskell), no realmente para usar, sino más bien por el efecto que tienen en su habilidad y estilo de programación, y del conceptos que te traen a casa. Ellos podría también son útiles algún día.

También consideraría vital aprender sobre programación paralela (concurrente/distribuida) ya que esta es la única forma de acceder al tipo de potencia informática que a veces es necesaria para problemas científicos. La exposición a la programación funcional sería de gran ayuda en este sentido, ya sea que utilice o no un lenguaje funcional para resolver el problema.

Lamentablemente no tengo mucho que sugerir en la forma de leer, pero puede encontrar The Scientist and Engineer's Guide to Digital Signal Processing útil.

+0

Tengo una gran apreciación de Haskell :) – leon

+0

En ese caso, aprende el lenguaje ensamblador. OMI: la mejor manera de hacerlo es escribir un kernel de juguete en lenguaje ensamblador, porque además aprenderás un millón de cosas. – Artelius

+0

Ah, sí, y siempre existe El arte de la programación de computadoras (por Knuth) – Artelius

6

Sugeriría cualquiera de los libros de recetas numéricas (elegir un idioma) para ser útil.

Dependiendo de los idiomas que use o si va a hacer la visualización, puede haber otras sugerencias.

Otro libro que realmente me gusta es Object-Oriented Implementation of Numerical Methods, por 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 su uso en una computadora y cómo lidiar con los errores debido a las limitaciones de la computadora.

+0

+1 para Besset. Los libros de NR deben tomarse con un grano de sal: el código es horrible, aunque generalmente funcional. –

+0

Nunca perdonaré a NR (incluso a la 3ª edición, 2007) por avisarle a la gente que accione señales con cero hasta una potencia de dos. Tanto trabajo arruinado ... :-( –

3

Para C++ genérico en entornos científicos, Modern C++ Design de Andrei Alexandrescu es probablemente el libro estándar sobre los patrones de diseño comunes.

+1

MC++ D es un libro fantástico, pero no es para principiantes en C++ como el OP, ni es más útil para aplicaciones científicas específicas que el original del GoF _Patrones de diseño_. Si no sabe cómo escribir sus propias clases de plantilla y funciones y las especializa parcialmente, por ejemplo, necesitará una base más sólida en el idioma antes de levantar este libro. – metal

+0

No conozco las necesidades específicas de el OP, pero para "patrones de diseño en [algunos] entornos científicos" es una base valiosa. Algunos equipos de laboratorio lo ven como la lectura obligatoria inicial, es por eso que lo mencioné. –

12

Mi primera sugerencia es que nos fijamos en los 5 mejores universidades de su campo específico, mire lo que están enseñando y lo que los profesores están utilizando para la investigación. Así es como puedes descubrir el lenguaje/enfoque relevante.

También echar un vistazo a this stackoverflow question ("practices-for-programming-in-a-scientific-environment").

¿Está haciendo modelos estadísticos/financieros?I use R in that field myself, y se está convirtiendo rápidamente en el estándar para el análisis estadístico, especialmente en las ciencias sociales, pero también en las 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.

mirada a estas preguntas relacionadas para materiales de lectura ayuda para encontrar relacionadas con la I:

En términos de recomendaciones de libros relacionados con estadísticas y finanzas, I sti Creo que la mejor opción general es David Ruppert's "Statistics and Finance" (you can find most of the R code here y the author's website has matlab code).

Por último, si su computación científica no es estadística, entonces realmente creo que Mathematica es la mejor herramienta. Parece que se menciona muy poco entre los programadores, pero, desde mi punto de vista, es la mejor herramienta para la investigación científica pura. Tiene mucho mejor soporte para cosas como integración y ecuaciones diferenciales parciales que matlab. Tienen un nice list of books on the wolfram website.

25

Yo lo recomiendo

la Ciencia y la Ingeniería C++: Una introducción con técnicas avanzadas y ejemplos de Barton y Nackman

no te dejes llevar 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 paralelo en C++ y MPI: Un enfoque sin fisuras a paralelo algoritmos y su aplicación por Karniadakis

cuanto antes de empezar computación paralela, mejor.

+4

No utilice, bajo ninguna circunstancia, Recetas numéricas para tratar de aprender un lenguaje de programación. –

+6

Mierda, demasiado tarde, alrededor de los 25 años. Oh, qué vida desperdiciada. Y acepto mi comentario de que NR es un texto excelente para aprender programación científica, que es mucho más que un lenguaje de programación. –

+3

Recetas numéricas estuvo bien hace 25 años, pero hoy es una broma. –

2

Una vez que esté en funcionamiento, recomiendo leer este blog.

Describe cómo se usan las plantillas C++ para proporcionar unidades seguras tipo. Entonces, por ejemplo, si multiplicas la velocidad por tiempo obtienes una distancia, etc.

+0

También le pueden interesar las "unidades de medida" en el nuevo lenguaje de programación F # de Microsoft. –

4

El libro de Donald Knuth sobre algoritmos seminumerical.

4

MATLAB es ampliamente utilizado en ingeniería para aplicaciones de diseño, desarrollo rápido e incluso producción (mi proyecto actual tiene una DLL generada por MATLAB para hacer algunos cálculos numéricos avanzados que era más fácil de hacer que en nuestro C++ nativo y nuestros FPGAs también utiliza núcleos generados por MATLAB para el procesamiento de señal, lo que es mucho más fácil que codificarlo a mano en VHDL). También hay un financial toolbox for 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, es ampliamente utilizado y no irá a ningún lado pronto.

4

Una cuestión que enfrentan los programadores científicos es el mantenimiento de un depósito de código (y datos) que otros pueden usar para reproducir sus experimentos. En mi experiencia esta es una habilidad no requerida en el desarrollo comercial.

Estas son algunas lecturas sobre esto:

Estos son en el contexto de la biología computacional, pero supongo que se aplica a la mayoría de la programación científica.

Además, mira Python Scripting for Computational Science.

+0

Buen enlace a la Guía rápida para organizar proyectos de biología computacional. El profesor Noble hace un trabajo maravilloso.:) –

7

Soy un programador científico que acaba de ingresar al campo en los últimos 2 años. Estoy en más modelos de biología y física, pero apuesto a que lo que estás buscando es bastante similar. Mientras estaba postulando para empleos y pasantías, había dos cosas que no creía que sería tan importante saber, pero que me hicieron perder oportunidades. Uno era MATLAB, que ya ha sido mencionado. El otro fue el diseño de la base de datos: sin importar en qué área de SP se encuentre, probablemente haya una gran cantidad de datos que deban manejarse de alguna manera.

El libro Database Design for Mere Mortals de Michael Hernandez me fue recomendado por ser un buen comienzo y me ayudó mucho en mi preparación. También me aseguraré de que al menos entiendas algunos SQL básicos si no lo haces ya.

2

Leer el código fuente también ayuda mucho. Python es genial en este sentido. Aprendí una gran cantidad de información con solo hurgar en los códigos fuente de las herramientas científicas de Python. Además de esto, las listas de correo y foros de tus herramientas favoritas pueden mejorar aún más tus habilidades.

-1

Para Java recomiendo un vistazo a Unit-API
implementaciones son Eclipse Uomo (http://www.eclipse.org/uomo) o JScience.org (trabajo en progreso para la Unidad-API, las implementaciones anteriores de JSR-275 existen)

4
Cuestiones relacionadas