Wie sollen "nützliche Wegwerf" -Skripte behandelt werden?

8

Sie wissen, wie es geht: Es gibt eine kleine sich wiederholende Aufgabe, für die Sie einen Weg gefunden haben, 95% der Arbeit schnell zu automatisieren. Sie erstellen ein Skript, führen es aus, korrigieren die Ausgabe manuell und sind fertig. Natürlich schreiben Sie das Skript nicht fest, da es nicht den Qualitätsanforderungen des Unternehmens entspricht (es enthält weder Dokumentation noch Tests).

Einige Zeit später sehen Sie einen Kollegen, der an einer ähnlichen Aufgabe arbeitet. Du gehst "Hey! Ich habe ein Skript dafür gemacht. Lass mich das nachschlagen. [Sieht] Oh, es wurde auf meinem vorherigen Laptop gespeichert, also habe ich es nicht mehr. Schade."

Diese Skripte können oft viel Zeit sparen, und als Teamleiter möchte ich, dass sie in der Versionskontrolle gespeichert werden. Wenn ich diesen Skripten jedoch dieselben strengen Standards wie der Rest der Codebasis auferlege, befürchte ich, dass die meisten Entwickler sie für sich behalten werden.

Die einzige andere Option, die ich mir einfallen lassen kann, besteht darin, Entwickler die Skripte in einem speziellen Teil der Versionskontrolle speichern zu lassen, in dem es keine Qualitätskontrolle gibt (ähnlich wie bei GitHub Gists). Das Risiko besteht darin, dass andere Benutzer den Code nicht verwenden können, weil sie ihn nicht finden oder verstehen können.

Wie könnte dieses Problem gelöst werden? Oder sollte es nicht gelöst werden?

Frank Kusters
quelle
Wir haben einen Ordner in unserer Versionskontrolle namens "Spielplatz", der zum Testen von Dingen und Dingen wie Skripten usw. verwendet wird. Keine strengen Standards, aber nützlich!
EauRouge
Sometime later you see a colleague working on a similar task. You go "Hey! I made a script for that. Let me look that up. [looks] Oh, it was stored on my previous laptop so I don't have it anymore. Das ist eine gute Möglichkeit, Aufwand, Zeit und Geld zusammen mit den Skripten zu verschwenden. Ist es nicht?
Laiv
The risk is that others will not be able to use the code because they cannot find or understand it.Wie jeder Code kennen wir uns nicht aus. Ich denke, das ist eine schlechte Argumentation, um die Skripte nicht in SCM einzuchecken.
Laiv

Antworten:

6

Die einzige andere Option, die ich mir einfallen lassen kann, besteht darin, Entwickler die Skripte in einem speziellen Teil der Versionskontrolle speichern zu lassen, in dem es keine Qualitätskontrolle gibt (ähnlich wie bei GitHub Gists). Das Risiko besteht darin, dass andere Benutzer den Code nicht verwenden können, weil sie ihn nicht finden oder verstehen können.

Wie könnte dieses Problem gelöst werden? Oder sollte es nicht gelöst werden?

Das Problem kann nicht gelöst werden.

Es gibt einen großen Unterschied zwischen dem mündlichen Teilen von Code, wenn Sie hören, dass ein Kollege mit einer bestimmten Schwierigkeit konfrontiert ist, und dem einfachen Teilen, indem Sie ihn einfach in eine Bibliothek stellen, auf die alle Zugriff haben.

Der Unterschied besteht darin, dass Sie im ersten Fall die Rolle des Erstellers und Bibliothekars mit impliziter Kenntnis des Problems und des Codes spielen, der es löst, während im zweiten Fall diese Rollen nicht vorhanden sind.

Ihre allgemeinen Codestandards können so gestaltet sein, dass die Rolle des Bibliothekars in Ihrem Unternehmen beseitigt wird und die Bibliothek für alle Benutzer selbst navigierbar bleibt.

