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?
quelle
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?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.Antworten:
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.
quelle
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.
quelle
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.
quelle
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:
cli/
Verzeichnis, das eine Handvoll Befehlszeilenskripte enthält, die normalerweise einmalig ausgeführt werden sollen, um Umgebungen zu initialisieren, bestimmte Daten zu importieren usw.Mit einer der beiden ersten Optionen können Sie festlegen, dass im anderen Repository oder im Verzeichnis mehr laxe Codierungsstandards festgelegt werden sollen.
quelle
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.
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
quelle
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.
Die Referenz selbst kümmert sich um das
find
Problem. Der Autor des Skripts und / oder die Person, die die Referenz erstellt, können möglicherweise bei demunderstand
Problem 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).
quelle
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:
Jedoch:
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:
Aber das am häufigsten geteilte Merkmal all dieser Schnipsel:
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.
quelle