physics scientific-computing collaboration

physics - ¿Prácticas para programar en un ambiente científico?



scientific-computing collaboration (20)

¿Qué idiomas / entornos has usado para desarrollar software científico, especialmente? ¿análisis de los datos? ¿Qué bibliotecas? (Por ejemplo, ¿qué usas para trazar?)

Idiomas que he usado para numéricos y material relacionado con sicentific:

  • C (desarrollo lento, mucha depuración, casi imposible escribir código reutilizable)
  • C ++ (y aprendí a odiarlo, el desarrollo no es tan lento como C, pero puede ser un problema. Las plantillas y las clases eran geniales inicialmente, pero después de un tiempo me di cuenta de que estaba peleando con ellas todo el tiempo y encontrando soluciones para problemas de diseño del lenguaje
  • Common Lisp, que estaba bien, pero no ampliamente utilizado para la informática Sci. No es fácil de integrar con C (si se compara con otros lenguajes), pero funciona
  • Esquema. Este se convirtió en mi elección personal.

Mi editor es Emacs, aunque sí uso vim para cosas rápidas como editar archivos de configuración.

Para trazar, normalmente genero un archivo de texto y lo paso a gnuplot.

Para el análisis de datos, generalmente genero un archivo de texto y uso GNU R.

Veo mucha gente aquí usando FORTRAN (principalmente 77, pero alrededor de 90), muchos de Java y algunos de Python. No me gustan esos, así que no los uso.

¿Hubo algún tipo de capacitación para personas sin ningún fondo significativo en programación?

Creo que esto no se aplica a mí, ya que me gradué en CS, pero donde trabajo no hay capacitación formal, pero las personas (Ingenieros, Físicos, Matemáticos) se ayudan mutuamente.

¿Tenías algo así como control de versiones, seguimiento de errores?

¡El control de versiones es absolutamente importante! Guardo mi código y mis datos en tres máquinas diferentes, en dos lados diferentes del mundo: en los repositorios de Git. Los sincronizo todo el tiempo (¡así que tengo control de versiones y copias de seguridad!) No controlo los errores, aunque puedo empezar a hacerlo. Pero mis colegas no usan BTS o VCS en absoluto.

¿Cómo tratarías de crear un entorno decente para la programación, sin exagerar el camino de los científicos individuales (especialmente los físicos son personas tercas)?

Primero, les daría la mayor libertad posible. (En la Universidad donde trabajo, puedo elegir entre que alguien instale Ubuntu o Windows, o instalar mi propio sistema operativo, elegí instalar el mío. No tengo soporte de ellos y soy responsable de todo lo que sucede con mis máquinas, incluidos los problemas de seguridad, pero hago lo que quiera con la máquina).

En segundo lugar, vería a qué están acostumbrados y lo haré funcionar (¿necesita FORTRAN? Lo configuraremos. ¿Necesita C ++? No hay problema. ¿Mathematica? De acuerdo, compraremos una licencia). Luego, vea cuántos de ellos le gustaría aprender "herramientas adicionales" para ayudarlos a ser más productivos (no diga "diferentes" herramientas. Diga "adicional", por lo que no parecerá que alguien "perderá" o "dejará" ir "o lo que sea). Comience con los editores, vea si hay grupos a los que les gustaría usar VCS para sincronizar su trabajo (hey, pueden quedarse en casa y enviar su código a través de SVN o GIT, ¿no sería genial?), Y así sucesivamente. No imponer: muestre ejemplos de cuán geniales son estas herramientas. Haga un análisis de datos usando R y demuéstreles lo fácil que fue. Muestre buenos gráficos y explique cómo los ha creado (pero comience con ejemplos simples para que pueda explicarlos rápidamente ).

Fondo

El año pasado, hice una pasantía en un grupo de investigación de física en una universidad. En este grupo, usamos principalmente LabVIEW para escribir programas para controlar nuestras configuraciones, realizar adquisiciones de datos y analizar nuestros datos. Para los dos primeros propósitos, funciona bastante bien, pero para el análisis de datos, es un verdadero dolor. Además de eso, todos eran principalmente autodidactas, por lo que el código que se escribió era en general bastante desordenado (no es de extrañar que cada doctorado decidiera rápidamente reescribir todo desde cero). El control de versiones era desconocido e imposible de configurar debido a estrictas regulaciones de software y redes del departamento de TI.

Ahora, las cosas realmente funcionó sorprendentemente bien, pero ¿cómo las personas en las ciencias naturales hacen su desarrollo de software?

Preguntas

Algunas preguntas concretas:

  • ¿Qué idiomas / entornos usó para desarrollar software científico, especialmente análisis de datos? ¿Qué bibliotecas? (por ejemplo, ¿qué usas para trazar?)
  • ¿Hubo algún tipo de capacitación para personas sin ningún fondo significativo en programación?
  • ¿Tuviste algo como control de versiones y seguimiento de errores?
  • ¿Cómo tratarías de crear un entorno decente para la programación, sin exagerar el camino de los científicos individuales (especialmente los físicos son personas tercas)?

Resumen de respuestas hasta el momento

Las respuestas (o mi interpretación de ellas) hasta ahora: (2008-10-11)

  • Idiomas / paquetes que parecen ser los más utilizados:
  • El control de versiones es utilizado por casi todos los encuestados; el seguimiento de fallas y otros procesos son mucho menos comunes.
  • El curso de Software Carpentry es una buena forma de enseñar técnicas de programación y desarrollo a los científicos.
  • ¿Cómo mejorar las cosas?
    • No obligue a las personas a seguir protocolos estrictos.
    • Establezca un entorno usted mismo y demuestre los beneficios a los demás. Ayúdelos a comenzar a trabajar con control de versiones, seguimiento de errores, etc.
    • Revisar el código de otras personas puede ser útil, pero tenga en cuenta que no todos pueden apreciarlo.

¿Qué idiomas / entornos has usado para desarrollar software científico, especialmente? ¿análisis de los datos? ¿Qué bibliotecas? (Por ejemplo, ¿qué usas para trazar?)

Python, NumPy y pylab (trazado).

¿Hubo algún tipo de capacitación para personas sin ningún fondo significativo en programación?

No, pero estaba trabajando en un laboratorio de investigación multimedia, por lo que casi todos tenían conocimientos de informática.

¿Tenías algo así como control de versiones, seguimiento de errores?

Sí, Subversion para control de versiones, Trac para rastreo de errores y wiki. Puede obtener un servidor de seguimiento de errores / control de versiones gratuito desde http://www.assembla.com/ si sus TOS ajustan a su proyecto.

¿Cómo tratarías de intentar crear un entorno decente para la programación, sin llegar demasiado lejos en el camino de los científicos individuales (especialmente los físicos son personas tercas).

Asegúrese de que la infraestructura esté configurada y en buen estado e intente vender los beneficios del control de origen.


1.) Los lenguajes de scripting son populares hoy en día para la mayoría de las cosas debido a un mejor hardware. Perl / Python / Lisp prevalecen para aplicaciones livianas (automatización, cálculo de luz); Veo mucho Perl en mi trabajo (EM computacional) ya que nos gusta Unix / Linux. Para cosas de rendimiento, normalmente se usan C / C ++ / Fortran. Para computación paralela, bueno, usualmente paralelizamos manualmente las ejecuciones en EM en lugar de tener un programa que lo haga implícitamente (es decir, dividir las tareas por ángulo de visión cuando se computan secciones transversales de radar).

2.) Simplemente tratamos a la gente en la mezcla aquí. Gran parte del código que tenemos es muy desordenado, pero los científicos suelen ser un grupo disperso que no les importa ese tipo de cosas. No es ideal, pero tenemos cosas que ofrecer y tenemos una gran escasez de personal. Estamos mejorando lentamente.

