Pratiques de programmation dans un environnement scientifique? [fermé]


91

Contexte

L'année dernière, j'ai effectué un stage dans un groupe de recherche en physique dans une université. Dans ce groupe, nous avons principalement utilisé LabVIEW pour écrire des programmes pour contrôler nos configurations, faire l'acquisition de données et analyser nos données. Pour les deux premiers objectifs, cela fonctionne assez bien, mais pour l'analyse des données, c'est vraiment pénible. En plus de cela, tout le monde était principalement autodidacte, donc le code qui était écrit était généralement un gâchis (pas étonnant que chaque doctorant ait rapidement décidé de tout réécrire à partir de zéro). Le contrôle de version était inconnu et impossible à mettre en place en raison des réglementations strictes en matière de logiciels et de réseaux du service informatique.

Maintenant, les choses ont fonctionné étonnamment bien, mais comment les gens des sciences naturelles font-ils leur développement logiciel?

Des questions

Quelques questions concrètes:

  • Quels langages / environnements avez-vous utilisés pour développer des logiciels scientifiques, en particulier l'analyse de données? Quelles bibliothèques? (par exemple, qu'utilisez-vous pour tracer?)
  • Y a-t-il eu une formation pour des personnes sans expérience significative en programmation?
  • Aviez-vous quelque chose comme le contrôle de version et le suivi des bogues?
  • Comment feriez-vous pour essayer de créer un environnement décent pour la programmation, sans trop gêner les scientifiques individuels (en particulier les physiciens sont des gens têtus!)

Résumé des réponses à ce jour

Les réponses (ou mon interprétation d'entre elles) jusqu'à présent: (2008-10-11)

  • Langues / packages qui semblent être les plus utilisés:
    • LabVIEW
    • Python
      • avec SciPy , NumPy , PyLab , etc. (voir aussi la réponse de Brandon pour les téléchargements et les liens)
    • C / C ++
    • MATLAB
  • Le contrôle de version est utilisé par presque tous les répondants; le suivi des bogues et d'autres processus sont beaucoup moins courants.
  • Le cours Software Carpentry est un bon moyen d'enseigner les techniques de programmation et de développement aux scientifiques.
  • Comment améliorer les choses?
    • Ne forcez pas les gens à suivre des protocoles stricts.
    • Créez vous-même un environnement et montrez-en les avantages aux autres. Aidez-les à commencer à travailler eux-mêmes avec le contrôle de version, le suivi des bogues, etc.
    • La révision du code des autres peut aider, mais sachez que tout le monde ne peut pas l'apprécier.

Réponses:


27

Quels langages / environnements avez-vous utilisés pour développer des logiciels scientifiques, en particulier. l'analyse des données? Quelles bibliothèques? (Par exemple, qu'utilisez-vous pour tracer?)

J'avais l'habitude de travailler pour Enthought , le principal commanditaire de SciPy . Nous avons collaboré avec des scientifiques des entreprises qui ont engagé Enthought pour le développement de logiciels personnalisés. Python / SciPy semblait être un environnement confortable pour les scientifiques. Il est beaucoup moins intimidant de commencer que de dire C ++ ou Java si vous êtes un scientifique sans expérience en logiciel.

La distribution Enthought Python est fournie avec toutes les bibliothèques de calcul scientifique, y compris l'analyse, le traçage, la visualisation 3D, etc.

Y a-t-il eu une formation pour des personnes sans expérience significative en programmation?

Enthought propose une formation SciPy et la communauté SciPy est assez bonne pour répondre aux questions sur les listes de diffusion.

Aviez-vous quelque chose comme le contrôle de version, le suivi des bogues?

