Normalerweise analysiere ich Daten von Experimenten und obwohl ich ein allgemeines Schema von Schritten habe, die ich ausführen muss, muss ich es möglicherweise an die Besonderheiten der Experimente oder die dahinter stehenden Fragen anpassen. Ich bin normalerweise die einzige Codierung.
Ich habe mir Wikipedia angesehen , bin mir aber nicht sicher, welche Methode ich verwenden kann, teilweise, weil ich noch nie einer gefolgt bin, und teilweise, weil ich manchmal nur die Daten untersuche, um zu sehen, wie sie aussehen, und manchmal möchte ich nur eine Antwort. (Und weil von mir nicht viel erwartet wird, dass ich meinen Code teste oder eine bestimmte Qualität habe)
Nach ein oder zwei Stunden wurde ich aufgefordert, diese Frage zu stellen. Dabei stellte ich fest, dass die r-Funktion table
von der Reihenfolge der Vektoren und nicht vom Namen der Elemente abhängt, mit denen sie verglichen werden sollen. Dann hätte ich das Verhalten und die Funktionen, die ich mit einigen Scheindaten verwendet habe, testen sollen. Aber ich habe die Tabelle verwendet, nachdem andere Analysen zu Informationsmangel geführt hatten, sodass ich der testgetriebenen Entwicklungsmethode nicht folgen konnte (wenn ich sie richtig verstanden hätte). Ich bin jedoch der Meinung, dass ich mit einer gewissen Verbesserung der Art und Weise, wie ich mit dem Projekt umgehe, effizienter sein könnte, abgesehen davon, dass ich Fehler früher erkenne, aber auch, wie und wonach ich suchen muss, falls ich an einem Ergebnis zweifle. Konzentrieren Sie sich also bitte nicht nur darauf Dieser Beispielfehler.
Welche Softwaremethode passt am besten in die Forschung?
Ich frage mich im Grunde, wie man Qualität und zeitgesteuerten Fortschritt sicherstellt und die Spezifität der Forschung beibehält.
Beispiel meiner Arbeitsweise:
Ein Biologe hat eine Frage im Sinn und weiß, dass die Durchführung eines Experiments zu interessierenden Daten führt (dh zu Genexpressionsniveaus unter zwei Bedingungen). Dann setzt er das Experiment und sammelt Proben von 10 Personen / Mäusen / Ratten. Jetzt muss ich diese Daten für diese 10 Proben unter Verwendung vorhandener Bibliotheken und Tests analysieren (oder neue Tests implementieren), aber die Frage berücksichtigen, die der Biologe im Auge hatte (dh welche Gene in einer Bedingung stärker exprimiert werden als in einer anderen). Die Struktur ist dieselbe wie in früheren Experimenten (an denen 6 Bedingungen und ein anderes Tier beteiligt waren), aber der statistische Test, die Normalisierungen und die Datenstruktur können sich ändern. Daher kopiere ich normalerweise eine frühere Version und passe sie an die aktuellen Anforderungen an.
Antworten:
Was benötigt wird, ist vielleicht keine Softwaremethodik, sondern ein politischer Wandel in der Wissenschaft, der das Problem der mangelnden Anerkennung der Rolle der Softwareentwicklung in der Wissenschaft behebt.
Das Software Sustainability Institute (UK) ist die Organisation, die dem am nächsten kommt, wonach Sie suchen: wie Sie sich für einen gewissenhafteren Einsatz von Computerprogrammierung in der wissenschaftlichen Forschung einsetzen können.
Es bietet auch Informationshinweise für diejenigen, die an Softwareentwicklungsmethoden interessiert sind.
Ich muss jedoch darauf hinweisen, dass Methoden in der Regel Teams von Softwareprogrammierern mit Iterationen und schrittweiser Verfeinerung der Projektziele steuern und mit stabilen Codebasen arbeiten, die lange halten. Sie sind für Projekte gedacht, die um Größenordnungen komplexer sind als das, was Sie tun.
Hier ist die unbequeme Wahrheit, warum diese sehr offensichtlich korrekte Sache (gewissenhafterer Einsatz von Computerprogrammierung in der wissenschaftlichen Forschung) nicht erreicht und immer bestätigt wurde: In akademischen Verwaltungsumgebungen kann man sehen, dass Wissenschaftler die Bedeutung des Computers herabsetzen Programmierung. Manchmal kann man sehen, dass sie sich zusammenschließen, um die Anerkennung von Beiträgen von Personen zu verweigern, die an der Software beteiligt sind, selbst wenn die Art dieses Beitrags in die wissenschaftliche Disziplin passt.
An Ihrem Arbeitsplatz fehlten Dinge und Dinge, die Sie tun können.
Dinge, die fehlten:
Kurz gesagt, die allgemeine Kultur ist, dass die beteiligten Personen nicht wirklich an ... Sie haben es erraten ... einem gewissenhafteren Einsatz von Computerprogrammierung in der wissenschaftlichen Forschung interessiert sind.
Dinge die du tun kannst:
Für Entwickler von Karrieresoftware finden sich Richtlinien dieser Art in:
Dies sind die Grundvoraussetzungen für die Führung eines Softwareentwicklungsunternehmens. Wenn Sie jedoch allein einen Krieg der Apathie führen, müssen Sie Prioritäten setzen. Mit den Tools besser zu werden, Informationen aufzuschreiben und zu pflegen sowie Versionen des Quellcodes beizubehalten, ist das absolute Minimum für eine einzige Umgebung.
quelle
Kümmern Sie sich nicht so sehr um die Methodik, sondern konzentrieren Sie sich mehr auf das, was Sie benötigen, um Ihre Anforderungen für die Softwareentwicklung selbst im Auge zu behalten.
Nach einem kurzen Aufenthalt in einer Position, die Ihrer hier relativ ähnlich ist, kann ich aus meiner persönlichen Erfahrung extrahieren.
Algorithmische Genauigkeit
Der wahrscheinlich wichtigste Aspekt ist, dass Sie nachweisen können, dass Ihre Software das tut, wofür sie entwickelt wurde. Hier ist das automatisierte Testen Ihr bester Verbündeter. Mir ist klar, dass es schwierig sein kann, auf einen richtigen Datensatz zu verzichten, aber eigentlich sollten Sie es sich zur Gewohnheit machen, Ihre eigenen Datensätze zu erstellen. Ihr Zweck ist jedoch etwas anders. Sie versuchen nicht, Trends aus den Daten zu extrahieren, sondern stellen sicher, dass die Software aus einem bekannten Datensatz vorhersehbare und korrekte Ergebnisse liefert. Für die Mustererkennung benötigen Sie beispielsweise kein Multi-Gig-Erbgut. Nur ein paar Textzeilen können ausreichen, um sicherzustellen, dass der Algorithmus das Muster erkennt.
Ich habe meine Daten so gestaltet, dass sie Eckfälle darstellen, unmögliche Fälle. Ich konzentrierte mich eher auf die Extreme als auf die erwartete Norm. Oft kann ich mich daran erinnern, auf etwas Unmögliches getestet zu haben, nur um zu sehen, dass diese Situation im tatsächlichen Datensatz auftritt. Hätte ich nicht darauf getestet, hätte ich nicht die Fehlererkennung und Protokollierung eingerichtet, die erforderlich sind, um mögliche Beschädigungen oder Fehler im Datensatz zu identifizieren. TDD passt gut zu diesem Teil, obwohl das Erstellen eines guten Testsatzes meiner Meinung nach wichtiger ist, unabhängig davon, ob Sie dies vor oder nach dem eigentlichen Code tun.
Versionierung
Zu oft wird dieser Teil weggelassen. Ein gutes Versionsschema für Ihren Code und die erstellten Pakete / ausführbaren Dateien hilft immens dabei, Ihren Fortschritt in Ordnung zu halten. Die genaue Wiederherstellung des Codes, der zum Erstellen der zuvor erhaltenen Ergebnisse verwendet wurde, kann beim Aufspüren von Fehlern oder Diskrepanzen hilfreich sein. Verzweigungen können auch beim Experimentieren mit verschiedenen Ansätzen oder Algorithmen hilfreich sein.
Stellen Sie sicher, dass Sie den in den tatsächlichen Berechnungen verwendeten Code mit Tags versehen. Überprüfen Sie die semantische Versionierung, wenn Sie Hilfe bei der Benennung der Versionen benötigen.
Automatisierter Build
Eine Folge des obigen Punktes. Stellen Sie sicher, dass Sie den Prozess des Erstellens und Packens Ihrer Software so weit wie möglich automatisieren. Sie müssen nicht vollständig arbeiten, gerade genug, um das endgültige System aus Quelle und Abhängigkeiten zu erstellen. Das Ziel hier ist es, Ihnen Zeit zu sparen, aber auch ein reproduzierbares Mittel zu haben, um die Software aus dem Quellcode neu zu erstellen, einschließlich Abhängigkeiten und anderer externer Funktionen. Groovy, Maven, Ant, Scons, Cmake sind nur eine kleine Auswahl von Build-Automatisierungs-Tools und Skriptsystemen, die helfen können.
Wenn Sie noch einen Schritt weiter gehen möchten, installieren Sie Jenkins oder Teamcity oder ein anderes kontinuierliches Integrationssystem. Zusätzlicher Bonus, wenn Sie mehrere Server oder Worker für verteiltes Computing warten müssen. Die meisten dieser Systeme verfügen über Mittel zur Unterstützung der Wartung. Außerdem können Sie die Testläufe vollständig automatisieren, sodass Sie nicht auf die Ergebnisse warten müssen, bevor Sie fortfahren. Legen Sie einfach fest und erhalten Sie später eine E-Mail. Ich hatte ein System, das Stunden brauchte, um die Testsätze zu durchlaufen. Diese Automatisierung einzurichten war die beste Investition meiner Zeit. Vor allem, wenn Sie bereits über die Skripte verfügen, um alles zu erstellen.
Umgebungsisolation
Die Forscher verbringen übermäßig viel Zeit damit, einen einzelnen oder kleinen Satz von interessierenden Variablen über ihre Protokolle von komplexen Systemen zu isolieren. Dies sollte auch auf Ihre Softwareentwicklungspraktiken ausgedehnt werden. Sie können die Containerisierung auch mit Docker oder Vagrant überprüfen. Sie haben eine bessere Kontrolle über die Umgebung, in der die Software ausgeführt wird.
Sie brauchen kein großes Team, bevor sich das auszahlt. Ich war die meiste Zeit allein und habe dennoch sehr davon profitiert, diese zu implementieren. Die Ruhe und die Zeitersparnis überwogen bei weitem den Aufwand, den ich dafür kostete.
quelle
Kannst du R verwenden? Dafür ist es da.
Halten Sie Ihren Code einfach . Achten Sie auf Lesbarkeit und sorgen Sie sich nicht um die Leistung, es sei denn, es handelt sich um ein Problem. Es gibt Methoden, um zu versuchen, Teams von Programmierern davon abzuhalten, Fehler in den Code des anderen zu setzen, selbst wenn das Team eine Person ist.
Das heißt, Codierung Disziplin ist super wichtig. Ich habe Code von hochqualifizierten Wissenschaftlern und Mathematikern gesehen, und es ist schrecklich . Sie ignorieren die Formatierung völlig. Sie zerquetschen den Code wie vakuumverpackt. Ihre Variablennamen sind völlig mystifizierend. Sie schreiben keine Kommentare oder sie schreiben unergründliche Kommentare oder die Kommentare sagen eine Sache, während der Code eine andere sagt. Mach diese Dinge nicht. Denken Sie immer an die zukünftigen Änderungen, die Sie oder andere möglicherweise vornehmen müssen.
quelle