Soy un estudiante de física casi graduado. Mi plan es perseguir estudios de computación científica. Sé cómo programar en Python, Matlab, Julia y Pascal, pero solo conozco un poco de Fortran como lenguaje de bajo nivel. ¿Necesito aprender C / C ++?

Funcionaría enormemente para su beneficio.

Por un lado, muchos códigos científicos modernos están escritos en C ++ porque combina los beneficios de Fortran con un rico conjunto de herramientas orientadas a objetos. También tiene una gran cantidad de bibliotecas bien desarrolladas: si alguna vez decidiera que no le gustaba la informática científica por alguna razón, como programador experto en C o C ++ no le resultaría difícil realizar la transición. También significa que hay mucho menos que escribir cosas desde cero, y generalmente la gente ha pasado muchas horas en su código de biblioteca altamente optimizado. A veces, es posible que necesite una variante de algo que esté disponible y querrá poder realizar las modificaciones correctas.

Hay una razón muy importante para que todos en informática aprendan C, no solo programadores científicos. Es similar a hacer derivaciones matemáticas a mano en lugar de aplicar los resultados a ciegas. No solo entiendes de dónde viene todo, sino que obtienes mucha experiencia práctica con la mecánica de cómo se hacen las cosas de manera eficiente . Para la computación científica, la eficiencia importa casi más que cualquier otra cosa, y obtener el máximo rendimiento de sus máquinas es imposible sin entender cómo funciona en sus niveles más bajos (o en sus niveles más bajos, ya que la programación en corrientes controladas a través de transistores no es útil) ). La programación en C requiere que usted entienda cómo se utiliza la memoria y no oculta nada al respecto.

Para ser realmente efectivo en exprimir el rendimiento, incluso puede comenzar a hurgar en el ensamblaje. No es demasiado aterrador, de hecho es muy simple y lo único que lo hace difícil es que es tan detallado. Pero en algunos casos, incluso el código C no le contará toda la historia, y querrá saber cómo se manejan algunas operaciones. Eventualmente, querrá estudiar la arquitectura de una computadora y comprender cómo ciertas opciones afectan la velocidad de sus programas. Por ejemplo, querrá saber que no debe acceder a la memoria de forma esporádica, y que si fragmenta sus datos correctamente (si es posible), se integrará en los cachés de la CPU, lo que puede aumentar considerablemente su rendimiento. En la computación en paralelo, puede matar fácilmente cualquier aumento de velocidad potencial que pueda haber logrado simplemente copiando la memoria de manera ineficiente.

Aprender C es solo el comienzo de todo esto, y un mínimo para comprender los problemas de rendimiento en cualquier tipo de software. Esto no significa que debas hacer todo en C, ni mucho menos en realidad. En mi opinión, creo que la forma más eficiente de desarrollar software científico es hacer un prototipo en Python y transformar lentamente sus partes más críticas para parecerse al código C a través de las extensiones Cython y las bibliotecas numéricas rápidas como Numpy. Esto proporciona un equilibrio casi perfecto entre el tiempo de desarrollo y la eficiencia del software, y puede ser una ruta para que usted se familiarice con el lenguaje C. La parte interesante es que realmente puedes mirar el código C generado (aunque es bastante feo, es mejor que primero aprendas C de manera independiente) y ver en qué compila Python. También te recomiendo que compres el libro de programación en C de Kernighan y Ritchie, ya que es probablemente el mejor libro sobre el tema (y si puedes leer un libro de texto de matemáticas o ciencias, esto encajará).

Phython y C ++ son bastante similares. Si conoces muy bien C ++, aprender Phython es muy fácil . Pero Ya que conoces Python, entonces aprender C ++ no será un trabajo tedioso. Obviamente, aprender dos idiomas solo te dará ventaja. Python es un lenguaje fácil de usar y C ++ es un lenguaje basado en computadora.
Ejemplo (divertido) – Cuando vamos a los exámenes, preferimos tomar dos bolígrafos en lugar de uno. ¿Por qué? Entonces, en caso de que algo suceda con una pluma, podemos tener otra pluma como seguridad.
Así que aprender un idioma más, no te hará daño, mejorará tu conocimiento de codificación. Entonces, ¿por qué no aprender C / C ++ también?
No le llevará mucho tiempo aprender C ++, ya que ya conoce Python. No sé de C.

Creo que R y quizás S serían más útiles si está más interesado en el análisis de datos. C es bueno si desea entrar en el procesamiento paralelo / distribuido.