Praktiken zum Programmieren in einem wissenschaftlichen Umfeld? [geschlossen]

91

Hintergrund

Letztes Jahr habe ich ein Praktikum in einer Physikforschungsgruppe an einer Universität gemacht. In dieser Gruppe haben wir hauptsächlich LabVIEW verwendet , um Programme zur Steuerung unserer Setups, zur Datenerfassung und zur Analyse unserer Daten zu schreiben. Für die ersten beiden Zwecke funktioniert das ganz in Ordnung, aber für die Datenanalyse ist es ein echtes Problem. Darüber hinaus waren alle größtenteils Autodidakten, so dass der geschriebene Code im Allgemeinen ein ziemliches Durcheinander war (kein Wunder, dass jeder Doktor schnell beschloss, alles von Grund auf neu zu schreiben). Die Versionskontrolle war unbekannt und aufgrund strenger Software- und Netzwerkvorschriften der IT-Abteilung nicht einzurichten.

Nun, die Dinge haben tatsächlich überraschend gut geklappt, aber wie machen Naturwissenschaftler ihre Softwareentwicklung?

Fragen

Einige konkrete Fragen:

  • Welche Sprachen / Umgebungen haben Sie für die Entwicklung wissenschaftlicher Software verwendet, insbesondere für die Datenanalyse? Welche Bibliotheken? (Was verwenden Sie zum Beispiel zum Plotten?)
  • Gab es Schulungen für Personen ohne wesentlichen Programmierhintergrund?
  • Hatten Sie so etwas wie Versionskontrolle und Fehlerverfolgung?
  • Wie würden Sie versuchen, ein anständiges Programmierumfeld zu schaffen, ohne den einzelnen Wissenschaftlern zu viel im Weg zu stehen (insbesondere Physiker sind hartnäckige Menschen!)?

Zusammenfassung der bisherigen Antworten

Die bisherigen Antworten (oder meine Interpretation davon): (2008-10-11)

  • Sprachen / Pakete, die am häufigsten verwendet werden:
  • Die Versionskontrolle wird von fast allen Befragten verwendet. Fehlerverfolgung und andere Prozesse sind viel seltener.
  • Der Software Carpentry-Kurs ist eine gute Möglichkeit, Wissenschaftlern Programmier- und Entwicklungstechniken beizubringen.
  • Wie kann man Dinge verbessern?
    • Zwingen Sie die Menschen nicht, strenge Protokolle zu befolgen.
    • Richten Sie selbst eine Umgebung ein und zeigen Sie anderen die Vorteile. Helfen Sie ihnen, selbst mit der Versionskontrolle, der Fehlerverfolgung usw. zu arbeiten.
    • Das Überprüfen des Codes anderer Personen kann hilfreich sein, aber beachten Sie, dass dies möglicherweise nicht jeder zu schätzen weiß.
onnodb
quelle
2
Verwandte Lektüre: nature.com/news/2010/101013/full/467775a.html
Tobias Kienzler

Antworten:

27

Welche Sprachen / Umgebungen haben Sie für die Entwicklung wissenschaftlicher Software verwendet? Datenanalyse? Welche Bibliotheken? (ZB, was verwenden Sie zum Plotten?)

Ich habe für Enthought gearbeitet , den Hauptsponsor von SciPy . Wir haben mit Wissenschaftlern der Unternehmen zusammengearbeitet, die Enthought mit der Entwicklung kundenspezifischer Software beauftragt haben. Python / SciPy schien eine angenehme Umgebung für Wissenschaftler zu sein. Es ist viel weniger einschüchternd, mit C ++ oder Java zu beginnen, wenn Sie ein Wissenschaftler ohne Software-Hintergrund sind.

Die Enthought Python Distribution enthält alle wissenschaftlichen Computerbibliotheken, einschließlich Analyse, Plotten, 3D-Visualisierung usw.

Gab es Schulungen für Personen ohne wesentlichen Programmierhintergrund?

Enthought bietet SciPy-Schulungen an und die SciPy-Community ist ziemlich gut darin, Fragen auf den Mailinglisten zu beantworten.

Hatten Sie so etwas wie Versionskontrolle, Fehlerverfolgung?

Ja und ja (Subversion und Trac). Da wir mit den Wissenschaftlern zusammengearbeitet haben (und normalerweise von diesen entfernt), waren Versionskontrolle und Fehlerverfolgung unerlässlich. Es bedurfte einiger Schulungen, um einige Wissenschaftler dazu zu bringen, die Vorteile der Versionskontrolle zu verinnerlichen.

Wie würden Sie versuchen, ein anständiges Programmierumfeld zu schaffen, ohne den einzelnen Wissenschaftlern zu viel im Weg zu stehen (insbesondere Physiker sind hartnäckige Menschen!)?

Stellen Sie sicher, dass sie mit der Werkzeugkette vertraut sind. Es erfordert eine Investition im Voraus, aber sie fühlen sich weniger geneigt, sie zugunsten von etwas Vertrauterem (Excel) abzulehnen. Wenn die Tools versagen (und sie werden es auch tun), stellen Sie sicher, dass sie einen Ort haben, an dem sie Hilfe anfordern können - Mailinglisten, Benutzergruppen, andere Wissenschaftler und Softwareentwickler in der Organisation. Je mehr Hilfe es gibt, um sie wieder in die Physik zu bringen, desto besser.