Oui et oui (Subversion et Trac). Comme nous travaillions en collaboration avec les scientifiques (et généralement à distance d'eux), le contrôle de version et le suivi des bogues étaient essentiels. Il a fallu un certain encadrement pour que certains scientifiques intériorisent les avantages du contrôle de version.

Comment feriez-vous pour essayer de créer un environnement décent pour la programmation, sans trop gêner les scientifiques individuels (en particulier les physiciens sont des gens têtus!)

Assurez-vous qu'ils sont familiarisés avec la chaîne d'outils. Cela demande un investissement initial, mais cela les rendra moins enclins à le rejeter au profit de quelque chose de plus familier (Excel). Lorsque les outils échouent (et ils le feront), assurez-vous qu'ils ont un endroit où aller pour obtenir de l'aide - listes de diffusion, groupes d'utilisateurs, autres scientifiques et développeurs de logiciels dans l'organisation. Plus il y a d'aide pour les remettre à la physique, mieux c'est.


21

Le cours Software Carpentry s'adresse spécifiquement aux personnes faisant de l'informatique scientifique et vise à enseigner les bases et les leçons du génie logiciel, et la meilleure façon de les appliquer à des projets.

Il couvre des sujets tels que le contrôle de version, le débogage, les tests, les scripts et divers autres problèmes.

J'ai écouté environ 8 ou 9 des conférences et je pense que c'est fortement recommandé.

Edit: Les MP3 des conférences sont également disponibles .


16

Physique nucléaire / des particules ici.

  • Auparavant, d'importants travaux de programmation se faisaient principalement à Fortran en utilisant CERNLIB (PAW, MINUIT, ...) et GEANT3 , récemment ils l'ont été principalement en C ++ avec ROOT et Geant4 . Il existe un certain nombre d'autres bibliothèques et outils à usage spécialisé, et LabVIEW voit une certaine utilité ici et là.
  • L'acquisition de données dans ma partie de cette entreprise a souvent signifié un travail de faible niveau. Souvent en C, parfois même en assemblage, mais cela s'éteint à mesure que le matériel devient plus performant. D'autre part, de nombreuses cartes sont désormais construites avec des FPGA qui nécessitent un twiddling de porte ...
  • Les éléments ponctuels, les interfaces graphiques, etc. utilisent presque tout ( Tcl / Tk était autrefois gros, et j'ai vu plus de Perl / Tk et Python / Tk ces derniers temps), y compris un certain nombre de packages qui existent principalement dans la communauté de la physique des particules .
  • De nombreuses personnes qui écrivent du code ont peu ou pas de formation formelle et le processus est transmis de manière très inégale par la tradition orale, mais la plupart des chefs de groupe de logiciels prennent le processus au sérieux et lisent autant que nécessaire pour combler leurs lacunes dans ce domaine.
  • Le contrôle de version des principaux outils est omniprésent. Mais de nombreux programmeurs individuels la négligent pour leurs petites tâches. Les outils formels de suivi des bogues sont moins courants, tout comme les builds nocturnes, les tests unitaires et les tests de régression.

Pour améliorer les choses:

  1. Soyez du bon côté des leaders logiciels locaux
  2. Mettez en œuvre le processus que vous souhaitez utiliser dans votre propre région et encouragez ceux que vous laissez entrer à l'utiliser également.
  3. Attendre. Les physiciens sont des personnes empiriques. Si cela aide, ils le remarqueront (éventuellement!).

Encore une suggestion pour améliorer les choses.

  1. Mettez un peu de temps à aider les personnes avec lesquelles vous travaillez directement. Passez en revue leur code. Parlez-leur de la complexité algorithmique / de la génération de code / du DRY ou de toute autre chose de base qu'ils n'ont jamais apprise parce qu'un professeur leur a jeté un livre Fortran une fois et a dit "faites que ça marche". Endoctrinez-les sur les problèmes de processus. Ce sont des gens intelligents et ils apprendront si vous leur donnez une chance.

11

Cela pourrait être légèrement tangentiel, mais, espérons-le, pertinent.

J'ai travaillé pour National Instruments, R&D, où j'ai écrit des logiciels pour les toolkits NI RF & Communication. Nous avons beaucoup utilisé LabVIEW, et voici les pratiques que nous avons suivies:

  1. Contrôle de la source. NI utilise Perforce. Nous avons fait la chose habituelle - les branches dev / trunk, l'intégration continue, les travaux.
  2. Nous avons écrit des suites de tests automatisées.
  3. Nous avons eu quelques personnes qui sont venues avec une formation dans le traitement du signal et la communication. Nous avions l'habitude d'avoir des revues de code régulières et des documents sur les meilleures pratiques pour nous assurer que leur code était à la hauteur.
  4. Malgré les révisions de code, il y a eu quelques occasions où des «gars du logiciel», comme moi, ont dû réécrire une partie de ce code pour plus d'efficacité.
  5. Je sais exactement ce que tu veux dire à propos des gens têtus! Nous avions des gens qui pensaient que signaler une amélioration potentielle des performances de leur code était une insulte personnelle directe! Il va sans dire que cela nécessite une bonne gestion. Je pensais que la meilleure façon de traiter avec ces gens était d'aller lentement, de ne pas insister pour que des changements soient apportés et, si nécessaire, d'être prêt à faire le sale boulot. [Exemple: écrire une suite de tests pour leur code].

9

Je ne suis pas exactement un scientifique «naturel» (j'étudie les transports) mais je suis un universitaire qui écrit beaucoup de mes propres logiciels d'analyse de données. J'essaie d'écrire autant que je peux en Python, mais parfois je suis obligé d'utiliser d'autres langages lorsque je travaille sur l'extension ou la personnalisation d'un outil logiciel existant. Il y a très peu de formation en programmation dans mon domaine. La plupart des gens sont soit autodidactes, soit ont appris leurs compétences en programmation à partir de cours suivis auparavant ou en dehors de la discipline.

Je suis un grand fan du contrôle de version. J'ai utilisé Vault sur mon serveur domestique pour tout le code de ma thèse. En ce moment, j'essaie de faire en sorte que le département mette en place un serveur Subversion, mais je suppose que je serai le seul à l'utiliser, du moins au début. J'ai joué un peu avec FogBugs, mais contrairement au contrôle de version, je ne pense pas que ce soit presque aussi utile pour une équipe composée d'un seul homme.

Quant à encourager les autres à utiliser le contrôle de version et autres, c'est vraiment le problème auquel je suis confronté maintenant. Je prévois de forcer mes étudiants diplômés à l'utiliser sur des projets de recherche qu'ils font pour moi et de les encourager à l'utiliser pour leurs propres recherches. Si j'enseigne une classe impliquant la programmation, je vais probablement forcer les étudiants à utiliser le contrôle de version là aussi (en les notant sur ce qui est dans le référentiel). En ce qui concerne mes collègues et leurs étudiants diplômés, tout ce que je peux vraiment faire est de mettre à disposition un serveur et de compter sur une persuasion douce et de donner le bon exemple. Franchement, à ce stade, je pense qu'il est plus important de leur faire faire des sauvegardes régulières que de les contrôler à la source (certaines personnes transportent la seule copie de leurs données de recherche sur des clés USB).


7

1.) Les langages de script sont populaires de nos jours pour la plupart des choses en raison d'un meilleur matériel. Perl / Python / Lisp sont répandus pour les applications légères (automatisation, calcul léger); Je vois beaucoup de Perl à mon travail (EM de calcul) puisque nous aimons Unix / Linux. Pour les performances, C / C ++ / Fortran est généralement utilisé. Pour le calcul parallèle, eh bien, nous parallélisons généralement manuellement les exécutions dans EM au lieu d'avoir un programme le faire implicitement (c'est-à-dire diviser les travaux par angle de vue lors du calcul des sections efficaces du radar).

2.) Nous jetons juste les gens dans le mélange ici. Une grande partie du code que nous avons est très compliquée, mais les scientifiques sont généralement un groupe dispersé qui ne se soucie pas de ce genre de chose. Pas idéal, mais nous avons des choses à faire et nous manquons cruellement de personnel. Nous nous améliorons lentement.

3.) Nous utilisons SVN; cependant, nous n'avons pas de logiciel de suivi des bogues. Un fichier txt qui vous indique où se trouvent les bogues spécifiques aux bogues est à peu près aussi bon que possible.

4.) Ma suggestion pour mettre en œuvre les meilleures pratiques pour les scientifiques: faites-le lentement . En tant que scientifiques, nous n'expédions généralement pas de produits. Personne en science ne se fait un nom en ayant un code propre et maintenable . Ils sont généralement reconnus par les résultats de ce code. Ils ont besoin de voir une justification pour passer du temps à apprendre les pratiques des logiciels. Introduisez lentement de nouveaux concepts et essayez de les faire suivre; ce sont des scientifiques, donc après que leurs propres preuves empiriques aient confirmé l'utilité de choses comme le contrôle de version, ils commenceront à l'utiliser tout le temps!



