Wie soll ich meinem Team einen Codierungsstandard vorstellen?

8

Zunächst ein paar Hintergrundinformationen: Mein aktueller Entwicklungsmanager nutzt Ende dieser Woche eine weitere Gelegenheit und verlässt unser Team mit vier Vollzeitentwicklern, einem Teilzeitpraktikanten und einem Webdesigner (der technisch Teil des Marketings ist, nicht AppDev). Derzeit befördern oder stellen wir keinen neuen Manager ein.

Der vorherige Manager würde sich nie die Zeit nehmen, eine Reihe von Codierungsstandards zu entwickeln, um diese einzuhalten (um dies ins rechte Licht zu rücken: Mein einjähriges Jubiläum bei diesem Job ist in zwei Wochen und ich habe seitdem mit ihm über Standards gesprochen Ich habe begonnen). Aus diesem Grund schreiben wir alle vier Entwickler Code auf unsere eigene Weise: Einige von uns folgen den Microsoft-Namenskonventionen für .NET, andere verwenden die ungarische Notation, andere verwenden eine Mischung (z. B. Mischen PascalCaseund camelCasefür Parameternamen), und es ist völlig zufällig, wenn Sie öffnen eine Codedatei nach dem Standard, dem sie folgen wird. Das einzige, was konsistent ist, ist, dass geschweifte Klammern in separaten Zeilen stehen.

Zwei meiner drei Mitarbeiter haben sich an mich gewandt, um ein Standard-Codierungsdokument zu erstellen, das wir verwenden und in Zukunft durchsetzen können (obwohl ich technisch gesehen nicht der älteste Entwickler bin, der vierte Entwickler ist seit mehreren Jahren hier, zwei Mitarbeiter und der Praktikant bittet mich um Rat / Anleitung, aber wir haben keinen Teamleiter). Ich hatte vor, dies für eine Weile zu tun, aber der jetzt abtretende Manager würde es immer in den Hintergrund rücken; Seine Abreise gibt uns jetzt die Möglichkeit, uns etwas Zeit zu nehmen und die Dinge richtig zu konfigurieren, um eine ordnungsgemäße Softwareumgebung zu ermöglichen, und nicht das überstürzte Durcheinander, das wir derzeit haben.

Wie soll ich vorgehen und diesen Standard meinem Team vorstellen, ohne Reibungspunkte zu verursachen? Ich möchte nicht, dass es so aussieht, als würde ich "übernehmen", obwohl mir die Managerposition angeboten würde, würde ich sie akzeptieren. Wie ich bereits sagte, sind zwei von drei anderen Entwicklern an Bord, um einen zu erstellen, aber der vierte (der wahre "Senior" in der Zeitspanne) kann dies akzeptieren oder auch nicht. Ich habe vor, mit den .Net-Konventionen von Microsoft zu beginnen (z. B. keine ungarische Notation verwenden), einige persönliche Präferenzen hinzuzufügen (z. B. _camelcasefür Felder) und bestimmte seltsame Praktiken, die wir hier verwenden, als nicht zu verwenden zu bezeichnen (z. B. eine Klasse mit zu benennen) ein Unterstrich am Anfang), aber was soll ich noch einschließen? Ich möchte nicht auf architektonische Richtlinien eingehen verursachen Reibung und wir haben eine sehr große und stinkende vorhandene Codebasis, die sich nicht daran halten würde, und wir sind noch lange nicht in der Lage, eine Refactoring-Strategie zu entwickeln.

Zusammenfassend: Über grundlegende Namenskonventionen hinaus, was, wenn überhaupt, sollte ich in ein Dokument mit Codierungsstandards aufnehmen (Beispiele wären großartig - ich habe keine konkreten Beispiele dafür gefunden, wie ein solches Dokument aussehen sollte) und wie sollte ich Präsentieren Sie es meinem Team, ohne wie der neue Diktator zu klingen.