Brandon DuRette
quelle
21

Der Kurs Software Carpentry richtet sich speziell an Personen, die wissenschaftliches Rechnen betreiben, und vermittelt die Grundlagen und Lektionen des Software-Engineerings und wie man sie am besten auf Projekte anwendet.

Es behandelt Themen wie Versionskontrolle, Debugging, Testen, Skripterstellung und verschiedene andere Themen.

Ich habe ungefähr 8 oder 9 der Vorträge gehört und denke, dass es sehr zu empfehlen ist.

Bearbeiten: Die MP3s der Vorlesungen sind ebenfalls verfügbar .

Kaybenleroll
quelle
16

Kern- / Teilchenphysik hier.

  • Früher wurden große Programmierarbeiten hauptsächlich in Fortran mit CERNLIB (PAW, MINUIT, ...) und GEANT3 durchgeführt . In letzter Zeit wurden sie hauptsächlich in C ++ mit ROOT und Geant4 durchgeführt . Es gibt eine Reihe anderer Bibliotheken und Tools, die speziell verwendet werden, und LabVIEW sieht hier und da eine gewisse Verwendung.
  • Die Datenerfassung an meinem Ende dieses Geschäfts bedeutete oft eine relativ geringe Arbeit. Oft in C, manchmal sogar in der Montage, aber dies stirbt ab, wenn die Hardware leistungsfähiger wird. Auf der anderen Seite sind viele der Boards jetzt mit FPGAs ausgestattet, die ein Gate-Twiddling benötigen ...
  • Unikate, grafische Oberflächen usw. verwenden fast alles ( Tcl / Tk war früher groß und ich habe in letzter Zeit mehr Perl / Tk und Python / Tk gesehen), einschließlich einer Reihe von Paketen, die hauptsächlich in der Teilchenphysik-Community existieren .
  • Viele Leute, die Code schreiben, haben wenig oder keine formale Ausbildung, und der Prozess wird nach mündlicher Überlieferung sehr ungleichmäßig übertragen, aber die meisten Leiter von Softwaregruppen nehmen den Prozess ernst und lesen so viel wie nötig, um ihre Mängel in diesem Bereich auszugleichen.
  • Die Versionskontrolle für die Hauptwerkzeuge ist allgegenwärtig. Viele einzelne Programmierer vernachlässigen dies jedoch für ihre kleineren Aufgaben. Formale Tools zur Fehlerverfolgung sind weniger verbreitet, ebenso wie nächtliche Builds, Unit-Tests und Regressionstests.

Um Dinge zu verbessern:

  1. Machen Sie sich mit den lokalen Softwareführern vertraut
  2. Implementieren Sie den Prozess, den Sie verwenden möchten, in Ihrem eigenen Bereich und ermutigen Sie diejenigen, die Sie zulassen, ihn ebenfalls zu verwenden.
  3. Warten. Physiker sind empirische Menschen. Wenn es hilft, werden sie (irgendwann!) Bemerken.

Noch ein Vorschlag zur Verbesserung.

  1. Nehmen Sie sich etwas Zeit, um allen zu helfen, mit denen Sie direkt zusammenarbeiten. Überprüfen Sie ihren Code. Erzählen Sie ihnen von algorithmischer Komplexität / Codegenerierung / DRY oder was auch immer sie nie gelernt haben, weil ein Professor ihnen einmal ein Fortran-Buch zugeworfen und gesagt hat: "Lass es funktionieren". Indoktrinieren Sie sie in Prozessfragen. Sie sind kluge Leute, und sie werden lernen, wenn Sie ihnen eine Chance geben.
dmckee --- Ex-Moderator Kätzchen
quelle
11

Dies mag leicht tangential sein, ist aber hoffentlich relevant.

Ich habe für National Instruments, R & D, gearbeitet und dort Software für NI RF & Communication Toolkits geschrieben. Wir haben LabVIEW ziemlich oft verwendet, und hier sind die Praktiken, die wir befolgt haben:

  1. Quellcodeverwaltung. NI verwendet Perforce. Wir haben die reguläre Sache gemacht - Dev / Trunk-Zweige, kontinuierliche Integration, die Arbeiten.
  2. Wir haben automatisierte Testsuiten geschrieben.
  3. Wir hatten ein paar Leute, die einen Hintergrund in Signalverarbeitung und Kommunikation hatten. Früher hatten wir regelmäßige Codeüberprüfungen und Best-Practice-Dokumente, um sicherzustellen, dass der Code den Anforderungen entspricht.
  4. Trotz der Codeüberprüfungen gab es einige Fälle, in denen "Software-Leute" wie ich einen Teil dieses Codes aus Effizienzgründen neu schreiben mussten.
  5. Ich weiß genau, was du mit störrischen Menschen meinst! Wir hatten Leute, die dachten, dass es eine direkte persönliche Beleidigung sei, auf eine mögliche Leistungsverbesserung in ihrem Code hinzuweisen! Es versteht sich von selbst, dass dies ein gutes Management erfordert. Ich dachte, der beste Weg, mit diesen Leuten umzugehen, ist, langsam zu gehen, nicht zu stark auf Veränderungen zu drängen und wenn nötig darauf vorbereitet zu sein, die Drecksarbeit zu erledigen. [Beispiel: Schreiben Sie eine Testsuite für ihren Code].