5

Je suis physicien travaillant dans le domaine de la physique de la matière condensée, construisant des modèles classiques et quantiques.

Langues:

  • C ++ - très polyvalent: peut être utilisé pour n'importe quoi, bonne vitesse, mais cela peut être un peu gênant en MPI
  • Octave - bon pour certains calculs supplémentaires, très pratique et productif

Bibliothèques:

  • Tatou / Blitz ++ - abstractions rapides de tableaux / matrices / cubes pour C ++
  • Eigen / Armadillo - Algèbre linéaire
  • GSL - à utiliser avec C
  • LAPACK / BLAS / ATLAS - extrêmement gros et rapide, mais moins pratique (et écrit en FORTRAN)

Graphique:

  • GNUPlot - il a une sortie très propre et soignée, mais parfois pas si productive
  • Origine - très pratique pour le traçage

Outils de développement:

  • VigueurPlugins + - cela fonctionne très bien pour moi
  • GDB - un excellent outil de débogage lorsque vous travaillez avec C / C ++
  • Code :: Blocks - Je l'ai utilisé pendant un certain temps et je l'ai trouvé assez confortable, mais Vim est toujours meilleur à mon avis.

Si votre c ++ s'exécute plus lentement que votre c, vous l'utilisez mal. «Bien sûr, c'est facile à faire, mais c'est une autre affaire. :: travaille avec C ++ depuis environ 7 ans maintenant, et
apprends