3.) Usamos SVN; sin embargo, no tenemos software de seguimiento de errores. Lo mejor para nosotros es un archivo txt que le dice dónde están los errores específicos de los insectos.

4.) Mi sugerencia para implementar las mejores prácticas para los científicos: hágalo lentamente . Como científicos, normalmente no enviamos productos. Nadie en la ciencia se hace un nombre por tener un código limpio y fácil de mantener . Obtienen el reconocimiento de los resultados de ese código, por lo general. Necesitan ver la justificación para dedicar tiempo a aprender prácticas de software. Poco a poco introduzca nuevos conceptos y trate de que sigan; son científicos, entonces, después de que su propia evidencia empírica confirma la utilidad de cosas como el control de versiones, ¡comenzarán a usarlo todo el tiempo!


Definitivamente, utilice Subversion para mantener copias de instantáneas del código fuente actual, en proceso y estable. Esto incluye C ++, Java, etc. para herramientas de software de cosecha propia, y scripts rápidos para el procesamiento de una sola vez.

Con la fuerte inclinación en la ciencia y la ingeniería aplicada hacia la metodología de desarrollo de "vaquero solitario", la práctica habitual de organizar el repositorio en el tronco, la etiqueta y todo lo demás, ¡no se moleste! A los científicos y sus técnicos de laboratorio les gusta girar las perillas, mover los electrodos y buscar fugas de vacío. Es suficiente trabajo conseguir que todos estén de acuerdo, digamos Python / NumPy o sigan alguna convención de nombres; olvide intentar hacer que sigan las prácticas y convenciones de desarrolladores de software arcanos.


