Wird es als faul angesehen, wenn ich ein lineares Algebra-Paket für C ++ verwende?

11

Lassen Sie mich zunächst einige Hintergrundinformationen geben, bevor ich die Frage tatsächlich stelle. Ich studiere Physik und alle meine Programmierkurse waren in einfachen Programmiersprachen wie MATLAB. Mit einfach meine ich, dass die Sprache einen Großteil des Denkens für Sie erledigt ... In den nächsten Jahren werde ich Informatikkurse belegen und ich denke darüber nach, eine Karriere in der Programmierung zu verfolgen.

Wenn man bedenkt, dass viele College-Kurse in C ++ abgehalten werden, wird die Verwendung eines linearen Algebra-Pakets (Armadillo) mit einer ähnlichen Syntax wie MATLAB als faul angesehen?

Ich codiere gerade einen genetischen Algorithmus, und während er in MATLAB schnell lief, nimmt er in C ++ ohne die Hilfe dieser Pakete viel Zeit in Anspruch.

Wie funktioniert es im wirklichen Leben? Welche Pakete dürfen Sie verwenden?

Zum Beispiel möchte ich mein C ++ - Wissen nicht mit Gürteltier aufbauen und habe keine umfassenden Kenntnisse über andere weiter verbreitete Pakete wie "vector.h", "algorithm", "list" usw.

DLV
quelle
9
Sie dürfen alles verwenden, dessen Lizenz mit Ihrem Projekt kompatibel ist. Ansonsten verschwenden Sie nur Ihre Zeit. (Die richtige Art von) Faulheit ist gut
Richard Tingle
Unter der Annahme, dass Ihr Lehrplan sie enthält, bezweifle ich, dass die Verwendung eines linearen Algebra-Pakets an sich Sie daran hindert, <Vektor>, <Algorithmus> und <Liste> zu lernen.
Brandin
@ RichardTingle: Man darf alles benutzen, solange die Vorgesetzten es nicht verbieten ;-)
Doc Brown
Ändern lazyzu sensiblein Ihrem Titel, und die Antwort ist „Ja“ (vorausgesetzt , Sie tun , eine Aufgabe , die lineare Algebra beinhaltet, natürlich).
Jerry Coffin

Antworten:

21

Richards Kommentar ist die meiste Antwort bereits. Wann immer Sie für etwas anderes als eine Klassenübung programmieren, möchten Sie so viel vorhandenen Code wie möglich wiederverwenden, wobei nur ein paar andere Überlegungen zu berücksichtigen sind.

Die Vorteile der Wiederverwendung von Code sind:

  • Sie arbeiten schneller, weil einige Arbeiten bereits erledigt wurden.
  • Der vorhandene Code hat gute Chancen, besser zu sein als alles, was Sie von Grund auf neu schreiben würden, da er wahrscheinlich länger existiert, besser getestet und besser optimiert wurde.
  • Oft genug befindet sich der vorhandene Code in einer Domäne, mit der Sie nicht so vertraut sind. Zum Beispiel führen Sie Physiksimulationen durch, aber das bedeutet nicht, dass Sie sehr viel darüber wissen, wie Sie die lineare Algebra effizient berechnen können. Wenn Sie von anderen geschriebenen Code verwenden, können Sie sich auf deren Fachwissen stützen.

Es gibt nur einige Dinge zu beachten:

  • Lizenzierung. Der Autor des Codes, den Sie wiederverwenden möchten, besitzt das Urheberrecht daran, und Sie können den Code nicht ohne seine Erlaubnis verwenden. Bibliotheken werden mit einer Lizenz geliefert, die Ihnen sagt, was Sie mit ihnen tun können. Wenn Sie die Bibliothek verwenden möchten, müssen Sie die Lizenz einhalten. Armadillo steht unter der Mozilla Public License 2.0, was bedeutet, dass Sie es frei verwenden können.
  • Integration. Wenn Ihr Projekt größer ist, kann es ziemlich komplex sein, Bibliotheken von Drittanbietern zu integrieren. Abhängig von der Menge an Nutzung, die Sie aus der Bibliothek erhalten, lohnt es sich möglicherweise nicht.
  • Verteilung. Wenn eine Bibliothek nur als DLLs verfügbar ist oder eine Registrierung beim System erfordert, Ihre Verteilungsmethode jedoch darin bestehen muss, "diese ausführbare Datei irgendwo zu kopieren", können Sie die Bibliothek möglicherweise nicht verwenden.

