Gibt es eine Möglichkeit, verschiedene Codierungsstile in einem Entwicklungsteam zu unterstützen?

13

Das Problem: Zwei Entwickler => drei Meinungen zu Einrückungen, Klammern zu neuen Zeilen oder nicht usw.

Normalerweise arbeiten wir mit drei oder vier Personen an unseren Projekten und jede von ihnen hat ihren eigenen Codestil. Ich weiß, die gängige Lösung besteht darin, sich auf einen Codestil zu einigen, den jeder verwenden muss, aber ich möchte kreative Programmierer nicht dazu zwingen, einen Anzug zu tragen, der nicht zu ihnen passt.

Die Frage ist also: Gibt es eine Möglichkeit, jeden Programmierer seinen eigenen Stil leben zu lassen, aber eine gemeinsame Codebasis im Repository zu haben? Ich denke an ein git / svn / whatever-Plugin, das beim Auschecken und Festschreiben zwischen persönlichem und allgemeinem Stil wechselt. Es scheint mir, dass der schwierige Teil dieses Ansatzes darin besteht, korrekte Unterschiede zwischen den Versionen einer Datei zu unterstützen

Kai
quelle
1
Es gibt automatische Code-Formatierer für die meisten Sprachen, aber für einige (z. B. C ++) ist es äußerst schwierig, sie vollständig zuverlässig zu machen, da die Syntaxanalyse der Sprache komplex ist.
Joris Timmermans
5
Wirklich eine schlechte Idee. Bitten Sie Ihr Team, einen Konsensstandard auszuarbeiten, und lassen Sie ihn dann anwenden. Wenn Sie etwas Wein haben, sagen Sie ihnen, dass sie ein bisschen erwachsen werden sollen.
Clement Herreman
8
Vielleicht muss hier die andere äußerst häufige Bemerkung gemacht werden: Gibt es ein tatsächliches Problem mit den Unterschieden bei den Codestilen? Repariere nichts, was nicht kaputt ist!
Joris Timmermans
5
"aber ich möchte kreative Programmierer nicht dazu zwingen, einen Anzug zu tragen, der nicht zu ihnen passt" - wenn sich Ihre Programmierer nicht an einfache Dinge wie Einrückungen oder Stiländerungen anpassen können, müssen Sie bessere Entwickler einstellen. Sobald Sie einen neuen Stil für ein oder zwei Wochen verwenden, vergessen Sie es.
Mike Weller
4
@ MikeWeller Konnte nicht das Gegenteil argumentiert werden? Namenskonventionen sind das einzige, was ich jemals für wichtig gehalten habe, da es einfacher ist, den Zweck eines Objekts außerhalb seines Definitionskontexts zu identifizieren. Solange jemand halbwegs konsequent darauf achtet, wo Blöcke nisten, beginnen und enden, habe ich nie verstanden, warum das eine so große Sache sein sollte.
Erik Reppen

Antworten:

20

Nein, Sie müssen einen Standard erstellen. Wenn Sie Teammitglied B geändert haben (entweder mit einem automatisierten IDE-Tool oder manuell), hat ein ganzer Haufen Code-Teammitglied A geschrieben, der festgeschrieben und als Änderung angezeigt wird.

Dies ist etwas, dem sich fast jedes Team gegenübersieht, und aus diesem Grund werden Standards "erzwungen". Ich würde vorschlagen, dass Sie die Standards der Sprachbehörden als Grundlage befolgen und sie an Ihr Team anpassen.

Ein einheitlicher Codierungsstil trägt auch zur Wartbarkeit des Projekts bei und verringert die Eintrittsbarriere für neue Personen, die an dem Code arbeiten.

Sam
quelle
11

Nein, Sie müssen einen Codierungsstandard definieren (vorzugsweise einen, der bereits vorhanden ist), und Ihre Entwickler müssen sich daran halten. Ein professioneller Programmierer zu sein bedeutet, dass Sie sich an jeden Codierungsstandard anpassen können, der in dem Projekt verwendet wird, an dem Sie arbeiten.

JesperE
quelle
2
+1. Lassen Sie sie eines auswählen, aber lassen Sie sie es anwenden.
Clement Herreman
Ich wünschte, die Formatierung wäre Teil des Standards einer Programmiersprache, so dass Programme nicht nur "gültig" oder "ungültig" sind, sondern auch einen dritten Status haben, "gültig und gut formatiert".
JesperE
4
Das ist (mehr oder weniger) in Python der Fall, wo Einrückung eine Sprachsemantik ist.
Clement Herreman
2
Go erzwingt dies nicht strikt, verfügt jedoch über einen eingebauten Quellcode-Formatierer go fmt. Siehe golangtutorials.blogspot.fr/2011/06/…
Clement Herreman
1
@JesperE Das ist in Python mit implementierter PEP8 und dem entsprechenden Werkzeug, erfindungsgemäß genannt PEP8 .
Phihag
8