El curso Software Carpentry está dirigido específicamente a personas que hacen informática científica y tiene como objetivo enseñar los conceptos básicos y las lecciones de la ingeniería de software, y la mejor forma de aplicarlos a los proyectos.

Cubre temas como el control de versiones, la depuración, las pruebas, los scripts y varios otros problemas.

He escuchado alrededor de 8 o 9 de las conferencias y creo que es muy recomendable.

Editar: Los MP3 de las conferencias también están available .


En primer lugar, definitivamente usaría un lenguaje de scripting para evitar tener que explicar muchas cosas adicionales (por ejemplo, la administración manual de la memoria es, en su mayoría, correcta, si estás escribiendo material de bajo nivel, sensible al rendimiento, pero para alguien que simplemente quiere usar una computadora como una calculadora científica actualizada, definitivamente es excesivo). Además, mire a su alrededor si hay algo específico para su dominio (como lo es R para las estadísticas). Esto tiene la ventaja de que ya se trabaja con los conceptos con los que los usuarios están familiarizados y de tener códigos especializados para situaciones específicas (por ejemplo, calcular desviaciones estándar, aplicar pruebas estadísticas, etc. en el caso de R).

Si desea utilizar un lenguaje de scripting más genérico, me gustaría ir con Python. Dos cosas que tiene que hacer son:

  • El caparazón interactivo donde puedes experimentar
  • Su sintaxis clara (aunque a veces larga)

Como ventaja adicional, tiene bibliotecas para la mayoría de las cosas que le gustaría hacer con él.


Esto podría ser ligeramente tangencial, pero con suerte relevante.

Trabajé para National Instruments, R & D, donde escribí software para NI RF y kits de herramientas de comunicación. Usamos LabVIEW bastante, y aquí están las prácticas que seguimos:

  1. Fuente de control. NI usa Perforce. Hicimos lo normal: ramas dev / trunk, integración continua, las obras.
  2. Escribimos suites de prueba automatizadas.
  3. Tuvimos algunas personas que ingresaron con experiencia en procesamiento de señales y comunicación. Solíamos tener revisiones de código regulares y documentos de mejores prácticas para asegurarnos de que su código estuviera a la altura.
  4. A pesar de las revisiones de los códigos, hubo algunas ocasiones en las que los "tipos de software", como yo, tuvimos que reescribir parte de este código para mejorar la eficiencia.
  5. ¡Sé exactamente lo que quieres decir con personas tercas! ¡Tuvimos gente que solía pensar que señalar una posible mejora en el rendimiento de su código era un insulto personal directo! No hace falta decir que esto requiere una buena gestión. Pensé que la mejor manera de lidiar con esta gente es ir despacio, no forzar cambios y, si es necesario, estar preparado para hacer el trabajo sucio. [Ejemplo: escriba un conjunto de pruebas para su código].