Je note vraiment un grand fan de C ++, mais il est difficile de voir comment cela pourrait être "beaucoup plus lent" que C ou Fortran. Sauf si vous incluez des variantes C pour HPC telles que UPC et C pour CUDA.
Suugaku

4

Je travaille comme physicien dans une université britannique.

Peut-être devrais-je souligner que différents domaines de recherche accordent une importance différente à la programmation. Les physiciens des particules (comme dmckee) font de la modélisation informatique presque exclusivement et peuvent collaborer sur de grands projets logiciels, alors que les gens dans des domaines comme le mien (matière condensée) écrivent du code relativement rarement. Je soupçonne que la plupart des scientifiques tombent dans ce dernier camp. Je dirais que les compétences en codage sont généralement considérées comme utiles en physique, mais pas essentielles, tout comme les compétences en physique / mathématiques sont considérées comme utiles pour les programmeurs mais pas essentielles. Avec ça en tête...

  • Quels langages / environnements avez-vous utilisés pour développer des logiciels scientifiques, en particulier. l'analyse des données? Quelles bibliothèques? (Par exemple, qu'utilisez-vous pour tracer?)

L'analyse et le traçage des données sont généralement effectués à l'aide de progiciels d'analyse de données génériques tels que IGOR Pro , ORIGIN , Kaleidegraph qui peuvent être considérés comme «Excel plus». Ces packages ont généralement un langage de script qui peut être utilisé pour automatiser. Une analyse plus spécialisée peut avoir un utilitaire dédié pour le travail qui aura généralement été écrit il y a longtemps, personne n'en a la source et est assez bogué. Certains types plus techniques pourraient utiliser les langages qui ont été mentionnés (Python, R, MatLab avec Gnuplot pour le traçage).

Les logiciels de contrôle sont couramment utilisés dans LabVIEW, bien que nous utilisions en fait Delphi, ce qui est quelque peu inhabituel.

  • Y a-t-il eu une formation pour des personnes sans expérience significative en programmation?

J'ai assisté à des séminaires sur l'informatique en grille, la visualisation 3D, l'apprentissage Boost, etc. donnés par les deux universités où j'ai été. En tant que premier cycle, nous avons appris VBA pour Excel et MatLab, mais C / MatLab / LabVIEW est plus courant.

  • Aviez-vous quelque chose comme le contrôle de version, le suivi des bogues?

Non, bien que les gens aient des configurations de développement personnel. Notre base de code est dans un dossier partagé sur un «serveur» qui est tenu à jour avec un outil de synchronisation.

  • Comment feriez-vous pour essayer de créer un environnement décent pour la programmation, sans trop gêner les scientifiques individuels (en particulier les physiciens sont des gens têtus!)

Un pas après l'autre! J'essaie de remplacer le dossier partagé par quelque chose d'un peu plus solide, peut-être que trouver un client SVN qui imite le comportement actuel des outils de synchronisation aiderait.

Je dirais cependant que dans l'ensemble, pour la plupart des projets de sciences naturelles, il est généralement préférable de consacrer du temps à la recherche!


Merci d'avoir partagé vos pensées! Je conviens que "le temps est généralement mieux consacré à la recherche", mais vu le temps souvent perdu en raison du manque de choses comme le contrôle de version et la formation de base en programmation, je dirais que les scientifiques sous-estiment ce problème.
onnodb

4

Ancien physicien universitaire et maintenant physicien industriel au Royaume-Uni ici:

Quels langages / environnements avez-vous utilisés pour développer des logiciels scientifiques, en particulier. l'analyse des données? Quelles bibliothèques? (Par exemple, qu'utilisez-vous pour tracer?)