Wayne Molina
quelle
Zusätzlich zu den Namenskonventionen möchten Sie eine Standardmethode zur Beschreibung der Funktionsweise der Datei in den Headern sowie möglicherweise eine standardisierte Verzeichnisstruktur. Siehe den Styleguide von Google als Beispiel.
Chrisaycock
Sie haben keinen Manager / Teamleiter und sind besorgt über Codierungsstandards!
Mattnz
Wir brauchen möglicherweise keinen Teamleiter, um ehrlich zu sein. Die meisten von uns sind sich einig und arbeiten alleine zusammen. Die Standards sind besorgniserregend, da sie seit fast einem Jahr "über sie sprechen" und keine Zeit mehr haben, sich zu setzen, um einige zu besprechen.
Wayne Molina
2
Die Tatsache, dass Sie sich seit fast einem Jahr nicht mehr zu einem 30-minütigen Meeting gesetzt haben, zeigt mir, dass Sie tatsächlich einen Teamleiter brauchen.
Mattnz
Vielleicht. Der vorherige Manager hatte es eilig, Code herauszuholen und keine Zeit mit Dingen wie dem Sprechen über Standards oder dem Versuch, CI, Tests, Codeüberprüfungen oder dergleichen zu implementieren, zu "verschwenden". Das eine Mal, als wir versuchten, es herauszufinden, wurde der leitende Entwickler nervös, dass das Meeting zu lange dauerte ("Ich habe Arbeit zu erledigen!" War das genaue Zitat) und stürmte heraus und beendete es abrupt.
Wayne Molina

Antworten:

10

Wie soll ich vorgehen und diesen Standard meinem Team vorstellen, ohne Reibungspunkte zu verursachen?

Sie sagen auch:

Zwei meiner drei Mitarbeiter haben sich an mich gewandt, um ein Standard-Codierungsdokument zu erstellen, das wir verwenden und in Zukunft durchsetzen können

Sieht so aus, als hätten Sie bereits ein Buy-In von den meisten Teammitgliedern. Machen Sie die Erstellung des Dokuments zu etwas, das von Ihnen allen gemacht wird (wenn möglich alle vier). Wenn dies zu zeitaufwändig ist, erstellen Sie Ihr Dokument und zeigen Sie es Ihren Kollegen als Entwurf. Sobald Sie alle eine Version vereinbart und fertiggestellt haben, können Sie loslegen.

Ein guter Anfang ist ein Blick auf die verschiedenen Stylecop- Regeln - Sie müssen sich nicht an alle halten, aber diese geben Ihnen eine Vorstellung davon, was Ihr Dokument enthalten sollte. Als zusätzlichen Bonus können Sie Stylecop einfach in Ihre Lösungen implementieren und sogar in einen automatisierten Build integrieren (der Build schlägt fehl, wenn Verstöße vorliegen).

Zusammenfassen:

Sehen Sie sich vorhandene Tools und Standards an, um zu entscheiden, was Sie von Ihren erwarten.

Um zu vermeiden, dass Sie wie ein Diktator aussehen, nehmen Sie die Änderung gemeinsam vor.

Oded
quelle
"Um nicht wie ein Diktator auszusehen, machen Sie die Änderung zu einer kollaborativen." So wahr. Sie haben hier drei Wege zum Erfolg: 1. Verwenden Sie einen externen Standard. Auf diese Weise hat jeder etwas, das ihm gefällt und etwas, das er nicht mag (fxcop, stylecop oder sogar jedes PDF, das Sie im Internet finden können). 2. Kollaborative Generierung. 3. Sie sind ein legendärer Held mit langjähriger Erfahrung und Menschen, die mit Ihnen zusammenarbeiten und von allen geliebt werden, oder vielleicht ist Ihr Nachname Zuckerberg, Page oder Brin.
Anon
6

Über grundlegende Namenskonventionen hinaus, was sollte ich, wenn überhaupt, in ein Dokument mit Codierungsstandards aufnehmen?

Nichts.

Lassen Sie sich Zeit. Mach langsam. Verschwenden Sie keine Zeit mit Schreiben. Codierungskonventionen funktionieren nur , wenn sie Teil der gemeinsamen Kultur sind.

Wenn sie nicht Teil der Kultur sind, werden sie einfach ignoriert.

Wie soll ich vorgehen und diesen Standard meinem Team vorstellen?

Code-Bewertungen. Es ist ein großartiger Ort, um das Problem vorzustellen, das durch Codierungskonventionen gelöst wird.