Ex físico académico y ahora físico industrial del Reino Unido aquí:

¿Qué idiomas / entornos has usado para desarrollar software científico, especialmente? ¿análisis de los datos? ¿Qué bibliotecas? (Por ejemplo, ¿qué usas para trazar?)

Principalmente uso MATLAB (funciones de visualización y matemáticas de fácil acceso). Solía ​​usar Fortran mucho e IDL . He usado C (pero soy más un lector que un escritor de C), macros de Excel (feo y confuso). Actualmente necesito poder leer Java y C ++ (pero no puedo programar realmente en ellos) y también he pirateado Python. Para mi propio entretenimiento, ahora estoy haciendo algo de programación en C # (principalmente para obtener portabilidad / interfaces de bajo costo / bonitas). Puedo escribir Fortran con casi cualquier idioma que se me presente ;-)

¿Hubo algún tipo de capacitación para personas sin ningún fondo significativo en programación?

La mayoría (todos) de cursos de física de pregrado tendrán un pequeño curso de programación, por lo general en C, Fortran o MATLAB, pero son los conceptos básicos reales. Realmente me gustaría haber tenido algún entrenamiento en ingeniería de software en algún momento (revisión de control / prueba / diseño de sistemas de mediana escala)

¿Tenías algo así como control de versiones, seguimiento de errores?

Empecé a usar Subversion / TortoiseSVN hace relativamente poco. Los grupos con los que he trabajado han utilizado el control de revisiones. No conozco ningún grupo académico que utilice el software formal de seguimiento de errores. Todavía no uso ningún tipo de prueba sistemática.

¿Cómo tratarías de crear un entorno decente para la programación, sin exagerar el camino de los científicos individuales (especialmente los físicos son personas tercas)?

Intentaría introducir algunas ideas de ingeniería de software a nivel de pregrado y luego reforzarlas mediante la práctica a nivel de posgrado; también proporcionar sugerencias sobre recursos como el curso de Software Carpentry mencionado anteriormente.

Esperaría que una fracción significativa de los físicos académicos escriban software (no necesariamente todos) y necesitan al menos una introducción a las ideas en ingeniería de software.


Física nuclear / de partículas aquí.

  • El trabajo principal de programación solía realizarse principalmente en Fortran usando CERNLIB (PAW, MINUIT, ...) y GEANT3 , recientemente se ha realizado principalmente en C ++ con ROOT y Geant4 . Hay varias otras bibliotecas y herramientas en uso especializado, y LabVIEW ve algunos usos aquí y allá.
  • La adquisición de datos en mi extremo de este negocio a menudo ha significado un trabajo de nivel bastante bajo. A menudo en C, a veces incluso en ensamblaje, pero esto se está extinguiendo a medida que el hardware se vuelve más capaz. Por otro lado, muchas de las placas ahora están construidas con FPGA s que necesitan que la puerta se mueva ...
  • One-offs, interfaces gráficas, etc. usan casi cualquier cosa ( Tcl/Tk solía ser grande, y he estado viendo más Perl / Tk y Python / Tk últimamente) incluyendo una serie de paquetes que existen principalmente dentro de la comunidad de física de partículas .
  • Muchas personas que escriben código tienen poca o ninguna capacitación formal, y el proceso se transmite de forma muy desigual según la tradición oral, pero la mayoría de los líderes del grupo de software toman en serio el proceso y leen todo lo necesario para compensar sus deficiencias en esta área.
  • El control de versiones para las herramientas principales es omnipresente. Pero muchos programadores individuales lo descuidan por sus tareas más pequeñas. Las herramientas de seguimiento de errores formales son menos comunes, como las compilaciones nocturnas, las pruebas unitarias y las pruebas de regresión.