Wie das Sprichwort sagt, ist Faulheit in einem Programmierer eine Tugend.

Sebastian Redl
quelle
1
Sie berühren es, aber da die Frage Klassenarbeiten erwähnt, ist es wichtig, kein Paket oder keine Bibliothek für das Stück zu verwenden, das Sie lernen möchten . Wenn Sie lernen möchten, wie man ein neuronales Netzwerk aufbaut, können Sie eine Bibliothek zum Parsen von Argumenten verwenden, Datei io, aber das neuronale Netzwerk selbst schreiben.
Alan Shutko
3
Ein wichtiger Punkt, der auf Ihrer Liste fehlt, ist die zukünftige Wartung. Wenn Sie erwägen, eine Drittanbieter-Bibliothek zu verwenden, die entweder Closed Source oder Open Source ist, aber zu komplex, um eine zukünftige Wartung durch die eigene Organisation zu ermöglichen, müssen Sie sicherstellen, dass der Bibliotheksanbieter zukünftige Wartungsdienste (einschließlich der Entwicklung der Bibliothek) bereitstellt ) für eine bestimmte Zeit. Dies ist einer der Hauptgründe, warum bestimmte Softwareunternehmen bestimmte Bibliotheken nicht verwenden und lieber eigene erstellen, auch wenn dies auf den ersten Blick verschwenderisch erscheint.
Doc Brown
1

Was meinst du jemals mit "erlaubt"? Ich denke, ich könnte hier etwas hinzufügen, das helfen könnte, ein Missverständnis einiger Anfänger zu klären: Sie werden gebeten, Ihren eigenen Code und Algorithmen usw. usw. an der Universität zu schreiben, weil Sie einen Kurs lernen und was konsolidieren möchten Sie haben in den Klassen gelernt, indem Sie den Code selbst geschrieben haben. Eine solche Codierung unterstützt Ihren Lernprozess . Nachdem Sie beispielsweise eine bestimmte Datenstruktur / einen bestimmten Algorithmus gelernt haben, schreiben Sie Ihren eigenen Code, um zu sehen, wie er tatsächlich funktioniert, und um Ihr Verständnis zu vertiefen. Das macht Sinn.

Wenn Sie ein reales Programmierprojekt durchführen, schreiben Sie keinen Code, um einige Konzepte / Kenntnisse zu erlernen. Sie versuchen, ein technisches Produkt herzustellen. Beim Engineering geht es nicht wirklich um Erfindungen, sondern darum, auf den bereits von anderen gelegten Grundlagen aufzubauen, um einem bestimmten praktischen Bedarf gerecht zu werden. Es gibt ein Sprichwort, dass beim Programmieren zu 80% die Bibliotheken / Codes anderer gelesen / wiederverwendet werden und zu 20% eigene geschrieben werden. Könnte etwas übertrieben sein, aber Sie bekommen den Geist.

In Ihrem Fall möchten Sie keine externen Bibliotheken verwenden, wenn Sie ein Programmierprojekt für einen Kurs durchführen und Sie ausdrücklich aufgefordert werden, Ihren eigenen Algorithmus zu codieren. Wenn Sie Ihr eigenes Engineering-Projekt durchführen, verwenden Sie so viele Bibliotheken wie möglich, bevor Sie versuchen, Ihre eigenen zu erstellen.

Wenn Sie diese Unterscheidung klarstellen, werden Sie verstehen, was Sie tun.

xji
quelle