Mit einem riesigen Gebäude aus langlebigem Code (wie es die meisten Kernsoftwareprodukte charakterisieren) ist Zeit und Mühe gerechtfertigt, um die Fähigkeit mehrerer Generationen von Arbeitnehmern zu bewahren, mit dem gesamten Gebäude weiterzuarbeiten. In Unternehmen mit einer hohen Fluktuation kann eine "Generation" von Mitarbeitern nur ein oder zwei Jahre betragen.

Aber das Erreichen dieser "bibliothekarischen" Standards kostet natürlich viel Zeit und Mühe für diejenigen, die die Bibliothek erstellen, und es erfordert immer noch viel Zeit und Mühe von denen, die später die Bibliothek nutzen und navigieren (obwohl) nicht der gleiche Aufwand wie die Neuerstellung des gesamten Gebäudes von Grund auf neu, was möglicherweise bereits mehrere Generationen gedauert hat).

Auf der anderen Seite werden die meisten dieser schnellen und schmutzigen Skripte geschrieben, um einfache Dinge schnell zu erledigen - vielleicht einmalig. Sie sind keine komplizierten oder robusten Kreationen.

Sie sagen, sie "sparen Zeit", aber dies gilt natürlich nur, wenn sie nicht nach dem viel höheren, bibliothekarischen Standard geschrieben sind. Sie sind die persönlichen Konstruktionsvorrichtungen derer, die sie hergestellt haben - die temporären Hebel und Gerüste menschlicher Anstrengungen, nicht das endgültige dauerhafte Produkt.

Es sollte möglich sein, sie in die Versionskontrolle einzuchecken, damit der Ersteller sie systematisch speichern und aufbewahren kann. Es sollte jedoch auch klar sein, dass sie Produkte darstellen, über die der Ersteller noch die Kontrolle hat.

Wenn Sie ihren Code lesen und sofort sehen können, was er tut, umso besser. Aber es ist die persönliche Bibliothek des Schöpfers, und sie werden nicht auf dem Standard gehalten, dass andere Menschen in der Lage sein müssen , zu sehen, was es tut, ohne auf den Schöpfer Bezug zu nehmen.

Dies ist kein "Risiko", das vom Team getragen wird, ebenso wenig wie die Anordnung persönlicher Gegenstände in Ihrem Haus ein "Risiko" für diejenigen ist, die darum bitten möchten, sie auszuleihen. Im Gegenteil, die Indizierung des gesamten Inhalts Ihres Hauses, die Anordnung in einer festgelegten Weise und die Bereitstellung einer Bedienungsanleitung für jeden Gegenstand ist ein ernstes Risiko für Ihre eigene fortlaufende effiziente Nutzung des Hauses.

Steve
quelle
3

Ich fühle deinen Schmerz. Ich würde sagen, dass ein separater Teil Ihres Repos wahrscheinlich die Option zum Speichern dieser Skripte ist. Dies löst jedoch nur einen Teil des Problems. Sie haben sie jetzt irgendwo gespeichert, aber Ihre Kollegen wissen nicht, dass sie dort sind.

Nach meiner Erfahrung als Berater für ein Unternehmen, in dem es zahlreiche Skripte gibt, die für verschiedene Kunden und normalerweise vor Ort geschrieben wurden, ist es schwierig herauszufinden, was bereits vorhanden ist!

Sie sollten einen Weg finden, um zu teilen, was Sie erstellt haben.

Da wir in unserem Unternehmen nicht so groß sind, checken wir Dinge wie Skripte in unser Repo ein, senden aber auch eine unternehmensweite E-Mail, um unsere Kollegen über eine neue Lösung zu informieren. Auf diese Weise weiß zumindest jeder, was bereits da draußen ist und an wen er sich wenden kann, wenn er es braucht.

Jonathan van de Veen
quelle
3

Andere haben bereits erklärt, wie und warum Sie sicherstellen können, dass Ihre "nützlichen Wegwerf" -Skripte gut genug sind, um in das Repo aufgenommen zu werden. Ich werde mich einfach einmischen und sagen, dass es genauso wichtig ist sicherzustellen, dass sie weggeworfen werden müssen, wenn sie nicht gut genug sind, um ins Repo zu gehen.