Pramod
quelle
9

Ich bin nicht gerade ein "Naturwissenschaftler" (ich studiere Transportwesen), sondern ein Akademiker, der viel von meiner eigenen Software für die Datenanalyse schreibt. Ich versuche, so viel wie möglich in Python zu schreiben, aber manchmal bin ich gezwungen, andere Sprachen zu verwenden, wenn ich daran arbeite, ein vorhandenes Softwaretool zu erweitern oder anzupassen. In meinem Bereich gibt es sehr wenig Programmiertraining. Die meisten Leute sind entweder Autodidakten oder haben ihre Programmierkenntnisse in Kursen gelernt, die zuvor oder außerhalb der Disziplin absolviert wurden.

Ich bin ein großer Fan der Versionskontrolle. Ich habe Vault auf meinem Heimserver für den gesamten Code für meine Dissertation verwendet. Im Moment versuche ich, die Abteilung dazu zu bringen, einen Subversion-Server einzurichten, aber ich gehe davon aus, dass ich zumindest zunächst der einzige sein werde, der ihn verwendet. Ich habe ein bisschen mit FogBugs herumgespielt, aber im Gegensatz zur Versionskontrolle denke ich, dass dies für ein Ein-Mann-Team bei weitem nicht so nützlich ist.

Wenn ich andere dazu ermutige, Versionskontrolle und ähnliches zu verwenden, ist das wirklich das Problem, mit dem ich jetzt konfrontiert bin. Ich habe vor, meine Studenten zu zwingen, es für Forschungsprojekte zu verwenden, die sie für mich durchführen, und sie zu ermutigen, es für ihre eigene Forschung zu verwenden. Wenn ich eine Klasse mit Programmierung unterrichte, werde ich die Schüler wahrscheinlich zwingen, auch dort die Versionskontrolle zu verwenden (indem sie nach dem Inhalt des Repositorys bewertet werden). Was meine Kollegen und ihre Studenten angeht, kann ich nur einen Server zur Verfügung stellen und mich auf sanfte Überzeugungsarbeit und ein gutes Beispiel verlassen. Ehrlich gesagt denke ich, dass es an dieser Stelle wichtiger ist, sie dazu zu bringen, regelmäßige Backups durchzuführen, als sie in die Quellcodeverwaltung zu bringen (einige Leute tragen die einzige Kopie ihrer Forschungsdaten auf USB-Sticks mit sich herum).

Chris Upchurch
quelle
7

1.) Skriptsprachen sind heutzutage aufgrund der besseren Hardware für die meisten Dinge beliebt. Perl / Python / Lisp sind für leichte Anwendungen (Automatisierung, leichte Berechnung) weit verbreitet. Ich sehe viel Perl bei meiner Arbeit (Computational EM), da wir Unix / Linux mögen. Für Performance-Inhalte werden normalerweise C / C ++ / Fortran verwendet. Für paralleles Rechnen parallelisieren wir normalerweise Läufe in EM manuell, anstatt dass ein Programm dies implizit ausführt (dh die Jobs werden bei der Berechnung der Radarquerschnitte nach Blickwinkel aufgeteilt).

2.) Wir werfen hier einfach Leute in die Mischung. Ein Großteil des Codes, den wir haben, ist sehr chaotisch, aber Wissenschaftler sind in der Regel ein Haufen zerstreuter Menschen, denen so etwas nichts ausmacht. Nicht ideal, aber wir haben Dinge zu liefern und sind stark unterbesetzt. Wir werden langsam besser.

3.) Wir verwenden SVN; Wir haben jedoch keine Software zur Fehlerverfolgung. Ungefähr so ​​gut wie es für uns geht, ist eine txt-Datei, die Ihnen sagt, wo Fehler bestimmte Fehler sind.

4.) Mein Vorschlag zur Implementierung von Best Practices für Wissenschaftler: Machen Sie es langsam . Als Wissenschaftler versenden wir normalerweise keine Produkte. Niemand in der Wissenschaft macht sich einen Namen, wenn er über sauberen, wartbaren Code verfügt . Sie werden normalerweise anhand der Ergebnisse dieses Codes erkannt. Sie müssen eine Rechtfertigung dafür finden, Zeit für das Erlernen von Softwarepraktiken aufzuwenden. Führen Sie langsam neue Konzepte ein und versuchen Sie, sie dazu zu bringen, zu folgen. Sie sind Wissenschaftler. Nachdem ihre eigenen empirischen Beweise die Nützlichkeit von Dingen wie der Versionskontrolle bestätigt haben, werden sie sie die ganze Zeit verwenden!

temp2290
quelle
5

Ich bin Physiker und arbeite auf dem Gebiet der Physik der kondensierten Materie. Ich baue klassische und Quantenmodelle.

Sprachen:

  • C ++ - sehr vielseitig: Kann für alles verwendet werden, gute Geschwindigkeit, aber es kann ein bisschen unpraktisch sein, wenn es um MPI geht
  • Oktave - gut für einige zusätzliche Berechnungen, sehr praktisch und produktiv

