Umgang mit Mitarbeitern, die keinen einheitlichen Codierungsstil haben?

30

Was machen Sie, wenn Sie mit jemandem zusammenarbeiten, der dazu neigt, stilistisch schlechten Code zu schreiben? Der Code, von dem ich spreche, ist normalerweise technisch korrekt, vernünftig strukturiert und mag sogar algorithmisch elegant sein, sieht aber nur hässlich aus . Wir haben:

  • Mischung verschiedener Namenskonventionen und Titel ( underscore_styleund camelCaseund UpperCamelund CAPSalle mehr oder weniger zufällig auf verschiedene Variablen , die in der gleichen Funktion angewandt)
  • Bizarre und inkonsistente Abstände, z Functioncall (arg1 ,arg2,arg3 );
  • Viele falsch geschriebene Wörter in Kommentaren und Variablennamen

Wir haben ein gutes Codeüberprüfungssystem, in dem ich arbeite, sodass wir das Schlimmste untersuchen und beheben können. Es fühlt sich jedoch sehr kleinlich an, eine Codeüberprüfung zu senden, die aus 50 Zeilen besteht: "Fügen Sie hier ein Leerzeichen hinzu. Schreiben Sie" itarator "richtig. Ändern Sie die Groß- und Kleinschreibung. Usw."

Wie würden Sie diese Person ermutigen, mit solchen Details vorsichtiger und konsistenter umzugehen?

JSB ձոգչ
quelle
2
Hilfe "Hübsche Drucker". Hat Ihre Firma auch einen Styleguide?
Chrisaycock
1
Was ist mit Kollegen, die keine Grammatik haben? ;)
Muad'Dib
4
@JSBangs: Installiere einen Pre-Commit Style Checker und lehne Commits ab. Dadurch werden sie schnell korrekt formatiert. Oder lassen Sie den Pre-Commit-Hook einen Formatierer für Sie ausführen . Einige Sachen werden aussehen, aber es ist besser als seltsam ist besser als "schrecklich", denke ich.
Haylem
3
Noch ein Gedanke - es mag kleinlich erscheinen, aber es ist kleinlich für einen Zweck (vorausgesetzt, dass a) es einen Kodierungsstandard gibt und dass b) alle anderen dem zustimmen und sich daran halten)
Murph
3
Was ist der Hintergrund dieses Programmierers? Klingt so, als hätte er für zu viele verschiedene Unternehmen mit zu vielen verschiedenen Code-Formatierungskonventionen gearbeitet, und sein Gehirn hat sie alle zu einem Durcheinander verinnerlicht. :-)
Carson63000

Antworten:

19

Vereinbaren Sie eine Kodierungskonvention

Auch wenn dies ein One-Pager ist. Ich schlage vor, dass sich das gesamte Team hinsetzt und sich alle auf grundlegende Kodierungskonventionen einigen, die das gesamte Team anwenden kann.

Dunkle Nacht
quelle
1
Absolut - dann a) versucht jeder, den gleichen Standard zu erreichen und weiß, was es ist und b) Ihre Ablehnung bei der Codeüberprüfung kann auf "Nichteinhaltung von Codierungsstandards" reduziert werden (zumindest wenn die Datei insgesamt a ist Chaos - wenn es nur ein oder zwei Dinge sind, müssen Sie spezifisch sein)
Murph
Normalerweise habe ich noch nie ein Team gesehen, das es geschafft hat, sich in einer Stunde auf eine vollständige Kodierungskonvention für eine beliebige Sprache zu einigen funktioniert. Sie müssen in einigen Punkten Fuß fassen, weil Sie keinen Konsens finden, oder Sie haben großes Glück mit Ihrem Team.
Haylem
28

Ich denke, du musst einfach weitermachen, was du tust. Verfügen Sie über klare Codierungsrichtlinien und setzen Sie diese bei der Codeüberprüfung durch. Wenn ein Entwickler jedes Mal, wenn er versucht, etwas einzuchecken, 50 oder 100 Zeilen "Add a space here" und "Spell 'iterator' correct" erhält, darf er nicht einchecken, bevor alle Probleme behoben sind Ich muss anfangen, saubereren Code zu schreiben, nur um den Ärger zu vermeiden.