Para mejorar cosas:

  1. Ponte del lado de los líderes del software local
  2. Implemente el proceso que desea usar en su propia área y anime a los que deje entrar a usarlo también.
  3. Espere. Los físicos son personas empíricas. Si ayuda, lo notarán (¡eventualmente!).

Una sugerencia más para mejorar las cosas.

  1. Dedique un poco de tiempo para ayudar a las personas con las que trabaja directamente. Revisa su código Cuénteles acerca de la complejidad algorítmica / generación de código / DRY o cualquier cosa básica que nunca aprendieron porque un profesor les lanzó un libro Fortran una vez y les dijo "haz que funcione". Adoctrinate en los problemas del proceso. Son personas inteligentes, y aprenderán si les das una oportunidad.

No soy exactamente un científico "natural" (estudio el transporte) pero soy un académico que escribe mucho de mi propio software para el análisis de datos. Intento escribir todo lo que puedo en Python, pero a veces me veo obligado a utilizar otros idiomas cuando estoy trabajando para extender o personalizar una herramienta de software existente. Hay muy poca capacitación en programación en mi campo. La mayoría de las personas son autodidactas o aprenden sus habilidades de programación de clases tomadas anteriormente o fuera de la disciplina.

Soy un gran admirador del control de versiones. Utilicé Vault ejecutándose en mi servidor para todo el código de mi disertación. En este momento estoy intentando que el departamento configure un servidor Subversion, pero creo que seré el único que lo use, al menos al principio. He jugado un poco con FogBugs, pero a diferencia del control de versiones, no creo que sea tan útil para un equipo de un solo hombre.

En cuanto a animar a otros a usar el control de versiones y cosas por el estilo, ese es realmente el problema que estoy enfrentando ahora. Estoy planeando forzar a mis estudiantes de posgrado a usarlo en proyectos de investigación que están haciendo para mí, y alentarlos a usarlo para su propia investigación. Si enseño una clase que involucra programación, probablemente forzaré a los estudiantes a usar el control de versiones allí también (clasificándolos en lo que hay en el repositorio). En lo que respecta a mis colegas y sus estudiantes graduados, lo único que puedo hacer es poner a disposición un servidor y confiar en una persuasión suave y dar un buen ejemplo. Francamente, en este punto creo que es más importante lograr que realicen copias de seguridad periódicas que ponerlas en control de fuente (algunas personas están llevando a cabo la única copia de sus datos de investigación en memorias USB).



Otra buena opción es Scilab . Tiene módulos gráficos a la vista de LabVIEW , tiene su propio lenguaje de programación y también puede incorporar códigos Fortran y C, por ejemplo. Se está utilizando en los sectores público y privado, incluidas las grandes empresas industriales. Y es gratis.

Acerca del control de versiones, algunos prefieren Mercurial , ya que otorga más libertades administrando y definiendo los repositorios. No tengo experiencia con eso, sin embargo.

Para trazar utilizo Matplotlib . Pronto tendré que hacer animaciones, y he visto buenos resultados usando MEncoder . Aquí hay un example incluye una pista de audio.

Finalmente, sugiero ir modular, esto es, tratar de mantener las piezas principales de código en diferentes archivos, para que la revisión, comprensión, mantenimiento y mejora de código sean más fáciles. He escrito, por ejemplo, un módulo de Python para pruebas de integridad de archivos, otro para secuencias de procesamiento de imágenes, etc.

También debería considerar desarrollar con el uso de un depurador que le permita verificar el contenido de las variables en puntos de interrupción configurables en el código, en lugar de usar líneas de impresión. He usado Eclipse para Python y Fortran en desarrollo (aunque obtuve un error falso compilando un programa corto de Fortran con él, pero puede haber sido una mala configuración) y estoy empezando a usar el IDE de Eric para Python. Le permite depurar, administrar versiones con Subversion , tiene una consola integrada, puede hacer refactorizaciones con Bicycle Repair Man (también puede usar otra), tiene Unittest, etc. Una alternativa más ligera para Python es IDLE , incluida con Python desde la versión 2.3.

