Ich beginne mein Ingenieurstudium und werde an computerwissenschaftlichen Projekten arbeiten. Mir ist aufgefallen, dass hier einige Diskussionen über die Vor- und Nachteile der Implementierung eigener Algorithmen geführt wurden . Unterscheidet sich die Kosten-Nutzen-Analyse der Implementierung eigener Algorithmen von der Verwendung von Bibliotheken als Anfänger?
10
Antworten:
Meiner Meinung nach ändert die Antwort von David Ketcheson hier auf die Frage, die Sie in Ihrem Beitrag verlinkt haben , nichts, wenn Sie ein Anfänger sind .
Codieren Sie minimale Versionen von Algorithmen, die Sie lernen möchten. Dann legen Sie sie beiseite. Das Codieren eigener Algorithmen ist am nützlichsten für das Lernen, aber für Forschungs- (oder Produktions-) Code, es sei denn, Ihre Forschungsziele bestehen darin, Software zu schreiben, die die neuesten Bibliotheken verbessert (falls überhaupt vorhanden). Es ist besser, Bibliotheken zu benutzen. Bibliotheken sind wahrscheinlich besser dokumentiert, skalierbarer und robuster als das, was Sie selbst codieren, es sei denn, Sie können wirklich gut codieren (oder werden). Außerdem werden Bibliotheken wahrscheinlich für Sie getestet und getestet (obwohl dies natürlich davon abhängt, wer die Bibliothek geschrieben hat ...). Sie sind dafür verantwortlich, den Code, den Sie für Ihre Abschlussarbeit schreiben, zu unterstützen, zu debuggen und zu testen. Um Zeit zu sparen, können Sie die Menge an Code, die Sie schreiben müssen, minimieren.
Die einzigen anderen Szenarien, an die ich denken kann (dh es kann andere geben), sind:
quelle
Ich möchte Geoffs nachdenklicher Antwort etwas mehr Breite geben . Insbesondere möchte ich Ihnen etwas mehr Einblick in den Wert Ihrer Programmierbemühungen geben als in Ihre Forschungsbemühungen in Ihrer frühen Karriere als Akademiker.
Sie werden feststellen, dass die Fähigkeit, Software zu schreiben, um Ihre wissenschaftliche Forschung zu erweitern, Sie zu einem wertvollen Mitglied fast jedes Forschungsteams macht. Diese Zeit wird jedoch von Ihren akademischen Kollegen oder denjenigen, die für akademische Positionen eingestellt werden, nicht unbedingt als "wertvoll" angesehen.
Aus einer 2011 in Princeton durchgeführten Forschungsumfrage "Ein Überblick über die Praxis der Computerwissenschaft" :
Das bedeutet nicht, dass es keine gute Idee ist, eine Kernbibliothek oder Anwendungen zu implementieren oder neu zu gestalten. Wenn Sie jedoch ernsthafte Softwareentwicklungen durchführen möchten (mehr als 25% Ihrer Zeit mit Code arbeiten), behalten Sie diese drei bei Gedanken im Kopf.
Komplexität und Risiko wachsen exponentiell mit der Projektgröße und der Anzahl der Entwickler. Solange Sie nicht mit größeren Softwareteilen oder Entwicklerteams geschrieben oder gearbeitet haben, die über Ihr Labor hinausgehen, wird es für Sie schwierig sein, dies richtig einzuschätzen und den Aufwand richtig vorherzusagen.
Du musst gut sein. Sowohl als Programmierer als auch als Anwendungswissenschaftler ist eine gewisse Reife erforderlich, um nützliche Software zu schreiben. Sie müssen die wichtigen Merkmale kennen, wo die numerischen Risiken liegen, und in der Lage sein, den Programmieraufwand für einen bestimmten Satz von Merkmalen und die Robustheit vorherzusagen. Der einzige Weg, um gut zu werden, besteht natürlich darin, Zeit mit Projekten zu verbringen, bei denen Sie nicht die Führung übernehmen oder die sicher scheitern oder verzögert werden können, was mich zu meinem letzten Punkt bringt.
Obwohl viele Forschungslabors und Industriepositionen Wert auf Programmiererfahrung legen, kann wissenschaftliche Programmierung einen potenziellen Nachteil für Ihre akademische Karriere darstellen, selbst wenn Ihre Software der Wissenschaft mehr zugute kommt als Ihre Arbeiten. Die ganze Zeit verbringen Sie damit, zu lernen, wie man gut programmiert, programmiert, Ihren Code dokumentiert und ihn robust macht. Dies führt zu Papieren, die nicht geschrieben werden. Ein Berater wird hier nicht immer das Wohl seines Schülers berücksichtigen, da dies einer der Fälle ist, in denen der Schüler Arbeit leisten kann, die der Beratergruppe zugute kommt, ohne die Anzahl der Zitate des Schülers zu verbessern. Suchen Sie einen oder mehrere vertrauenswürdige Mentoren in dem Bereich auf, an dem Sie interessiert sind, und stellen Sie sicher, dass Sie ein klares Verständnis dafür haben, welche Beiträge als wertvoll angesehen werden. akademia.stackexchange.com ist ein ausgezeichneter Ort, um eine Folgefrage zu stellen.
Als Fußnote: Die Anzahl der Ein-Mann-Projekte, die jedes Rechenfeld erheblich voranbringen, nimmt stetig ab, sei es ein Anwendungsbereich oder etwas Technischeres wie die dichte lineare Algebra. Immer mehr Softwarepakete, die das "Brot und Butter" der Computerforschung bilden, sind 10 Jahre oder älter. Wissenschaftlicher Code, der diesen Reifegrad nicht erreicht hat, weist tendenziell mehr Fehler, weniger Funktionen und eine spärliche Dokumentation auf. Vermeiden Sie es, mit unreifem Code zu arbeiten, der nicht aktiv unterstützt wird, unabhängig davon, wie alt er ist.
quelle
Ich denke, die Kosten-Nutzen-Analyse hängt von der gewünschten wissenschaftlichen Computerkenntnis ab, die Sie während Ihres Studiums erreichen möchten.
Für die meisten Wissenschaftler, die mit Computern arbeiten, die sich mit wissenschaftlichem Rechnen auskennen, ist dies ausreichend: ein umfassendes (abstraktes) Verständnis der verwendeten Hauptalgorithmen und Programmierkenntnisse, mit denen Sie Softwarebibliotheken effektiv nutzen können (Software erstellen, verknüpfen, verwenden) Mailinglisten).
Wenn Sie dagegen ein Experte auf dem Gebiet des wissenschaftlichen Rechnens werden möchten, benötigen Sie ein tiefes Verständnis der numerischen Methoden, der Gleitkomma-Arithmetik und der Computertechnologie. Sie können die Theorie dieser Themen aus Büchern lernen, jedoch sind Erfahrung durch Übung erforderlich, um fortgeschrittene Fähigkeiten aufzubauen und aufrechtzuerhalten. Daher ist es möglicherweise eine gute Idee, alles zu programmieren, was Sie während des Lernens verwenden (z. B. wenn Sie wie ein Koch kochen möchten: Sie lernen, indem Sie essen, was Sie kochen, und indem Sie häufig kochen!).
Was das richtige Niveau ist, hängt von Ihrer Karriere ab. Sehen Sie, welche Fähigkeiten von Arbeitern in Ihrem Bereich eingesetzt werden.
quelle