Ich denke, wenn Sie diese Dinge selbst reparieren, wie NimChimpsky vorgeschlagen hat, werden Sie für immer hinter dieser Person aufräumen.

Dima
quelle
5

Ich rufe BS bei allen an, die sagten, dass Rechtschreib- und Formatierungsfehler bei Variablennamen keine Rolle spielen. Offensichtlich haben sie nur ihren eigenen Code gelesen. Und beachte das Wort genau dort - lies. Stellen Sie sich vor, Sie lesen ein Buch mit vielen Rechtschreibfehlern, unsauberer Formatierung, inkonsistenten Zeilenabständen und verschiedenen anderen Faulheiten, die in vielen Quellcodes vorkommen. Es wäre langweilig.

Für einen Beruf, bei dem Ihre Syntax zu 100% korrekt sein muss, gibt es für echte Entwickler einfach keine Entschuldigung, keinen sauberen, konsistenten Codestil zu haben. Alles andere ist Schlamperei und Faulheit. Ich frage mich immer nach der Korrektheit des schlampig formatierten Codes bei der Implementierung.

HardCode
quelle
4

Wir haben ein gutes Codeüberprüfungssystem, in dem ich arbeite, sodass wir das Schlimmste untersuchen und beheben können. Es fühlt sich jedoch sehr kleinlich an, eine Codeüberprüfung zu senden, die aus 50 Zeilen besteht: "Fügen Sie hier ein Leerzeichen hinzu. Schreiben Sie" itarator "richtig. Ändern Sie die Groß- und Kleinschreibung. Usw."

Ich würde es selbst ändern und dann einen höflichen Kommentar in den Code einfügen.

Dies setzt voraus, dass es bereits einen Styleguide gibt, wie in der Frage angegeben:

Wir haben ein gutes Codeüberprüfungssystem

Mein Vorschlag ist also ein letzter Ausweg. Ich denke, es ist genauso schnell, ihn selbst zu ändern und einen Kommentar zu hinterlassen, wie eine E-Mail zu senden oder was auch immer.

NimChimpsky
quelle
10
Das wird ziemlich schnell alt.
Robert Harvey
3
Es ist wahrscheinlich schneller für Sie als das Senden einer E-Mail und insgesamt schneller für die Behebung des Problems, aber langsamer, als wenn das Problem gar nicht erst auftritt.
Haylem
4

Ich denke, Konventionen wie die Benennung von Klassen und Variablen sind wichtig und sollten eingehalten werden, ebenso eleganter und effizienter Code, aber auf die Gefahr hin, dass meine Antwort oft herabgestuft wird, muss ich sagen, dass im Allgemeinen das Paradigma des "hübschen Codes" das ist ist viel rumgeschubst ist meiner meinung nach sehr überbewertet.

Zunächst einmal muss der Entwickler, der es geschrieben hat, es in erster Linie warten, und wenn er jemals von einem Bus und einem anderen Programmierer getroffen wird, kann er nicht herausfinden, wie es funktioniert, weil der Code nicht "hübsch" ist, würde ich das sagen Der andere Entwickler ist sowieso nicht sehr gut. Und es gibt eine Menge automatisierter Formatierer / Verschönerer, damit jeder den Code bei Bedarf verschönern kann, ohne Zeit zu verschwenden, während er "im Fluss" / "in der Zone" ist.

Bitte beachten Sie, dass ich hier keine Spaghetti / Cowboy-Codierung befürworte. Tatsächlich habe ich einige sehr gut formatierte Spaghetti-Codes gesehen (Funktionskörper, die sich über 4 bis 5 Bildschirme erstrecken, globale Variablen, die über verschiedene Quellcodedateien verstreut sind, im Allgemeinen falsche Namen , etc).