Como algunos consejos, también sugiero:

  • No usa variables de un solo caracter. Cuando desee buscar apariencias, obtendrá resultados en todas partes. Algunos argumentan que un IDE decente lo hace más fácil, pero luego dependerá de tener acceso permanente al IDE. Incluso el uso de ii, jj y kk puede ser suficiente, aunque esta elección dependerá de su idioma. (Las vocales dobles serían menos útiles si los comentarios del código se hacen en estonio, por ejemplo).

  • Comentando el código desde el principio.

  • Para aplicaciones críticas a veces es mejor confiar en las versiones de lenguaje / compilador más antiguas (versiones principales), más estables y mejor depuradas. Por supuesto, puede tener un código más optimizado en versiones posteriores, errores corregidos, etc., pero estoy hablando de usar Fortran 95 en lugar de 2003, Python 2.5.4 en lugar de 3.0, más o menos. (Especialmente cuando una nueva versión rompe la compatibilidad con versiones anteriores.) Muchas mejoras generalmente introducen muchos errores. Aún así, ¡esto dependerá de los casos de aplicación específicos! Tenga en cuenta que esta es una elección personal, muchas personas podrían argumentar en contra de esto.

  • ¡Utilice una copia de seguridad redundante y automatizada! (Con control de versiones).


Para la administración del código fuente, los sistemas centralizados como Subversion son superiores para uso científico debido al claro punto único de la verdad (SPOT). El registro de cambios y la capacidad de recuperar versiones de cualquier archivo, sin tener que buscar dónde encontrar algo, tiene enormes ventajas para el mantenimiento de registros. Herramientas como Git y Monotone : ¡Dios mío, el caos que puedo imaginar que seguiría! Tener registros precisos de qué versión de scripts de hack-job se utilizaron mientras se jugaba con el nuevo sensor cuando pasaba el bosón de Higgs o que explotó la supernova, conducirá a la felicidad.



Soy un físico que trabaja en el campo de la física de la materia condensada, construyendo modelos clásicos y cuánticos.

Idiomas:

  • C ++ - muy versátil: se puede usar para cualquier cosa, buena velocidad, pero puede ser un poco incómodo cuando se trata de MPI
  • Octave : bueno para algunos cálculos suplementarios, muy conveniente y productivo

Bibliotecas:

  • Armadillo / Blitz++ - abstracciones rápidas de matriz / matriz / cubo para C ++
  • Eigen / Armadillo - álgebra lineal
  • GSL - para usar con C
  • LAPACK / BLAS / ATLAS - extremadamente grande y rápido, pero menos conveniente (y escrito en FORTRAN)

Gráficos:

  • GNUPlot : tiene una salida muy limpia y ordenada, pero no tan productiva a veces
  • Origin : muy conveniente para trazar

Herramientas de desarrollo:

  • Vim + complementos - funciona genial para mí
  • GDB : una gran herramienta de depuración cuando se trabaja con C / C ++
  • Code::Blocks : lo utilicé por un tiempo y lo encontré bastante cómodo, pero Vim es aún mejor en mi opinión.

Sugeriría F # como candidato potencial para realizar manipulaciones relacionadas con la ciencia dado su fuerte vínculo semántico con las construcciones matemáticas.

Además, su soporte para unidades de medida, tal como está escrito aquí, tiene mucho sentido para garantizar una traducción adecuada entre el modelo matemático y el código fuente de implementación.


Trabajo como físico en una universidad del Reino Unido.

Tal vez debería enfatizar que diferentes áreas de investigación tienen un énfasis diferente en la programación. Los físicos de partículas (como dmckee) hacen modelos computacionales casi exclusivamente y pueden colaborar en grandes proyectos de software, mientras que personas en campos como el mío (materia condensada) escriben códigos con relativa poca frecuencia. Sospecho que la mayoría de los científicos caen en el último campo. Yo diría que las habilidades de codificación generalmente se consideran útiles en física, pero no esenciales, al igual que las habilidades de física / matemáticas se consideran útiles para los programadores pero no esenciales. Teniendo esto en cuenta...

  • ¿Qué idiomas / entornos has usado para desarrollar software científico, especialmente? ¿análisis de los datos? ¿Qué bibliotecas? (Por ejemplo, ¿qué usas para trazar?)

