¿Qué idioma debo aprender para la ciencia computacional?

11

Soy completamente nuevo en la noción de ciencia computacional y estoy buscando un buen punto de partida.

Entiendo que no existe un lenguaje objetivamente mejor, pero me gustaría aprender un lenguaje que tenga una presencia indiscutiblemente fuerte y prominente con respecto a la ciencia computacional, uno que se considera que tiene una capacidad y eficiencia excepcionales.

Para comenzar, me inclinaba hacia el modelado relacionado con la unión e interacciones de los átomos, con el requisito de representaciones / simulaciones gráficas.

¿Algunos idiomas tienden a ser mejores para algunos campos que otros (es decir, física versus matemática pura)? ¿O la elección de un idioma se basa en otros factores?

He escuchado mucho el nombre de Fortran.

Sugerencias?

usuario1299028
fuente
1
C ++ y Fortran son lenguajes bien conocidos en la comunidad. Recientemente, puede ver un aumento en el uso de lenguajes dinámicos. A menudo eliges tu biblioteca y no tu idioma.
vanCompute
99
Me recuerda el dicho de que los Real Programmers pueden escribir Fortran en cualquier idioma.
hardmath
1
Aquí hay una pregunta muy similar con muchas respuestas: scicomp.stackexchange.com/questions/304/c-vs-fortran-for-hpc
Ondřej Čertík
1
"Entiendo que no existe un lenguaje objetivamente mejor", precisamente, entonces, ¿por qué no aprender a ser agnóstico al lenguaje, para que puedas escribir en cualquier idioma que se te presente?
JM
2
Tienes que dominar el inglés. Sin ella, no llegarás a ninguna parte de la ciencia computacional.
Johannes

Respuestas:

15

Principalmente se trata de las bibliotecas numéricas disponibles para usted que lo ayudarán a cumplir su tarea. C / C ++ tiene una gran cantidad de bibliotecas numéricas implementadas para ellos, pero ser lenguajes de bajo nivel no es lo mejor para crear prototipos de algo rápidamente.

Creo que para avanzar rápidamente hacia una solución, recomendaría usar algo como Matlab o Mathematica. Tienen un gran conjunto de herramientas y son de muy alto nivel. Lo más probable es que su implementación allí no se adapte al uso de producción, pero podría ser un buen lugar para probar diferentes métodos. Una vez que conoce el camino a seguir, siempre puede implementar algo en C / C ++ de manera más eficiente.

akg
fuente
44
Muchas personas, tanto dentro como fuera de la academia, realmente no confían en el código a menos que tenga al menos un conjunto mínimo de pruebas automatizadas. No sé cómo son las herramientas para tales cosas en Matlab y Mathica, pero hay varios paquetes agradables para lenguajes más convencionales como Python y C ++.
cjordan1
3
MATLAB tiene MATLAB xUnit, pero Python y C ++ tienen más (y, en mi opinión, mejores) conjuntos de pruebas.
Geoff Oxberry
24

¡Pitón!

  1. Comience directamente usando la biblioteca numpy , pequeños scripts y el shell interactivo ipython .
  2. Avanza más con la ayuda de numerosos libros y tutoriales gratuitos .
  3. Obtenga más productividad utilizando scipy como interfaz para rutinas numéricas de alto rendimiento y matplotlib para visualización
  4. Aproveche los módulos bien desarrollados y potentes para la informática científica como Krypy , FeNiCS y muchos otros.
  5. Tenga en cuenta que la transición fluida entre la programación plana y orientada a objetos y la modularidad inherente de Python hacen que los proyectos más grandes sean fáciles de manejar.
  6. Haga su código tan rápido como C o Fortran simplemente reescribiendo partes críticas en cython . También puede fácilmente incluir rutinas escritas en Fortran o C .

Esto parafrasea lo que creo que es la mejor manera de abordar un problema en la informática científica. Comience por resolver el problema jugando con ejemplos de juguetes en pequeños guiones. Sea más sistemático y configure un conjunto de códigos. ¡Entonces haz que tu código funcione! Finalmente, si es necesario, optimice el código. No reinventes la rueda y no hagas una optimización prematura.