Bibliotheken:

  • Armadillo / Blitz ++ - schnelle Array / Matrix / Cube-Abstraktionen für C ++
  • Eigen / Gürteltier - lineare Algebra
  • GSL - zur Verwendung mit C.
  • LAPACK / BLAS / ATLAS - extrem groß und schnell, aber weniger bequem (und in FORTRAN geschrieben)

Grafik:

  • GNUPlot - es hat eine sehr saubere und ordentliche Ausgabe, aber manchmal nicht so produktiv
  • Herkunft - sehr praktisch zum Plotten

Entwicklungswerkzeuge:

  • Vim + Plugins - es funktioniert großartig für mich
  • GDB - ein großartiges Debugging-Tool für die Arbeit mit C / C ++
  • Code :: Blocks - Ich habe es einige Zeit benutzt und fand es ziemlich bequem, aber Vim ist meiner Meinung nach immer noch besser.
Roman
quelle
Wenn Ihr C ++ langsamer läuft als Ihr C, verwenden Sie es falsch. Natürlich ist das einfach, aber das ist eine andere Sache. :: arbeite seit ca. 7 Jahren mit c ++ und lerne immer wieder neue Dinge ::
dmckee --- Ex-Moderator Kätzchen
Ich bin wirklich ein großer Fan von C ++, aber es ist schwer zu erkennen, wie es "viel langsamer" sein kann als C oder Fortran. Es sei denn, Sie enthalten C-Varianten für HPC wie UPC und C für CUDA.
Suugaku
4

Ich arbeite als Physiker an einer britischen Universität.

Vielleicht sollte ich betonen, dass verschiedene Forschungsbereiche unterschiedliche Schwerpunkte in der Programmierung haben. Teilchenphysiker (wie dmckee) führen fast ausschließlich Computermodelle durch und arbeiten möglicherweise bei großen Softwareprojekten zusammen, während Menschen in Bereichen wie meiner eigenen (kondensierte Materie) relativ selten Code schreiben. Ich vermute, die meisten Wissenschaftler fallen in das letztere Lager. Ich würde sagen, dass Codierungsfähigkeiten normalerweise als nützlich in der Physik angesehen werden, aber nicht wesentlich, ähnlich wie Physik / Mathematik-Fähigkeiten als nützlich für Programmierer angesehen werden, aber nicht wesentlich. Mit dieser Einstellung...

  • Welche Sprachen / Umgebungen haben Sie für die Entwicklung wissenschaftlicher Software verwendet? Datenanalyse? Welche Bibliotheken? (ZB, was verwenden Sie zum Plotten?)

Üblicherweise werden Datenanalysen und -diagramme mit generischen Datenanalysepaketen wie IGOR Pro , ORIGIN und Kaleidegraph durchgeführt, die als "Excel Plus" betrachtet werden können. Diese Pakete verfügen normalerweise über eine Skriptsprache, die zur Automatisierung verwendet werden kann. Eine spezialisiertere Analyse hat möglicherweise ein spezielles Dienstprogramm für den Job, das im Allgemeinen vor langer Zeit geschrieben wurde. Niemand hat die Quelle dafür und ist ziemlich fehlerhaft. Einige weitere Technikfreaks verwenden möglicherweise die genannten Sprachen (Python, R, MatLab mit Gnuplot zum Plotten).

Steuerungssoftware wird üblicherweise in LabVIEW ausgeführt, obwohl wir tatsächlich Delphi verwenden, was etwas ungewöhnlich ist.

  • Gab es Schulungen für Personen ohne wesentlichen Programmierhintergrund?

Ich habe an Seminaren über Grid Computing, 3D-Visualisierung, Learning Boost usw. teilgenommen, die von beiden Universitäten angeboten wurden, an denen ich teilgenommen habe. Als Student wurde uns VBA für Excel und MatLab beigebracht, aber C / MatLab / LabVIEW ist häufiger.

  • Hatten Sie so etwas wie Versionskontrolle, Fehlerverfolgung?

Nein, obwohl die Leute persönliche Entwicklungseinstellungen haben. Unsere Codebasis befindet sich in einem freigegebenen Ordner auf einem 'Server', der mit einem Synchronisierungstool auf dem neuesten Stand gehalten wird.

  • Wie würden Sie versuchen, ein anständiges Programmierumfeld zu schaffen, ohne den einzelnen Wissenschaftlern zu viel im Weg zu stehen (insbesondere Physiker sind hartnäckige Menschen!)?

Ein Schritt auf einmal! Ich versuche, den freigegebenen Ordner durch etwas solideres zu ersetzen. Vielleicht hilft es, einen SVN-Client zu finden, der das aktuelle Verhalten der Synchronisierungstools nachahmt.

Insgesamt würde ich jedoch sagen, dass für die meisten naturwissenschaftlichen Projekte die Zeit im Allgemeinen besser für die Forschung aufgewendet wird!

Brendan
quelle
Vielen Dank für Ihre Meinung! Ich stimme zu, dass "Zeit im Allgemeinen besser für Forschung aufgewendet wird", aber angesichts der Tatsache, dass oft Zeit aufgrund fehlender Versionskontrolle und Grundausbildung in Programmierung verloren geht, würde ich sagen, dass Wissenschaftler dieses Problem unterschätzen.
Onnodb
4

Ex-akademischer Physiker und jetzt Industriephysiker UK hier:

Welche Sprachen / Umgebungen haben Sie für die Entwicklung wissenschaftlicher Software verwendet? Datenanalyse? Welche Bibliotheken? (ZB, was verwenden Sie zum Plotten?)

Ich benutze heutzutage hauptsächlich MATLAB (leicht zugängliche Visualisierungsfunktionen und Mathematik). Ich habe viel Fortran und IDL verwendet . Ich habe C (aber ich bin eher ein Leser als ein Verfasser von C), Excel-Makros (hässlich und verwirrend) verwendet. Ich muss derzeit Java und C ++ lesen können (aber ich kann nicht wirklich darin programmieren) und ich habe auch Python gehackt. Zu meiner eigenen Unterhaltung programmiere ich jetzt in C # (hauptsächlich, um Portabilität / niedrige Kosten / hübsche Schnittstellen zu erhalten). Ich kann Fortran mit so ziemlich jeder Sprache schreiben, die mir präsentiert wird ;-)

Gab es Schulungen für Personen ohne wesentlichen Programmierhintergrund?

Die meisten (alle?) Physikkurse für Studenten haben einen kleinen Programmierkurs, normalerweise in C, Fortran oder MATLAB, aber es sind die wirklichen Grundlagen. Ich hätte wirklich gerne irgendwann eine Ausbildung in Software-Engineering erhalten (Revisionskontrolle / Testen / Entwerfen mittelgroßer Systeme).

Hatten Sie so etwas wie Versionskontrolle, Fehlerverfolgung?

Ich habe vor relativ kurzer Zeit angefangen, Subversion / TortoiseSVN zu verwenden. Gruppen, mit denen ich in der Vergangenheit zusammengearbeitet habe, haben die Revisionskontrolle verwendet. Ich kenne keine akademische Gruppe, die formale Bug-Tracking-Software verwendet. Ich verwende immer noch keine systematischen Tests.

Wie würden Sie versuchen, ein anständiges Programmierumfeld zu schaffen, ohne den einzelnen Wissenschaftlern zu viel im Weg zu stehen (insbesondere Physiker sind hartnäckige Menschen!)?

Ich würde versuchen, einige Software-Engineering-Ideen auf Bachelor-Ebene vorzustellen und sie dann durch die Praxis auf Graduiertenebene zu verstärken. Außerdem würde ich Hinweise auf Ressourcen wie den oben erwähnten Software Carpentry-Kurs geben.

Ich würde erwarten, dass ein erheblicher Teil der akademischen Physiker Software schreiben wird (aber nicht unbedingt alle), und sie brauchen dringend zumindest eine Einführung in Ideen in der Softwareentwicklung.

Ian Hopkinson
quelle
4

Welche Sprachen / Umgebungen haben Sie für die Entwicklung wissenschaftlicher Software verwendet? Datenanalyse? Welche Bibliotheken? (ZB, was verwenden Sie zum Plotten?)

Python, NumPy und Pylab (Plotten).

Gab es Schulungen für Personen ohne wesentlichen Programmierhintergrund?

Nein, aber ich arbeitete in einem Multimedia-Forschungslabor, sodass fast jeder einen Informatik-Hintergrund hatte.

Hatten Sie so etwas wie Versionskontrolle, Fehlerverfolgung?

Ja, Subversion für die Versionskontrolle, Trac für die Fehlerverfolgung und Wiki. Sie können kostenloses Bug-Tracker- / Versionskontroll-Hosting von http://www.assembla.com/ erhalten, wenn die Nutzungsbedingungen zu Ihrem Projekt passen .

Wie würden Sie versuchen, ein anständiges Umfeld für die Programmierung zu schaffen, ohne den einzelnen Wissenschaftlern zu viel im Weg zu stehen (insbesondere Physiker sind hartnäckige Menschen!).

Stellen Sie sicher, dass die Infrastruktur eingerichtet und gut gewartet ist, und versuchen Sie, die Vorteile der Quellcodeverwaltung zu nutzen.

Aaron Maenpaa
quelle
3

Ich bin Statistiker an einer Universität in Großbritannien. Im Allgemeinen verwenden die Leute hier R für die Datenanalyse. Es ist ziemlich einfach zu lernen, wenn Sie C / Perl kennen. Die wahre Stärke liegt in der Art und Weise, wie Sie Daten interaktiv importieren und ändern können. Es ist sehr einfach, eine Reihe von CSV- (oder Excel-) Dateien zusammenzuführen, neue Spalten basierend auf anderen zu erstellen und diese dann in ein GLM, GAM oder ein anderes Modell zu werfen. Das Plotten ist ebenfalls trivial und erfordert keine Kenntnisse einer völlig neuen Sprache (wie PGPLOT oder GNUPLOT). Natürlich haben Sie auch den Vorteil, über eine Reihe integrierter Funktionen zu verfügen (von einfachen Dingen wie Mittelwert, Standardabweichung usw.) der Weg zu neuronalen Netzen, Splines und GL-Plotten.)