Comúnmente, el análisis y trazado de datos se realiza utilizando paquetes genéricos de análisis de datos como IGOR Pro , ORIGIN , Kaleidegraph , que pueden considerarse como ''Excel plus''. Estos paquetes suelen tener un lenguaje de scripts que se puede usar para automatizar. El análisis más especializado puede tener una utilidad dedicada para el trabajo que generalmente se habrá escrito hace mucho tiempo, nadie tiene la fuente y tiene muchas fallas. Algunos tipos más de tecnología podrían utilizar los idiomas que se han mencionado (Python, R, MatLab con Gnuplot para trazar).

El software de control se hace comúnmente en LabVIEW, aunque en realidad usamos Delphi, que es algo inusual.

  • ¿Hubo algún tipo de capacitación para personas sin ningún fondo significativo en programación?

He asistido a seminarios sobre computación grid, visualización 3D, aprendizaje de Boost, etc. impartidos por ambas universidades en las que he estado. Como estudiante, nos enseñaron VBA para Excel y MatLab, pero C / MatLab / LabVIEW es más común.

  • ¿Tenías algo así como control de versiones, seguimiento de errores?

No, aunque las personas tienen configuraciones de desarrollo personal. Nuestro código base se encuentra en una carpeta compartida en un ''servidor'' que se mantiene actualizado con una herramienta de sincronización.

  • ¿Cómo tratarías de crear un entorno decente para la programación, sin exagerar el camino de los científicos individuales (especialmente los físicos son personas tercas)?

¡Un paso a la vez! Estoy tratando de reemplazar la carpeta compartida con algo un poco más sólido, tal vez encontrar un cliente SVN que imite el comportamiento de las herramientas de sincronización actuales ayudaría.

Aunque, en general, diría que para la mayoría de los proyectos de ciencias naturales, el tiempo generalmente se invierte mejor investigando.


¿Qué idiomas / entornos has usado para desarrollar software científico, especialmente? ¿análisis de los datos? ¿Qué bibliotecas? (Por ejemplo, ¿qué usas para trazar?)

Mi departamento de física de pregrado impartió clases en LabVIEW y lo usé ampliamente en sus proyectos de investigación.

La otra alternativa es MATLAB , en la que no tengo experiencia. Hay campamentos para cualquiera de los productos; cada uno tiene sus propias ventajas / desventajas. Según el tipo de problemas que deba resolver, un paquete puede ser más preferible que el otro.

En cuanto al análisis de datos, puede usar cualquier tipo de procesador de números que desee. Idealmente, puede hacer los cálculos difíciles en el lenguaje X y formatear la salida para trazar bien en Excel, Mathcad , Mathematica o lo que sea que sea el sistema de trazado de sabor du jour. No esperes estandarización aquí.

¿Tenías algo así como control de versiones, seguimiento de errores?

Mirando hacia atrás, no lo hicimos, y hubiera sido más fácil para todos si lo hubiéramos hecho. ¡Nada como romper todo y luchar durante horas para arreglarlo!

Definitivamente use control de fuente para cualquier código común. Aliente a las personas a escribir su código de una manera que podría hacerse más genérica. Esto es solo una codificación de mejores prácticas. Realmente, deberías tenerlos enseñando (o tomando) una clase de ciencias de la computación para que puedan obtener los conceptos básicos.

¿Cómo tratarías de crear un entorno decente para la programación, sin exagerar el camino de los científicos individuales (especialmente los físicos son personas tercas)?

Hay una clara división entre adquisición de datos (DAQ) y análisis de datos. Es decir, es posible estandarizar en el DAQ y luego permitir que los científicos jueguen con los datos en el programa de su elección.