Jas
quelle
Was sagen Sie über Code wie diesen: stackoverflow.com/questions/6221098/save-mapview-as-a-bitmap/… Denken Sie immer noch, dass der Programmierer, der sich mit diesem "Stil" befasst, ein schlechter Programmierer ist, wenn er Hast du ernsthafte Probleme damit?
WarrenFaith
@WarrenFaith, vielleicht möchten Sie meinen dritten Absatz noch einmal durchgehen, insbesondere dieses Stück hier: "Bitte beachten Sie, dass ich hier keine Codierung im Spaghetti / Cowboy-Stil befürworte ...".
Jas
3

Einer meiner Kollegen schreibt HTML so, dass meine Haut krabbelt. Stellen Sie sich meinen HTML-Code schön und strukturiert mit zwei Leerzeichen vor, die durch Tags am Ende von mir in Stücke gehackt werden, die in derselben Zeile oder in der nächsten enden, wie ein Betrunkener, der seinen Arm um Sie werfen muss, um stehen zu bleiben. Neue Zeilen werden selten eingerückt, aber wenn ja, gibt es in einem Teil der Galaxie sicher ein höchst chaotisches Schwarzes Loch, das irrationale Temperaturwerte so ausgibt, dass die Ziffern irgendwie die Anzahl der Leerzeichen oder Tabulatoren widerspiegeln, die in solchen Einrückungen verwendet werden von dieser Frau. Wenn ich Glück habe, wird ein Eingabemarker angezeigt, der mit " </input>" geschlossen ist . Absoluter Albtraum, den du verstehen kannst.

Auch das scheint niemand zu verstehen, denn für die meisten höheren Klassen hier ist der organisierte oder unorganisierte Code wie der Unterschied, den wir machen, wenn wir Schweizer Käse oder amerikanischen Käse auf unsere Sandwiches geben, das heißt, sie könnten sich wirklich weniger darum kümmern. Ich ließ es los, weil ich mit einem anderen Projekt gestresst war, und ich glaube, sie begann zu begreifen, wie schwierig es war, Code wie diesen zu verstehen, bevor sie es verbessern wollte. Mein Rat wäre zu demonstrieren, warum es besser ist, Ihren Code mehr zu formatieren, als ihn einfach dazu aufzufordern.

Neil
quelle
3

Der Code, von dem ich spreche, ist normalerweise technisch korrekt, vernünftig strukturiert und kann sogar algorithmisch elegant sein ...

Sei froh, dass du das alles hast. Die meisten Programmierer geben Ihnen vielleicht als Erstes etwas auf diese Liste. Ich denke, dass die Benennung und der Abstand von Variablen am wenigsten wichtig sind, um die man sich Sorgen machen muss.

jjnguy
quelle
3
Programmierer verbringen mehr Zeit damit, Code zu lesen als Code zu schreiben. Wenn Code nicht lesbar ist, sind die Kosten für dessen Erweiterung oder Wartung enorm. Und wenn Variablennamen inkonsistent, falsch geschrieben und nicht beschreibend sind, ist der Code nicht lesbar.
Dima
@Dima, stimmt, aber dieser Code, der funktioniert und elegant ist, ist bereits leichter zu lesen als Code, der kaputt und unelegant ist.
JJNGUY
1
Mein Punkt ist, dass Sie in der Lage sein sollten, sich einen Variablennamen, einen Klassennamen oder einen Funktionsnamen anzusehen und sofort zu wissen, wie man ihn verwendet, ohne die gesamte Codebasis durchsuchen zu müssen. Sie sollten auch in der Lage sein, den Namen gemäß den Konventionen einzugeben und zu korrigieren, ohne ihn nachschlagen zu müssen. Ich empfehle Ihnen, "Clean Code" von Robert C. Martin zu lesen.
Dima
@Dima, ich stimme zu, dass Variablen beschreibende Namen haben sollten. Das OP erwähnt nicht, dass die Namen schlecht sind, nur dass sie inkonsistent sind.
JJNGUY
1
Wenn Namen inkonsistent sind, haben sie meiner Erfahrung nach auch die Tendenz, nicht beschreibend zu sein. Es gibt aber noch ein anderes Problem. Wenn Namen inkonsistent sind, dauert es länger, bis Sie sich daran erinnern, was sie sind, und Sie müssen Zeit damit verbringen, sie nachzuschlagen. Eine gute IDE kann etwas helfen, aber es würde das Problem nicht vollständig beheben. Durch das Programmieren wird Ihr Gehirn bereits ausreichend belastet, sodass Sie den Umfang der mentalen Zuordnung und der doppelten Überprüfung so weit wie möglich reduzieren möchten.
Dima
2