Trotzdem gibt es einige Probleme. Bei sehr großen Datensätzen kann R sehr langsam werden (ich habe dies nur bei Datensätzen mit> 50.000 x 30 wirklich gesehen), und da es interpretiert wird, erhalten Sie in dieser Hinsicht nicht den Vorteil von Fortran / C. Sie können R jedoch (sehr einfach) dazu bringen, gemeinsam genutzte Bibliotheken von C und Fortran aufzurufen (entweder aus einer Netlib oder von Ihnen selbst geschriebenen). Ein üblicher Workflow wäre also:

  • Finde heraus, was zu tun ist.
  • Prototyp des Codes in R.
  • Führen Sie einige vorläufige Analysen durch.
  • Schreiben Sie den langsamen Code erneut in C oder Fortran und rufen Sie ihn von R aus auf.

Welches funktioniert sehr gut für mich.

Ich bin eine der wenigen Personen in meiner Abteilung (von> 100 Personen), die die Versionskontrolle verwenden (in meinem Fall Git mit githuib.com). Dies ist ziemlich besorgniserregend, aber sie scheinen einfach nicht daran interessiert zu sein, es zu versuchen raus und geben sich damit zufrieden, Zip-Dateien herumzugeben (yuck.)

Mein Vorschlag wäre, LabView weiterhin für die Erfassung zu verwenden (und möglicherweise zu versuchen, Ihre Mitarbeiter dazu zu bringen, sich auf ein Toolset für die Erfassung und Erstellung zu einigen, das für alle verfügbar ist) und dann die Daten in eine CSV (oder eine ähnliche) zu exportieren und Die Analyse in R durchführen. Es macht wirklich wenig Sinn, das Rad in dieser Hinsicht neu zu erfinden.

David Lawrence Miller
quelle
2

Welche Sprachen / Umgebungen haben Sie für die Entwicklung wissenschaftlicher Software verwendet? Datenanalyse? Welche Bibliotheken? (ZB, was verwenden Sie zum Plotten?)

Meine Physikabteilung unterrichtete LabVIEW- Kurse und verwendete sie ausgiebig in ihren Forschungsprojekten.

Die andere Alternative ist MATLAB , in der ich keine Erfahrung habe. Es gibt Lager für beide Produkte; Jeder hat seine eigenen Vor- und Nachteile. Je nachdem, welche Art von Problemen Sie lösen müssen, ist ein Paket möglicherweise vorzuziehen als das andere.

In Bezug auf die Datenanalyse können Sie jede Art von Zahlen-Cruncher verwenden, die Sie möchten. Im Idealfall können Sie die harten Berechnungen in Sprache X durchführen und die Ausgabe so formatieren, dass sie in Excel, Mathcad , Mathematica oder einem anderen Plot- du-Jour-Plotsystem gut dargestellt werden kann. Erwarten Sie hier keine Standardisierung.

Hatten Sie so etwas wie Versionskontrolle, Fehlerverfolgung?

Rückblickend haben wir es nicht getan, und es wäre für uns alle einfacher gewesen, wenn wir es getan hätten. Es gibt nichts Schöneres, als alles zu zerbrechen und stundenlang darum zu kämpfen, es zu reparieren!

Verwenden Sie auf jeden Fall die Quellcodeverwaltung für jeden gängigen Code. Ermutigen Sie Einzelpersonen, ihren Code auf eine Weise zu schreiben, die allgemeiner gestaltet werden könnte. Dies ist wirklich nur das Codieren von Best Practices. Eigentlich sollten sie einen Informatikkurs unterrichten (oder belegen), damit sie die Grundlagen erlernen können.

Wie würden Sie versuchen, ein anständiges Programmierumfeld zu schaffen, ohne den einzelnen Wissenschaftlern zu viel im Weg zu stehen (insbesondere Physiker sind hartnäckige Menschen!)?

Es gibt eine klare Trennung zwischen Datenerfassung (DAQ) und Datenanalyse. Das heißt, es ist möglich, den DAQ zu standardisieren und den Wissenschaftlern dann zu ermöglichen, mit den Daten in dem Programm ihrer Wahl zu spielen.

Bogen die Dummheit
quelle
2

Eine weitere gute Option ist Scilab . Es verfügt über Grafikmodule à la LabVIEW , eine eigene Programmiersprache und Sie können beispielsweise auch Fortran- und C-Code einbetten. Es wird im öffentlichen und privaten Sektor eingesetzt, einschließlich großer Industrieunternehmen. Und es ist kostenlos.

Bei der Versionierung bevorzugen einige Mercurial , da es mehr Freiheiten beim Verwalten und Definieren der Repositorys bietet. Ich habe jedoch keine Erfahrung damit.

Zum Plotten verwende ich Matplotlib . Ich werde bald Animationen machen müssen und mit MEncoder gute Ergebnisse erzielt . Hier ist ein Beispiel mit einer Audiospur.

Schließlich schlage ich vor, modular zu arbeiten, dh zu versuchen, die wichtigsten Codeteile in verschiedenen Dateien zu halten, damit die Überarbeitung, das Verständnis, die Wartung und die Verbesserung des Codes einfacher werden. Ich habe zum Beispiel ein Python-Modul zum Testen der Dateiintegrität geschrieben, ein anderes für Bildverarbeitungssequenzen usw.