J'utilise principalement MATLAB ces jours-ci (fonctions de visualisation et mathématiques faciles d'accès). J'utilisais beaucoup Fortran et IDL . J'ai utilisé C (mais je suis plus un lecteur qu'un écrivain de C), des macros Excel (moche et déroutant). J'ai actuellement besoin de pouvoir lire Java et C ++ (mais je ne peux pas vraiment y programmer) et j'ai aussi piraté Python. Pour mon propre divertissement, je fais maintenant de la programmation en C # (principalement pour obtenir la portabilité / faible coût / jolies interfaces). Je peux écrire Fortran avec à peu près toutes les langues qui me sont présentées ;-)

Y a-t-il eu une formation pour des personnes sans expérience significative en programmation?

La plupart (tous?) Cours de physique de premier cycle auront un petit cours de programmation généralement sur C, Fortran ou MATLAB, mais ce sont les vraies bases. J'aimerais vraiment avoir eu une formation en génie logiciel à un moment donné (contrôle de révision / test / conception de systèmes à moyenne échelle)

Aviez-vous quelque chose comme le contrôle de version, le suivi des bogues?

J'ai commencé à utiliser Subversion / TortoiseSVN relativement récemment. Les groupes avec lesquels j'ai travaillé dans le passé ont utilisé le contrôle des révisions. Je ne connais aucun groupe universitaire qui utilise un logiciel officiel de suivi des bogues. Je n'utilise toujours aucune sorte de test systématique.

Comment feriez-vous pour essayer de créer un environnement décent pour la programmation, sans trop gêner les scientifiques individuels (en particulier les physiciens sont des gens têtus!)

J'essaierais d'introduire quelques idées de génie logiciel au niveau du premier cycle, puis de les renforcer par la pratique au niveau des études supérieures, de fournir également des pointeurs vers des ressources telles que le cours de menuiserie logicielle mentionné ci-dessus.

Je m'attendrais à ce qu'une fraction importante des physiciens universitaires écrivent des logiciels (pas nécessairement tous cependant) et qu'ils ont désespérément besoin d'au moins une introduction aux idées en génie logiciel.


4

Quels langages / environnements avez-vous utilisés pour développer des logiciels scientifiques, en particulier. l'analyse des données? Quelles bibliothèques? (Par exemple, qu'utilisez-vous pour tracer?)

Python, NumPy et pylab (traçage).

Y a-t-il eu une formation pour des personnes sans expérience significative en programmation?

Non, mais je travaillais dans un laboratoire de recherche multimédia, donc presque tout le monde avait une formation en informatique.

Aviez-vous quelque chose comme le contrôle de version, le suivi des bogues?

Oui, Subversion pour le contrôle de version, Trac pour le suivi des bogues et wiki. Vous pouvez obtenir un hébergement gratuit de suivi des bogues / contrôle de version sur http://www.assembla.com/ si leur TOS correspond à votre projet.

Comment feriez-vous pour essayer de créer un environnement décent pour la programmation, sans trop gêner les scientifiques individuels (en particulier les physiciens sont des gens têtus!).

Assurez-vous que l'infrastructure est configurée et bien entretenue et essayez de vendre les avantages du contrôle à la source.


3

Je suis statisticien dans une université au Royaume-Uni. Généralement, les gens ici utilisent R pour l'analyse des données, il est assez facile d'apprendre si vous connaissez C / Perl. Son véritable pouvoir réside dans la façon dont vous pouvez importer et modifier les données de manière interactive. Il est très facile de prendre un certain nombre de fichiers CSV (ou Excel) et de les fusionner, de créer de nouvelles colonnes basées sur d'autres, puis de les jeter dans un GLM, GAM ou un autre modèle. Le traçage est également trivial et ne nécessite pas la connaissance d'un tout nouveau langage (comme PGPLOT ou GNUPLOT.) Bien sûr, vous avez également l'avantage d'avoir un tas de fonctionnalités intégrées (des choses simples comme la moyenne, l'écart type, etc. le chemin vers les réseaux de neurones, les splines et le traçage GL.)

Cela dit, il y a quelques problèmes. Avec de très grands ensembles de données, R peut devenir très lent (je n'ai vraiment vu cela qu'avec des ensembles de données> 50 000x30) et comme il est interprété, vous n'obtenez pas l'avantage de Fortran / C à cet égard. Mais, vous pouvez (très facilement) demander à R d'appeler les bibliothèques partagées C et Fortran (soit à partir de quelque chose comme netlib ou de celles que vous avez écrites vous-même.) Ainsi, un flux de travail habituel serait de:

  • Déterminez quoi faire.
  • Prototypez le code dans R.
  • Exécutez quelques analyses préliminaires.
  • Réécrivez le code lent en C ou Fortran et appelez-le depuis R.

Ce qui fonctionne très bien pour moi.

Je suis l'une des seules personnes de mon département (sur plus de 100 personnes) à utiliser le contrôle de version (dans mon cas en utilisant git avec githuib.com.) C'est plutôt inquiétant, mais ils ne semblent tout simplement pas vouloir l'essayer et se contentent de passer des fichiers zip (beurk.)

Ma suggestion serait de continuer à utiliser LabView pour l'acquisition (et peut-être d'essayer d'amener vos collègues à s'entendre sur un ensemble d'outils pour l'acquisition et de rendre disponible pour tous), puis de passer à l'exportation des données dans un CSV (ou similaire) et faire l'analyse dans R. Il n'y a vraiment pas grand intérêt à réinventer la roue à cet égard.


