¿Por qué las personas que provienen de un entorno de física tienden a usar C ++?

C ++ es rápido . Es muy útil cuando tiene que cargar una gran cantidad de datos y no está particularmente interesado en permitir la latencia. El CERN genera 50,000 GB en una ejecución del LHC, una gran cantidad de datos que debe analizar en un tiempo razonable. Python, en comparación, es lento y no es adecuado para operaciones vinculadas a la memoria.

C ++ es optimizable . Está lo suficientemente cerca del hardware para permitir una optimización notablemente buena, y su gestión explícita de la memoria significa que puede tener algunas aceleraciones muy rápidas. No es tan de bajo nivel como C, aunque no es tan de alto nivel que pierde la noción de lo que se propone lograr.

C ++ es popular . Muchos sistemas sobreviven con código heredado, construido mucho antes de que Java y Python se pusieran de moda. Los primeros físicos que construyeron esos sistemas usaron C ++, se lo enseñaron a sus alumnos, quienes a su vez lo enseñaron a sus alumnos, y así sucesivamente. Cuando eres físico y estás aprendiendo a codificar por primera vez, es mucho más probable que adoptes un lenguaje para el que tu laboratorio tenga un amplio respaldo.

C ++ está en todas partes . Muchos sistemas de recopilación de datos solo necesitan algo un poco más alto que el ensamblador. Los físicos no solo están involucrados en la codificación, también están ocupados haciendo los instrumentos que eventualmente vuelan al espacio o se sientan en laboratorios subterráneos. Eso significa que necesita sistemas de microprocesador, y debe poder codificar esos sistemas de microprocesador, y muy a menudo esos sistemas de microprocesador se prestan a un uso fácil de C ++: Arduinos, por ejemplo, usa C ++ como su idioma predeterminado. ¿Por qué permanecer distante cuando su experimento depende de algo como esto?

Dicho esto, no es tan común como pretendes que sea. Yo mismo no conozco C ++, y la mayoría de los físicos teóricos que conozco se sienten mucho más cómodos usando algo como Mathematica, Sage o Python. Los físicos experimentales tienden a estar en todo el espectro, usando C ++ y cualquier cosa a la mano para realmente poner en funcionamiento sus sistemas, mientras que aquellos que trabajan con grandes conjuntos de datos terminan usando MATLAB, IDL o C ++. Un puñado de físicos conoce Java, particularmente si están haciendo actividades de divulgación o creando aplicaciones móviles (realmente, se sorprendería de lo útil que puede ser una notificación push si tiene equipos de laboratorio sensibles en funcionamiento). Usar procesos de shell y Linux no es infrecuente. Los físicos de partículas, en particular, son conocidos por usar ROOT, una plataforma de trazado basada en Linux y difícil de usar si no sabes lo que estás haciendo.

Los físicos, como los ingenieros de software, están en todo el espectro de codificación y software. Algunos son realmente buenos para implementar procesos multiproceso; otros en algoritmos numéricos de alta velocidad; otros en visualizaciones impresionantes; otros en la recolección de datos. El sesgo de muestreo probablemente tenga la culpa de darle esta impresión errónea del físico exclusivo de C ++.

Soy físico y uso C ++. Quizás la razón principal por la que uso C ++ es porque fue lo que me enseñaron en la escuela, probablemente bajo la creencia de que C ++ era el único lenguaje de programación “real”. En ese momento, Python aún no era genial. Solo después aprendí MATLAB.

Al principio, era muy, muy escéptico sobre MATLAB. La razón principal es que desconfío de los algoritmos de caja negra. Con C ++ puedo decir qué operaciones exactas condujeron a los resultados que intento publicar. Finalmente comencé a usarlo, y funciona muy bien para el 95% de los problemas. Dado que está muy relacionado con las matemáticas de doble precisión, no puede resolver problemas que requieren tipos de precisión extendida (doble largo). Me encuentro con un par de estos problemas al año. En C ++ también puede hackear sus algoritmos numéricos para usar información específica sobre su problema. Esto, combinado con la naturaleza nativa del lenguaje y la disponibilidad de compiladores muy buenos (el compilador Intel es particularmente bueno), hace que algunos algoritmos numéricos C ++ se ejecuten como 10 veces más rápido que sus homólogos de MATLAB. Esto es crítico para los algoritmos que tardan una semana en ejecutarse en C ++.

C ++ es una herramienta útil. Una vez que haya desarrollado algunas bibliotecas (como envoltorios para GNUPLOT y para comunicarse con los instrumentos a través de GPIB, serial y USBTMC), puede piratear un código para un experimento literalmente en el tiempo que tarda LabView en comenzar. Además, el software propietario tiene problemas de licencia (no puede simplemente instalar copias en todas sus computadoras, por lo que una máquina termina atada a un experimento), está restringido a ciertas plataformas y le gusta cerrar sin guardar los cambios cuando falla la conexión de red y pierde la comunicación con el servidor de licencias. Esto es terrible para largos experimentos.