Klingt so, als müssten Sie eine Stilkonvention einrichten und ihr zustimmen. Wenn Sie dies nicht tun, verfügen Sie über Bibliotheken mit 3 Leerzeicheneinzügen, andere mit 4, einige mit Camel Case und andere mit underscore_case.

Wheaties
quelle
2

Sind die Änderungen, die Sie vornehmen möchten, Ihre persönlichen Vorlieben oder haben Sie einen tatsächlichen Standard, dem Sie folgen müssen? Wenn Sie keinen aktuellen Standard haben, tun Sie dies nicht. Setzen Sie zuerst einen Standard. Dann können Sie Software erhalten, die eingestellt werden kann, um den Code auf die Standardeinstellungen umzugestalten (zumindest in einigen Fällen).

Wenn Sie einen Standard haben, beginnen Sie ihn in der Codeüberprüfung durchzusetzen. Es hat keinen Sinn, einen Standard zu haben, wenn Sie ihn bei der Codeüberprüfung nicht durchsetzen. Dies bedeutet eine Menge zusätzlichen Wartungsaufwand, da die Benutzer alten Code reparieren müssen, der dem Standard ursprünglich nicht entsprach, wenn sie ihn berühren.

Bestehen Sie auch ohne einen Standard darauf, Rechtschreibfehler in Variablennamen zu beheben (ich würde mich nicht besonders um Kommentare kümmern), da alle, die den Code berühren, für immer verrückt werden.

HLGEM
quelle
2

Codierungsstandards müssen identifiziert werden, damit jeder weiß, was sie sind, und dann müssen sie durchgesetzt werden. Es sollte Konsequenzen haben, wenn die Regeln nicht befolgt werden.

Hier sind die Dinge, die einen Anreiz bieten sollten:

  1. Codeüberprüfungen sind langwierig und länger als nötig.
  2. Code wird öfter abgelehnt.
  3. Termine werden nicht eingehalten.

Wenn diese Person sich darüber keine Sorgen machen muss, weil niemand Ihre Regeln durchsetzt, oder es ihnen egal ist, ob sie unproduktiv sind (und niemand etwas dagegen unternimmt), können Sie nicht viel dagegen tun.

JeffO
quelle
2

Ich wäre versucht, einen privaten Chat vorzuschlagen und zu prüfen, ob Sie beide eine Ursache finden können:

  1. Ist der Mitarbeiter in Eile und weil jemand gestern den Code wollte, versucht die Person, etwas so schnell wie möglich zum Laufen zu bringen? Dies kann eine Gelegenheit sein, diese Person zu informieren, sich bei ihrer Arbeit mehr auf Qualität als auf Schnelligkeit zu konzentrieren. Ein Mantra wie "Nehmen Sie sich Zeit" könnte nützlich sein, wenn dies nicht kontraproduktiv ist.

  2. Wie sieht die Person ihre Arbeit? Wenn es ein Gefühl des Stolzes gibt, dann können Sie einen Winkel nutzen, um einen zu verbessern. Wenn es nur ein Job ist, der die Rechnungen bezahlt, kann es viel schwieriger sein, Änderungen zu bekommen. Wissen sie, dass sie keine großartige Arbeit leisten, aber so nah dran sind?

  3. Ist diese Person mit den Konventionen nicht einverstanden und versucht sie aus Protest zu kodieren? Wenn ja, dann haben Sie vielleicht ein großes Problem, aber es lohnt sich herauszufinden, ob dies der Fall ist oder ob die Person nur faul ist? Welche Art von Motivation kann hier nützlich sein, z. B. könnten Sie Gier, Stolz oder ein anderes Laster ansprechen, um die Person dazu zu bringen, sich zu verbessern. Dies ist hinterhältig, aber möglicherweise effektiv, wenn der Versuch der Route der netten Kerle nirgendwo hinführt.

  4. Wie man Freunde gewinnt und Einfluss nimmt Die Leute haben einige Vorschläge, um zu überzeugen, dass es funktioniert, wie zum Beispiel Verbesserungen zu loben und der Person einen guten Ruf zu geben.