(Ventajas adicionales: Python es gratis, sin problemas de licencia, gran comunidad, por ejemplo, en stackoverflow, módulos para una buena programación como pruebas de unidad o registro ...)

ene
fuente
5

Fortran: similar a Matlab, fácil de aprender y usar y rápidamente productivo pero solo bueno para computación numérica

C ++: Difícil de dominar (te llevará años) pero se usa mucho fuera de la computación numérica (seguridad laboral)

Python: Recomendado mucho en estos días pero demasiado lento para trabajos no triviales. Deberá escribir todos sus núcleos computacionalmente costosos subyacentes en C y luego llamarlos desde Python, lo que significa que tendrá que aprender (al menos) dos idiomas

usuario4245
fuente
1
Yo diría que la curva de aprendizaje para Fortran y C ++ son algo similares. Aprendí suficientes habilidades en ambos para resolver el final más simple de los problemas en cuestión de pocos meses, cada uno proveniente de un entorno de Java, Matlab y C #. Dependiendo de qué idiomas conozca alguien, podría ver que c ++ es mucho más fácil de aprender que fortran, ya que la mayoría de los códigos grandes están escritos en versiones antiguas.
Godric Seer
@Godric: en ~ 600 páginas, el estándar Fortran 2008 es menos de la mitad de C ++ 11 (~ 1300 páginas)
stali
1
@stali, sí, pero por ejemplo, trabajo con aproximadamente un cuarto de millón de líneas de código heredado escritas en Fortran77. Así que tuve que aprender el estilo del 77 para poder trabajar con él, 90-95 para hacer cambios sostenibles (ya que los bloques comunes son atroces), y luego '08 para no estar atascado durante una década en el pasado. Fortran, aunque era un idioma antiguo, ha experimentado enormes cambios en las últimas décadas, y a menos que esté comenzando desde cero, aprender su legado no es trivial.
Godric Seer
2
No estaría de acuerdo con la afirmación de que Python es "demasiado lento para un trabajo no trivial". De hecho, si escribe sus multiplicaciones de vectores de matriz (y similares) puramente en Python, lo pasará mal. Sin embargo, la abstracción a algunos lenguajes más eficientes ya se ha hecho para usted: NumPy, Scipy probablemente tenga todo lo que necesitará. O uno de los otros 50,000 paquetes.
Nico Schlömer
1
@ NicoSchlömer Estoy de acuerdo con "demasiado lento para el trabajo no trivial". Mi simulación en Python (Numpy / Scipy) es más lenta que el mismo código en la versión Fortran90 aproximadamente 10x. Recomiendo Fortran90 o C ++.
fronthem
4

Respuesta corta
Aprenda los conceptos básicos del código orientado a objetos a través de Python, y aprenda los conceptos básicos de la informática a través de C. Cuando esté al menos bastante bien con esos otros dos idiomas, aprenda C ++, porque puede hacer casi cualquier cosa en C ++ y hacer que se ejecute rápidamente (aunque lleva una eternidad escribir).

Respuesta más larga
Entonces, aquí está la cosa: para su primer proyecto, estará en el laboratorio de alguien trabajando en el código de otra persona. En cuyo caso, ellos serán los que elegirán el lenguaje de programación. ¡Lo cual personalmente creo que es genial!

Quiero decir, como principiante, realmente no vas a conocer tu trasero por un tiempo, y, especialmente cuando no sabes lo que estás haciendo, aprender a programar puede ser aburrido. Por lo tanto, es bueno tener la estructura y los límites que provienen de trabajar en el código de otra persona, y es bueno tener la motivación y la emoción que solo pueden venir de trabajar en un proyecto real.

Aún así, independientemente del idioma que use su laboratorio (especialmente si es Matlab), probablemente debería aprender Python, C y C ++. En particular, si no viene de una formación en informática, DEBE leer "El lenguaje de programación C" de Kernighan y Ritchie. Tiene 35 años y da la clara impresión de que sus autores estaban programando en tarjetas perforadas, pero es el más raro de los pájaros: un libro de ciencias informáticas atemporal. Hará muchas cosas mucho más claras.

tel
fuente