Por estas razones, uso C ++ con bastante frecuencia y apoyo continuar enseñándolo a los graduados en física.

Es cierto que C ++ se usa ampliamente para personas con antecedentes físicos o de ingeniería. Cuando estaba en la escuela de ingeniería (mediados de los 90), el idioma prominente era fortran. Fortran es un gran lenguaje para el cálculo científico, rápido y confiable. Fortran es un lenguaje muy conservador que no ha evolucionado en absoluto desde 1977 (FORTRAN 77) hasta 1995 y los compiladores eran caros, mientras que C estaba ganando más adeptos, C ++ fue visto como una evolución natural de C con un rendimiento comparable, por lo que C ++ fue adoptada rápidamente, Java fue visto como una evolución de C ++. Pero Java era muy lento y el rendimiento en ingeniería es un problema, por lo que nos atenemos a C y C ++. El otro lenguaje que gana más popularidad es Python, tal vez sea el próximo C ++.

C ++:
1) Es de uso general. La computación científica implica no solo la suma de números, sino también las tareas de interfaz de usuario, procesamiento previo y procesamiento posterior. Tiene toneladas de bibliotecas disponibles para C ++ (y C) para realizar estas tareas (numéricas y otras), por lo que su programa se puede vincular fácilmente.

2) más rápido. El código compilado de C ++ (también C y Fortran) está más cerca de lo que la máquina entiende (por ejemplo, int, debe declararse doble) y, por lo tanto, el compilador puede optimizarlo. Muchas implementaciones de Matlab / Python (SciPy, NumPy) se ajustan a las bibliotecas C / C ++ / Fortran (BLAS, LAPACK). Agregue también paralelización, MPI y OpenMP solo admiten e interactúan con los programas C / C ++ y Fortran.

3) Software de calidad de producción. Con las últimas bibliotecas de plantillas estándar y potentes (STL) de C ++ 11, encontré que programar código de calidad en C ++ es mucho más fácil. Los contenedores STL (vectores, mapas, hash conocidos como mapa_ordenados), iteradores, flujos de E / S y manejo de cadenas, algoritmos, punteros inteligentes, prueba / captura, etc. excepciones, reasignaciones dinámicas. Fortran es ideal para el cálculo de números, pero carece de muchas de estas características estándar de C ++ (muchas disponibles en boost pre-C ++ 11).
Por lo tanto, no tiene que reinventar la rueda como en Fortran.

4) Mantenimiento: los objetos C ++, lambdas y plantillas hacen que el código sea más fácil de mantener. Los objetos agregan modularidad al código, mientras que el uso de lambdas y plantillas puede reducir drásticamente el número de líneas de códigos.

5) Matlab y Python son fáciles de aprender y posiblemente podrían satisfacer sus necesidades. Pero para muchas aplicaciones que involucran la reducción de números, necesita algo más potente (principalmente C / C ++ / Fortran). Como escuché antes, Python / Matlab son como una bicicleta (fácil de aprender, te lleva al punto A al punto B con poca curva de aprendizaje), mientras que C ++ es como un automóvil (curva de aprendizaje más empinada pero te lleva más lejos y es más rápido). Creo que Fortran es el viejo y poderoso auto antiguo que funciona y nadie quiere tocarlo, pero solo lo mantiene, ya que sería más costoso rediseñarlo (no está roto, no está arreglado).

Este fenómeno que notas es completamente debido a problemas de rendimiento, mezclado con las demandas de la informática científica.

Apostaría a que casi todos los físicos con un doctorado están familiarizados con al menos un lenguaje lento, pero fácil de usar, como python / numpy o matlab. Aquellos que necesitan ejecutar códigos grandes en máquinas grandes (que es mucha, mucha gente) deben conocer C / C ++ y, a veces, deben conocer Fortran o incluso CUDA / openCL. Es difícil exagerar la importancia de la computación para la ciencia moderna, y C / C ++ / Fortran son los motores que impulsan las simulaciones más grandes.

Solía ​​ser Fortran, ahora (o ambos) C ++. Pero el futuro es el lenguaje de Julia.

Para citar a George Hagstrom “casi todos los físicos con un doctorado están familiarizados con al menos un lenguaje lento pero fácil de usar, como python / numpy o matlab. Aquellos que necesitan ejecutar códigos grandes en máquinas grandes (que es mucha gente) ) debe conocer C / C ++ y, a veces, debe conocer Fortran o incluso CUDA / openCL “.

Con Julia puedes tenerlo todo en un solo idioma. Explicado por el profesor Alan Edelman de MIT en menos de 4 minutos, por qué Julia es genial, como en física y matemáticas (pero yo diría que la mayoría de las cosas):