Sie sollten auch in Betracht ziehen, mithilfe eines Debuggers einen variablen Inhalt an einstellbaren Haltepunkten im Code zu überprüfen, anstatt Druckzeilen zu verwenden. Ich habe Eclipse für die Entwicklung von Python und Fortran verwendet (obwohl ich einen falschen Fehler beim Kompilieren eines Fortran-Kurzprogramms damit hatte, aber es war möglicherweise eine schlechte Konfiguration) und beginne, die Eric IDE für Python zu verwenden. Es ermöglicht Ihnen das Debuggen, Verwalten der Versionierung mit SVN , es hat eine eingebettete Konsole, es kann Refactoring mit Bicycle Repair Man durchführen (es kann auch ein anderes verwenden), Sie haben Unittest usw. Eine leichtere Alternative für Python ist IDLE , enthalten mit Python seit Version 2.3.

Als ein paar Hinweise schlage ich auch vor:

  • Keine einstelligen Variablen verwenden. Wenn Sie nach Auftritten suchen möchten, erhalten Sie überall Ergebnisse. Einige argumentieren, dass eine anständige IDE dies einfacher macht, aber dann sind Sie auf permanenten Zugriff auf die IDE angewiesen. Selbst die Verwendung von ii, jj und kk kann ausreichen, obwohl diese Auswahl von Ihrer Sprache abhängt. (Doppelvokale wären weniger nützlich, wenn beispielsweise Codekommentare auf Estnisch gemacht würden).

  • Den Code von Anfang an kommentieren.

  • Für kritische Anwendungen ist es manchmal besser, sich auf ältere Sprach- / Compilerversionen (Hauptversionen) zu verlassen, die stabiler und besser debuggt sind. Natürlich können Sie in späteren Versionen optimierten Code verwenden, Fehler beheben usw., aber ich spreche über die Verwendung von Fortran 95 anstelle von 2003, Python 2.5.4 anstelle von 3.0 oder so. (Insbesondere, wenn eine neue Version die Abwärtskompatibilität beeinträchtigt.) Viele Verbesserungen führen normalerweise zu vielen Fehlern. Dies hängt jedoch von bestimmten Anwendungsfällen ab! Beachten Sie, dass dies eine persönliche Entscheidung ist, viele Leute könnten dagegen argumentieren.

  • Verwenden Sie redundante und automatisierte Backups! (Mit Versionskontrolle).

David
quelle
2

Verwenden Sie auf jeden Fall Subversion , um aktuelle, laufende und stabile Snapshot-Kopien des Quellcodes zu erhalten. Dies umfasst C ++, Java usw. für selbst entwickelte Softwaretools und Quickie-Skripte für die einmalige Verarbeitung.

Angesichts der starken Neigung von Wissenschaft und angewandter Technik zur "Lone Cowboy" -Entwicklungsmethode ist die übliche Praxis, das Repository in Trunk, Tag und was auch immer zu organisieren, üblich - stören Sie sich nicht! Wissenschaftler und ihre Labortechniker drehen gerne Knöpfe, wackeln mit Elektroden und jagen Vakuumlecks nach. Es ist genug Arbeit, um alle dazu zu bringen, zuzustimmen, Python / NumPy zu sagen oder einer Namenskonvention zu folgen. Vergessen Sie, sie dazu zu bringen, den Praktiken und Konventionen arkaner Softwareentwickler zu folgen.

DarenW
quelle
2

Für das Quellcode-Management sind zentralisierte Systeme wie Subversion aufgrund des klaren Single Point of Truth (SPOT) für den wissenschaftlichen Gebrauch überlegen. Das Protokollieren von Änderungen und die Möglichkeit, Versionen einer Datei abzurufen, ohne nach dem Ort zu suchen, an dem etwas zu finden ist, bietet enorme Vorteile bei der Aufzeichnung. Tools wie Git und Monotone : Oh mein Gott, das Chaos, das ich mir vorstellen kann, würde folgen! Klare Aufzeichnungen darüber, welche Version von Hack-Job-Skripten beim Spielen mit dem neuen Sensor verwendet wurde, als dieses Higgs-Boson vorbeiging oder diese Supernova explodierte, führen zu Glück.

DarenW
quelle
Haben Sie jemals versucht, ein verteiltes Versionskontrollsystem zu verwenden?
Andrew Grimm
1
Fast alle verteilten Systeme machen es genauso einfach wie die zentralisierten. Sie zeichnen einfach eine Commit-ID (in Git-Begriffen) anstelle einer Revisionsnummer (wie in SVN) auf.
Phil Miller
2

Welche Sprachen / Umgebungen haben Sie für die Entwicklung wissenschaftlicher Software verwendet? Datenanalyse? Welche Bibliotheken? (ZB, was verwenden Sie zum Plotten?)