Konventionen sind meistens nur Zeitverschwendung. Wenn Sie ein tatsächliches Problem haben (dh unlesbare Programme), das Sie durch Codierungskonventionen lösen können, können Sie schnell zu 100% Konformität gelangen.

Codierungskonventionen, die lediglich persönliche Präferenzen sind, lösen kein Problem. In der Tat können Sie während einer Codeüberprüfung etwas Besseres herausfinden und tatsächlich Ihre persönlichen Vorlieben ändern.

Kanonisieren Sie nicht zu viel in einem Dokument mit Codierungskonventionen. Arbeiten Sie kooperativ, um zu einem gemeinsamen Verständnis zu gelangen.

Ich möchte nicht auf architektonische Richtlinien eingehen, da dies zu Reibung führen wird und wir eine sehr große und stinkende vorhandene Codebasis haben, die sich nicht daran halten würde.

Schlechte Politik.

Ein architektonischer Standard ist niemals etwas mit 100% iger Einhaltung. Es kann nicht sein. Es ist immer eine "vorausschauende" Beschreibung, zu der sich die Entwicklung entwickelt.

Jede gute architektonische Idee wird zu einer neuen architektonischen Richtung führen. Und so sieht Innovation aus - ein Weg, kein Ziel.

und wir sind noch lange nicht so weit, eine Refactoring-Strategie zu entwickeln.

Gut. Entwickle keinen. Damit meine ich "ersticken Sie Innovationen nicht, indem Sie zu viele Dinge aufschreiben, die der bestmögliche Ansatz sein können oder nicht."

S.Lott
quelle
4

Mit so etwas wie Codierungskonventionen würde ich sagen, dass jede spezifische Konvention zu 100% einstimmig sein sollte oder einen Mittelweg finden sollte, der sie zu 100% einstimmig macht.

  • Legen Sie eine Frist für die Fertigstellung des Dokuments fest. Dies zwingt andere dazu, es ernst zu nehmen.

  • Wenn Sie das Dokument zusammenstellen, wird niemand Lust haben, Ihnen zu helfen, aber wenn Sie die Arbeit besitzen, wird Sie niemand damit bekämpfen.

  • Senden Sie Vorschläge für verschiedene Codierungskonventionen, die auf verschiedenen Stilen basieren, die jetzt in der Codebasis vorhanden sind. Sammeln Sie Feedback und vereinbaren Sie ein Meeting, über das abgestimmt werden kann.

  • Niemand verlässt das Treffen, bis jeder Konvent zu 100% einstimmig vereinbart wurde

  • Neue Mitarbeiter des Teams müssen sich an das Dokument halten und haben kein Mitspracherecht. Es ist wie die Verfassung zu diesem Zeitpunkt.

Oh und keine ungarische Notation. Im Ernst, ich würde lieber meine Augen papierschneiden, als Code in ungarischer Notation betrachten zu müssen.

maple_shaft
quelle
1
Der Ungar ist eine große Sache, ebenso wie die unterstrichenen Klassennamen. Wenn _Customer oCust = new _Customer();ich so etwas sehe, schüttle ich verwirrt den Kopf.
Wayne Molina
Ich habe die Aufgabe übernommen, einen neuen Satz von Codierungsstandards für mein Unternehmen zu erstellen. Glücklicherweise hatte ich Hilfe von einer Reihe von leitenden Entwicklern, die ebenfalls neu im Unternehmen waren, und wir hatten einen Vizepräsidenten, der uns bei der Durchsetzung unterstützte. Wir aktualisieren das Dokument alle paar Monate nach Bedarf. Nach der zweiten großen Überarbeitung habe ich dem Dokument eine Abschnittsnummerierung hinzugefügt, die es einfacher machte, auf einen bestimmten Standard zu verweisen, wenn ein Projekt die Codeüberprüfung nicht bestand. "Lesen Sie Abschnitt 5.3.4.6 über die Verwendung von FunktionA anstelle von FunktionB". Im letzten Jahr erhalten wir endlich weniger fehlgeschlagene Codeüberprüfungen.
Adrian J. Moreno
1