Hier einige Gründe, warum dies privat erfolgen muss:

  1. Es gibt eine gute Chance für Demütigungen, Kritik oder andere Unannehmlichkeiten, die besser hinter einer Tür verborgen bleiben, als offen gelassen zu werden, wo jemand das Gefühl hat, dass sein Charakter ermordet wird.

  2. Sie möchten diese andere Person ermutigen, sich ein wenig zu öffnen. Eine Herausforderung dabei ist, dass einige Leute so bewacht sind, dass es lange dauern kann, bis sie ihre Mauern niederreißen.

  3. Wenn möglich, würde ich vorschlagen, dies ein wenig außerhalb des Büros zu versuchen. Zum Mittagessen ausgehen, spazieren gehen oder etwas unternehmen, damit sich die Umgebung so verändert, dass sich die Person ein bisschen wohler fühlt. Dies kann eine Herausforderung sein und erfordert das Kennen der Person, aber die Idee hier ist, dass einige Leute im Büro eine Arbeitsmaske tragen, die hier wahrscheinlich nicht hilfreich ist.

  4. Seien Sie darauf vorbereitet, dass das Gespräch hitzig oder hässlich wird. Dies kann jedoch ein gutes Zeichen sein, wenn Sie die andere Person ansprechen und einen guten Dialog führen können. Einige Leute mögen es, Dinge offen zu halten und andere bevorzugen subtilere Wege, um Dinge zu erledigen. Der Schlüssel besteht darin, sicherzustellen, dass Sie der anderen Person so gut zuhören, dass Sie sich einfühlen und versuchen, deren Seite zu verstehen.

JB King
quelle
2

Wir haben einen JUnit-Test, der nach Formatierungsproblemen sucht. Es wird als Teil des Builds ausgeführt. Ich bekomme immer etwas durch Weglassen eines Leerzeichens zwischen if, while oder for und der öffnenden Klammer. Unser Code ist jedoch konsistent formatiert.

http://code.google.com/p/kawala/wiki/BadCodeSnippetsRunner

Kevin Peterson
quelle
1

Eine Code-Verschönerung wie " unscrutify " kann einige Ihrer Probleme lösen. Wenn Sie bereit sind, dafür zu bezahlen, gibt es Software auf hohem Niveau, die die Regeln wie Parasoft in den Quellcode selbst einbettet . Parasoft schreibt vor, dass der Code im einheitlichen Stil geschrieben werden muss. Sie können auch Ihre eigenen Regeln einbetten. Wenn solche Tools verwendet werden, müssen die Entwickler einen einheitlichen Stil verwenden. Und nach einer Weile werden sie sich daran gewöhnen.

Manoj R
quelle
1

Wenn Sie Eclipse verwenden, aktivieren Sie die Option "Aktionen speichern" für die Java-Editoren und weisen Sie alle an, sie zu verwenden. Dies behebt Formatierungsprobleme bei jedem Speichern, behebt jedoch keine Großschreibung. Es könnte jedoch sehr hilfreich sein!

Alt-Text


quelle
1

Wie schwer ist es, Stilkonventionen zu befolgen? Ich verstehe die Rechtschreibfehler, aber der Rest ist ein Indikator für schlampiges Denken und Kodieren. Sagen Sie der Person, dass sie konsistenter sein muss, wenn es um Produktionscode geht, da sie nicht die einzigen sind, die sich damit befassen. Es ist einfach unhöflich, egoistisch und rücksichtslos, Produktionscode in einem inkonsistenten Stil zu schreiben.

davidk01
quelle
0

LOL. Sie würden meinen Code absolut hassen. Ich kann nicht buchstabieren, um mein Leben zu retten, und es ist mir egal.

Aber ich weiß, dass einige Leute sich wirklich für diese Dinge interessieren.

Ich schlage vor, dass Sie die Person, die diesen hässlichen Code schreibt, feuern, wenn sie sich nicht ändert, jemanden finden, der die Dinge wirklich hübsch macht, und hoffen, dass sie den Code schreiben kann

