Zum Beispiel gibt es ein allgemeines Snippet in JS, um einen Standardwert zu erhalten:
function f(x) {
x = x || 'default_value';
}
Diese Art von Snippet ist für alle Mitglieder meines Teams nicht leicht zu verstehen, da ihr JS-Level niedrig ist.
Sollte ich diesen Trick dann nicht anwenden? Es macht den Code für Peers weniger lesbar, aber für jeden JS-Entwickler besser lesbar als die folgenden:
function f(x) {
if (!x) {
x = 'default_value';
}
}
Klar, wenn ich diesen Trick benutze und ein Kollege ihn sieht, kann er etwas lernen. Aber es kommt oft vor, dass sie dies als "versuchen, klug zu sein" ansehen.
Soll ich also die Ebene meines Codes senken, wenn meine Teamkollegen eine niedrigere Ebene als ich haben?
teamwork
communication
skills
Florian Margaine
quelle
quelle
Antworten:
Ok, hier ist meine Sicht auf dieses große und komplizierte Thema.
Vorteile für die Beibehaltung Ihres Codierungsstils:
x = x || 10
sind idiomatisch in der JavaScript-Entwicklung und bieten eine Form der Konsistenz zwischen Ihrem Code und dem Code der von Ihnen verwendeten externen Ressourcen.Nachteile für die Beibehaltung Ihres Codierungsstils:
Meine persönliche Meinung
Sie sollten die Fähigkeit Ihres Codes nicht verringern. Sie sollten danach streben, ausdrucksstarken, klaren und prägnanten Code zu schreiben. Wenn Sie irgendwelche Zweifel über das Niveau Ihres Teams haben - bilden Sie sie aus . Die Menschen sind mehr als bereit zu lernen, als Sie vielleicht denken, und sie sind bereit, neue Konstrukte anzupassen, wenn sie davon überzeugt sind, dass sie besser sind.
Wenn sie denken, dass Sie nur schlau sind, versuchen Sie, Ihren Standpunkt zu argumentieren. Seien Sie bereit zuzugeben, dass Sie manchmal falsch liegen, und versuchen Sie auf jeden Fall, die Stile in Ihrer gesamten Arbeitsumgebung einheitlich zu halten. Dies hilft, Feindseligkeiten zu vermeiden.
Das Wichtigste ist, konsequent zu bleiben.
Der Code eines Teams sollte so geschrieben werden, als ob eine Person ihn codiert hätte. Sie müssen sich unbedingt auf Kodierungsrichtlinien einigen. Sie sollten sich an diese Richtlinien halten. Wenn in den Kodierungsrichtlinien festgelegt ist, dass das Lesen optionaler Parameter weniger clever erfolgen soll, ist dies der richtige Weg.
quelle
Kommentar Gut
Sollten Sie die Fähigkeit Ihres Codes verringern? Nicht unbedingt, aber Sie sollten auf jeden Fall die Fähigkeiten Ihrer Kommentare verbessern . Stellen Sie sicher, dass Sie gute Kommentare in Ihren Code einfügen, insbesondere in den Abschnitten, die Ihrer Meinung nach komplizierter sind. Verwenden Sie nicht so viele Kommentare, dass es schwierig wird, dem Code zu folgen, aber stellen Sie sicher, dass der Zweck jedes Abschnitts klar ist.
Die Realität ist, dass es für weniger qualifizierte Teammitglieder nützlich sein kann, mit Kommentaren etwas ausführlicher zu sein, aber diejenigen mit den geringsten Fähigkeiten können sie ignorieren, besonders wenn es zu viele gibt, also übertreiben Sie es nicht.
Eine Frage des Stils?
Das Beispiel, das Sie angegeben haben, ist etwas grundlegend, aber auch eher stilistisch. Ein Kommentar zu jeder Variablenvorgabe wäre ziemlich mühsam zu pflegen und zu lesen. Stattdessen sollten wahrscheinlich stilistische oder wiederholte Verknüpfungen oder Codemuster als Standard festgelegt werden. Wenn Sie der Meinung sind, dass so etwas wie das Standardisieren von Parametern von allen verstanden und jedes Mal verwendet werden sollte, schreiben Sie diese Ideen auf und bringen Sie sie zu Ihrem Teamleiter. Es ist alles möglich, was Sie brauchen, um Ihre Teamkollegen zu unterrichten, ist ein einfaches Meeting, in dem Sie die von Ihnen vorgeschlagenen Standards besprechen.
Halten Sie die Antwort, wie bereits erwähnt, konsistent .
Bringe einem Mann das Fischen bei ...
Das Unterrichten Ihrer Teamkollegen ist wahrscheinlich der beste Weg, um allen Beteiligten zu helfen. Stellen Sie klar, dass sich jeder, der eine Frage zu einem Code mit Ihrem Namen im Commit-Protokoll oder in den Zeitstempeln hat, frei fühlen sollte, Sie danach zu fragen. Wenn Ihr Team Code-Überprüfungen hat, ist dies eine großartige Gelegenheit , Ihren Teamkollegen verwirrenden (ähm), gut kommentierten Code zu erklären . Wenn Ihr Team keine Codeüberprüfungen hat, warum nicht? Komm schon!
Sie müssen jedoch vorsichtig sein. Sie sind möglicherweise nicht immer in der Nähe, um Menschen zu unterrichten, und vergessen möglicherweise sogar, was Sie ursprünglich in einem bestimmten Codeabschnitt versucht haben.
"Clevere" Tricks
Es ist auf jeden Fall wichtig, die Fähigkeiten Ihrer Teamkollegen im Auge zu behalten, aber das Schreiben von wartbarem Code bedeutet häufig, keine geheimen Verknüpfungen für Probleme zu verwenden, die häufigere Lösungen haben könnten. Dies ist wichtig, auch wenn Ihre Teamkollegen intelligent sind. Sie möchten nicht, dass es zu lange dauert, bis der Code verstanden wird, oder dass subtile, aber wichtige Nebenwirkungen auftreten, die übersehen werden könnten. Im Allgemeinen ist es am besten, "clevere" Tricks zu vermeiden, wenn es geeignete Alternativen gibt. Sie wissen nie, wer möglicherweise den Code auf der ganzen Linie warten muss - oft erinnern sich ältere Versionen von uns nicht an die Details oder Gründe für diese Tricks.
Wenn Sie feststellen, dass Sie einen cleveren Trick anwenden müssen, befolgen Sie zumindest die nächsten Ratschläge ...
KUSS
Wenn Sie Zweifel haben, halten Sie es einfach . Ob Code einfach ist oder nicht, entspricht nicht unbedingt den Fähigkeiten eines Programmierers, wie Sie vielleicht denken. In der Tat sind einige der brillantesten Lösungen für ein Problem die einfachsten, und einige der komplizierteren Lösungen landen bei TheDailyWTF . Wenn Sie Ihren Code einfach und präzise halten, können Sie einige der intelligenteren, aber möglicherweise kontraintuitiven Entscheidungen leichter nachvollziehen.
quelle
Es scheint eine große Abneigung gegen das Erstellen einer Funktion in JS zu geben. Diese Abneigung führt dazu, dass die Leute versuchen, klug zu sein und lächerliche Tricks anzuwenden, um die Dinge in einer Zeile zu halten, wie es ein Funktionsaufruf gewesen wäre. Natürlich dient der Funktionsname in einem Aufruf auch als zusätzliche Dokumentation. Wir können einem kniffligen Ausdruck keinen Kommentar hinzufügen, da dies den Sinn des Ausdrucks zunichte machen würde. Wir nennen ihn einfach "js idiom" und plötzlich ist es verständlich.
Javascript ist extrem zugänglich, die meisten Leute essen keine Spezifikationen zum Frühstück wie wir. Sie werden also nie verstehen, was die versteckten Annahmen und Randfälle einer Redewendung sind.
Der Durchschnittsmensch wird dies entweder nicht verstehen oder hat auswendig gelernt, dass dies das Idiom für den Standardwert ist. Beides ist schädlich, in der Tat ist letzteres sogar noch schädlicher. Er wird die Annahmen und Randfälle hier nicht verstehen. Es wird ihm egal sein, die Spezifikation zu lesen und sie jemals zu verstehen.
Wenn ich in diesem Code aussehen sehe ich „ , wenn es
null
oderundefined
setzen sie dann auf diesen Standardwert. Obwohl es auch implizit behandeln wird+0
,-0
,NaN
,false
, und""
als nicht geeignete Werte. Ich muß sich erinnern , dass 3 Monate ab jetzt , wenn die Bedürfnisse Ich werde es wahrscheinlich vergessen. "Die implizite Annahme führt höchstwahrscheinlich zu einem Fehler in der Zukunft. Wenn Ihre Codebasis voller solcher Tricks ist, besteht keine Möglichkeit, dass Sie sie alle im Kopf behalten, wenn Sie darüber nachdenken, wie sich eine Änderung auswirkt. Und das ist für den "JS Pro", der durchschnittliche Joe hätte den Fehler selbst dann geschrieben, wenn die Anforderungen von Anfang an einen falschen Wert akzeptieren würden.
Ihr neues Snippet verfügt über eine vertraute Syntax, weist jedoch das oben genannte Problem auf.
Sie können mit gehen:
Jetzt können Sie die Edge Cases mit einer sehr komplexen Logik behandeln, und der Client-Code sieht immer noch gut aus und ist lesbar.
Wie unterscheidet man nun fortgeschrittene Sprachfunktionen wie das Übergeben einer Funktion als Argument oder einen cleveren Trick wie
|| "default"
?Clevere Tricks funktionieren immer unter einigen versteckten Annahmen, die ignoriert werden konnten, als der Code ursprünglich erstellt wurde. Ich werde niemals ein IIFE an etwas anderes anpassen müssen, weil sich eine Anforderung geändert hat, es wird immer da sein. Vielleicht im Jahr 2020, wenn ich aktuelle Module verwenden kann, aber ja.
| 0
oder die~~num
für Bodenbeläge verwendete Frachtkultversion setzt positive und 32-Bit-Ganzzahlgrenzen mit Vorzeichen voraus.|| "default"
Es wird davon ausgegangen, dass alle falschen Werte mit dem Fehlen eines Arguments identisch sind.Und so weiter.
quelle
Sie sollten nicht senken Sie Ihre Programmierkenntnisse, aber Sie müssen eventuell neu einstellen , wie Sie Code schreiben. Das Ziel ist fast vor allem, Ihren Code den Leuten klar zu machen, die ihn lesen und pflegen müssen.
Leider kann es ein bisschen ein Urteil sein, ob ein bestimmter Stil "clever" oder nur fortgeschritten ist. Der Code in der Frage ist ein gutes Beispiel dafür - Ihre Lösung ist nicht unbedingt besser als die andere. Einige werden argumentieren, dass es so ist, andere werden anderer Meinung sein. Wählen Sie den Stil aus, mit dem sich das Team als Ganzes am wohlsten fühlt, da beide Lösungen praktisch die gleiche Laufzeitleistung aufweisen (lesen Sie: Der Benutzer wird den Unterschied nie bemerken).
In einigen Fällen müssen Sie ihnen bessere Codierungsmethoden beibringen, in anderen Fällen müssen Sie jedoch Kompromisse eingehen, um die Übersichtlichkeit zu gewährleisten.
quelle
Dies kann bereits in einer anderen Antwort gesagt worden sein, aber ich möchte diese Frage meine eigenen Bestellungen beantworten.
Allgemeine Richtlinie
Wenn Sie in einem Team arbeiten, sind Sie nicht die Zielgruppe eines Codeteils. Ihr Publikum ist die Entwickler Ihres Teams. Schreiben Sie keinen Code, den sie nicht ohne Grund verstehen können.
Spezifisches Beispiel
Wir haben eine große Anzahl von Perl-Skripten in unserer Codebasis. Wir verwenden Perl normalerweise nur für sehr einfache Operationen und der Großteil des Codes wird von Java-Entwicklern geschrieben, daher ist es ähnlich wie Java gestaltet. Wir haben eine Reihe von Perl-Skripten und ein Framework, das von einem 'Perl-Guru' geschrieben wurde, der unsere Firma inzwischen verlassen hat. Dieser Code enthält viele der undurchsichtigen Perl-Redewendungen, und keiner unserer Entwickler, einschließlich ich, kann diesen Perl-Code ohne größeren Aufwand lesen. Wir verfluchen ihn oft dafür. :)
quelle
Wenn Sie guten Code schreiben, aber glauben, dass Ihre derzeitigen oder zukünftigen Kollegen Schwierigkeiten haben könnten, ihm zu folgen, sollten Sie einen kurzen Kommentar hinzufügen, um ihn zu erläutern.
Auf diese Weise können Sie ihnen etwas beibringen, ohne ihre individuelle Intelligenz zu beleidigen oder jemanden in einer Gruppendiskussion in Verlegenheit zu bringen.
quelle
Ich würde Ihr Beispiel nicht als Trick bezeichnen, sondern nur als idiomatisch. Ob Sie es verwenden sollten, hängt IMHO nicht so sehr von der aktuellen Ebene Ihres Teams ab, aber ob (zumindest einige) Ihre Teamkollegen bereit sind, einige neue Redewendungen zu lernen. Natürlich sollten Sie dieses Thema mit ihnen diskutieren und diesen Stil nicht erzwingen. Und Sie sollten sie nicht bitten, jeden Tag 5 neue Dinge oder "Tricks" zu lernen. Aber ehrlich gesagt, wenn Sie nur Teamkollegen haben, die nicht bereit sind, etwas Neues zu lernen, sollten Sie überlegen, zu einem anderen Team zu wechseln, auch wenn es so einfach und klein ist wie diese Redewendung.
quelle
Das Lesen dieser Frage und der nachfolgenden Antworten und Diskussionen scheint zwei Punkte zu geben. Die erste: Ist es in Ordnung, erweiterte Sprachfunktionen zu verwenden? Zweitens: Wie kann ich das tun, ohne so zu wirken, als würde ich angeben?
Im ersten Fall ist es sinnvoll, Verbesserungen und erweiterte Funktionen zu verwenden. Beispiel: In C # müssen Sie keine Linq- oder Lambda-Ausdrücke verwenden, aber die meisten Leute tun dies, weil der Code dadurch übersichtlicher und verständlicher wird, sobald Sie tatsächlich wissen, was er tut. Auf den ersten Blick sieht es nur seltsam aus.
Die Menschen gewöhnen sich an Muster und in vielen Fällen verwenden sie die festgelegte Art, Dinge zu tun, nur um die Arbeit zu erledigen. Ich bin daran genauso schuld wie der nächste Mann. Wir haben alle Fristen. In mancher Hinsicht sind Sie schuld daran, neue Ideen und Denkweisen einzuführen! Dies kommt zum zweiten Punkt, und hier werden Sie wahrscheinlich auf den größten Widerstand stoßen.
Für die Person, die die Website nutzt, ist es egal, welcher Stil verwendet wird. Geht es schnell? Wenn Sie also keinen Leistungsvorteil erzielen, gibt es in dem von Ihnen angegebenen Beispiel keinen richtigen oder falschen Weg. Verbessert Ihr Weg die Lesbarkeit von Code oder nicht? Das kann passieren, wenn sich Ihre Kollegen daran gewöhnt haben.
Wie führen Sie diese Änderungen ein? Versuchen Sie, mit Ihren Kollegen in dieser Richtung zu diskutieren: Wussten Sie, dass diese Funktion auf diese Weise geschrieben werden kann? Codeüberprüfungen und Paarprogrammierungen können gute Zeiten sein, um eine gegenseitige Befruchtung von Ideen zu ermöglichen. Es ist schwierig für mich, die Vorgehensweise festzulegen, da ich die Umgebung, in der Sie arbeiten, nicht kenne. Ich finde, dass einige Programmierer sehr defensiv und veränderungsresistent sein können. Auch hier habe ich mich schuldig gemacht. Der beste Weg, mit solchen Programmierern zu arbeiten, besteht darin, etwas Zeit damit zu verbringen, zu lernen, was sie zum Ticken bringt, ihren Hintergrund zu erlernen und dann ihre Stile und Erfahrungen mit denen zu vergleichen und ihnen gegenüberzustellen. Es braucht Zeit, aber es ist gut investierte Zeit. Wenn möglich, versuchen Sie sie zu ermutigen.
quelle
Arbeiten Sie dann nicht für die Royal McBee Computer Corp., denn wer sagt, dass Sie nicht der unerfahrene Programmierer sind?
Sicher, es ist großartig, Code zu schreiben, der kurz und knapp ist und in einer Javascript-Umgebung nützlich sein kann (na ja, bis jemand einen js-Compiler zum Herunterladen für Browser erstellt, aber das ist eine andere Geschichte).
Was jedoch wichtig ist, ist die Fähigkeit Ihres Codes, die wenigen Minuten zu überstehen, die Sie zum Schreiben benötigt haben. Sicher, es ist schnell und einfach, und Sie können es herausnehmen und weitermachen, aber wenn Sie Jahre später noch einmal darauf zurückkommen müssen, denken Sie vielleicht: "Welche Muppet hat das geschrieben?" Und stellen fest, dass Sie es waren! (Ich habe das getan, sicher haben es auch die meisten Leute. Ich beschuldige die zu aggressiven Fristen, ehrlich).
Dies ist die einzige wichtige Sache, die Sie bedenken sollten. Wenn ich also ja sagen würde, gehen Sie zu diesem bestimmten Operator, wenn es funktioniert und klar ist, und zu Ihren "unerfahrenen" Entwicklern (obwohl das für sie abfällig ist, weiß ich viel von unerfahrenen Entwicklern, die alle Operatoren und Tricks kennen, da sie verschiedene Webseiten-Tutorials und -Referenzen auswendig gelernt haben, schreiben sie den schlechtesten Code, obwohl sie jeden kleinen Trick kennen.
Wie auch immer, wenn Sie die Geschichte von Mel lesen könnten , würden Sie erkennen, dass die Tricks nicht das Beste sind, um Code einzufügen, obwohl Mel ein echter Programmierer erster Ordnung war. Dies zahlt sich für jedes Argument aus, bei dem jemand sagt, dass er guten Code schreiben kann und jeder andere mehr lernen muss, um Schritt zu halten.
quelle
Nun, für den Anfang sieht das für mich nach grundlegendem JS aus.
Aber im Allgemeinen sollten Sie keine cleveren Hacks verwenden, um zu paraphrasieren: "Das Debuggen ist doppelt so schwer wie das Programmieren. Wenn Sie Code so clever wie möglich schreiben, können Sie ihn per Definition nicht debuggen."
Das bedeutet nicht, dass Sie Code vermeiden sollten, nur weil andere ihn nicht verstehen. Sie sollten den Code so klar und konsistent wie möglich schreiben. Aber Ihre Kriterien für Klarheit sollten lauten: "Verstehe ich das in der ersten Lesung eines Jahres?", Nicht: "Kann es jemand verstehen?".
Schreiben Sie klar und deutlich, dass Sie keine Schwierigkeiten haben zu verstehen, und lassen Sie andere daran arbeiten, ihre Fähigkeiten zu verbessern - behindern Sie sich nicht, um anderen einige hypothetische Schwierigkeiten zu ersparen.
quelle
Ich würde mit meinen Teamkollegen besprechen, welche Codierungsstandards wir haben möchten, da es hauptsächlich darum geht, wie etwas, das auf Dutzende von Wegen getan werden kann, für unsere Codebasis getan werden kann. Wenn es einen Konsens gibt, wäre das mein erster Versuch, eine Antwort zu finden.
Wenn dies nicht der Fall ist, würde ich wahrscheinlich überlegen, welche Art von vorgeschlagenem Standard sinnvoll ist, und damit beginnen, ihn in die Praxis umzusetzen, sobald ich ihn mit dem Management und einigen Mitarbeitern geklärt habe. Die Idee dabei ist, sicherzustellen, dass das Management mit dieser Idee einverstanden ist und dass ich nicht einfach mein eigenes Ding mache und dann alle anderen dazu zwinge, es zu übernehmen.
Ich würde dies eher als die Frage betrachten, welche Art von Standards und Praktiken Ihr Team hat und nicht nur die Fähigkeitsstufe, da es viele Möglichkeiten gibt, Code zu bewerten. Wie gut andere es behaupten können, ist eines dieser Kriterien.
quelle
Das Problem ist, dass Sie eine gute Lesbarkeit der Quelle wünschen, die Lesbarkeit jedoch in den Augen des Betrachters liegt.
Ich würde vorschlagen, dass wir bessere Werkzeuge brauchen, um dieses Problem zu lösen. Nichts komplexes, wohlgemerkt, wir haben die Technologie, um es seit mehr als 50 Jahren zu tun. Nehmen Sie einen Parser in den Editor auf und lassen Sie den Editor die Quelle in Form von Sexps speichern (ja, genau wie lisp). Anschließend wird die Quelle gelesen und vom Editor in die syntaktische und typografische Form (Leerzeichen, Tabulatoren, Kommas) zerlegt, die der Benutzer bevorzugt.
Auf diese Weise können Sie schreiben und lesen,
x = x || 10
und andere Programmierer lesen es alsEmacs hat alle Teile, um das einfach zu machen.
quelle
Warum nicht die Qualität des Teams verbessern, anstatt den Code herunterzuspielen? Training, Coaching, Schulung und verbesserte Einstellungspraktiken können viel zur kontinuierlichen Verbesserung beitragen.
Statismus, Code-Fäulnis, die Ablehnung von Verbesserungen und Innovationen, weil jemand nicht an der Selbstverbesserung arbeiten will, verursachen nur Probleme auf der ganzen Linie und eher früher als später.
In dem speziellen Fall, den Sie zeigen, versuchen Sie natürlich nur klug zu sein und absichtlich verschleierten Code zu schreiben, was niemals eine gute Idee ist. Code sollte in erster Linie lesbar, leicht verständlich und nicht geschrieben sein, um zu zeigen, wie klug Sie darin sind, etwas mit den geringstmöglichen Anweisungen zu erstellen zum).
quelle