2

Quels langages / environnements avez-vous utilisés pour développer des logiciels scientifiques, en particulier. l'analyse des données? Quelles bibliothèques? (Par exemple, qu'utilisez-vous pour tracer?)

Mon département de physique de premier cycle a enseigné à LabVIEW cours et l'a largement utilisé dans ses projets de recherche.

L'autre alternative est MATLAB , dans laquelle je n'ai aucune expérience. Il existe des camps pour l'un ou l'autre produit; chacun a ses propres avantages / inconvénients. Selon le type de problèmes que vous devez résoudre, un package peut être plus préférable que l'autre.

En ce qui concerne l'analyse des données, vous pouvez utiliser le type de numériseur de nombre que vous souhaitez. Idéalement, vous pouvez effectuer les calculs difficiles en langage X et formater la sortie pour tracer correctement dans Excel, Mathcad , Mathematica ou quel que soit le système de traçage de la saveur du jour. Ne vous attendez pas à une normalisation ici.

Aviez-vous quelque chose comme le contrôle de version, le suivi des bogues?

Avec le recul, nous ne l'avons pas fait, et cela aurait été plus facile pour nous tous si nous l'avions fait. Rien de tel que de tout casser et de lutter pendant des heures pour le réparer!

Utilisez définitivement le contrôle de code source pour tout code commun. Encouragez les individus à écrire leur code d'une manière qui pourrait être rendue plus générique. Il ne s'agit en réalité que de bonnes pratiques de codage. Vraiment, vous devriez leur faire enseigner (ou suivre) un cours d'informatique pour qu'ils puissent acquérir les bases.

Comment feriez-vous pour essayer de créer un environnement décent pour la programmation, sans trop gêner les scientifiques individuels (en particulier les physiciens sont des gens têtus!)

Il existe une distinction claire entre l'acquisition de données (DAQ) et l'analyse des données. Cela signifie qu'il est possible de standardiser sur le DAQ, puis de permettre aux scientifiques de jouer avec les données dans le programme de leur choix.


2

Une autre bonne option est Scilab . Il a des modules graphiques à la LabVIEW , il a son propre langage de programmation et vous pouvez également incorporer du code Fortran et C, par exemple. Il est utilisé dans les secteurs public et privé, y compris les grandes entreprises industrielles. Et c'est gratuit.

Concernant le versionnage, certains préfèrent Mercurial , car il donne plus de libertés pour gérer et définir les référentiels. Cependant, je n'en ai aucune expérience.

Pour le traçage, j'utilise Matplotlib . Je vais bientôt devoir faire des animations, et j'ai vu de bons résultats avec MEncoder . Voici un exemple comprenant une piste audio.

Enfin, je suggère de devenir modulaire, c'est-à-dire d'essayer de conserver les principaux morceaux de code dans différents fichiers, de sorte que la révision, la compréhension, la maintenance et l'amélioration du code seront plus faciles. J'ai écrit, par exemple, un module Python pour les tests d'intégrité des fichiers, un autre pour les séquences de traitement d'images, etc.