¿Qué idiomas / entornos has usado para desarrollar software científico, especialmente? ¿análisis de los datos? ¿Qué bibliotecas? (Por ejemplo, ¿qué usas para trazar?)

Solía ​​trabajar para Enthought , el principal patrocinador corporativo de SciPy . Colaboramos con científicos de las compañías que contrataron a Enthought para el desarrollo de software personalizado. Python / SciPy parecía ser un entorno cómodo para los científicos. Es mucho menos intimidante para empezar que decir C + + o Java si eres un científico sin experiencia en software.

El Enthought Python Distribution viene con todas las bibliotecas de computación científica que incluyen análisis, trazado, visualación 3D, etc.

¿Hubo algún tipo de capacitación para personas sin ningún fondo significativo en programación?

Enthought ofrece formación en SciPy y la comunidad SciPy es bastante buena respondiendo preguntas en las listas de correo.

¿Tenías algo así como control de versiones, seguimiento de errores?

Sí, y sí (Subversion y Trac). Como trabajábamos en colaboración con los científicos (y normalmente de forma remota con ellos), el control de versiones y el seguimiento de errores eran esenciales. Tomó algunos consejos para que algunos científicos internalizaran los beneficios del control de versiones.

¿Cómo tratarías de crear un entorno decente para la programación, sin exagerar el camino de los científicos individuales (especialmente los físicos son personas tercas)?

Asegúrese de que estén familiarizados con la cadena de herramientas. Toma una inversión por adelantado, pero los hará sentir menos inclinados a rechazarla en favor de algo más familiar (Excel). Cuando las herramientas les fallan (y lo harán), asegúrese de que tengan un lugar donde buscar ayuda: listas de correo, grupos de usuarios, otros científicos y desarrolladores de software en la organización. Cuanta más ayuda hay para hacer que vuelvan a hacer física, mejor.


Soy un estadístico en una universidad en el Reino Unido. En general, las personas aquí usan R para el análisis de datos, es bastante fácil de aprender si conoces C / Perl. Su poder real está en la forma en que puede importar y modificar datos de forma interactiva. Es muy fácil tomar un número de archivos de CSV (o Excel) y combinarlos, crear nuevas columnas basadas en otras y luego lanzarlas a un GLM, GAM u otro modelo. El trazado también es trivial y no requiere el conocimiento de un lenguaje completamente nuevo (como PGPLOT o GNUPLOT). Por supuesto, también tiene la ventaja de tener un montón de funciones incorporadas (a partir de cosas simples como la media, la desviación estándar, etc. el camino a las redes neuronales, splines y trazado GL.)

Habiendo dicho esto, hay un par de problemas. Con conjuntos de datos muy grandes, R puede volverse muy lenta (solo he visto esto con conjuntos de datos de> 50,000x30) y dado que se interpreta, no se obtiene la ventaja de Fortran / C a este respecto. Pero, puede (muy fácilmente) hacer que R llame bibliotecas compartidas de C y Fortran (ya sea a partir de algo como netlib o las que usted mismo ha escrito). Por lo tanto, un flujo de trabajo habitual sería:

  • Resuelve qué hacer.
  • Prototipo del código en R.
  • Ejecute algunos análisis preliminares.
  • Vuelva a escribir el código lento en C o Fortran y llame a eso desde R.

Lo cual funciona muy bien para mi

Soy una de las únicas personas en mi departamento (de> 100 personas) que usa el control de versiones (en mi caso, usando git con githuib.com). Esto es bastante preocupante, pero simplemente no parecen estar interesados ​​en probarlo y están contentos con pasar archivos zip (yuck)

Mi sugerencia sería continuar usando LabView para la adquisición (y tal vez tratando de lograr que sus compañeros de trabajo acuerden un conjunto de herramientas para la adquisición y fabricación esté disponible para todos) y luego pasar a exportar los datos a un archivo CSV (o similar) y haciendo el análisis en R. Realmente tiene muy poco sentido reinventar la rueda a este respecto.