Meine Frage lautet: Inwieweit sollte ich versuchen, diese Tools in meinen Forschungscode aufzunehmen?
Nur so viel, wie Sie fühlen, zahlt sich für alles aus, was Sie versuchen zu tun. Wenn Sie hauptsächlich MATLAB-Skripte ausführen, sind Versionskontrolle und möglicherweise Unit-Tests alles, was Sie brauchen. Wenn Sie über MEX-Dateien verfügen, ist es wahrscheinlich gut, ein Makefile zu haben, das diese kompiliert, wenn auch nur aus eigenen Gründen, da die Eingabe von Sequenzen von Kompilierungsbefehlen jedes Mal, wenn Sie die MEX-Dateien erstellen möchten, fragil ist.
Ein Grund dafür, dass diese Workflow-Tools verwendet und in große Projekte integriert werden, ist, dass sich die Investition in diese Tools für ihre Ziele auszahlt. Als Beispiel für einen einmaligen Forschungscode, der Ihre These unterstützt, lohnt es sich wahrscheinlich nicht, ein plattformübergreifendes Build-System wie CMake zu verwenden. Für eine Bibliothek, deren erklärter Zweck darin besteht, plattformübergreifend kompatibel zu sein, wie z. B. Elemental, ist es sinnvoller, Zeit in die Verwendung eines plattformübergreifenden Build-Systems zu investieren.
Wie viel Zeit sollte ich damit verbringen, die Struktur und Implementierung meines Codes zu "planen", oder sollte ich aufhören, darüber nachzudenken und einfach gute Routinen schreiben?
Dies hängt davon ab, wie gut Sie mit dem zu lösenden Problem, den geeigneten Algorithmen, Datenstrukturen, Programmierpraktiken usw. vertraut sind. Ähnlich wie Gliederung und Vorabschreibung für Zeitschriftenartikel hilfreich sind, ist ein gewisses Maß an Brainstorming und Pseudocodierung hilfreich, um gut strukturierten Code zu schreiben. Ich mag den Pseudocode-Programmierprozess in Code Complete von Steve McConnell. Er enthält auch einige Referenzen und Richtlinien, wie viel Zeit je nach Art des Projekts für die Entwurfsphase aufgewendet werden sollte.
Das Schreiben von Wegwerfversionen von Routinen und das Experimentieren mit kurzen Codebits ist ebenfalls sehr hilfreich. Ein häufiger Aphorismus in der Softwareentwicklung ist, dass Sie immer mindestens eine Version Ihres Codes wegwerfen.
Ich neige dazu zu glauben, dass "agile" Entwicklungspraktiken bei den meisten wissenschaftlichen Softwareentwicklungen am besten funktionieren, basierend auf Greg Wilsons Arbeit bei Software Carpentry (Haftungsausschluss: Ich habe mich in der Vergangenheit freiwillig bei ihnen gemeldet). Im Allgemeinen bedeutet "agil", dass Sie sich Ziele setzen sollten, von denen Sie glauben, dass Sie sie in kurzer Zeit erreichen (z. B. ein paar Tage, eine Woche, höchstens einen Monat). Planen Sie, wie Sie diese Ziele durch Pseudokodierung erreichen können und entwerfen, dann Code schreiben und wiederholen. Kurze Zyklen helfen Ihnen dabei, auf Änderungen zu reagieren, z. B. wenn Ihr Berater entscheidet, dass Sie Ihre Arbeit auf eine Weise erweitern sollen, die Sie nicht erwartet haben.
Ich habe das Gefühl, dass ich als Produkt meiner Dissertation eine gut geplante Open-Source-Codebasis entwickeln sollte, um die Erfahrung und den Lebenslauf zu verbessern, aber ich bin mir nicht sicher, wie ich diesen Prozess steuern soll. Irgendwelche Tipps, Buch- / Artikel- / Website-Empfehlungen usw.?
Das hängt alles davon ab, was Sie tun möchten. Für Positionen, die Softwareentwicklung betreffen, ist die Entwicklung einer Open-Source-Codebasis hilfreich, da Sie diese auf GitHub veröffentlichen und darauf verweisen können. Das heißt, wenn Sie es zu einem Softwarepaket machen möchten, das die Leute verwenden werden, müssen Sie einige Zeit damit verbringen, es zu warten. Vielleicht möchten Sie das nicht tun. Das Einbringen Ihres Forschungscodes in relevante bestehende Projekte kann ebenfalls eine gute Option sein. Unternehmen scheinen eine Mischung aus beidem zu wollen. Wenn Sie zum Code anderer Personen beitragen können, zeigt dies, dass Sie ein Teamplayer sind und dass Sie den Code anderer Personen lesen und dennoch etwas Nützliches damit tun können.
In Bezug auf Referenzen ist die Referenzleseliste von Software Carpentry gut auf Wissenschaftler ausgerichtet. Wenn Sie sich eingehender mit der Praxis der Softwareentwicklung befassen möchten, enthält Code Complete (siehe Liste im vorherigen Link) weitere Referenzen, die sich allmählich weiterentwickeln datiert, aber nützlich, um nachzuschlagen. Hilfreich sind auch die Veröffentlichungen zu Best Practices im Bereich wissenschaftliches Rechnen
Der Unterricht in Software Carpentry ist ebenfalls hilfreich. Sie sind Python-zentriert, wenn es um die Programmierung geht, also nehmen Sie das vielleicht mit einem Körnchen Salz, aber die Teile der Versionskontrolle sind einen Blick wert.