Es gibt einige großartige Antworten, und ich möchte meine zwei Cent in dieses Thema einbringen, da es sich um ein sehr relevantes Thema handelt, über das ich oft nachdenke oder das ich mit meinen Kollegen diskutiere. Es wird unvermeidlich einige Überschneidungen mit Teilen bestehender Antworten geben. Ich hoffe nur, dass ich in diesen Fällen eine etwas andere Perspektive geben kann.
Ich habe als Hauptfach angewandte Mathematik gemacht und meine Master in gemacht biologische medizinische Modellierung von & (was auch immer das bedeutet). Ich habe mein Doktoratsstudium in Bioinformatik und Systembiologie abgeschlossen. Ich arbeite fast ausschließlich in silico und habe viele dieser monströsen, hässlichen und traurigen Software-Teile gezeugt.
Zunächst einmal denke ich, dass Sie einen kleinen, aber wichtigen Fehler bei der Formulierung Ihrer Frage machen. Sie sagen:
" Warum schreiben viele talentierte Wissenschaftler schreckliche Software?
Ich würde stattdessen
vorschlagen
" Warum ist von talentierten Wissenschaftlern geschriebene Software schrecklich?
"
Der Unterschied ist subtil, aber für den Rest meiner Antwort wesentlich . Schließlich ist es nicht so, dass sich Wissenschaftler an einem Tisch versammeln und beschließen, schreckliche Software zu schreiben.
Viele Wissenschaftler, die Code schreiben, sind nicht dazu ausgebildet, dort Software zu schreiben.
ist ein schwerwiegender Unterschied zwischen dem Wissen, wie man Code und dem Wissen, wie man Software schreibt. Ich habe während meines Studiums und meines Masterstudiums fast so viele Kurse in der CS-Abteilung absolviert wie in Mathematik, daher fühlte ich mich mit meinen Programmierkenntnissen ziemlich sicher. Bis ich mit Fragen wie Verpackung, Abhängigkeitsmanagement, Lebenszyklen, Lizenzierung usw. konfrontiert wurde. Keines davon war während meines Studiums im Lehrplan enthalten. Ich weiß nicht, ob diejenigen, die CS als Studenten machen, diese Konzepte lernen, aber ich musste es verdammt noch mal nie, bis ich sie plötzlich kennen musste.
Chefs / Vorgesetzte vieler Wissenschaftler, die Code schreiben, sind nicht im Schreiben von Software
geschult
Sie müssen nicht nur eine Menge neuer Dinge lernen, sondern sich auch vorstellen, dass Sie nicht erklären können, warum dies wichtig ist, damit Sie Ihrem Chef diese Dinge lernen. Ich habe dieses Problem ziemlich oft, da das Schreiben von Code oft mit Laborarbeiten in unserer Abteilung vergleichbar ist. Die Leute denken, dass das Schreiben von Code einfach von alleine und vorzugsweise schnell geschieht. Ich habe oft Gespräche mit Kollegen geführt, in denen sie scherzhaft erwähnten, dass alles, was sie von mir hören wollen, "Computer sagt ja / nein?" Ist. Wie lange etwas Neues dauern könnte, wird sehr oft unterschätzt. Das kontinuierliche Schreiben von Tests wird normalerweise als Zeitverschwendung angesehen. Das bringt mich zu meinem nächsten Punkt ...
Gute Software wird in der Wissenschaft nicht geschätzt, zumindest nicht in der gleichen Weise wie in der Industrie.
Das Maß für die Kompetenz in der Wissenschaft sind Veröffentlichungen und die Form der Währung ist Zitate. Sie sind ständig in einer Art Wettbewerb, um etwas Neues und Nützliches zu entwickeln, und nur der erste da draußen wird den Preis erhalten. Klone existieren im akademischen Bereich nicht oder überleben nicht besonders lange. Im Gegensatz dazu können Sie in der Industrie Marktanteile durch bessere Werbung, eine coolere Benutzeroberfläche oder einen niedrigeren Preis gewinnen. Wenn im akademischen Bereich bereits eine Methode veröffentlicht wurde, müssen Sie etwas anderes tun.
Wenn Sie bereits eine Methode veröffentlicht haben, werden zusätzliche Funktionen, Bereinigungen, Optimierungen usw. dieses Proof-of-Principles hinzugefügt Software ist oft nicht gut genug, um eine neue Veröffentlichung zu rechtfertigen, was praktisch bedeutet, dass Sie monatelange Arbeit für nichts verschwendet haben. Traurig aber wahr ...
Erwartungen ändern sich, man muss das Unerwartete erwarten
Könnte ein kleiner Punkt sein, aber ich kann ihn nicht genug betonen, da er mich immer wieder in den Rücken beißt. Sie erhalten einfach nicht die richtigen Spezifikationen für ein neues Projekt. Sie sind oft entweder allzu vage oder viel zu streng (unrealistisch). Manchmal stellt sich heraus, dass etwas, das nie erwähnt wurde, implizit erwartet wird. Um die Verletzung zusätzlich zu beleidigen, ändern sich die Spezifikationen basierend auf einem neuen Datenformat, einer anderen Datenbank, neuen Funktionen oder einfach nur der anderen coolen Sache, an die der Chef gedacht hat, als er auf einer Konferenz war ... Sie schreiben und schreiben Lösungen für die Das gleiche Problem wird zu einer Unordnung.
Normalerweise erhalten Sie nicht die Unterstützung, die Sie benötigen.
Die wenigen Programmier-Doktoranden in meiner Abteilung versuchen wir, uns zu verbessern, indem wir auf dem neuesten Stand bleiben mit den Trends. Best Practices zum Beispiel über SO lernen. Aber meistens sehen Sie Hindernisse, wenn Sie etwas Neues ausprobieren möchten. Entweder denkt die IT-Abteilung, dass Sie zu lästig sind, oder der Chef denkt, dass Sie nachlassen, oder die Leute, die Sie um Hilfe bitten, denken, dass Sie es nicht wissen und dass Sie ihre verschwenden em> Zeit. Zum Beispiel habe ich mehrere Monate lang verhandelt und hin und her geschickt, um von zu Hause aus auf unseren Versionskontrollserver zugreifen zu können. Schließlich funktioniert es nur schneller, bestimmte Best Practices zu überspringen.
Die neuesten coolsten CS-Trends sind für Leute, die keine Experten sind, nicht immer gut dokumentiert.
Ich habe versucht, mir mit mehreren "neuen" Technologien die Hände schmutzig zu machen, die oft welche haben steile Lernkurve. Manchmal ist es die Mühe wirklich nicht wert. Das beste Beispiel, das ich habe, ist Maven. Da ich oft in Java arbeite, dachte ich, ich sollte moderne Tools für das Packen und das Abhängigkeitsmanagement verwenden. Aber meine Schlussfolgerung, nachdem ich so lange damit gekämpft habe, ist @% & $ it! Ich habe wirklich nicht die Energie oder Zeit, um das Durcheinander einer Dokumentation durchzugehen.
Fazit
Nachdem ich mich in den letzten Jahren darüber Sorgen gemacht hatte, kam ich zu folgendem Schluss, der mir inneren Frieden verschaffte:
" Ich bin kein Softwareentwickler. Ich bin weder ausgebildet noch ausgebildet Das Schreiben von Software ist nicht meine Aufgabe. Das Lernen, bestimmte Probleme zu lösen, ist . "
Ich hoffe, diese Antwort gibt es Sie erhalten einige Einblicke, warum von Wissenschaftlern geschriebene Software (außergewöhnlich talentiert oder auf andere Weise) häufig nicht den von Softwareentwicklern festgelegten Standards entspricht.