Anders ausgedrückt, sie sind entweder gut genug, um ins Repo zu gehen, oder sie sind es nicht und müssen weggeworfen werden. Wenn sie nicht weggeworfen werden, werden sie zu einer nicht verwalteten und schließlich nicht verwaltbaren Wartungslast.

Hochleistungsmarke
quelle
2

Zunächst möchte ich sagen, dass Ihre Standards zu streng sind, wenn Ihre Entwickler aufgrund Ihrer Standards nur ungern Code beitragen, oder dass Sie die Qualität und Arbeitsmoral Ihrer Entwickler verbessern sollten. Wenn es sich um kleine Skripte handelt, sollte nicht viel zusätzlicher Aufwand erforderlich sein, um ein paar Kommentare einzugeben. Entwickler sollten standardmäßig lesbaren Code schreiben, und wenn dies nicht der Fall ist, liegt Ihr eigentliches Problem in Ihrer Personalausstattung.

Um Ihre Frage zu beantworten, haben Sie einige Möglichkeiten:

  1. Wenn die Skripte allgemein genug sind, können Sie sie in einem separaten Repository hosten. Wenn die Skripte sehr projektorientiert sind, funktioniert dies möglicherweise nicht.
  2. Hosten Sie die Skripte im selben Repository in einem eigenen Verzeichnis. In meinem Unternehmen haben unsere Projekte beispielsweise normalerweise ein cli/Verzeichnis, das eine Handvoll Befehlszeilenskripte enthält, die normalerweise einmalig ausgeführt werden sollen, um Umgebungen zu initialisieren, bestimmte Daten zu importieren usw.
  3. Dies kann je nach Ihren Anforderungen eine schlechte Option sein. Wenn Sie jedoch einen Grund haben, können Sie keinen Code festschreiben, der nicht ausdrücklich Ihren Standards entspricht, und / oder Sie haben Entwickler, die nicht bereit sind, Skripte zu schreiben, wenn dies der Fall ist Wenn Sie diese Standards befolgen müssen, können Sie die Dateien auf einem freigegebenen Laufwerk oder ähnlichem hosten. Dies ist möglicherweise nicht die beste Lösung, wenn Sie alle Vorteile der Quellcodeverwaltung benötigen. Unter bestimmten Umständen kann dies jedoch von Vorteil sein (danke Doc Brown für diese Bearbeitung).

Mit einer der beiden ersten Optionen können Sie festlegen, dass im anderen Repository oder im Verzeichnis mehr laxe Codierungsstandards festgelegt werden sollen.


quelle
8
Ich glaube nicht, dass das Schreiben von Wegwerfskripten von "schlechter Qualität" bedeutet, dass Sie eine schlechte Arbeitsmoral haben. Ich schreibe routinemäßig Quick-n-Dirty-Skripte, um die Arbeit zu automatisieren (selbst wenn ich nur den Einzeiler xargs / sed / etc. Direkt in die Shell schlagen könnte) und sie für das Repo festschreibe, aber ich würde niemals den eingeschriebenen Produktionscode weitergeben die gleiche Weise. Sie sind zwei verschiedene ( sehr unterschiedliche) Dinge.
Mael
Genau. OP sagte, wenn die Skripte von hoher Qualität sein müssten, würden Entwickler sie nur ungern schreiben / festschreiben. Das ist eine rote Fahne für mich. Ich habe nicht gesagt, dass die CLI-Skripte eine hohe Codequalität haben müssen - meine schwanken persönlich. Wenn Sie diese jedoch an VCS übergeben, müssen Sie mindestens lesbare Skripte schreiben, die andere Entwickler tatsächlich verwalten können, wenn Sie von einem Bus angefahren werden. Tools für Entwickler können akzeptabler von geringerer Qualität sein, aber das bedeutet nicht, dass sie es sein sollten.
Dies ist eine gute Antwort (+1). Option 3 ist jedoch nicht unbedingt so schlecht wie hier beschrieben und nicht unbedingt nur eine Lösung für "politische Probleme". Es ist eine Lösung für alles, für das nicht ganz klar ist, ob jemals eine Versionskontrolle erforderlich sein wird (wie ergänzende Dokumente, Entwürfe und manchmal Skripte). Wenn Skripte zu einem bestimmten Projekt gehören, das sich bereits in der Versionskontrolle befindet, sollten die Skripte natürlich auch vorhanden sein.
Doc Brown
Guter Punkt Doc. Ich habe Punkt 3 hastig bearbeitet, um weniger selbstkritisch zu sein.
1