Codierungsstandards werden eine Herausforderung sein, um akzeptiert zu werden. Einige Leute codieren gerne in ihrer Sandbox und machen einfach ihr Ding, obwohl es Probleme verursachen kann, wenn es kaputt geht und andere versuchen, es zu beheben.

Wenn Sie Visual Studio mit .NET verwenden, schauen Sie sich StyleCop an. Sie können die vordefinierten Regelsätze verwenden oder eigene schreiben. Lassen Sie dann alle zustimmen, bevor Sie Codeüberprüfungen durchführen (falls vorhanden), dass Sie die Einstellungen einhalten sollten.

ist_lion
quelle
1

Aus technischer Sicht:

Weisen Sie auf die Inkonsistenzen hin, die für das Team wirklich ein Problem darstellen, und definieren Sie Codierungsregeln zur Lösung dieser Probleme.

Aus relationaler Sicht:

Wenn Sie den Senior einbeziehen möchten, lassen Sie sich von seinen eigenen Codierungskonventionen inspirieren.

Mouviciel
quelle
Ein guter Grund, warum wir Codierungsstandards wollen, ist, dass der Senior keinen folgt. Er verwendet überall die ungarische Notation, er weiß nicht, dass Methoden überladen werden können (es wird also eine GetFooMethode geben, und dann eine GetFoo_WithSomethingElseMethode, die dasselbe hat, aber mit einem zusätzlichen Parameter, wobei die gesamte Logik kopiert und dann die zusätzliche eingefügt wird Bits hinzugefügt) und er versteht kein anderes Klassendesign als nur viel Logik in eine CodeBehind-Datei zu stecken. Der abgehende Manager kümmerte sich nicht darum, Dinge anders zu machen, also stimmte er einfach diesem Stil zu.
Wayne Molina
Das habe ich mir gedacht. Es sieht so aus, als ob Ihr Projekt nicht technische Probleme hat und Sie versuchen, diese mit einer technischen Antwort zu lösen.
Mouviciel
Was wäre dann der richtige Weg, um die Probleme zu lösen? Das Problem ist, dass niemand über diese Dinge nachgedacht hat, seit das Unternehmen gegründet wurde.
Wayne Molina
Ich kann mich irren, aber das Problem, das ich sehe, ist, dass ein leitender Entwickler, der jahrelang Code geschrieben hat, keinen Grund hat, Änderungen vorzunehmen, insbesondere wenn die Anfrage von einem Junior stammt (ich stelle Ihre Kompetenz nicht in Frage). Ich sehe keine allgemeine Lösung, da ich nicht genug über die Situation weiß.
Mouviciel
0

Solange Sie nicht der neue Manager Ihres Teams sind, benötigen Sie einen Konsens über einen Kodierungsstandard (und wenn Sie der Manager waren, sollten Sie sich wirklich bemühen, einen Konsens im Team zu erzielen, bevor Sie eine solche Entscheidung treffen "von oben "). Und es mag einfach klingen, aber nur ein Gespräch - insbesondere mit dem vierten Entwickler - kann dieses Problem lösen.

Doc Brown
quelle
0

Haben Sie ein Firmen-Wiki? Oder, falls dies nicht der Fall ist, einen Server, auf dem Sie einen ablegen können?

Wenn ja, dann erstellen Sie einfach eine Seite. Nennen wir es ein lebendiges Dokument. Legen Sie einige nicht umstrittene Standards fest und ermutigen Sie alle anderen zur Zusammenarbeit. Fügen Sie alle paar Wochen weitere Elemente hinzu, regen Sie zur Diskussion an, aber auf eine Weise, die besagt: "Wenn niemand anderer Meinung ist, sollten wir damit rechnen, dass dies befolgt wird." Wenn Sie können, überzeugen Sie alle, die Standarddokumente zu abonnieren, damit Sie alle Änderungen sehen können, die Ihre Kollegen vornehmen.

Versuchen Sie auch, das Team dazu zu bringen, mit der Codeüberprüfung zu beginnen. Jeder Job durchläuft zwei Entwickler. Dies wird die Diskussion und die Durchsetzung von Standards fördern und dafür sorgen, dass alle gleich sind und nicht ein Entwickler die Regeln diktiert.