Vous devriez également envisager de développer avec l'utilisation d'un débogueur qui vous permet de vérifier le contenu des variables à des points d'arrêt définissables dans le code, en utilisant plutôt des lignes d'impression. J'ai utilisé Eclipse pour le développement de Python et Fortran (bien que j'aie eu un faux bogue en compilant un programme court Fortran avec lui, mais cela peut avoir été une mauvaise configuration) et je commence à utiliser l' IDE Eric pour Python. Il vous permet de déboguer, de gérer le versionnage avec SVN , il a une console intégrée, il peut faire du refactoring avec Bicycle Repair Man (il peut aussi en utiliser un autre), vous avez Unittest, etc. Une alternative plus légère pour Python est IDLE , inclus avec Python depuis la version 2.3.

À titre indicatif, je suggère également:

  • Ne pas utiliser de variables à un seul caractère. Lorsque vous souhaitez rechercher des apparences, vous obtiendrez des résultats partout. Certains soutiennent qu'un IDE décent rend cela plus facile, mais vous dépendez alors d'un accès permanent à l'EDI. Même l'utilisation de ii, jj et kk peut suffire, bien que ce choix dépende de votre langue. (Les doubles voyelles seraient moins utiles si les commentaires de code sont faits en estonien, par exemple).

  • Commenter le code depuis le tout début.

  • Pour les applications critiques, il est parfois préférable de s'appuyer sur des versions de langage / compilateur plus anciennes (versions majeures), plus stables et mieux déboguées. Bien sûr, vous pouvez avoir du code plus optimisé dans les versions ultérieures, des bogues corrigés, etc., mais je parle d'utiliser Fortran 95 au lieu de 2003, Python 2.5.4 au lieu de 3.0, ou plus. (Surtout lorsqu'une nouvelle version rompt la compatibilité avec les versions antérieures.) De nombreuses améliorations introduisent généralement beaucoup de bogues. Néanmoins, cela dépendra de cas d'application spécifiques! Notez qu'il s'agit d'un choix personnel, de nombreuses personnes pourraient s'y opposer.

  • Utilisez une sauvegarde redondante et automatisée! (Avec contrôle de version).


2

Certainement, utilisez Subversion pour conserver des copies instantanées actuelles, en cours de travail et stables du code source. Cela inclut C ++, Java, etc. pour les outils logiciels locaux et les scripts rapides pour le traitement ponctuel.

Avec le fort penchant de la science et de l'ingénierie appliquée vers la méthodologie de développement de «cowboy solitaire», la pratique habituelle d'organiser le référentiel en tronc, tag et quoi que ce soit d'autre - ne vous inquiétez pas! Les scientifiques et leurs techniciens de laboratoire aiment faire tourner les boutons, agiter les électrodes et chasser les fuites de vide. C'est un travail suffisant pour que tout le monde accepte, disons Python / NumPy ou suit une convention de dénomination; oubliez d'essayer de leur faire suivre les pratiques et les conventions obscures des développeurs de logiciels.


2

Pour la gestion du code source, les systèmes centralisés tels que Subversion sont supérieurs pour une utilisation scientifique en raison du point de vérité unique clair (SPOT). La journalisation des modifications et la possibilité de rappeler des versions de n'importe quel fichier, sans avoir à chercher où trouver quelque chose, présente d'énormes avantages en matière de tenue de registres. Des outils comme Git et Monotone : oh mon Dieu, le chaos je peux imaginer que cela suivrait! Avoir des enregistrements précis de la version des scripts de hack-job utilisée en jouant avec le nouveau capteur lorsque ce boson de Higgs est passé ou que cette supernova a explosé, conduira au bonheur.


Avez-vous déjà essayé d'utiliser un système de contrôle de version distribué?
Andrew Grimm

1
Presque tous les systèmes distribués le rendent aussi simple que les systèmes centralisés. Vous enregistrez simplement un ID de validation (en termes Git) au lieu d'un numéro de révision (comme dans SVN).
Phil Miller

2

Quels langages / environnements avez-vous utilisés pour développer des logiciels scientifiques, en particulier. l'analyse des données? Quelles bibliothèques? (Par exemple, qu'utilisez-vous pour tracer?)

