Vorwort
Dies ist in der Tat eine gewaltige Aufgabe, und es gibt viel zu tun. Ich schlage dies demütig als etwas umfassenden Leitfaden für Ihr Team vor, mit Hinweisen auf geeignete Tools und Lehrmaterialien.
Denken Sie daran: Hierbei handelt es sich um Richtlinien , die je nach den Umständen übernommen, angepasst oder gestrichen werden sollen.
Achtung: All dies auf einmal in ein Team zu werfen würde höchstwahrscheinlich scheitern. Sie sollten versuchen, Elemente auszuwählen, die Ihnen den besten Schweiß geben, und sie nacheinander langsam einführen.
Hinweis: Dies gilt nicht für alle visuellen Programmiersysteme wie G2. Ausführlichere Informationen zum Umgang mit diesen finden Sie im Abschnitt Nachtrag am Ende.
Executive Summary für den Ungeduldigen
- Definieren Sie eine starre Projektstruktur mit:
- Projektvorlagen ,
- Kodierungskonventionen ,
- vertraute Build-Systeme ,
- und Richtlinien für die Verwendung Ihrer Infrastruktur und Tools.
- Installieren Sie ein gutes SCM und vergewissern Sie sich, dass es verwendet werden kann.
- Weisen Sie sie auf gute IDEs für ihre Technologie hin und stellen Sie sicher, dass sie wissen, wie sie verwendet werden.
- Implementieren Sie Code-Qualitätsprüfungen und automatische Berichte im Build-System.
- Koppeln Sie das Build-System mit kontinuierlichen Integrations- und Inspektionssystemen .
- Mit Hilfe der oben genannten, identifiziert Codequalität „Hotspots“ und Refactoring .
Nun zur Langfassung ... Achtung, macht euch bereit!
Die Steifheit ist (oft) gut
Dies ist eine kontroverse Meinung, da Rigidität oft als eine Kraft gesehen wird, die gegen Sie arbeitet. Dies gilt für einige Phasen einiger Projekte. Wenn Sie es jedoch als strukturelle Unterstützung betrachten, als Framework, das das Rätselraten überflüssig macht, wird der Zeit- und Arbeitsaufwand erheblich reduziert. Lass es für dich funktionieren, nicht gegen dich.
Starrheit = Prozess / Verfahren .
Die Softwareentwicklung benötigt gute Prozesse und Verfahren aus genau den gleichen Gründen, aus denen Chemiewerke oder Fabriken Handbücher, Verfahren, Bohrer und Notfallrichtlinien haben: Vermeidung von schlechten Ergebnissen, Erhöhung der Vorhersagbarkeit, Maximierung der Produktivität ...
Die Starrheit kommt jedoch in Maßen!
Starrheit der Projektstruktur
Wenn jedes Projekt eine eigene Struktur hat, sind Sie (und Neuankömmlinge) verloren und müssen jedes Mal von vorne anfangen, wenn Sie sie öffnen. Sie wollen das nicht in einem professionellen Software-Shop, und Sie wollen das auch nicht in einem Labor.
Starrheit der Build-Systeme
Wenn jedes Projekt anders aussieht , ist die Wahrscheinlichkeit groß, dass es auch
anders aufgebaut ist . Ein Build sollte nicht zu viel Forschung oder Rätselraten erfordern. Sie tun möchten , müssen in der Lage die kanonische Sache und nicht um Einzelheiten kümmern: configure; make install
, ant
,
mvn install
, etc ...
Die Wiederverwendung desselben Build-Systems und dessen zeitliche Weiterentwicklung gewährleisten ebenfalls ein gleichbleibendes Qualitätsniveau.
Sie müssen schnell README
auf die Projektspezifikationen eingehen und den Benutzer / Entwickler / Forscher, falls vorhanden, ordnungsgemäß führen.
Dies erleichtert auch andere Teile Ihrer Build-Infrastruktur erheblich:
Halten Sie Ihr Build (wie auch Ihre Projekte) auf dem neuesten Stand, machen Sie es jedoch im Laufe der Zeit strenger und melden Sie Verstöße und schlechte Praktiken effizienter.
Erfinden Sie das Rad nicht neu und verwenden Sie das, was Sie bereits getan haben.
Literatur-Empfehlungen:
Starrheit in der Wahl der Programmiersprache
Insbesondere in einer Forschungsumgebung ist nicht zu erwarten, dass alle Teams (und noch weniger alle Entwickler) denselben Sprach- und Technologiestapel verwenden. Sie können jedoch eine Reihe von "offiziell unterstützten" Tools identifizieren und deren Verwendung fördern. Der Rest sollte ohne eine gute Begründung nicht erlaubt sein (über das Prototyping hinaus).
Halten Sie Ihren Tech-Stack einfach und die Wartung und Breite der erforderlichen Fähigkeiten auf ein Minimum: einen starken Kern.
Starrheit der Kodierungskonventionen und -richtlinien
Mithilfe von Kodierungskonventionen und -richtlinien können Sie sowohl eine Identität als Team als auch eine gemeinsame Umgangssprache entwickeln . Sie möchten sich nicht jedes Mal in terra incognita vertiefen, wenn Sie eine Quelldatei öffnen.
Unsinnige Regeln, die das Leben erschweren oder Handlungen in dem Maße explizit verbieten, in dem Verpflichtungserklärungen aufgrund einfacher Verstöße abgelehnt werden, sind eine Belastung. Jedoch:
Persönlicher Ansatz: Ich bin aggressiv, wenn es um Codierungskonventionen geht, manche sagen sogar Nazi , weil ich daran glaube, eine
Verkehrssprache zu haben , einen erkennbaren Stil für mein Team. Wenn Mistcode eingecheckt wird, fällt er auf wie ein Lippenherpes im Gesicht eines Hollywood-Stars: Er löst automatisch eine Überprüfung und eine Aktion aus. In der Tat bin ich manchmal so weit gegangen, die Verwendung von Pre-Commit-Hooks zu befürworten, um nicht konforme Commits abzulehnen. Wie bereits erwähnt, sollte es nicht übermäßig verrückt sein und der Produktivität im Wege stehen. Es sollte es vorantreiben. Führen Sie diese langsam ein, besonders am Anfang. Aber es ist viel besser, als so viel Zeit damit zu verbringen, fehlerhaften Code zu reparieren, dass Sie nicht an echten Problemen arbeiten können.
Einige Sprachen erzwingen dies sogar von Haus aus:
- Java sollte die Menge des langweiligen Mülls reduzieren, den Sie damit schreiben können (obwohl es zweifellos viele schaffen, dies zu tun).
Pythons Blockstruktur durch Einrücken ist eine andere Idee in diesem Sinne.
Gehen Sie mit seinem gofmt
Werkzeug, das jede Debatte und Anstrengung ( und jedes Ego !! ), die dem Stil innewohnt , vollständig beseitigt: Laufen gofmt
Sie, bevor Sie sich verpflichten.
Stellen Sie sicher, dass der Code rot nicht durchrutschen kann. Code-Konventionen , kontinuierliche Integration und Inspektion , Paarprogrammierung und Code-Reviews sind Ihr Arsenal gegen diesen Dämon.
Wie Sie weiter unten sehen werden, handelt es sich bei Code um Dokumentation. Dies ist ein weiterer Bereich, in dem Konventionen die Lesbarkeit und Klarheit fördern.
Starrheit der Dokumentation
Dokumentation geht Hand in Hand mit Code. Code selbst ist Dokumentation. Aber es muss klare Anweisungen geben, wie man Dinge baut, benutzt und wartet.
Es ist eine gute Sache, einen einzigen Kontrollpunkt für die Dokumentation zu verwenden (wie ein WikiWiki oder DMS). Erstellen Sie Räume für Projekte, Räume für mehr zufällige Scherze und Experimente. Lassen Sie alle Leerzeichen gemeinsame Regeln und Konventionen wiederverwenden. Versuchen Sie, es Teil des Teamgeistes zu machen.
Die meisten Ratschläge zu Code und Werkzeugen gelten auch für die Dokumentation.
Starrheit in Codekommentaren
Code-Kommentare, wie oben erwähnt, sind ebenfalls Dokumentationen. Entwickler mögen es, ihre Gefühle zu ihrem Code auszudrücken (meistens Stolz und Frustration, wenn Sie mich fragen). Daher ist es nicht ungewöhnlich, dass sie diese in Kommentaren (oder sogar im Code) in eindeutigen Begriffen ausdrücken, wenn ein formellerer Text dieselbe Bedeutung mit weniger Explosionen oder Dramen hätte vermitteln können. Es ist in Ordnung, aus Spaß und aus historischen Gründen ein paar durchzulassen: Es ist auch Teil der Entwicklung einer Teamkultur . Aber es ist sehr wichtig, dass jeder weiß, was akzeptabel ist und was nicht, und dass Kommentarrauschen genau das ist:
Rauschen .
Starrheit in Commit-Protokollen
Commit-Protokolle sind kein ärgerlicher und nutzloser "Schritt" in Ihrem SCM-Lebenszyklus: Sie können sie NICHT überspringen, um pünktlich nach Hause zu kommen oder mit der nächsten Aufgabe fortzufahren oder die Freunde einzuholen, die zum Mittagessen abgereist sind. Sie sind wichtig und wie (die meisten) guten Weine werden sie umso wertvoller, je mehr Zeit vergeht. Also mach sie richtig. Ich bin verblüfft, wenn ich sehe, dass Kollegen Einzeiler für Riesen-Commits oder für nicht offensichtliche Hacks schreiben.
Commits werden aus einem bestimmten Grund durchgeführt, und dieser Grund wird durch Ihren Code und die von Ihnen eingegebene Zeile des Commit-Protokolls nicht immer klar ausgedrückt. Da steckt noch mehr dahinter.
Jede Codezeile hat eine Geschichte und eine Geschichte . Die Diffs können ihre Geschichte erzählen, aber Sie müssen ihre Geschichte schreiben.
Warum habe ich diese Zeile aktualisiert? -> Weil sich die Oberfläche geändert hat.
Warum hat sich die Oberfläche geändert? -> Weil die Bibliothek L1, die sie definiert, aktualisiert wurde.
Warum wurde die Bibliothek aktualisiert? -> Weil die Bibliothek L2, die wir für die Funktion F benötigen, von der Bibliothek L1 abhing.
Und was ist Feature X? -> Siehe Aufgabe 3456 im Issue Tracker.
Es ist nicht meine SCM-Wahl und möglicherweise auch nicht die beste für Ihr Labor. Aber Git
das stimmt und versucht, Sie zu zwingen, gute Protokolle mehr als die meisten anderen SCM-Systeme zu schreiben, indem Sie short logs
und verwenden
long logs
. Verknüpfen Sie die Aufgaben-ID (ja, Sie benötigen eine) und hinterlassen Sie eine allgemeine Zusammenfassung für die shortlog
und erweitern Sie das lange Protokoll: Schreiben Sie die Geschichte des Änderungssatzes .
Es ist ein Protokoll: Es ist hier, um Updates zu verfolgen und aufzuzeichnen.
Faustregel: Wenn Sie später nach etwas über diese Änderung suchen, ist es wahrscheinlich, dass Ihr Protokoll Ihre Frage beantwortet?
Projekte, Dokumentation und Code sind LEBENDIG
Halte sie synchron, sonst bilden sie nicht mehr diese symbiotische Einheit. Es wirkt Wunder, wenn Sie:
- Commit-Protokolle in Ihrem SCM löschen, mit Links zu Aufgaben-IDs in Ihrem Issue-Tracker,
- Wo die Tickets dieses Trackers selbst auf die Changesets in Ihrem SCM verweisen (und möglicherweise auf die Builds in Ihrem CI-System),
- und ein Dokumentationssystem, das mit all diesen verknüpft ist.
Code und Dokumentation müssen kohärent sein .
Starrheit beim Testen
Faustregeln:
- Jeder neue Code muss (mindestens) Unit-Tests enthalten.
- Jeder überarbeitete Legacy-Code wird mit Komponententests geliefert.
Natürlich brauchen diese:
- etwas Wertvolles zu testen (oder es ist Zeit- und Energieverschwendung),
- gut geschrieben und kommentiert sein (genau wie jeder andere Code, den Sie einchecken).
Sie dienen auch als Dokumentation und helfen dabei, den Vertrag Ihres Codes zu umreißen. Vor allem, wenn Sie TDD verwenden . Auch wenn Sie dies nicht tun, brauchen Sie sie für Ihre Seelenruhe. Sie sind Ihr Sicherheitsnetz, wenn Sie neuen Code (Wartung oder Funktion) einbauen, und Ihr Wachturm, um sich vor Code-Verrottung und Umweltschäden zu schützen.
Natürlich sollten Sie noch weiter gehen und Integrationstests und
Regressionstests für jeden reproduzierbaren Fehler durchführen, den Sie beheben.
Starrheit im Gebrauch der Werkzeuge
Es ist in Ordnung, dass der gelegentliche Entwickler / Wissenschaftler einen neuen statischen Prüfer an der Quelle ausprobieren, ein Diagramm oder Modell mit einem anderen erstellen oder ein neues Modul mit einem DSL implementieren möchte. Am besten ist es jedoch, wenn es einen kanonischen Satz von Tools gibt, die alle Teammitglieder kennen und verwenden müssen.
Lassen Sie die Mitglieder darüber hinaus verwenden, was sie wollen, solange sie ALLE sind:
- produktiv ,
- NICHT regelmäßig Hilfe benötigen
- NICHT regelmäßig an Ihre allgemeine Infrastruktur anpassen ,
- NICHT die Infrastruktur stören (indem Sie allgemeine Bereiche wie Code, Build-System, Dokumentation ... ändern),
- NICHT die Arbeit anderer beeinflussen ,
- Ist in der Lage, jede angeforderte Aufgabe rechtzeitig auszuführen .
Wenn dies nicht der Fall ist, stellen Sie sicher, dass sie auf die Standardeinstellungen zurückgreifen.
Starrheit gegen Vielseitigkeit, Anpassungsfähigkeit, Prototyping und Notfälle
Flexibilität kann gut sein. Es ist in Ordnung, jemanden gelegentlich einen Hack, einen Quick-n-Dirty-Ansatz oder ein Lieblingswerkzeug für Haustiere verwenden zu lassen, um die Arbeit zu erledigen
. NIEMALS lassen Sie es sich zur Gewohnheit geworden, und nie dieser Code die tatsächliche Code - Basis zu unterstützen , werden lassen.
Teamgeist ist wichtig
Entwickeln Sie ein Gefühl von Stolz in Ihrer Codebasis
- Entwickeln Sie ein Gefühl von Pride in Code
- Verwenden Sie Wallboards
- Rangliste für ein kontinuierliches Integrationsspiel
- Wallboards für Issue Management und Fehlerzählung
- Verwenden Sie einen Issue-Tracker / Bug-Tracker
Vermeiden Sie Schuldzuweisungen
- Verwenden Sie Continuous Integration / Continuous Inspection-Spiele: Sie fördern einen artgerechten und produktiven Wettbewerb .
- Behalten Sie die Fehler im Auge: Es ist nur eine gute Haushaltsführung.
- Machen Sie die Ursachen ausfindig : Es handelt sich nur um zukunftssichere Prozesse.
- ABER KEINE Schuldzuweisung : Es ist kontraproduktiv.
Es geht um den Code, nicht um die Entwickler
Machen Sie Entwickler auf die Qualität ihres Codes aufmerksam, ABER lassen Sie sie den Code als eigenständige Entität und nicht als Erweiterung ihrer selbst sehen, was nicht kritisiert werden kann.
Es ist ein Paradox: Sie müssen die egolose Programmierung für einen gesunden Arbeitsplatz fördern , sich aber aus Motivationsgründen auf das Ego verlassen.
Vom Wissenschaftler zum Programmierer
Leute, die Code nicht schätzen und stolz darauf sind, produzieren keinen guten Code. Damit diese Immobilie entstehen kann, müssen sie herausfinden, wie wertvoll und unterhaltsam sie sein kann. Bloße Professionalität und der Wunsch, Gutes zu tun, reichen nicht aus: Es braucht Leidenschaft. Sie müssen Ihre Wissenschaftler also (im weitesten Sinne) zu
Programmierern machen .
Jemand argumentierte in Kommentaren, dass nach 10 bis 20 Jahren in Bezug auf ein Projekt und seinen Code jeder das Gefühl einer Bindung haben würde. Vielleicht irre ich mich, aber ich gehe davon aus, dass sie stolz auf die Ergebnisse des Codes und auf die Arbeit und das Erbe sind, nicht auf den Code selbst oder auf die Handlung, ihn zu schreiben.
Erfahrungsgemäß betrachten die meisten Forscher das Codieren als Notwendigkeit oder bestenfalls als unterhaltsame Ablenkung. Sie wollen nur, dass es funktioniert. Diejenigen, die sich bereits gut auskennen und ein Interesse an der Programmierung haben, sind viel leichter davon zu überzeugen, Best Practices und Switching-Technologien zu übernehmen. Sie müssen sie auf halbem Weg dorthin bringen.
Die Pflege von Codes ist Teil der Forschungsarbeit
Niemand liest beschissene Forschungsarbeiten. Das ist der Grund, warum sie von Fachleuten begutachtet, Korrektur gelesen, verfeinert, umgeschrieben und immer wieder genehmigt werden, bis sie als zur Veröffentlichung bereit gelten. Gleiches gilt für eine Diplomarbeit und eine Codebasis!
Machen Sie deutlich, dass die ständige Überarbeitung und Aktualisierung einer Codebasis das Verrotten des Codes verhindert, die technische Verschuldung verringert und die spätere Wiederverwendung und Anpassung der Arbeit für andere Projekte erleichtert.
Warum das alles??!
Warum beschäftigen wir uns mit all dem? Für die Codequalität . Oder ist es
Qualitätscode ...?
Diese Richtlinien zielen darauf ab, Ihr Team zu diesem Ziel zu bewegen. Einige Aspekte tun es, indem sie ihnen einfach den Weg zeigen und ihn tun lassen (was viel besser ist), und andere nehmen sie an der Hand (aber so bilden Sie Menschen aus und entwickeln Gewohnheiten).
Woher weißt du, wann das Ziel in Reichweite ist?
Qualität ist messbar
Nicht immer quantitativ, aber messbar . Wie bereits erwähnt, müssen Sie ein Gefühl des Stolzes in Ihrem Team entwickeln, und Fortschritte und gute Ergebnisse sind der Schlüssel. Messen Sie regelmäßig die Codequalität und zeigen Sie den Fortschritt zwischen den Intervallen und wie wichtig er ist. Machen Sie Rückblicke, um darüber nachzudenken, was getan wurde und wie es die Dinge verbessert oder verschlechtert hat.
Es gibt großartige Werkzeuge für die kontinuierliche Inspektion . Sonar ist in der Java-Welt sehr beliebt, kann sich jedoch an alle Technologien anpassen. und es gibt viele andere. Behalten Sie Ihren Code unter dem Mikroskop und suchen Sie nach diesen nervigen Insekten und Mikroben.
Aber was ist, wenn mein Code schon Mist ist?
All das ist lustig und niedlich wie ein Ausflug nach Nimmerland, aber es ist nicht so einfach, wenn Sie bereits (einen Haufen dampfenden und stinkenden) Mistcodes haben und ein Team nur ungern Änderungen vornimmt.
Hier ist das Geheimnis: Sie müssen irgendwo anfangen .
Persönliche Anekdote: In einem Projekt haben wir mit einer Codebasis gearbeitet, die ursprünglich mehr als 650.000 Java-LOC, mehr als 200.000 JSP-Zeilen, mehr als 40.000 JavaScript-LOC und mehr als 400 MB Binärabhängigkeiten aufwies.
Nach ungefähr 18 Monaten sind es 500.000 Java LOC (MOSTLY CLEAN) , 150.000 Zeilen JSPs und 38.000 JavaScript LOC mit Abhängigkeiten von nur noch knapp 100 MB (und diese sind nicht mehr in unserem SCM enthalten!).
Wie haben wir das gemacht? Wir haben einfach alles gemacht. Oder versuchte es hart.
Es ist eine Teamleistung, aber wir langsam injizieren in unseren Prozessvorschriften und Werkzeugen , um die Herzfrequenz unseres Produktes zu überwachen, während hastig zerschneiden das „Fett“ weg: Mist Code, nutzlos Abhängigkeiten ... Wir haben nicht aufhören , alle Entwicklung Tun Sie dies: Wir haben gelegentlich Phasen relativen Friedens und relativer Ruhe, in denen wir frei sind, die Codebasis zu verrückt zu machen und sie zu zerreißen. Meistens tun wir dies jedoch alles, indem wir bei jeder sich bietenden Chance auf einen Überprüfungs- und Refaktormodus zurückgreifen : während des Builds, während des Mittagessens, während der Sprints zur Fehlerbehebung, während der Freitagnachmittage ...
Es gab einige große "Werke" ... Die Umstellung unseres Build-Systems von einem riesigen Ant-Build mit über 8500 XML-LOC auf einen Maven-Build mit mehreren Modulen war eine davon. Wir hatten dann:
- klare Module (oder zumindest war es schon viel besser und wir haben noch große Pläne für die Zukunft),
- automatisches Abhängigkeitsmanagement (zur einfachen Wartung und Aktualisierung sowie zum Entfernen unnötiger Abhängigkeiten),
- schnellere, einfachere und reproduzierbare Builds,
- Tägliche Qualitätsberichte.
Ein weiteres Problem war die Einführung von "Utility-Tool-Belts", obwohl wir versucht haben, Abhängigkeiten zu verringern: Google Guava und Apache Commons reduzieren Ihren Code und die Oberfläche für Fehler in Ihrem Code erheblich.
Wir haben auch unsere IT-Abteilung davon überzeugt, dass die neuen Tools (JIRA, Fisheye, Crucible, Confluence, Jenkins) möglicherweise besser sind als die vorhandenen. Wir mussten uns noch mit einigen, die wir verachteten, auseinandersetzen (QC, Sharepoint und SupportWorks ...), aber es war eine insgesamt verbesserte Erfahrung, mit etwas mehr Platz.
Und jeden Tag gibt es ein Rinnsal zwischen einem und Dutzenden von Commits, die sich nur mit dem Reparieren und Umgestalten von Dingen befassen. Wir brechen gelegentlich Dinge auf (Sie benötigen Komponententests und schreiben sie besser auf, bevor Sie sie überarbeiten), aber insgesamt war der Nutzen für unsere Moral UND für das Produkt enorm. Wir erhalten dort jeweils einen Bruchteil eines Prozentsatzes der Codequalität. Und es macht Spaß zu sehen, wie es zunimmt !!!
Hinweis: Auch hier muss die Steifheit geschüttelt werden, um Platz für neue und bessere Dinge zu schaffen. In meiner Anekdote hat unsere IT-Abteilung teilweise Recht, wenn sie versucht, uns einige Dinge aufzuzwingen , und ist für andere falsch. Oder vielleicht hatten sie früher recht . Dinge ändern sich. Beweisen Sie, dass dies bessere Möglichkeiten zur Steigerung Ihrer Produktivität sind. Hierfür stehen Probeläufe und Prototypen zur Verfügung.
Der Super-Secret Incremental Spaghetti Code Refactoring Cycle für hervorragende Qualität
+-----------------+ +-----------------+
| A N A L Y Z E +----->| I D E N T I F Y |
+-----------------+ +---------+-------+
^ |
| v
+--------+--------+ +-----------------+
| C L E A N +<-----| F I X |
+-----------------+ +-----------------+
Sobald Sie einige Qualitätswerkzeuge an Ihrem Werkzeuggürtel haben:
Analysieren Sie Ihren Code mit Code-Qualitätsprüfern.
Linters, statische Analysatoren oder was haben Sie.
Identifizieren Sie Ihre kritischen Hotspots UND niedrig hängenden Früchte .
Verstöße haben Schweregrade, und große Klassen mit einer großen Anzahl von Schwerengraden sind eine große rote Fahne: Als solche erscheinen sie als "Hotspots" auf den Ansichtstypen "Radiator" / "Heatmap".
Korrigieren Sie zuerst die Hotspots.
Es maximiert Ihre Wirkung in kurzer Zeit, da sie den höchsten Geschäftswert haben. Im Idealfall sollten kritische Verstöße sofort behoben werden, da sie potenzielle Sicherheitslücken oder Absturzursachen darstellen und ein hohes Risiko darstellen, eine Haftung auszulösen (und in Ihrem Fall eine schlechte Leistung für das Labor).
Bereinigen Sie die Verstöße auf niedriger Ebene mit automatisierten Codebasis-Sweeps .
Dadurch wird das Signal-Rausch-Verhältnis verbessert, sodass Sie möglicherweise erhebliche Verstöße auf Ihrem Radar sehen können, sobald sie auftreten. Anfangs gibt es oft eine große Armee von geringfügigen Verstößen, wenn man sich nie darum gekümmert hat und Ihre Codebasis in freier Wildbahn freigelassen wurde. Sie stellen kein wirkliches "Risiko" dar, beeinträchtigen jedoch die Lesbarkeit und Wartbarkeit des Codes. Korrigieren Sie sie entweder, wenn Sie sie bei der Arbeit an einer Aufgabe treffen, oder, wenn möglich, durch umfangreiche Bereinigungsaufträge mit automatisierten Code-Sweeps. Seien Sie vorsichtig bei großen Auto-Sweeps, wenn Sie keine gute Testsuite und kein Integrationssystem haben. Stellen Sie sicher, dass Sie mit den Mitarbeitern den richtigen Zeitpunkt vereinbaren, um sie zu führen, um den Ärger zu minimieren.
Wiederholen, bis Sie zufrieden sind.
Was Sie im Idealfall niemals sein sollten, wenn dies noch ein aktives Produkt ist: Es wird sich ständig weiterentwickeln.
Schnelle Tipps für eine gute Haushaltsführung
Im Hotfix-Modus basierend auf einer Kundensupportanfrage:
- Es ist in der Regel eine bewährte Methode , andere Probleme NICHT zu beheben, da Sie möglicherweise unfreiwillig neue Probleme einführen.
- Machen Sie es wie mit SEAL: Steigen Sie ein, töten Sie den Käfer, steigen Sie aus und versenden Sie Ihren Patch. Es ist ein chirurgischer und taktischer Schlag.
In allen anderen Fällen ist es jedoch Ihre Pflicht, wenn Sie eine Datei öffnen:
- auf jeden Fall: überprüfen Sie es (Notizen machen, Datei Problemberichte),
- Vielleicht: Clean it (Stilbereinigungen und kleinere Verstöße),
- ideal: refactor es (reorganisieren große abschnitte und ihre nachbarn).
Lassen Sie sich nur nicht davon abbringen, eine Woche von Datei zu Datei zu verbringen und am Ende Tausende von Korrekturen vorzunehmen, die sich über mehrere Funktionen und Module erstrecken - dies erschwert die Nachverfolgung in der Zukunft. Ein Problem im Code = ein Ticket in Ihrem Tracker. Manchmal kann sich ein Änderungssatz auf mehrere Tickets auswirken. aber wenn es zu oft passiert, dann machst du wahrscheinlich etwas falsch.
Anhang: Verwalten von visuellen Programmierumgebungen
Die ummauerten Gärten maßgeschneiderter Programmiersysteme
Mehrere Programmiersysteme, wie das G2 des OP, sind verschiedene Biester ...
Kein Quellcode
Oft haben Sie keinen Zugriff auf eine Textdarstellung Ihres Quellcodes: Er wird möglicherweise in einem proprietären Binärformat gespeichert oder speichert Dinge im Textformat, versteckt sie jedoch vor Ihnen. Maßgeschneiderte grafische Programmiersysteme sind in Forschungslabors keine Seltenheit, da sie die Automatisierung sich wiederholender Datenverarbeitungsabläufe vereinfachen.
Kein Werkzeug
Das heißt, abgesehen von ihren eigenen. Sie sind häufig durch ihre Programmierumgebung, ihren eigenen Debugger, ihren eigenen Interpreter, ihre eigenen Dokumentationswerkzeuge und -formate eingeschränkt. Es handelt sich um
ummauerte Gärten , außer wenn sie irgendwann das Interesse einer Person wecken, die motiviert genug ist, ihre Formate umzuentwickeln und externe Tools zu erstellen - sofern die Lizenz dies zulässt.
Fehlende Dokumentation
Sehr oft sind dies Nischen-Programmiersysteme, die in relativ geschlossenen Umgebungen eingesetzt werden. Leute, die sie häufig benutzen, unterschreiben NDAs und sprechen nie darüber, was sie tun. Programmiergemeinschaften für sie sind selten. Ressourcen sind also knapp. Sie sind mit Ihrer offiziellen Referenz festgefahren, und das war's.
Das ironische (und oft frustrierende) Problem ist, dass all die Dinge, die diese Systeme tun, offensichtlich durch die Verwendung von Standard- und Allzweck-Programmiersprachen erreicht werden könnten und höchstwahrscheinlich effizienter. Aber es erfordert tiefere Programmierkenntnisse, während Sie nicht erwarten können, dass Ihr Biologe, Chemiker oder Physiker (um nur einige zu nennen) genug über das Programmieren weiß und noch weniger Zeit (und Lust) hat, es umzusetzen (und zu warten). komplexe Systeme, die langlebig sein können oder nicht. Aus dem gleichen Grund verwenden wir DSLs, wir haben diese maßgeschneiderten Programmiersysteme.
Persönliche Anekdote 2:Eigentlich habe ich selbst an einem gearbeitet. Ich habe die Verknüpfung mit der Anfrage des OP nicht hergestellt, aber mein Projekt bestand aus einer Reihe miteinander verbundener umfangreicher Datenverarbeitungs- und Datenspeichersoftware (hauptsächlich für die Bioinformatikforschung, das Gesundheitswesen und Kosmetika, aber auch für Unternehmen) Intelligence oder jeder Bereich, der die Verfolgung großer Mengen von Forschungsdaten jeglicher Art und die Vorbereitung von Datenverarbeitungs-Workflows und ETLs erfordert). Eine dieser Anwendungen war ganz einfach eine visuelle IDE mit den üblichen Funktionen: Drag-and-Drop-Schnittstellen, versionierte Projektarbeitsbereiche (mit Text- und XML-Dateien zum Speichern von Metadaten), viele steckbare Treiber für heterogene Datenquellen und eine visuelle Canvas zum Entwerfen von Pipelines, um Daten aus N Datenquellen zu verarbeiten und am Ende M transformierte Ausgaben zu generieren, und mögliche glänzende Visualisierungen und komplexe (und interaktive) Online-Berichte. Ihr typisches visuelles Programmiersystem nach Maß, das an einem gewissen NIH-Syndrom leidet und den Anspruch hat, ein System zu entwickeln, das an die Bedürfnisse der Benutzer angepasst ist.
Und wie zu erwarten ist es ein schönes System, das für seine Anforderungen recht flexibel ist, wenn auch manchmal etwas übertrieben, so dass Sie sich fragen, warum Sie nicht stattdessen Befehlszeilentools verwenden sollten, und das leider immer mittelgroß ist Teams, die an großen Projekten mit vielen verschiedenen Personen arbeiten und diese mit unterschiedlichen "Best Practices" verwenden.
Großartig, wir sind zum Scheitern verurteilt! - Was tun wir dagegen?
Nun, am Ende gilt all das noch. Wenn Sie den größten Teil der Programmierung nicht aus diesem System extrahieren können, um mehr Mainstream-Tools und -Sprachen zu verwenden, müssen Sie sie "nur" an die Einschränkungen Ihres Systems anpassen.
Informationen zu Versionierung und Speicherung
Am Ende kann man fast immer Version Dinge, auch mit der meisten eingeschränkten und ummauerten Umgebung. Meistens werden diese Systeme immer noch mit einer eigenen Versionierung ausgeliefert (die leider oft recht einfach ist und lediglich die Möglichkeit bietet, ohne große Sichtbarkeit auf frühere Versionen zurückzugreifen, wobei lediglich frühere Snapshots aufbewahrt werden). Es werden nicht genau die Änderungssätze verwendet, die von Ihrem SCM ausgewählt wurden, und es ist wahrscheinlich nicht für mehrere Benutzer geeignet, die gleichzeitig Änderungen einreichen.
Wenn sie jedoch eine solche Funktionalität bieten, besteht Ihre Lösung möglicherweise darin, die oben genannten, geliebten Industriestandard-Richtlinien zu befolgen und auf dieses Programmiersystem zu übertragen !!
Wenn es sich bei dem Speichersystem um eine Datenbank handelt, werden wahrscheinlich Exportfunktionen verfügbar gemacht oder es kann auf Dateisystemebene gesichert werden. Wenn es ein benutzerdefiniertes Binärformat verwendet, können Sie möglicherweise einfach versuchen, es mit einem VCS zu versionieren, das Binärdaten gut unterstützt. Sie werden keine genaue Kontrolle haben, aber zumindest sind Sie gegen Katastrophen abgesichert und verfügen über ein gewisses Maß an Disaster Recovery-Konformität.
Über das Testen
Implementieren Sie Ihre Tests in der Plattform selbst und richten Sie mithilfe externer Tools und Hintergrundjobs regelmäßige Sicherungen ein. Wahrscheinlich starten Sie diese Tests genauso, wie Sie die mit diesem Programmiersystem entwickelten Programme starten würden.
Sicher, es ist ein Hackjob und entspricht definitiv nicht dem Standard, der für "normale" Programmierung üblich ist, aber die Idee ist, sich an das System anzupassen, während versucht wird, einen Anschein eines professionellen Softwareentwicklungsprozesses aufrechtzuerhalten.
Die Straße ist lang und steil ...
Wie immer bei Nischenumgebungen und maßgeschneiderten Programmiersystemen und wie oben dargestellt, haben Sie es mit seltsamen Formaten zu tun, nur mit einer begrenzten (oder überhaupt nicht existierenden) Menge möglicherweise klobiger Werkzeuge und einer Lücke anstelle einer Community.
Die Empfehlung: Versuchen Sie, die obigen Richtlinien so weit wie möglich außerhalb Ihres maßgeschneiderten Programmiersystems zu implementieren. Dies stellt sicher, dass Sie sich auf "gängige" Tools verlassen können, die eine angemessene Unterstützung und Community-Unterstützung bieten.
Die Problemumgehung: Wenn dies keine Option ist, versuchen Sie, dieses globale Framework in Ihre "Box" nachzurüsten. Die Idee ist, diese Blaupause von Best Practices nach Industriestandard über Ihr Programmiersystem zu legen und das Beste daraus zu machen. Der Rat gilt weiterhin: Struktur und Best Practices definieren, Konformität fördern.
Leider bedeutet dies, dass Sie möglicherweise eintauchen und eine enorme Menge an Beinarbeit leisten müssen. Damit...
Berühmte letzte Worte und bescheidene Wünsche:
- Dokumentieren Sie alles, was Sie tun.
- Teilen Sie Ihre Erfahrungen.
- Open Source jedes Tool, das Sie schreiben.
Auf diese Weise werden Sie:
- Erhöhen Sie nicht nur Ihre Chancen, Unterstützung von Menschen in ähnlichen Situationen zu erhalten,
- Sie können aber auch anderen Menschen helfen und Diskussionen rund um Ihren Technologiestapel anregen.
Wer weiß, Sie könnten ganz am Anfang einer neuen lebendigen Community von Obscure Language X stehen . Wenn es keine gibt, starte eine!
Vielleicht ist es innen wunderschön , aber bisher hat niemand eine Ahnung , also helfen Sie, diese hässliche Mauer niederzureißen und lassen Sie andere einen Blick darauf werfen!