ist in der Regel technisch korrekt, angemessen strukturiert und kann sogar algorithmisch elegant sein

und wenn sie es nicht können, dann kannst du dem Kunden wenigstens den kaputten hübschen Code zeigen und ihn verkaufen!

Aber ernsthaft. Konzentrieren Sie sich zuerst auf die wirklich wichtigen Dinge. Wenn Sie keinen guten, stichhaltigen Grund außerhalb von "es tut weh, meine zarten Empfindungen" finden, dann ignorieren Sie es fürs Erste. Wenn es wirklich wichtig ist, setzen Sie sich mit der Person zusammen und überzeugen Sie sie von dieser Wichtigkeit. Dinge wie Standards, die es einfach machen, den Unterschied zwischen Klassenebene, Methodenebene, gemeinsam genutzten, konstanten Variablen zu erkennen, machen einen Unterschied. Wenn sich der betreffende Programmierer überhaupt um seinen Beruf kümmert, wird er verstehen und versuchen, das Richtige zu tun.

ElGringoGrande
quelle
5
Wenn Ihre Variablennamen falsch geschrieben sind, muss der nächste Typ, der Ihren Code verwendet, zusätzliche Zeit aufwenden, um Compilerfehler zu beheben, wenn er sie richtig schreibt. Hier geht es nicht um "empfindliche Empfindlichkeiten". Diese scheinbar trivialen Dinge verursachen Fehler, die zu Frustrationen führen, die mehr Fehler verursachen. All das summiert sich zu enormen Kosten für die Code-Wartung.
Dima
4
Es geht ein bisschen mehr als nur um "feinfühlige Sensibilität", aber Produktivität Ich habe nichts dagegen, wenn jemand etwas andere Codierungsstile verwendet, gelegentlich ein Leerzeichen vergisst usw. Wir sind nicht perfekt. Aber wenn die gesamte Datei so aussieht, als wäre sie von einer Unterstufe mit inkonsistenten Zeilenabständen, Positionen, Einrückungen und allgemeinem Code-Fluss geschrieben worden, würde ich einfach sehr schnell auf die Schaltfläche "Zurückweisen" (oder "Zurücksetzen") klicken.
Haylem
2
Viele erfolgreiche Open Source-Projekte (einschließlich Linux) tun dies: Wenn Sie nicht den richtigen Stil (und die Komponententests) haben, wird dies abgelehnt. Schade, wenn es gut war und ein echtes Problem gelöst hat: Sie können nicht immer den Code anderer Leute reparieren. Insgesamt verlieren Sie weniger Zeit und Geld, wenn Sie nur ein gelegentliches Stück Genie weitergeben, das durchgeht, aber höllisch aussieht oder nicht mehr zu halten ist.
Haylem
1
Witziges Zeug. Aber natürlich scheint das Wesentliche übersehen zu werden. Sie holen den Kerl zuerst mit den offensichtlichen Dingen an Bord, für die Sie sich wirklich stark machen können. Dann arbeiten Sie an den weniger wichtigen Dingen. Es gibt Möglichkeiten, mit Menschen zu arbeiten, ohne sie nur mit Regeln zu würgen. Und vielleicht, nur vielleicht, könnte die OCD-Menge ein bisschen Kompromisse eingehen oder erfahren, warum der Code der anderen so viel Variables enthält. Es könnte tatsächlich eine Ursache oder einen Grund geben.
ElGringoGrande,
0

Meine Lösung beim Umgang mit ausgelagerten Ressourcen, bei denen es nicht um die Formatierung (oder leicht zu vermeidende Fehler) ging, bestand darin, dass der Build-Server dies erzwang. Ich habe einen CI-Server-Job erstellt, der jede Nacht ausgeführt wurde und den Code auscheckte, Jalopy und Findbugs ausführte und dann den Code wieder eincheckte. Als das andere Team erfuhr, dass die Verwendung der Standard-Code-Konventionen ihre Arbeit erschweren würde, begann es, ihren Code zu verwenden IDE, um ein Standardformat beizubehalten.

sal
quelle