Langues que j'ai utilisées pour les données numériques et sicentifiques:

  • C (développement lent, trop de débogage, presque impossible d'écrire du code réutilisable)
  • C ++ (et j'ai appris à le détester - le développement n'est pas aussi lent que C, mais peut être pénible. Les modèles et les classes étaient sympas au départ, mais au bout d'un moment, j'ai réalisé que je les combattais tout le temps et que je trouvais des solutions de contournement pour problèmes de conception du langage
  • Common Lisp, ce qui était correct, mais pas largement utilisé pour l'informatique Sci. Pas facile à intégrer avec C (par rapport à d'autres langages), mais fonctionne
  • Schème. Celui-ci est devenu mon choix personnel.

Mon éditeur est Emacs, bien que j'utilise vim pour des tâches rapides comme l'édition de fichiers de configuration.

Pour le traçage, je génère généralement un fichier texte et l'alimente dans gnuplot.

Pour l'analyse des données, je génère généralement un fichier texte et j'utilise GNU R.

Je vois beaucoup de gens ici utiliser FORTRAN (principalement 77, mais environ 90), beaucoup de Java et un peu de Python. Je n'aime pas ça, donc je ne les utilise pas.

Y a-t-il eu une formation pour des personnes sans expérience significative en programmation?

Je pense que cela ne s'applique pas à moi, puisque je suis diplômé en CS - mais là où je travaille, il n'y a pas de formation formelle, mais les gens (ingénieurs, physiciens, mathématiciens) s'entraident.

Aviez-vous quelque chose comme le contrôle de version, le suivi des bogues?

Le contrôle de version est absolument important! Je garde mon code et mes données sur trois machines différentes, de deux côtés différents du monde - dans des référentiels Git. Je les synchronise tout le temps (donc j'ai un contrôle de version et des sauvegardes!) Je ne fais pas de contrôle de bogue, même si je peux commencer à le faire. Mais mes collègues ne sont pas du tout BTS ou VCS.

Comment feriez-vous pour essayer de créer un environnement décent pour la programmation, sans trop gêner les scientifiques individuels (en particulier les physiciens sont des gens têtus!)

Premièrement, je leur donnerais autant de liberté que possible. (Dans l'université où je travaille, je pourrais choisir entre demander à quelqu'un d'installer Ubuntu ou Windows, ou installer mon propre système d'exploitation - j'ai choisi d'installer le mien. Je n'ai pas de soutien de leur part et je suis responsable de tout ce qui se passe avec mes machines, y compris les problèmes de sécurité, mais je fais ce que je veux avec la machine).

Deuxièmement, je verrais à quoi ils sont habitués et je le ferais fonctionner (besoin de FORTRAN? Nous allons l'installer. Besoin de C ++? Pas de problème. Mathematica? OK, nous allons acheter une licence). Ensuite, voyez combien d'entre eux aimeraient apprendre des "outils supplémentaires" pour les aider à être plus productifs (ne dites pas "différents" outils. Dites "supplémentaires", il ne semblera donc pas que quiconque "perdra" ou "laissera aller "ou peu importe). Commencez par les éditeurs, voyez s'il y a des groupes qui aimeraient utiliser VCS pour synchroniser leur travail (hé, vous pouvez rester à la maison et envoyer votre code via SVN ou GIT - ce ne serait pas génial?) Et ainsi de suite. N'imposez pas - montrez à quel point ces outils sont géniaux. Faites une analyse des données à l'aide de R et montrez-leur à quel point c'était facile. Montrez de jolis graphiques et expliquez comment vous les avez créés (mais commencez par des exemples simples,


2

Je suggérerais F # comme candidat potentiel pour effectuer des manipulations liées à la science étant donné ses liens sémantiques étroits avec les constructions mathématiques.

En outre, sa prise en charge des unités de mesure, comme indiqué ici, a beaucoup de sens pour assurer une traduction correcte entre le modèle mathématique et le code source de l'implémentation.


1

Tout d'abord, je choisirais certainement un langage de script pour éviter d'avoir à expliquer beaucoup de choses supplémentaires (par exemple, la gestion manuelle de la mémoire est - principalement - ok si vous écrivez des éléments de bas niveau et sensibles aux performances, mais pour quelqu'un qui veut utiliser un ordinateur comme une calculatrice scientifique améliorée, c'est vraiment exagéré). Regardez également autour de vous s'il y a quelque chose de spécifique pour votre domaine (comme R pour les statistiques). Cela présente l'avantage de travailler déjà avec les concepts avec lesquels les utilisateurs sont familiers et de disposer d'un code spécialisé pour des situations spécifiques (par exemple, calculer des écarts types, appliquer des tests statistiques, etc. dans le cas de R).

Si vous souhaitez utiliser un langage de script plus générique, j'irais avec Python. Il y a deux choses à faire:

  • Le shell interactif où vous pouvez expérimenter
  • Sa syntaxe claire (bien que parfois longue)

Comme avantage supplémentaire, il dispose de bibliothèques pour la plupart des choses que vous voudriez en faire.


En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.