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ß.
Antworten:
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.
quelle
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 .
quelle
Kern- / Teilchenphysik hier.
Um Dinge zu verbessern:
Noch ein Vorschlag zur Verbesserung.
quelle
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:
quelle
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).
quelle
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!
quelle
Ich würde wärmstens empfehlen, "Was jeder Informatiker über Gleitkomma-Arithmetik wissen sollte" zu lesen . Viele Probleme, auf die ich regelmäßig stoße, sind auf Probleme mit der Gleitkommaprogrammierung zurückzuführen.
quelle
Ich bin Physiker und arbeite auf dem Gebiet der Physik der kondensierten Materie. Ich baue klassische und Quantenmodelle.
Sprachen:
Bibliotheken:
Grafik:
Entwicklungswerkzeuge:
quelle
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...
Ü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.
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.
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.
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!
quelle
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.
quelle
Python, NumPy und Pylab (Plotten).
Nein, aber ich arbeitete in einem Multimedia-Forschungslabor, sodass fast jeder einen Informatik-Hintergrund hatte.
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 .
Stellen Sie sicher, dass die Infrastruktur eingerichtet und gut gewartet ist, und versuchen Sie, die Vorteile der Quellcodeverwaltung zu nutzen.
quelle
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:
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.
quelle
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.
quelle
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).
quelle
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.
quelle
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.
quelle
Sprachen, die ich für numerische und sicentific-bezogene Dinge verwendet habe:
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.
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.
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.
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,
quelle
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.
quelle
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:
Als zusätzlichen Vorteil verfügt es über Bibliotheken für die meisten Dinge, die Sie damit machen möchten.
quelle
Ich bin kein Experte auf diesem Gebiet, aber ich habe immer verstanden, dass dies das ist MATLAB dafür geschaffen wurde. Es gibt eine Möglichkeit, MATLAB auch für die Quellcodeverwaltung in SVN zu integrieren .
quelle