Ich bin Teil eines Beraterteams, das für einen Kunden eine neue Lösung implementiert. Ich bin für die Mehrheit der Codeüberprüfungen auf der clientseitigen Codebasis (React und Javascript) verantwortlich.
Ich habe festgestellt, dass einige Teammitglieder eindeutige Codierungsmuster verwenden, sodass ich nach dem Zufallsprinzip eine Datei auswählen und feststellen kann, wer der Autor des Stils ist.
Beispiel 1 (einmalige Inline-Funktionen)
React.createClass({
render: function () {
var someFunc = function () {
...
return someValue;
};
return <div>{someFunc()}</div>
}
});
Der Autor argumentiert, dass durch Zuweisen eines aussagekräftigen Namens zu someFunc der Code leichter zu lesen ist. Ich glaube, dass durch Inlinen der Funktion und Hinzufügen eines Kommentars derselbe Effekt erzielt werden kann.
Beispiel 2 (ungebundene Funktionen)
function renderSomePart(props, state) {
return (
<div>
<p>{props.myProp}</p>
<p>{state.myState}</p>
</div>
);
}
React.createClass({
render: function () {
return <div>{renderSomePart(this.props, this.state)}</div>;
}
});
So machen wir es normalerweise (ohne Status und Requisiten übergeben zu müssen):
React.createClass({
renderSomePart: function () {
return (
<div>
<p>{this.props.myProp}</p>
<p>{this.state.myState}</p>
</div>
);
},
render: function () {
return <div>{this.renderSomePart()}</div>;
}
});
Obwohl diese Codierungsmuster technisch korrekt sind, stimmen sie weder mit dem Rest der Codebasis noch mit dem Stil und den Mustern überein, auf die Facebook (der Autor von React) in Tutorials und Beispielen hinweist.
Wir müssen ein schnelles Tempo einhalten, um pünktlich zu liefern, und ich möchte das Team nicht unnötig belasten. Gleichzeitig müssen wir auf einem angemessenen Qualitätsniveau sein.
Ich versuche mir vorzustellen, dass ich als Wartungsentwickler des Kunden mit solchen Inkonsistenzen konfrontiert bin (jede Komponente erfordert möglicherweise, dass Sie eine andere Vorgehensweise verstehen).
Frage:
Was ist der Wert, den der Kunde und seine Wartungsentwickler für eine konsistente Codebasis halten, während sich solche Inkonsistenzen möglicherweise ausbreiten können?
quelle
Antworten:
Code Transfer Vorteil
Das Befolgen der von einer Bibliothek bereitgestellten Muster
React
bedeutet in Ihrem Fall, dass das von Ihnen gelieferte Produkt von anderen Entwicklern, die ebenfalls mit React vertraut sind, problemlos abgeholt und gewartet werden kann.Mögliche Probleme mit der Rückwärtskompatibilität
Bei einigen Bibliotheken würde eine neue Hauptversion herauskommen, und die Abwärtskompatibilität könnte beeinträchtigt werden, wenn sich die Muster erheblich unterscheiden, wodurch das zukünftige Upgrade verlangsamt / angehalten wird. Ich bin mir nicht sicher, wie ich
React
mit neuen Releases umgehen soll, aber ich habe dies schon einmal gesehen.Neue Mitglieder im Team werden schneller produktiv
Wenn Sie den Angaben des Autors folgen, stellen Sie mit größerer Wahrscheinlichkeit talentierte Entwickler ein, die Ihr Framework verwenden, und beginnen sie schneller mit Ihrem System, anstatt neue Muster beizubringen.
Potenzielle unentdeckte Probleme
Möglicherweise gibt es in Zukunft Probleme, die Sie bei Ihrem Ansatz noch nicht entdeckt haben und die durch den Ansatz des Autors gelöst werden.
Davon abgesehen ist Innovation immer ein Risiko. Wenn Sie der Meinung sind, dass Ihr Ansatz besser ist und für Ihr Team funktioniert, entscheiden Sie sich dafür!
quelle
"rather than teaching new patterns"
- Das prozedurale Training ist eine sehr große Zeitsenke bei Neueinstellungen.Inkonsistenzen lassen Sie innehalten und darüber nachdenken, warum , welches und wo :
Wenn Sie einen Teil des Codes lesen und feststellen, dass er einen anderen Stil als der Rest des Codes verwendet, wundern Sie sich: Warum unterscheidet sich dieser bestimmte Teil? Hat es einen besonderen Grund, den ich beachten muss? Das ist gefährlich, denn wenn es wirklich einen Grund dafür gibt, dass dieser Teil anders ist, müssen Sie sich dessen bewusst sein, andernfalls können böse Fehler auftreten. Anstatt über das ursprüngliche Problem nachzudenken, das Sie veranlasst hat, diesen Code zu berühren, verschwenden Sie jetzt Zeit damit, darüber nachzudenken, warum es anders ist, und Sie können das nicht herausfinden Schlimmer noch - dabei verlieren Sie beide das mentale Modell der Probleme, an denen Sie gearbeitet haben.
Multiplizieren Sie dies mit jedem anderen Entwickler im Team, der diesen Code berühren / lesen muss.
Wenn Sie einem Code hinzufügen müssen, der mehrere Stile verwendet, müssen Sie anhalten und entscheiden, welchen Stil Sie hinzufügen möchten. Sie müssen genügend wichtige Entscheidungen treffen - es ist Zeitverschwendung, über unwichtige Entscheidungen nachzudenken.
Wenn der Stil konsistent ist, können Sie problemlos im Code navigieren, da Sie durch die Konsistenz schnell feststellen können, wo sich die Elemente befinden. Mit inkonsistentem Stil wird sogar das Greifen schwieriger, da Sie nicht wissen, welchen Stil das Gesuchte verwendet.
quelle
Der Code ist möglicherweise gut geschrieben, aber nicht perfekt konsistent, sodass es einigen Clients egal ist. Wenn die Dinge schlecht werden, wollen Sie sie noch einmal gegen Sie anstoßen? Wenn ich ein Unternehmen mit der Arbeit an einem Projekt mit mehreren Entwicklern beauftragte und sie mir nicht sagten, dass sie einen Kodierungsstandard haben und ihn befolgen, wäre ich skeptisch.
Solange die Codierungsstandards nicht zu verrückt sind, sollte es nicht für alle so schwer sein, an Bord zu kommen. Projekte kommen zum Stillstand, weil die Leute nicht wissen, welchen Code sie schreiben sollen oder nicht und nicht, weil sie tippen und formatieren. Sie werden wissen, dass Sie zu weit gegangen sind, wenn die Einhaltung unverhältnismäßig lange dauert. Hoffentlich ist dies nicht dein erstes Rodeo.
Führen Sie Ihren eigenen Test durch. Alles, was Sie tun müssen, ist, die Aufgaben auf halbem Weg von einem Entwickler zum anderen zu wechseln und die Datei eines anderen zu bearbeiten. Verbringen sie Zeit damit, Dinge komplett auf ihre Version umzustellen? Ist es zu schwer zu folgen? Für das Wartungsteam Ihres Kunden wird es noch schlimmer.
quelle
Ich hatte viel Glück beim Behandeln von Codestilen, genau wie beim Behandeln von Schreibstilen in natürlichem Englisch. Es gibt eine breite Palette von Stilen, von Konversationsenglisch, das die Art und Weise nachahmt, wie wir im täglichen Gespräch sprechen, bis hin zu formellem Englisch, das oft schwerfällig und von immer sehr präziser Bedeutung ist.
Überlegen Sie, wie das Endprodukt in diesem Sinne aussehen soll. Einige Situationen unterstützen die Verwendung der jeweils besten Struktur. Andere erfordern eine einheitliche Trittfrequenz und Struktur. Dies gilt insbesondere dann, wenn Ihr Produkt das Beste ist, als ob es in formellem Englisch verfasst wurde. Umgangssprache mag in diesem Fall hilfreich sein, aber sie zerreißt das übergreifende Gefühl des Produkts.
Je konsistenter Ihr Codierungsstandard ist, desto weniger Aufwand muss ein Entwickler betreiben, um seine Aufmerksamkeit auf etwas Interessantes zu lenken. Wenn Sie eine große Vielfalt an Codierungsstandards unterstützen, müssen Entwickler lauter sein, wenn sie mitteilen, dass sie etwas Ungewöhnliches oder Einzigartiges tun. Dieser Versuch, das auszudrücken, was ein Entwickler für wichtig hält, kann häufig den dynamischen Bereich des Codes selbst überschatten. Wenn dies passiert, kann es leicht passieren, dass Fehler überspringen, da sie einfach zu schwer zu erkennen sind.
Je lockerer Ihre Codierungsstandards sind, desto mehr Freiheit haben Entwickler, ihre Syntax an das Problem anzupassen. Im ironischen Gegensatz zum Argument der Pro-Coding-Standards kann eine zu starke Standardisierung zu einer verkrüppelten Codestruktur führen, die auch das Durchrutschen von Fehlern erleichtert.
Was Sie suchen, ist das glückliche Medium Ihres eigenen Teams.
quelle
Wie einige andere bereits betont haben, wird ein Codeabschnitt in einem anderen Stil dazu führen, dass die Wartungsentwickler anhalten und herausfinden, was an diesem Abschnitt besonders ist. Es besteht auch die sehr reale Gefahr, dass der inkonsistente Stil auf andere Abschnitte übertragen wird, was später zu einem großen Durcheinander führt.
Ich habe den Eindruck, dass Sie die Antwort auf diese Frage tief im Inneren bereits kennen und Sie sich nicht einmal damit auseinandersetzen würden, wenn dies nicht so wäre:
Dies scheint immer der universelle Kompromiss zu sein ... es schnell zu machen oder es richtig zu machen. Nur Sie können die Konsequenzen der Beeinträchtigung der guten Codierungspraxis für die Änderung der Kundenfristen abschätzen. Allerdings muss ich JeffO zustimmen, wenn er feststellt, dass das Befolgen eines (möglicherweise ungewöhnlichen oder nicht intuitiven) Codierungsstils Ihr Team nicht so drastisch verlangsamen sollte, dass die Fristen erheblich verkürzen.
Obwohl ich das Konzept seit Jahren kenne, habe ich erst vor kurzem den Begriff " technische Schulden " gelernt . Sie müssen wirklich die technischen Schulden berücksichtigen, die letztendlich bezahlt werden müssen, wenn Sie jetzt nicht diszipliniert vorgehen.
Leider ist es für eBusiness schwierig, den Wert konsistenter Codierungsstandards einzuschätzen, es sei denn, Ihr Kunde ist technisch besonders versiert oder wird den Code später selbst pflegen. Jeder vernünftige Geschäftsmann sollte jedoch in der Lage sein, das Konzept zu verstehen, dass "ein bisschen vorbeugende Wartung jetzt" (in Form einer guten Codierung) "dazu beiträgt, erhebliche Reparaturkosten später zu vermeiden" (in Form von verschwendeter Entwicklerzeit späterer Reinigung des Computers) Chaos).
quelle
Die hier aufgeführten Antworten wiederholen die leicht verständlichen theoretischen Best Practices, die detailliert beschreiben, wie wir alle unsere Codebasen haben möchten. Aber echter Code sieht irgendwie nie so aus. Wenn Sie versuchen, diese perfekte Codebasis zu erstellen, werden Sie fast zwangsläufig scheitern. Das heißt nicht, dass wir nicht versuchen sollten, es besser zu machen, aber es muss eine Grenze dafür geben, wie weit wir von dem realistisch Erreichbaren entfernt sind, das wir uns zum Ziel gesetzt haben.
Wenn Sie sich zu sehr auf kleinere Dinge konzentrieren, besteht die Gefahr, dass Sie sich nicht mehr auf wichtigere Themen konzentrieren, z. B. darauf, wie Sie den Job insgesamt am effizientesten lösen können.
Ich würde Sie als erstes Beispiel nicht als Stil bezeichnen, Stil ist die Wahl, bei der es kein klares Richtig oder Falsch gibt. In diesem Fall ist die zusätzliche Funktion Code Bloat ohne Kopf. Es sind nur zwei zusätzliche Zeilen, die immer noch leicht zu lesen und zu korrigieren sind, sodass dieses Beispiel selbst kein großes Problem darstellt.
Das weitaus größere Problem ist das Aufblähen von Code. Wrapper-Funktionen, Klassenhierarchien und alle möglichen anderen Konstrukte, bei denen der umgebende Code so komplex ist, dass es nicht offensichtlich ist, dass sie keinem wirklichen Zweck dienen. Wenn der Code offensichtlich aufgedunsen ist, gibt es wahrscheinlich viel mehr nicht offensichtliche Aufgedunsenheit. Es ist viel schwieriger, etwas zu tun und es ist schwerer zu erkennen, aber auch ein weitaus größeres Problem.
Über Kunden
Kunden tendieren dazu, sich auf ein funktionierendes Produkt zu konzentrieren, das ihre Anforderungen erfüllt. Selbst wenn Sie einen der wenigen Kunden haben, die sich Sorgen um die Codequalität machen, wird dies eine sekundäre Priorität haben, und ihre Vorstellung von der Codequalität stimmt möglicherweise nicht perfekt mit Ihrer überein. Die Kundenfirma hat zwar eigene Programmierer, aber das Management entscheidet immer noch, ob Sie gute Arbeit geleistet haben oder nicht, und das Management weiß höchstwahrscheinlich nicht einmal, was Codequalität bedeutet.
quelle
Es geht sehr viel um die Lesbarkeit der Unterschiede. Wenn der Codestil herumwirbelt, werden durch die Diffs Änderungen ausgeblendet, die keine semantische Bedeutung für das Programm haben, und Zusammenführungen können schwierig oder unmöglich werden.
quelle