[Nota: está en la lista como uno de los diseñadores, supongo que era el supervisor de doctorado Jeff Bezanson (otro de los 5 diseñadores originales (¿ahora en cientos?) O ¿no debería decir que el diseñador / devoluper principal?), Su tesis está en marcha Lenguaje Julia / por qué es genial, una buena lectura ..]

Puede ser solo de su área local. En mi área, es mucho más probable que usen MATLAB para toda su programación relacionada con las matemáticas, y algunos de ellos aprenden LabVIEW para el control de instrumentos. Solo unos pocos conocen C ++, pero rara vez lo usan, prefiriendo Python.

Si nos fijamos en los físicos de la vieja escuela (piense en la década de 1970), todos usaron FORTRAN.

Me gradué en física y luego aprendí C ++ … Todavía lo prefiero a otros lenguajes de computadora, pero recurro a otros porque C ++ no es adecuado para todo.

Creo que es que C ++ te da la sensación de estar cerca de la máquina y tratar con bits y bytes directamente. Tipos de física como las máquinas, por supuesto. Es técnicamente más exigente que muchos otros idiomas, lo que para una persona que le gusta la física no es un problema. Si tiene una mentalidad muy técnica, otros idiomas pueden sentirse de alguna manera demasiado “suaves” y como si lo estuvieran complaciendo a costa de la eficiencia.

Si va un paso más allá y trabaja con lenguaje ensamblador, en realidad está haciendo lo que se siente casi similar a algunas de las matemáticas que probablemente haya encontrado en un grado de física, por ejemplo, en física de estado sólido.

Sin embargo, no creo que sea necesariamente relevante para la disciplina, excepto que puede procesar muchos datos rápidamente con ella.

Estoy de acuerdo con la mayoría de las personas aquí, también me gustaría mencionar que es fácil de escribir código que es fácil de leer y que el compilador haga el trabajo con cosas como la sobrecarga del operador y las plantillas.
Por ejemplo, agregue dos matrices 4X4 ay b. puede crear una clase de matriz y sobrecargar el operador + y simplemente hacer “a + b”, donde hay otros idiomas, probablemente tenga una función para hacer la suma al tomar los dos objetos

Los objetos son una buena forma de modelar problemas físicos complejos, y C ++ es el lenguaje OO más rápido.

Porque creen que C ++ es rápido para lo que consideran computación científica. Muy pocos físicos intentan ser pioneros en lo que es la informática científica y, en consecuencia, muy pocos necesitan aprender otras herramientas.

En mi caso, es porque entré en un tipo de programación de ingeniería: hacer que las cosas sucedan, conectadas a entradas y salidas del mundo real. Y C ++ domina en ese campo, tanto por rendimiento como porque a menudo es el único lenguaje disponible en un entorno integrado.

Creo que ese tipo de tarea atrae a los tipos de física, y hacen relativamente poca programación de tipo de interfaz humana o minería de datos, por lo que C ++ es menos favorecido.

Inicialmente aprendí ADA en las clases de programación UW CS y lo usé para mi primer semestre de Análisis Numérico. Sin embargo, después de que terminó mi clase de DS, ya no tenía acceso a ADA y me cambié a C. C ++ no es tan bueno como ADA para hacer análisis numéricos, pero es mucho mejor que fortran, aunque Fortran solía ser El lenguaje científico primario. Además, C ++ es barato y fácil de adquirir y permite la programación basada en objetos.

More Interesting

Si la computación cuántica un día reemplaza la computación binaria tradicional, ¿cómo afectará la forma en que programamos y qué tipo de problemas nuevos para los desarrolladores surgirían de esto?

¿Cómo puedo aprender los conceptos básicos sobre las computadoras cuánticas?

¿Qué tan difícil sería construir un acelerador de partículas decente para un grupo de estudiantes universitarios mecatrónicos?

Teóricamente, ¿cómo podrían las computadoras cuánticas ayudar a los neurocientíficos a comprender el cerebro humano?

¿Hay alguna forma de ejecutar programas simples de computación cuántica en una PC?

¿Cuál es la mejor computadora para comprar para descifrar el cifrado?

¿Dónde está la próxima revolución en la informática: transistores / computadoras cuánticas cada vez más pequeñas, o la ciencia de la información que las utilizará?

¿El autoensamblaje de ADN es más avanzado como tecnología informática que la computación cuántica?

¿Cuántos flops haría una computadora cuántica que procesa 50 qubits por segundo?

¿El resultado del experimento de borrador cuántico de elección retardada depende de la razón de probabilidad del divisor de haz?

¿Cómo colapsan las mediciones las funciones de onda cuántica?

¿Qué impacto inmediato tendrán los transistores de un solo átomo y estamos más cerca de la computación cuántica?

¿Por qué representamos los estados de un qubit como vectores?

¿Por qué un qubit tiene un tiempo de coherencia diferente de otro?

¿Tendría alguna ventaja un filtro Bloom cuántico sobre su contraparte clásica?