Beginnen Sie mit der Formalisierung Ihrer Prozesse.

Sie geben nicht viele Hinweise darauf, wofür diese Skripte verwendet werden, aber ich gehe davon aus, dass Sie verschiedene Bereitstellungs- und Wartungsaufgaben oder allgemeine Datenkorrekturen haben, die an Entwickler weitergegeben werden, weil sie über genügend Wissen verfügen, um diese zu beheben Dinge?

Sie sollten versuchen, diesbezüglich professioneller zu werden.

  • Schreiben Sie auf, was diese Aufgaben sind und wie Sie sie ausführen.
  • Veröffentlichen Sie dieses Dokument auf einer internen Website oder im Intranet
  • Notieren Sie, wie oft die Aufgabe erledigt ist und wie lange es in einem Ticketsystem dauert.
  • Automatisieren Sie die manuellen Schritte mit einem Programm, aber überspringen Sie nicht die Quellcodeverwaltung, das Testen, den Support usw. Entwickeln Sie ein geeignetes Verwaltungstool.
  • Versuchen Sie, Tools von Drittanbietern zu verwenden, anstatt nach Möglichkeit eigene Lösungen zu entwickeln. Dies erleichtert Neueinstellungen

Ziel ist es, den Prozess zu einer reinen Funktion zu machen, die jeder ausführen kann, indem er dem Dokument folgt oder das Tool ausführt.

Dann können Sie Ihre Entwickler wieder dazu bringen, Funktionen für Ihr Produkt zu schreiben, und einige Support-Mitarbeiter einstellen, die sich mit alltäglichen Problemen befassen

Ewan
quelle
1

Fast jedes Skript kann auf die eine oder andere Weise wiederverwendet werden. Dieses Potenzial wird jedoch zunächst nicht erkennbar sein - weshalb es zu diesem Zeitpunkt als wegwerfbar gilt.

Bieten Sie Ihrem Team die Github Gist-ähnliche Repositories-Lösung ohne jegliche Qualitätskontrolle an, um deren Verwendung zu fördern und den Verlust dieses Potenzials zu verhindern.

Sie können jedoch auch ein oder mehrere Repositorys für gemeinsam genutzte Tools / Dienstprogramme mit entsprechender Qualitätskontrolle einrichten.

Erst wenn auf die in diesem Wegwerf-Repository gespeicherten Skripte verwiesen wird, beginnt sich ihr Potenzial für die Wiederverwendung aufzulösen. Zu diesem Zeitpunkt sollte die formalisierte Wiederverwendung beginnen, entweder durch einzelne Entwickler, die dieses Potenzial erkennen, oder durch Sie, wenn die Referenzen in einem Teamkontext auftreten. Dies kann bei der allerersten Referenz oder möglicherweise bei nachfolgenden Referenzen geschehen (dh wenn bestätigt wird, dass das Wiederverwendungspotenzial höher ist), abhängig von den Fähigkeiten, dem Zeitplan, der Belastung usw. des Teams.

Das Risiko besteht darin, dass andere Benutzer den Code nicht verwenden können, weil sie ihn nicht finden oder verstehen können.

Die Referenz selbst kümmert sich um das findProblem. Der Autor des Skripts und / oder die Person, die die Referenz erstellt, können möglicherweise bei dem understandProblem helfen . Wenn nicht - entweder ist das Wiederverwendungspotential nicht wirklich vorhanden oder das Verständnis des Codes wäre nur ein Teil des formalisierten Wiederverwendungsaufwands / der Kosten.