Sprachen, die ich für numerische und sicentific-bezogene Dinge verwendet habe:

  • C (langsame Entwicklung, zu viel Debugging, fast unmöglich, wiederverwendbaren Code zu schreiben)
  • C ++ (und ich habe gelernt, es zu hassen - die Entwicklung ist nicht so langsam wie C, kann aber schmerzhaft sein. Vorlagen und Klassen waren anfangs cool, aber nach einer Weile wurde mir klar, dass ich die ganze Zeit gegen sie kämpfte und Problemumgehungen fand Sprachdesignprobleme
  • Common Lisp, das in Ordnung war, aber für Sci-Computing nicht weit verbreitet war. Nicht einfach in C zu integrieren (im Vergleich zu anderen Sprachen), funktioniert aber
  • Planen. Dieser wurde meine persönliche Wahl.

Mein Editor ist Emacs, obwohl ich vim für schnelle Dinge wie das Bearbeiten von Konfigurationsdateien verwende.

Zum Plotten generiere ich normalerweise eine Textdatei und füge sie in gnuplot ein.

Für die Datenanalyse generiere ich normalerweise eine Textdatei und verwende GNU R.

Ich sehe hier viele Leute, die FORTRAN verwenden (meistens 77, aber ungefähr 90), viel Java und etwas Python. Ich mag diese nicht, also benutze ich sie nicht.

Gab es Schulungen für Personen ohne wesentlichen Programmierhintergrund?

Ich denke, das trifft auf mich nicht zu, da ich meinen Abschluss in CS gemacht habe - aber wo ich arbeite, gibt es keine formelle Ausbildung, aber Menschen (Ingenieure, Physiker, Mathematiker) helfen sich gegenseitig.

Hatten Sie so etwas wie Versionskontrolle, Fehlerverfolgung?

Versionskontrolle ist absolut wichtig! Ich bewahre meinen Code und meine Daten auf drei verschiedenen Computern auf zwei verschiedenen Seiten der Welt auf - in Git-Repositories. Ich synchronisiere sie die ganze Zeit (also habe ich Versionskontrolle und Backups!). Ich mache keine Fehlerkontrolle, obwohl ich damit anfangen kann. Aber meine Kollegen haben überhaupt kein BTS oder VCS.

Wie würden Sie versuchen, ein anständiges Programmierumfeld zu schaffen, ohne den einzelnen Wissenschaftlern zu viel im Weg zu stehen (insbesondere Physiker sind hartnäckige Menschen!)?

Erstens würde ich ihnen so viel Freiheit wie möglich geben. (An der Universität, an der ich arbeite, kann ich wählen, ob jemand Ubuntu oder Windows installieren oder mein eigenes Betriebssystem installieren möchte. Ich habe mich für die Installation meines eigenen Betriebssystems entschieden. Ich habe keine Unterstützung von ihnen und bin für alles verantwortlich, was damit passiert meine Maschinen, einschließlich Sicherheitsprobleme, aber ich mache mit der Maschine, was ich will).

Zweitens würde ich sehen, woran sie gewöhnt sind, und es zum Laufen bringen (FORTRAN benötigen? Wir werden es einrichten. Benötigen Sie C ++? Kein Problem. Mathematica? OK, wir werden eine Lizenz kaufen). Dann sehen Sie, wie viele von ihnen "zusätzliche Werkzeuge" lernen möchten, um produktiver zu werden (sagen Sie nicht "verschiedene" Werkzeuge. Sagen Sie "zusätzliche", damit es nicht so aussieht, als würde jemand "verlieren" oder "lassen" go "oder was auch immer). Beginnen Sie mit den Editoren und prüfen Sie, ob es Gruppen gibt, die VCS zur Synchronisierung ihrer Arbeit verwenden möchten (hey, Sie können zu Hause bleiben und Ihren Code über SVN oder GIT senden - wäre das nicht großartig?) Und so weiter. Nicht auferlegen - zeigen Sie Beispiele dafür, wie cool diese Tools sind. Machen Sie eine Datenanalyse mit R und zeigen Sie ihnen, wie einfach es war. Zeigen Sie schöne Grafiken und erklären Sie, wie Sie sie erstellt haben (aber beginnen Sie mit einfachen Beispielen,

Jay
quelle
2

Ich würde F # als potenziellen Kandidaten für die Durchführung wissenschaftsbezogener Manipulationen vorschlagen, da es eine starke semantische Bindung an mathematische Konstrukte aufweist.

Auch die Unterstützung von Maßeinheiten, wie hier beschrieben, ist sehr sinnvoll, um eine ordnungsgemäße Übersetzung zwischen mathematischem Modell und Implementierungsquellcode sicherzustellen.

Norman H.
quelle
1

Zuallererst würde ich definitiv eine Skriptsprache verwenden, um zu vermeiden, dass viele zusätzliche Dinge erklärt werden müssen (zum Beispiel ist die manuelle Speicherverwaltung - meistens - in Ordnung, wenn Sie leistungsabhängige Inhalte auf niedriger Ebene schreiben, aber für jemanden, der dies nur tut möchte einen Computer als aktualisierten wissenschaftlichen Taschenrechner verwenden, ist definitiv übertrieben). Schauen Sie sich auch um, ob es etwas Spezielles für Ihre Domain gibt (ebenso wie R für Statistiken). Dies hat den Vorteil, dass bereits mit den Konzepten gearbeitet wird, mit denen die Benutzer vertraut sind, und dass sie über speziellen Code für bestimmte Situationen verfügen (z. B. Berechnung von Standardabweichungen, Anwendung statistischer Tests usw. im Fall von R).

Wenn Sie eine allgemeinere Skriptsprache verwenden möchten, würde ich mich für Python entscheiden. Zwei Dinge, die es zu bieten hat, sind:

  • Die interaktive Shell, in der Sie experimentieren können
  • Seine klare (wenn auch manchmal langwierige) Syntax

Als zusätzlichen Vorteil verfügt es über Bibliotheken für die meisten Dinge, die Sie damit machen möchten.

Grauer Panther
quelle