Ignoriert „das Rad nicht neu erfinden“ die Grenzen des menschlichen Gedächtnisses?


16

Eine Sache, die ich in Haskell und F # gelernt habe, ist, dass jemand an einer Universität, der schlauer ist als ich, wahrscheinlich bereits eine Abstraktion für das gefunden hat, was ich tue. Ebenso gibt es in C # und objektorientierter Programmierung wahrscheinlich eine Bibliothek für "es", was auch immer ich tue.

Es wird so viel Wert darauf gelegt, Abstraktionen in der Programmierung wiederzuverwenden, dass ich oft ein Dilemma empfinde zwischen: 1) einfach selbst etwas Kurzes und Schmutziges zu programmieren oder 2) die gleiche Zeit damit zu verbringen, die robustere Bibliothek / Lösung eines anderen zu finden und diese zu verwenden.

Wie kürzlich hat einer der hier genannten Codierer einen (De-) Serializer für CSV-Dateien geschrieben, und ich konnte nicht anders, als zu glauben, dass so etwas online wahrscheinlich sehr leicht zu finden ist, wenn es nicht bereits mit dem .NET-Standard geliefert wird APIs.

Ich gebe ihm jedoch keine Schuld, da ich mehrere Male in .NET gearbeitet habe, habe ich eine Lösung zusammengestellt, die auf dem basiert, was ich weiß, nur um zu erkennen, dass es einen Methodenaufruf oder ein Objekt oder etwas gab , oft in derselben Bibliothek, das was tat Ich wollte und wusste es einfach nicht.

Ist dies nur ein Zeichen von Unerfahrenheit oder gibt es immer einen Kompromiss zwischen dem Schreiben von Neuem und der Wiederverwendung von Altem? Was ich am meisten hasse, ist, wenn ich auf eine Lösung stoße, die ich bereits kannte und vergessen habe. Ich habe das Gefühl, dass eine Person einfach nicht in der Lage ist, die schiere Menge an Code zu verarbeiten, die heutzutage in den meisten Sprachen vorverpackt ist.

Antworten:


9

Zunächst müssen Sie lernen, "Komponenten" zu identifizieren, die so generisch / wiederverwendbar sind, dass wahrscheinlich bereits eine Bibliothek oder eine Lösung von Drittanbietern vorhanden ist. Sobald Sie dies tun, stellen Sie fest, dass die kollektive Erfahrung unzähliger Entwickler, die unzählige Stunden mit demselben Problem verbringen, wahrscheinlich zu einer besseren Lösung geführt hat als jemals zuvor. Das bedeutet nicht, dass Sie das Rad niemals "neu erfinden" sollten, aber wenn Sie sich dazu entschließen, sollten Sie dafür eine gute Rechtfertigung von DAMN haben.

Es wird so viel Wert darauf gelegt, Abstraktionen in der Programmierung wiederzuverwenden, dass ich oft ein Dilemma empfinde zwischen: 1) einfach selbst etwas Kurzes und Schmutziges zu programmieren oder 2) die gleiche Zeit damit zu verbringen, die robustere Bibliothek / Lösung eines anderen zu finden und diese zu verwenden.

Es ist erwähnenswert, dass Sie selbst dann , wenn Sie genauso viel Zeit benötigen, um eine vorhandene Bibliothek / Lösung zu finden , wie wenn Sie sie selbst schreiben, daran denken, dass dies auch bedeutet, dass Sie sie für immer beibehalten müssen . Sie erfinden nicht nur das Rad neu, sondern auch die gesamte Boxencrew, um es am Laufen zu halten. Natürlich sind einige Bibliotheken fehlerhaft oder schlecht gewartet, aber dies sollten Sie beachten, wenn Sie eine Lösung von Drittanbietern auswählen.


2
In vielen Fällen müssen Sie jedoch mehr Zeit für die Wartung einer Bibliothek aufwenden, auch wenn diese gut und aktiv gepflegt ist. Normalerweise passiert dies, wenn es so entworfen wurde, dass es einfach nicht in Ihren Code passt.
Jason Baker

+1 zur Rechtfertigung des Zeitaufwands für die Suche nach einer vorhandenen Bibliothek / Lösung.
rwong

+1 für den Hinweis auf die
Boxencrew

5