JA, es kann funktionieren, solange alle Stile sinnvoll sind und die Leute nicht den Code anderer Leute ändern, um ihren Vorlieben zu entsprechen und / oder Stile in einer einzigen Codedatei zu mischen.
Es ist nicht ideal, aber es unterscheidet sich nicht davon, alten Code zu erben, der nach einem anderen "Standard" als dem Ihren erstellt wurde, und ihn in Ihre Codebasis integrieren zu müssen.
Also, wenn Sie es tun müssen, einige Richtlinien:

  • Wenn Sie den Code nicht anders gestalten, um ihn Ihren Wünschen anzupassen, kostet dies Zeit und führt zu Fehlern
  • in jeder einzelnen Datei konsistent bleiben. Wenn also Stil A zum anfänglichen Schreiben verwendet wurde, wird jeder beim Ändern Stil A verwenden
  • Erstellen Sie einen gemeinsamen Standard für Ihre öffentliche Schnittstelle, also für alles, was der Außenwelt ausgesetzt ist (und ja, andere Unterkomponenten eines Systems sind die Außenwelt).
jwenting
quelle
2
Ich würde hinzufügen, dass professionelle Entwickler sowieso oft dazu neigen, die Stile des anderen zusammenzuführen. Sie werden kurze informelle Diskussionen über einige Punkte führen und eine Einigung erzielen.
Joris Timmermans
Das funktioniert hervorragend, mit dem Vorbehalt, dass die Verwendung der automatischen Code-Neuformatierung auf ein Minimum beschränkt werden muss (wenn nicht komplett verboten).
Grahamparks
2
"Kein Ändern von Code mit unterschiedlichem Stil, um Ihren Vorlieben zu entsprechen, kostet Zeit und führt zu Fehlern." - Ganz im Gegenteil - Das manuelle Anpassen eines nicht automatisierten Standards ist sehr zeitaufwändig. Führen Sie einen Code-Formatierer aus, und schreiben Sie die Änderung als "mit Optionen formatiert" fest. Was auch immer "dann funktionale Änderungen vornehmen ist viel schneller.
Pete Kirkham
Ich denke, diese Antwort könnte tatsächlich den Teil der Frage "automatische Formatierung" übersehen haben?
Joris Timmermans
Eine Vielzahl von Stilen zwischen Dateien ist viel schwieriger zu handhaben, als nur einen konsistenten Stil zu haben.
Andy
4

Die kurze Antwort lautet Nein.

Während Meinungen in der Arbeit besonders in einem wissensbasierten Job wie der Softwareentwicklung geschätzt werden sollen, müssen Entwickler erkennen, dass eine Meinung nur eine Meinung ist und dass sie dazu da sind, Software zu schreiben, ohne darüber zu streiten, welcher Zeileneinrückungsstandard am besten ist.