Sobald dies geplant ist, sollte der formalisierte Wiederverwendungsaufwand auf dem Radarbildschirm des Teams angezeigt werden und das Ergebnis sollte schließlich im gemeinsam genutzten Tools / Utilities-Repository landen. In diesem Fall können die entsprechenden Wegwerf-Skripte, aus denen die Wiederverwendung stammt, gelöscht werden (wenn ihr Potenzial ausgeschöpft ist).

Dan Cornilescu
quelle
0

Konzentration speziell auf schlecht geschriebenen, aber funktionalen Code; Es gibt ein sehr starkes Argument, diese nicht in ein Repository zu stellen.

Ich habe eine Sammlung von Snippets in meinem persönlichen Dropbox-Ordner. Es enthält Dinge, die ich nützlich finde:

  • Ein generisches EF-Repository-Beispiel
  • Ein einfacher Serializer / Deserializer
  • Eine kleine Anwendung, die zwei CSV-Dateien miteinander verbindet und eine neue CSV-Datei ausgibt.

Jedoch:

  • Dem EF-Beispiel fehlt eine Arbeitseinheitsimplementierung und es enthält nur die rudimentärsten CRUD-Optionen.
  • Der Serializer basiert auf dem alten XmlSerializer und es ist nahezu unmöglich, ihn gegen etwas anderes auszutauschen. Es hat auch ein massives Zirkelreferenzproblem.
  • Die Anwendung ist fest codiert, um im Anwendungsverzeichnis nach a.csv und b.csv zu suchen , und gibt eine fest codierte ab.csv im selben Verzeichnis aus. Es gibt keine Überprüfungen, ob Dateien vorhanden sind, es gibt keine Nullreferenzbehandlung.

Obwohl ich diese Snippets immer noch regelmäßig verwende, wenn ich schnell etwas implementieren muss, sind sie in keiner Weise wiederverwendbar oder gut gebaut. Es gibt viele Gründe, warum dies nicht in die Versionskontrolle unseres Unternehmens übernommen werden kann:

  • Nicht selbstdokumentierend.
  • Wenig bis gar kein anderer Codierungsstil als mein eigener Hackstyle.
  • Keine Fehlerbehandlung.
  • Nicht alle Fallstricke sind offensichtlich (z. B. die Zirkelverweise im Serializer).

Aber das am häufigsten geteilte Merkmal all dieser Schnipsel:

  • Selbst wenn ich Dokumentation erstellen würde, würden Sie wahrscheinlich länger brauchen, um sie zu lesen und zu verstehen, als um selbst etwas zu machen!

Diese Schnipsel sind gut für mich, weil ich mich persönlich daran erinnere, wofür sie verwendet wurden, wie man sie verwendet und auf welche Fallstricke ich gestoßen bin.
Aber wenn ich jemand anderem Zugriff auf diese Schnipsel gewähren würde, ohne dass ich anwesend wäre, würden sie nicht denken, dass diese Schnipsel in irgendeiner Weise hilfreich sind.

Die Schnipsel sind nur eine Erweiterung meiner Erfahrung als Entwickler. Ohne mich sind diese Schnipsel Müll. Ich verwende nur die Snippets, weil ich mich nicht an die Syntax einer ganzen Klasse bis zum letzten Zeichen erinnern kann. Aber ich erinnere mich noch lange nach der letzten Verwendung des Snippets an die Absichten und Fallstricke.


Denk darüber so:

Klebeband ist unglaublich vielseitig und kann viele Probleme lösen. Dinge, die mit Klebeband gelöst wurden, gelten jedoch im Allgemeinen als unansehnlich. Wenn IKEA Klebeband in alle Flachverpackungen aufnehmen würde, obwohl dies einigen Menschen, die es benötigen, tatsächlich helfen könnte, würde dies auch eine starke Aussage über das Vertrauen von IKEA in die Qualität der Möbel machen, die sie Ihnen verkauft haben.

Aus dem gleichen Grund sollten Unternehmen keine hackigen Snippets in ihrer Versionskontrolle zulassen, da dies die Qualität des Gesamtprodukts in Frage stellt.

Flater
quelle