Manchmal ist dies ein Zeichen von Unerfahrenheit, sei es mit der jeweiligen Sprache oder mit der Programmierung im Allgemeinen. Manchmal ist es jedoch besser, wenn die Übereinstimmung nicht offensichtlich ist, einen eigenen Code zu erstellen, der genau das tut , was Sie wollen, und nicht mehr . Generische Bibliotheken sind zwar oft nützlich, können jedoch für Anforderungen erstellt werden, die Sie einfach nicht haben. In einigen Fällen kann diese Generizität dazu führen, dass sie mehr Probleme bereiten, als sie wert sind.

Beispiel: Für meine kleinen Ein-Mann-Projekte verwende ich niemals eine "echte" Protokollbibliothek. Ich benutze printAnweisungen und eine kleine Ad-hoc-Konfiguration. Ich möchte nicht die Mühe machen, eine Protokollbibliothek einzurichten und zu konfigurieren, die weitaus mehr Funktionen bietet, als ich jemals verwenden werde, wenn printAnweisungen für meine Zwecke gut funktionieren. Ich möchte auch keine weitere Abhängigkeit, die möglicherweise nicht mit der Version des Compilers / Interpreters kompatibel ist, den ich verwenden möchte, der verteilt werden muss usw.


1
...oder umgekehrt. Manchmal wurde es für eine ganz bestimmte Aufgabe optimiert und ist einfach nicht flexibel genug, um das zu tun, wofür Ihr Code es benötigt.
Jason Baker

Dies ist, was ich beantworten wollte
Dominique McDonnell

4

Willkommen in der Welt der Programmierung. Dieses Problem wird Gegenstand vieler Meinungsverschiedenheiten zwischen Ihnen und Ihren zukünftigen Kollegen sein. Sie haben zwei Möglichkeiten:

  1. Roll deinen eigenen.
  2. Bauen Sie etwas auf die Lösung eines anderen auf.

Ich denke, es gibt Zeiten, in denen beide Lösungen angemessen sind. Zum Beispiel würde ich es vorziehen, meinen eigenen CSV-Parser von ORM nicht zu rollen, wenn ich es meistens vermeiden kann, weil es ziemlich mühsam ist. Andererseits sind Bibliotheken häufig eingeschränkt. Ich würde sagen, dass ich bei jedem Projekt, an dem ich gearbeitet habe, auf Bibliotheken gestoßen bin, die mein Problem perfekt lösen würden, wenn dies nicht der Fall wäre. Oder manchmal ist eine Bibliothek genau das, was Sie brauchen, wenn Sie anfangen, etwas zu tun, aber es schadet mehr als zu helfen, wenn Sie Änderungen vornehmen müssen.

Im Allgemeinen rate ich jedoch davon ab, "richtige" Antworten zu finden, da diese nicht existieren. Wenn Sie Zweifel haben, gehen Sie einfach mit Ihrem Bauch. Ich hörte einmal jemanden sagen, dass Erfahrung durch wie viele dumme Fehler, die Sie machen, definiert wird. Normalerweise lernst du etwas oder machst etwas, das funktioniert. So oder so ist es nicht alles schlecht.


Ich würde sagen , es ist eine Drei-Wege - Wahl: roll Ihre eigene Lösung für diese besondere Notwendigkeit, jemand anderes bestehende Lösung anzupassen, oder rollen Sie Ihre eigene Allzwecklösung , diesen Bedarf zu handhaben als auch zukünftige Bedürfnisse . Die Tatsache, dass es sich um eine Drei-Wege-Wahl handelt, macht es viel schwieriger als eine Zwei-Wege-Wahl.
Supercat

2

Dies (oder etwas Ähnliches) ist mir in früheren Jobs oft passiert, in denen das Framework unter schwerwiegenden inneren Plattformeffekten litt.

Grundsätzlich entwickelte sich die Codebasis aus den Anfängen von Windows C / C ++ und begann dann, unter MFC zu kompilieren - und so begannen die Betreuer, MFC und ihre alten internen Datenstrukturen und Fensterkomponenten zu mischen. Die innere Plattform war nicht sehr gut dokumentiert, aber es war angeblich "The Way", um Dinge an diesem Produkt zu tun, aufgrund einiger interner Einrichtungen, die es bereitstellte. Ich fand es oft einfacher und schneller, meine eigenen Sachen von Grund auf neu zu schreiben (anhand der MFC-Grundlagen), als herauszufinden, wie man es mit dem internen Framework des Unternehmens macht.

(Okay, das scheint also fast das Gegenteil von Ihrem Ausgangspunkt zu sein - aber das Prinzip ist das gleiche, hehe! Ja, manchmal ist es wirklich schneller, Ihr eigenes Ding zu machen, als Zeit und Mühe zu investieren, um ein existierendes wiederverwendbares zu finden Lösung.)

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.