Das Ziel eines Normungsdokuments sollte darin bestehen, eine Reihe gemeinsamer Kodierungsnormen / -konventionen durchzusetzen / vorzuschlagen, die sich an diese richten

  1. Layout Elemente wie Tabulator, Einrückung, Verwendung von {, (,
  2. Name der Variablen, des Objekts und der Funktion, z. B. CamelCase, ungarische Schreibweise
  3. Ausnahmebehandlung wie / wann / wo es durchgeführt werden soll
  4. Code-Kommentare. Verweisen Sie immer auf ein Konstruktionsdokument, eine Fehlernummer usw

Die Standarddokumente tragen dazu bei, dass der Code einfach zu lesen, zu warten und in seinen Konventionen konsistent ist.

Dies ist von unschätzbarem Wert, wenn Sie den Code vor dem Einchecken überprüfen, einen anderen Code debuggen oder den Code mehrere Jahre nach dem Ausscheiden des ursprünglichen Entwicklers ändern.

Normalerweise überprüfe ich beim Erstellen eines Coding Standards-Dokuments die Industriestandards für die von mir verwendete Sprache (C, C #, SQL), verwende die am besten geeigneten Standards, verteile sie an die erfahrensten / einflussreichsten Entwickler zur Kommentierung, binde die Kommentare gegebenenfalls ein und dann Geben Sie das Dokument frei.

Armitage
quelle
1
In der Praxis gibt es in vielen Läden einen Entwickler, der in der Regel der alte Hase oder die PrimaDonna ist und anscheinend Freude daran hat, Formatierung Holy Wars für den Rest der Leute zu erstellen. Professional == Was auch immer ich sage. Was auch immer ihr sagt == Nicht professionell. Und dann löst es sich auf. Ich habe Codierungsstandards gesehen, die grobe Dinge vorschreiben wie "Verwenden Sie viele globale Variablen, erstellen Sie niemals neue Klassen, vermeiden Sie um jeden Preis objektorientiertes Programmieren und ändern Sie nichts". Leider gibt es keine Begrenzung für das, was die Leute versuchen, in den Bereich der sogenannten "Codierungsstandards" zu drängen.
Warren P
4

Theoretisch ist es möglich, Code automatisch neu zu formatieren, bevor er in Ihr Versionskontrollsystem übernommen wird.

Es gibt jedoch ein großes Problem: Automatische Code-Formatierungs-Tools sind nicht 100% zuverlässig. Sie könnten mit diesem System also tatsächlich Probleme in Ihren Code einführen. In meinen Augen tötet das die Idee. Es ist immer wichtiger, funktionellen Code zu haben als korrekt gestalteten Code!

Wenn das Projekt unterteilt ist und die meisten Teile des Codes den einzelnen Programmierern "gehören", ist es möglicherweise in Ordnung, sie ihre eigenen Stile verwenden zu lassen (innerhalb des vorgegebenen Rahmens). Wenn jedoch häufig mehrere Personen an demselben Codeteil arbeiten, muss wahrscheinlich ein Stil erzwungen werden.

Hier ist eine ähnliche Diskussion zum Stack Overflow .

Gemeinschaft
quelle
2
Beachten Sie auch die akzeptierte Antwort in der verlinkten Diskussion!
Joris Timmermans
1

Das einseitige automatische Neuformatieren von Code kann eine praktikable Lösung sein, wenn Sie:

  1. Suchen Sie einen Autoformatierer, der für die Konvention, die Sie implementieren möchten, und Ihre Programmiersprache tatsächlich funktioniert.
  2. Kann vorab festgeschrieben werden, damit die Neuformatierung nicht in den Änderungsprotokollen angezeigt wird, die mit den tatsächlichen funktionalen Änderungen gemischt und von diesen nicht unterscheidbar sind.
  3. Lassen Sie Ihr Team festlegen, welche Konvention angewendet werden soll (da es beim Auschecken im Allgemeinen keinen "Rückweg" zu den persönlichen Vorlieben eines Entwicklers gibt, zumindest nicht, von denen ich weiß).

Keines davon ist in vielen Fällen wirklich einfach zu bewerkstelligen, also ziehen Sie in Betracht, Ihre Schlachten hier auszusuchen! Ich habe Teams gesehen, die dies erfolgreich für ein C # /. NET-Projekt durchgeführt haben, bei dem die Neuformatierung bereits auf dem PC des Entwicklers stattgefunden hat, sodass dies unter bestimmten Umständen möglich ist.

Joris Timmermans
quelle
1

absolut kannst du. Es geht nur darum, die kleinen Dinge nicht ins Schwitzen zu bringen.

Der einzige wichtige Standard ist "Behalten Sie den gleichen Stil wie der vorhandene Code bei". Solange Sie sich an einen Codierungsstil anpassen können, der nicht Ihr bevorzugter ist, können Sie mit jedem Codierungsstil arbeiten.

Was macht es also aus, in einem Unternehmen in 3 verschiedenen Stilen zu arbeiten? Ihre Entwickler benötigen , dies zu verstehen, dass das Schreiben von Code in der Art und Weise , wie sie finden für ihren Code ist aber , sobald sie Änderungen an einer anderen Datei, die verwendet einen anderen Stil, sie haben diesen Stil zu halten (oder es wird wirklich schlecht aussehen) . Eine Neuformatierung ist nicht zulässig (oder sie werden nur fortlaufend neu formatiert und die SCM-Unterschiede werden unbrauchbar) (und wenn Sie dies tun, sollte eine automatische Formatierung verwendet werden).

Sobald sie damit anfangen, werden sie wahrscheinlich zu einem Konsens darüber kommen, welchen Stil sie verwenden sollen, oder sie werden größtenteils zusammen driften. Wenn sie diesbezüglich kindisch sind und sich ständig neu formatieren, ist es an der Zeit, einen Standard aus dem Internet herunterzuladen und zu fordern, dass sie ihn verwenden. Möglicherweise möchten Sie dies trotzdem tun, nur um es ihnen als "Play nice or else" -Karte ins Gesicht zu winken.

gbjbaanb
quelle