Als Antwort auf einen Kommentar bearbeiten:

Sie können Code-Reviews verkaufen, um Dev # 4 seine Weisheit zu verbreiten. Selbst wenn sein Code überprüft wird, ist es eine Gelegenheit für die Menschen, seinen magischen Code zu sehen und sich darüber zu wundern. Es ist wirklich ein Weg, die Diskussion zu fördern. Wenn sich der Programmierer und der Prüfer nicht einigen können, sollte dies an das Team gehen. Wo das Team nicht zustimmen kann, sollte recherchiert werden.

Apropos Forschung, machen Sie einige auf Code-Überprüfungen. Niemand, dessen Meinung viel zählt, hält sie für eine schlechte Idee. Schreiben Sie es dem Team, einschließlich des CIO, in einer E-Mail mit vielen Links. Es ist schwer, gegen sie zu argumentieren, ohne wie ein obstruktiver Idiot auszusehen.

Hier sind einige, um Ihnen den Einstieg zu erleichtern:

Für ein Wiki würde ich wirklich empfehlen, sich die Zeit zu nehmen, um eines einzurichten (Wikis geben die Illusion einer Zusammenarbeit, auch wenn es nicht wirklich da ist). Wenn Sie dies jedoch nicht können, erledigt ein Word-Dokument auf einem freigegebenen Laufwerk die Aufgabe.

pdr
quelle
Wir haben keine; Es ist etwas, was wir (wenn ich "wir" sage, meine ich mich selbst und die beiden Entwickler, die sich mir widersetzen - der vierte ist im Wesentlichen ein "Spezialagent" und behandelt die alten / komplexen Teile der App, die der Rest von uns nicht berührt - Noch bevor der Manager Dev # 4 verließ, wurde direkt an den CIO berichtet, nicht an den Manager. Code Reviews Ich bin mir nicht sicher, ob wir das können, da einige möglicherweise Anstoß nehmen, wenn ihr Code in Frage gestellt wird (höchstwahrscheinlich Dev # 4, da er sowieso ändern muss, wie er Dinge tut, um die neuen Standards einzuhalten)
Wayne Molina
@WayneM Wo ich arbeite, hatten wir auch kein Wiki. Es war einfach, eine Dokuwiki-VM einzurichten, um loszulegen. Sie können das Ding bei Bedarf von Ihrer persönlichen Box aus ausführen, und sobald die Dinge in Gang kommen, ist es ziemlich einfach, auf einen "echten" Server zu migrieren.
Spencer Rathbun
1
@ WayneM: Siehe Bearbeiten.
pdr
0

Kommentar- und Whitespace-Standards sind gut, zusammen mit Tools zum Migrieren zwischen verschiedenen Stilen. Ich verwende Tabulatoren in meinem Python-Code, was als schlechter Stil angesehen wird. Eine einfache VIM-Funktion konvertiert jedoch bei Bedarf zwischen beiden.

Denken Sie auch an die Code-Verständnisstufen. Der Zweck eines Stils besteht darin, dem Programmierer, der den Code liest, Informationen zu übermitteln. Wenn Sie verstehen können reduce(lambda x, y: x+y, map(lambda x: x + 1, theList)), aber Ihre Mitarbeiter lieber sehen würden:

for pos,item in enumerate(theList):
    theList[pos] = item + 1
tmp = 0
for item in theList:
    tmp = tmp + item

Dann ist es wichtig, dies zu überprüfen. Gleiches gilt für Leerzeichen. Sie müssen herausfinden, mit welcher Codekomprimierungsstufe jeder vertraut ist.

Wie werden schließlich neue und aktuelle Projekte zerschnitten? Eine Klasse pro Datei, Dienstprogrammfunktionen folgen einem Namensschema, keine globalen Variablen oder Bereichsverluste, zufällige Projektdateien sind orthogonal und lose gekoppelt und so weiter. Dies bietet eine wichtige Verständnisbasis für alle. Es spielt keine Rolle, was der Codierungsstandard ist, wenn jedes Projekt so miteinander verflochten ist, dass ich die gesamte Codebasis durchgehen und das Projekt wirklich bearbeiten muss, bevor ich zwitschere foo().

Spencer Rathbun
quelle