Ist es eine gute Idee, allen Entwicklern dasselbe Codeformat aufzuerlegen?

88

Wir überlegen, ein einziges Standard-Code-Format in unser Projekt aufzunehmen (automatisches Format mit Speicheraktionen in Eclipse). Der Grund ist, dass es derzeit einen großen Unterschied in den von mehreren (> 10) Entwicklern verwendeten Codeformaten gibt, was es für einen Entwickler schwieriger macht, an dem Code eines anderen Entwicklers zu arbeiten. Dieselbe Java-Datei verwendet manchmal drei verschiedene Formate.

Ich glaube also, dass der Vorteil klar ist (Lesbarkeit => Produktivität), aber wäre es eine gute Idee, dies durchzusetzen? Und wenn nicht, warum?

UPDATE
Wir alle verwenden Eclipse und jeder kennt den Plan. Es gibt bereits ein Code-Format, das von den meisten verwendet wird, aber es wird nicht erzwungen, da manche es vorziehen, an ihrem eigenen Code-Format festzuhalten. Aus den oben genannten Gründen würden manche es vorziehen, dies durchzusetzen.

Stijn Geukens
quelle
2
Verwenden alle Ihre Entwickler Eclipse? Hast du mit ihnen über diesen Plan gesprochen? Ohne das zu wissen, ist Ihre Frage schwer zu beantworten, man müsste zu viel raten
Mücke
9
Erschwert es einem Entwickler tatsächlich , an dem Code eines anderen zu arbeiten, oder reagieren Entwickler nur allergisch darauf, etwas anderen Code zu lesen?
Joris Timmermans
27
Wenn Sie ein Scource Code Control System (wie svn) verwenden, stellen Sie sicher, dass Änderungen in der Code-Formatierung getrennt von semantischen Änderungen vorgenommen werden. Andernfalls ist es schwierig, diese semantischen Änderungen zu finden.
Martin Schröder
4
Ich bin mit Martin hier nicht einverstanden. Meine Faustregel lautet: Wenn Sie eine logische / semantische Änderung vornehmen, dürfen Sie das Format der von Ihnen geänderten Zeilen ändern. Andernfalls dürfen Sie das Format der Zeilen nicht ändern, nur weil Sie es möchten. Verstopfen Sie Ihr Versionskontrollprotokoll nicht mit geringfügigen Neuformatierungsänderungen.
Benedikt
3
Auf der anderen Seite: Wenn jeder das gleiche Format verwendet, wird nur das erste Commit zur Neuformatierung verstopft. Alles andere wird nur die lokalen Änderungen betreffen, was meiner Meinung nach akzeptabel ist.
Jeroen Vannevel

Antworten:

107

Ich arbeite derzeit an einem Ort, an dem ein Standardcodeformat erzwungen wird und der Code beim Speichern der Datei automatisch formatiert wird, so wie Sie es gerade tun. Als neues Mitglied der Firma stellte ich fest, dass die allgemeinen Formatierungsregeln mir das Gefühl gaben, dass "diese Leute wissen, was sie tun", und ich könnte nicht glücklicher sein. ;) Als verwandte Randnotiz erzwingen wir mit den allgemeinen Formatierungsregeln auch bestimmte, ziemlich strenge Compiler-Warnungseinstellungen in Eclipse, wobei die meisten auf Fehler, viele auf Warnung und fast keine auf Ignorieren gesetzt sind.

Ich würde sagen, dass es zwei Hauptgründe gibt, ein einzelnes Codeformat in einem Projekt durchzusetzen. Das hat zunächst mit der Versionskontrolle zu tun: Wenn jeder den Code identisch formatiert, sind alle Änderungen in den Dateien garantiert aussagekräftig. Nicht mehr nur hier oder da ein Leerzeichen hinzufügen oder entfernen, geschweige denn eine ganze Datei neu formatieren als "Nebeneffekt" des tatsächlichen Änderns von nur ein oder zwei Zeilen.

Der zweite Grund ist, dass dadurch das Ego der Programmierer aus der Gleichung gerissen wird. Wenn jeder seinen Code auf die gleiche Weise formatiert, kann man nicht mehr so ​​leicht erkennen, wer was geschrieben hat. Der Code wird anonymer und gemeinnütziger, sodass sich niemand mehr darum kümmern muss, den Code eines anderen zu ändern.

Das sind die Hauptgründe, es gibt auch andere. Ich finde es beruhigend, dass ich mich nicht mit der Formatierung des Codes befassen muss, da Eclipse dies beim Speichern automatisch für mich erledigt. Es ist sorglos wie das Schreiben von Dokumenten mit LaTeX: Es wird anschließend formatiert und Sie müssen sich beim Schreiben nicht darum kümmern. Ich habe auch in Projekten gearbeitet, in denen jeder seinen eigenen Stil hatte. Dann müssen Sie über dumme und bedeutungslose Themen nachdenken, zum Beispiel, ob es in Ordnung ist, den Code eines anderen in Ihrem eigenen Stil zu ändern, oder ob Sie versuchen sollten, stattdessen dessen Stil zu imitieren.

Das einzige Argument gegen gängige Code-Formatierungseinstellungen, das mir in Ihrem Fall einfällt, ist, dass es sich anscheinend um ein bereits laufendes Projekt handelt, sodass viele unnötige Änderungen in allen Dateien vorgenommen werden und die tatsächlichen Dateiversionen durcheinander gebracht werden. Das beste Szenario ist, wenn Sie die Einstellungen vom Beginn eines Projekts an erzwingen können.

Null eins
quelle
20
+100, wenn das Ego (und die Eigentümerschaft) von Programmierern aus der Gleichung gestrichen wird. Der "Anspruch" der Programmierer auf Teile des Codes trägt nicht zur Produktivität bei, da dies den Wissensaustausch behindert und bedeutet, dass ein Signal vorliegt, dass nicht alle Programmierer an demselben Codeteil arbeiten könnten.
Marco
Es war schwierig zu entscheiden, welche Antwort zu akzeptieren war, aber ich fand, dass diese die am besten argumentierte und auch die eigentliche Frage am besten behandelte.
Stijn Geukens
"bedeutet, dass es ein Signal gibt, dass nicht alle Programmierer an demselben Code arbeiten könnten": Nun, aber das ist eigentlich etwas, das Sie haben möchten: Solange Sie nicht genug mit einem Code vertraut sind, sollten Sie es tun nicht daran arbeiten / ändern. Zu viel gemeinsamer Code-Besitz kann dazu führen, dass jeder an der gesamten Codebasis arbeitet und niemand wirklich einen Teil davon beherrscht.
Giorgio
Ich hätte viel mehr Zeit für solche Dinge, wenn der Code beim Laden automatisch nach meinem Stil formatiert würde. Wenn Roslyn für C # landet, hoffe ich, dass alle Ladevorgänge, Speichervorgänge, Versionsänderungen usw. auf dem AST statt auf dem Text ausgeführt werden.
Mark Rendle
Strengere Warnungen und Fehler sind eine gute Sache.
Christophe Roussy
37

Jeder professionelle Softwareentwickler wird es vorziehen, einen (guten) Standard anzunehmen, anstatt sich auf einen evangelischen Krieg über den Stil einzulassen, und zwar aus den von Ihnen genannten Gründen.

Viele Softwareentwickler führen evangelikale Kriege ......

Abhängig von Ihrer Position im Team und der Teamdynamik können Sie entscheiden, dass ein Sieg im Krieg nicht möglich ist. In diesem Fall ist es am besten, nicht zu starten ...

mattnz
quelle
Tx, ich weiß genau, was du meinst
Stijn Geukens
15
Es ist nicht professionell, Kriege um die Formatierung von Code zu führen. Ein professioneller Softwareentwickler erledigt die Dinge genauso gut, egal ob sein Code " if( foo )" oder " if (foo)" lautet . Wenn Sie diese Art von Wechselgeld wirklich an jemanden verkaufen müssen, sollten Sie sich darauf berufen, dass es sich um Profis handelt. Sie können nicht zurückreden oder sie wirken anal-zurückhaltend. Wenn jemand es trotzdem tut, hoffe ich, dass er bald einen neuen Job findet.
ZeroOne
7
Ein professioneller Entwickler würde auch lesbaren Code schreiben und in der Lage sein, den Code anderer professioneller Entwickler ziemlich leicht zu lesen, was die Notwendigkeit eines umfassenden Standards an erster Stelle überflüssig macht. Ich würde mir Sorgen machen, dass hier "der Standard" eine schlechte Lösung für das falsche Problem ist (Sie beheben schlampige Entwickler nicht mit einem Codierungsstandard).
Joris Timmermans
2
Der beste Weg, um die meisten dieser heiligen Kriege zu umgehen, besteht darin, Sprachstandards zu akzeptieren, wo immer dies möglich ist. Ja, das bedeutet, dass Ihr Codierungsstil von Sprache zu Sprache unterschiedlich ist (ex C # -Code hat {in separaten Zeilen, Java hat sie in der vorherigen Zeile, und was PascalCased oder camelCased ist, variiert). Jede einzelne Sprachquelle sieht jedoch "normal" aus, wenn Sie neue Entwickler in das Projekt einbeziehen.
Dan Neely
1
@ruakh Schauen Sie sich die MSDN C # -Codebeispiele an und sehen Sie sich an, wie Visual Studio C # standardmäßig neu formatiert: {befindet sich in einer eigenen Zeile. Wiederholen Sie die Übung für Java in der Dokumentation von Oracle und in den Standardeinstellungen von Eclipse, wenn Sie den Code neu formatieren: {befindet sich in der obigen Zeile.
Dan Neely
30

Ja, das ist gut, wenn alle Entwickler einen Code-Format-Stil haben.

Entwerfen Sie die Codestilformate und importieren Sie diese in alle Eclipse-Entwickler.

Dies wird hilfreich sein, wenn wir mergingCode für das Versionskontrollsystem verwenden.

NPKR
quelle
5
+1 für die Erwähnung von Zusammenführungs- und Diff-Werkzeugen. Es ist sehr schwierig, Unterschiede zwischen zwei Versionen einer Codebasis zu erkennen, wenn die Formatierung zwischen den Entwicklern nicht konsistent ist.
pgras
1
+1, ich bin dem Argument des Versionskontrollsystems weit überlegen. (Aber es ist meistens wegen der Einrückungsregeln. Dinge wie Namenskonventionen haben nicht so viel Einfluss)
BiAiB
Namenskonventionen helfen, wenn Sie herausfinden müssen, welche Methode in einer Klasse existiert.
Dan Neely
1
@Giorgio Es gibt ja Entwickler, die das machen. Beim Mischen mit anderen Änderungen auch (zB kritische Bugfixes). Einige Sachen werden geschickt, um uns zu versuchen ...
Donal Fellows
1
@Donal Fellows: Sie haben recht. Ich folge dem Prinzip, dass jedes Zeichen, das Sie in eine Quelldatei eingeben, (1) ein potenzieller Fehler ist (2), der eine Änderung einführt, die es schwierig macht, den Code danach zu erkennen. Meiner Meinung nach sollte jede Änderung so gering wie möglich sein. Aber ja, es gibt Entwickler, die den Code ändern, ohne zu viel nachzudenken. Ich frage mich, ob eine automatische Neuformatierung des Codes das Problem lösen kann. Ich würde eher den Besitz von Code befürworten (siehe z. B. Punkt 7 bei paulgraham.com/head.html ).
Giorgio
16

Was willst du erreichen, wie zurückhaltend willst du sein, um es durchzusetzen (und in der Detailebene werden deine "Regeln" festgelegt), willst du versuchen, es für in verschiedenen Sprachen geschriebenen Code durchzusetzen Wirst du versuchen, es rückwirkend auf bestehenden Code durchzusetzen?

  1. Ein gemeinsames Erscheinungsbild von Code kann zwar dazu beitragen, dass Code besser lesbar ist, kann aber auch die Situation verschlimmern, wenn es sich um ein falsches Erscheinungsbild handelt. _hUngarian_lpfstr Notation als Paradebeispiel :)
  2. Ich habe "Codestandards" gesehen, die die Anzahl der Leerzeichen in Kommentarblöcken, die alphabetische Reihenfolge der Methodennamen und anderen Unsinn erzwingen. Tu das nicht.
  3. Unterschiedliche Sprachen haben unterschiedliche Standards, an die Menschen gewöhnt sind, die Erfahrung in ihrem Gebrauch haben. Einige schreiben diese Standards sogar vor (denken Sie, Python, Cobol, Visual Studio schreiben automatisch C ++ - Konventionen vor, während Java C-Konventionen usw. usw. verwendet).
  4. Ändern Sie niemals vorhandenen Code, um ihn zu ändern. Auf diese Weise führen Sie nur neue Probleme ein. Und das bedeutet sowohl Codeabschnitte als auch ganze Quelldateien. Gehen Sie also nicht um das Neuformatieren von vorhandenem Code, wenn jemand eine einzelne Zeile in einer Datei mit 1000 Zeilen ändert.
  5. Erfahrene Programmierer können viel produktiver sein, wenn sie nicht die Hälfte der Zeit darüber nachdenken müssen, ob das, was sie schreiben, für das automatische Genehmigungssystem oder den Prüfer "richtig" aussieht. Sie werden auch die Gewohnheit haben, sauberen Code zu schreiben, einfach weil das funktioniert, auch wenn es kleine Unterschiede zwischen ihren natürlichen Stilen gibt.



Es gibt also gute Gründe, einen bestimmten Stil und Standard durchzusetzen, es gibt aber auch gute Gründe, dies nicht (zu) streng zu tun.

jwenting
quelle
1
1-2-3: Es ist Java und das Code-Format ist das von Sun. Es ist nur eine Formatierung, also keine Reihenfolge der Methoden oder Variablennamen. 4-5: Nun, die Idee wäre, beim Speichern automatisch zu formatieren (Eclipse-Speicheraktionen), damit kein zusätzlicher Arbeitsaufwand entsteht (Sie müssen beim Codieren nicht einmal über das Format nachdenken), aber natürlich würden auch vorhandene Dateien neu formatiert (die erstes Mal).
Stijn Geukens
1
+1 für KISS. @Stijn Warum alten Code neu formatieren? Schlagen Sie es einfach an, wenn Sie es ändern müssen.
Erik Reppen
3
Tatsächlich planen wir einige größere Umgestaltungen und würden den gesamten Code zu diesem Zeitpunkt neu formatieren, da das Zusammenführen aufgrund der Umgestaltung sowieso fast unmöglich sein wird. Wenn wir nur bei Änderungen neu formatieren, werden wir in einem Jahr immer noch Probleme mit Zusammenführungen haben, da sich das Format geändert hat.
Stijn Geukens
4
Ich stimme im Allgemeinen mit @StijnGeukens überein. Nicht nur aus Gründen des Zusammenführens, sondern auch, weil jede groß angelegte Formatierungsbereinigung es schwierig macht, den Änderungsverlauf in einem Schuldtool zu verfolgen. Wenn sich all Ihre Geräuschänderungen an einem einzigen Ort befinden, können Sie die Schuld einfach immer so festlegen, dass sie zunächst vor diesem Punkt beginnt, und anschließend eine zweite Runde anhalten, wenn Sie einen Blick auf die ältere Geschichte werfen müssen.
Dan Neely
2
Sie haben einen weiteren Grund vergessen, Dan: Änderungen an der Formatierung in großem Maßstab können leicht neue Fehler an unerwarteten Stellen hervorrufen.
Jwenting
11

Ja, Konsistenz ist eine gute Idee, aus Gründen , andere haben erwähnt .

Ich wollte nur ein paar Punkte hinzufügen, die an keiner anderen Stelle verwendet wurden:

  • Oracle hat eine Reihe von Konventionen für Java veröffentlicht, die de facto den Standard darstellen.
    • Wenn Sie diese verwenden, vermeiden Sie Streitigkeiten darüber, welchem ​​Stil Sie folgen müssen.
    • In vielen öffentlichen Bibliotheken und Open Source-Projekten werden diese Konventionen verwendet. Wenn Sie sich also diese ansehen müssen, sollten Sie mit der Formatierung vertraut sein.
    • Der Eclipse-Formatierer verfügt über integrierte Regeln, die diesen Konventionen entsprechen. Dies sollte ebenfalls hilfreich sein.
  • Möglicherweise möchten Sie einen Hook in Ihr Quellcodeverwaltungs-Setup integrieren, damit der Code automatisch formatiert wird, bevor er in den Hauptzweig gelangt.
    • Sie können Schlachten mit besonders hartnäckigen Programmierern vermeiden, die sich weigern, dem Standard zu folgen. Sie können sogar während der Arbeit ihre eigene Formatierung verwenden, die später standardisiert wird!
    • Wenn Sie benutzerdefinierte Formatierungseinstellungen verwenden (z. B. ignorieren viele Benutzer die Konvention "maximal 80 Zeichen pro Zeile"), müssen Sie nur an einer Stelle Änderungen vornehmen.
vaughandroid
quelle
9

Ich war in einem Team, das das Checkstyle-Plugin verwendete . Anstatt die Standardfunktionen zu verwenden, haben wir ein kleines Komitee aus interessierten Entwicklern gebildet. Wir diskutierten darüber, was fehlte, was übertrieben schien, und hämmerten die Dinge aus. Wir alle haben dabei etwas gelernt und diese Entwicklermuskulatur gestärkt.

(Beispiele für unsere Entscheidungen: 72 Zeichen sind zu klein, aber 120 waren besser. Es ist besser, _ALLCAPS für statische Finale zu verwenden. Es ist eine gute Idee, das einmalige Verlassen einer Funktion zu erzwingen.)

Als wir Code-Reviews hatten, war eine der ersten Fragen: "Haben Sie Checkstyle durchlaufen?" Die Einhaltung der Kodierungsstandards war weitgehend automatisiert und lenkte die Aufmerksamkeit des prüfenden Prüfers auf sich. Es war wunderbar einfach, Checkstyle eine Methodensignatur markieren zu lassen, mit der rechten Maustaste darauf zu klicken und eine Variable in final zu ändern. Es könnte auch die Einrückungen und geschweiften Klammern so korrigieren, dass jeder Code ein ähnliches Erscheinungsbild aufweist. Vermissen Sie einen Javadoc für eine öffentliche Veranstaltung? Checkstyle kennzeichnet die Funktion.

(Das Entfernen von Codegerüchen ist wichtiger als die konsistente Formatierung. Dies ist ein Vorteil von automatisierten Tools.)

Ich würde automatisierte Tools wie Checkstyle weniger als das gleiche Format auferlegen, sondern eher dazu anregen, ein ähnliches Erscheinungsbild zu erzielen. Und wenn Sie Katzen hüten, kann ein automatisiertes Tool dabei helfen, die Fähigkeiten zu verbessern und den Code-Geruch zu reduzieren, ohne zerbrechliche Egos zu verletzen.

rajah9
quelle
5
Einzelner Austrittspunkt? Es gibt bestimmte Stilprinzipien, denen ich wirklich nicht zustimme. (Wenn mehrere Ausgänge ein Problem sind, ist die Funktion / Methode an erster Stelle zu lang ...)
Donal Fellows
@DonalFellows, Checkstyle hat uns einen Bezugspunkt gegeben, von dem aus wir zu den Präferenzen des Ausschusses übergehen können. Es gab viele Ausrufe der Natur: "Ich verstehe nicht, warum sie diesen Standard setzen!" Während das OP nach einer konsistenten Formatierung fragte, gibt das automatisierte Tool meiner Meinung nach viel mehr ohne zusätzlichen Aufwand.
rajah9
6

Wenn Sie sich an dieselbe IDE halten und einige Formatierungswerkzeuge einbinden möchten, ist dies eine gute Idee, da Sie nicht zu viel Aufwand benötigen. Halten Sie die Regeln einfach, und achten Sie dabei auf Lesbarkeit und nicht auf anale Remanenz . Das sollte der Messstab sein.

Obwohl ein einheitlich geformter Schlammballen besser ist als nur ein Schlammballen, ist es besser, wenn Sie Ihre Zeit damit verbringen, ihn aufzuräumen, anstatt zu wählerisch zu werden, wohin die Klammern führen. Verwandeln Sie sich nicht in einen Manager mit Stecknadelkopf, der das Gefühl hat, seine Arbeit zu erledigen, indem er während einer Codeüberprüfung Leerzeichen zählt und sicherstellt, dass die neuen Deckblätter in den TPS-Berichten enthalten sind .

Persönliche Vorlieben sind genau das und verbessern die Produktion nur selten: https://stackoverflow.com/questions/249432/was-ist-die- Vernunft- hinter- den- unterschiedlichen- Klammerformen

Wenn doch, überwinde es und erledige etwas.

JeffO
quelle
6

Ich empfehle nachdrücklich, dass Menschen die Formatierung von Code erzwingen und dass geringfügige Verstöße gnädigerweise übersehen oder ausgebessert werden. Gründe hierfür sind kurz

  1. Das Gerät macht zum ungünstigsten Zeitpunkt und in der Regel bei Verwendung einer neuen Sprachfunktion einen Fehler. Wie wird es mit Schließungen in Java usw. umgehen? Jalopy hat Probleme mit Aufzählungen von Mitgliedsfunktionen.
  2. Ich denke, es ist eine sehr vernünftige Belastung für den Programmierer, Code für das Unternehmen zu erstellen, der aussieht wie Buchungskreis. Ich fand es hilfreich zu erwähnen, dass auf diese Weise Code "hier" formatiert wird und nicht, wie der gesamte Code überall formatiert werden sollte. Ihre vorherige Firma hat möglicherweise einen anderen Weg eingeschlagen, und das ist in Ordnung. Ähnlich wie in der Umgangssprache gibt es für Ihre Codekultur spezifische Redewendungen, die Sie hervorheben möchten.
  3. Die Durchsetzung der Codesyntax erfolgt am besten mit Codeüberprüfungen:
    1. Wenn die Formatierung wichtig ist, muss Ihre Organisation Codeüberprüfungen durchführen. Dies ist von großem Vorteil.
    2. Wenn eine Formatierungsregel verletzt wird, kann ein Mensch sie besser betrachten und beurteilen als eine Maschine, wenn die Absicht sauberer vermittelt wird. Dies ist sehr selten, kommt aber gelegentlich vor.

In Bezug auf "Lesbarkeit => Produktivität" werden Sie durch die Codestruktur (z. B. Klassen und Funktionen mit einer Verantwortung) viel schneller als durch die Codeformatierung. Die Formatierung von Code kann hilfreich sein, aber verschiedene Köpfe analysieren Aussagen unterschiedlich - nicht jeder wird "produktiver". Ich möchte die Codestruktur gegenüber der Formatierung verdoppeln, da dies Sie auch dazu bringt, Codeüberprüfungen durchzuführen und das Team dazu zu bringen, sich Gedanken darüber zu machen, wie das Programm funktioniert, und nicht darüber, wie eine einzelne Schleife aussieht.

Ich bin kein großer Fan von Domain Driven Design, aber es ist ein neues Modell, das eine SEHR genau definierte Vorstellung davon hat, wie Code strukturiert sein sollte und Code-Formatierungskonventionen auf natürliche Weise aus einem Domain Driven Design-strukturierten Programm abgeleitet werden. Wieder ... Ich mag DDD nicht, aber es ist ein großartiges Beispiel, weil es so gut definiert ist.

Ich nehme an, dass das Thema dieser Antwort lautet: Codeüberprüfungen durchführen und Formatierungen aus der Kultur und aus dem Überprüfungsprozess heraus fließen lassen.

Sam
quelle
Tx, aus dieser Sicht nicht schlecht. Andererseits ist es eine zusätzliche Arbeit, wenn der Prüfer während jeder Überprüfung auch das Format überprüfen muss.
Stijn Geukens
3
Es ist ein zusätzlicher Klick, um eine Zeile in so etwas wie Fisheye als "inkonsistenter Einzug" oder "offene Klammer für sich allein" auszugeben, also ist es mehr als null Aufwand. Wenn dies jedoch die Codeüberprüfung um mehr als eine Minute verlängert, liegt ein gravierendes Problem vor. Nach einer Woche, in der das Team seinen eigenen Code überprüft, sollten alle sehr schnell "falschen" Code bemerken und nachbessern können.
Sam
4

Wenn Sie vernünftige Entwickler einstellen, ist es im Allgemeinen eine schlechte Idee, ein universelles Code-Format einzuführen. Es ist jedoch eine gute Idee, Code- Richtlinien anzunehmen .

Ich habe noch nie eine Reihe von Code-Formatierungsregeln gesehen, die die Lesbarkeit in allen Fällen optimieren. Ebenso gibt es im Englischen keine 100% anwendbaren Grammatikregeln: Unser Gehirn ist einfach nicht so verkabelt. Verwenden Sie also Richtlinien, aber geben Sie den Entwicklern die Freiheit, diese nach Belieben zu überschreiben.

Davon abgesehen ist es eine gute Regel, die härter ist als die in der Datei / im Projekt bereits vorhandene Codekonvention.

Beachten Sie jedoch, dass die Formatierung wesentlich weniger zur Lesbarkeit beiträgt als lediglich die logische Organisation des Codes. Ich habe viel unlesbaren Spaghetti-Code mit perfekter Formatierung gesehen!

keredson
quelle
2

Ich glaube nicht, dass es eine einfache Antwort darauf gibt. Es ist keine Ja oder Nein Frage. Ich glaube zwar, dass Stil und Namenskonventionen in gewissem Maße wichtig sind, aber es ist auch ziemlich einfach, zu viel Zeit damit zu verschwenden, darüber nachzudenken. Am besten mit gutem Beispiel antworten.

Bei einem bestimmten Projekt, an dem ich beteiligt war, gab es überhaupt keine Konventionen. Jeder Entwickler hat seine eigenen Dinge getan. Aufgrund der relativen Unerfahrenheit dieses Teams war es sehr beunruhigend, von einer Klasse zur nächsten zu wechseln. Der Stil war weniger ein Problem als das Problem der Namenskonventionen. Ein Entwickler würde auf UI-Elemente mit schrecklicher ungarischer Notation verweisen (eine alberne Praxis im Zeitalter moderner IDEs), einer würde private Mitglieder auf eine Weise benennen, ein anderer würde sie anders benennen. Sie wussten einfach nie, was Sie sich anschauten.

Umgekehrt verwendete ein Team StyleCop (dies war ein .Net-Projekt) als Teil seines Erstellungsprozesses. Schlimmer ist, dass sie auch die meisten Standardregeln verwendeten. Sie würden also etwas völlig Normales in Bezug auf den Zeilenabstand oder die Platzierung der geschweiften Klammern tun, und der Build würde dadurch kotzen. Es wurde so viel Zeit verschwendet, nur Leerzeichen und Zeilen in Sachen einzufügen, und alle, einschließlich der Typen, die darauf bestanden, StyleCop zu verwenden, machten am Ende fast jedes Commit. Es war eine enorme Zeit- und Geldverschwendung.

Der Punkt, den ich hier mache, ist, dass es nicht die Antwort ist, unflexibel zu sein, aber im Wilden Westen zu sein, ist es auch nicht. Die eigentliche Antwort ist, den Ort zu finden, der am sinnvollsten ist. Meiner Meinung nach besteht dies darin, dass keine automatisierten Tools Dinge überprüfen, aber auch keine Konventionen in den Wind werfen.

Jeff Putz
quelle
2

Mein Hauptargument gegen den üblichen Codierungsstil ist, dass ein erfahrener Programmierer verwendet wird, um seinen eigenen Stil zu lesen. Sie können die Hand trainieren, um einen bestimmten Stil zu schreiben, aber es ist fast unmöglich, das Auge zu trainieren, um einen Stil zu verstehen, den Sie hassen. Ein Programmierer schreibt einen Teil des Codes einmal und liest ihn dann während der Entwicklung und des Debuggens immer wieder. Wenn er jedes Mal, wenn er seinen eigenen Code liest, Schwierigkeiten hat, ihn zu verstehen, da er gezwungen war, ihn in einem SCHLECHTEN Stil zu schreiben, wird er sehr unglücklich und weniger produktiv sein. Dies ist aus meiner Erfahrung.

Ich bin nicht sehr vertraut mit Eclipse, aber das automatische Formatieren beim Speichern klingt nach einer schrecklichen Idee. Ein Entwickler muss die vollständige Kontrolle über seinen Code haben, unabhängig davon, ob ein Codierungsstil vorgegeben ist oder nicht. Die Operation 'Speichern' darf kein einzelnes Zeichen ohne ausdrückliche Zustimmung des Benutzers ändern.

Wenn Ihr Unternehmen Quellcode verkauft, ist der Codierungsstil wichtiger, aber wenn Sie kompilierten Code verkaufen, ist er viel weniger relevant.

Zu hoffen, dass der Kodierungsstil den ursprünglichen Kodierer weniger unterscheidbar macht und Ego-Kriege verhindert, ist im besten Fall Blödsinn und im schlimmsten Fall schlichtweg dumm. Großartige Programmierer werden unabhängig vom Stil immer eleganten Code produzieren.

Ich bin auch stark dafür, jedem Entwickler den Besitz bestimmter Codeeinheiten zu geben und nicht zuzulassen, dass jeder jeden Code frei berührt. Durch die Entwicklung ganzer Einheiten im Code und die Verantwortung dafür kann der Entwickler stolz auf seine Arbeit werden und ihn daran hindern, beschissenen Code zu entwickeln, da er weiß, dass Fehler zurückkehren werden, um ihn zu jagen.

Schließlich geht jeder, der Pro-Coding-Stil ist, immer davon aus, dass sein eigener Coding-Stil ausgewählt wird, und alle anderen werden folgen. Stellen Sie sich vor, dass der Codierungsstil, den Sie von all Ihren Mitentwicklern am wenigsten mögen, als Standard ausgewählt wird. Sind Sie immer noch für einen imposanten Coding-Stil?

Gur
quelle
2

Ein Format, um sie alle zu beherrschen ... ist es wirklich optimal?

Es ist, als würde man das Auto eines anderen fahren ...

Sicher, Sie können in jedes Auto einsteigen und es fahren, aber Sie werden sicherer, komfortabler und weniger unfallanfällig, wenn Sie sich die Zeit nehmen, den Sitz, das Lenkrad und die Spiegel nach Ihren Wünschen einzustellen .

Bei Code wirkt sich die Formatierung auf Ihre Sicherheit beim Lesen und Verstehen des Codes aus. Wenn es zu weit von dem entfernt ist, an das Sie gewöhnt sind, ist mehr geistige Anstrengung erforderlich. Ist es notwendig, dies den Entwicklern aufzuerlegen?

+1 zu allen bisher genannten Vorteilen, aber ...

Die automatische Durchsetzung ist mit Kosten verbunden, die berücksichtigt werden müssen:

-1 auf die Tatsache, dass Code-Formatierer die Ästhetik der Code-Formatierung nicht verstehen. Wie oft hat ein Code-Formatierer einen Kommentarblock zerstört, der in tabellarischer Form angeordnet war? Wie oft haben Sie einen komplexen Ausdruck absichtlich auf eine bestimmte Weise ausgerichtet, um die Lesbarkeit zu verbessern, nur um die automatische Formatierung in etwas zu zerlegen, das "den Regeln folgt", aber weitaus weniger lesbar ist?

Manchmal gibt es Problemumgehungen für diese Dinge, aber Entwickler müssen sich mit wichtigeren Dingen befassen, als den automatischen Formatierer daran zu hindern, den Code zu manipulieren.

Formatierungsregeln haben, aber etwas Freiheit erlauben, gesunden Menschenverstand anzuwenden.

swpalmer
quelle
2
Ich stimme absolut zu! Autoformatierer sind dumm.
Łukasz Wiktor
1

Gute Entwickler sind kreative Menschen, geben ihnen eine künstlerische Lizenz. "Keep it simple" sollte das Mantra des Programmierers sein. Ich habe zwei Regeln:

Regel 1: Geben Sie Variablen / Cursor / Objekte / Prozeduren / SENSIBLE NAMES an. Eindeutige Namen, die Ihrem Code Bedeutung und Verständnis verleihen.

Regel 2: Verwenden Sie Einrückungen, um die Struktur Ihres Codes anzuzeigen.

Das ist es.

Jonesi
quelle
1
Können Sie erklären, warum dies der Fall ist? Wie bringt es eine bessere Idee, wenn jeder Entwickler eine künstlerische Lizenz besitzt (die sich zwischen den Entwicklern desselben Projekts unterscheidet), als wenn alle das gleiche Format haben? Gibt es irgendwelche Probleme, die Ihre lösen, die die Alternative nicht löst? Und umgekehrt?
Ich denke, der Punkt, den ich versuche (und den ich versage) zu machen, ist, dass es im Hinblick auf die Lesbarkeit / Wartbarkeit weitaus wichtiger ist, vernünftige Namen zu verwenden und Ihren Code gut einzurücken, als andere Regeln, die Sie vielleicht erfinden möchten. Ich sage nicht, dass jeder im Team seinen eigenen Stil haben sollte.
Jonesi
Überlegen Sie, ob ich einen Code-Formatierer in Eclipse in einer Richtung eingerichtet habe und meinen Code immer neu formatiere ... und Sie einen Code ein wenig anders eingerichtet haben ... und wir ändern weiterhin denselben Code. Verursacht diese 'künstlerische Lizenz' Probleme in den Unterschieden?
Obwohl ich den Punkt verstehe, den Sie ansprechen, denke ich, dass ein Problem mit Ihrem Standpunkt darin besteht, dass Sie sehr unterschiedliche Stile haben (beachten Sie, nicht falsch, nur anders). Dies kann zu echten Problemen und Verzögerungen beim Zusammenführen dieser verschiedenen Stile führen.
Daniel Hollinrake
1
Ja, ich verstehe, Daniel. Ich sollte eine dritte Regel hinzufügen: Passen Sie beim Ändern des vorhandenen Codes den Stil des Codes an, den Sie bearbeiten. Das würde ich natürlich tun, wenn ich ein altes Programm reparieren würde.
Jonesi
0

Für mich ist der Hauptvorteil eines automatisch angewendeten Formats, dass es uns bei der Änderungsverfolgung und Codeüberprüfung hilft. git (und die meisten anderen Tools zur Versionskontrolle) können Unterschiede zu früheren Versionen der Dateien anzeigen. Durch die Durchsetzung eines gemeinsamen Stils werden Unterschiede zwischen Programmierern minimiert.

Kristian H
quelle
-1

Es sind Sprachen, keine Codes. Wir Menschen haben mehr als 6000 Sprachen, also übersetzen wir sie. Wenn Sie also möchten, dass Ihre "Codes" kommunizieren, müssen Sie Ihre Einstellungen vornehmen. Sie sehen, wir Benutzer müssen unsere Datenformate ändern, damit wir unsere Daten nicht verlieren.

vic belleli
quelle
-2

Ich würde sagen, dass es nicht ist. Eine gemeinsame Code-Struktur / ein gemeinsames Code-Format in einem Team ist auf jeden Fall eine gute Sache, eine automatische Durchsetzung jedoch nicht. Dies sollte vom Menschen gemacht werden, nicht vom Computer.

Meine größten Probleme mit dem Konzept sind

  1. Wenn ich Code in einem Format schreibe und dieser automatisch neu formatiert wird, welcher Anreiz besteht dann, dieses Format tatsächlich zu lernen?
  2. Wenn Sie nach diesem vorherigen Punkt das Format nicht kennen, geht der gesamte Punkt der automatischen Formatierung (um das Lesen und Ändern von Code zu vereinfachen) vollständig verloren. Sie müssen sich noch Zeit nehmen, um die Formatierung beim Lesen des Codes zu ermitteln, da Sie dieses Format nicht gelernt haben
  3. Ich denke, es wäre eine schreckliche Erfahrung für einen Entwickler, an einem Tag eine Klasse zu schreiben, sie zu schließen und am nächsten Tag zurückzukehren, um zu sehen, dass es völlig anders ist. Das bedeutet, dass nicht nur andere Ihren Code lernen müssen, Sie müssen auch Ihren Code lernen.
  4. Es könnte auch zu fauler Codierung führen. Anstatt den Entwickler zu drängen, um das Format zu lernen, können sie in jedem Format unter der Sonne schreiben und es sieht automatisch so aus, wie es alle anderen wollen. Dies geht zurück auf # 2, wo Sie den Stil nicht lernen und ihn trotzdem nicht richtig lesen können.

Nun möchte ich vielleicht sagen, dass es eine gute Idee ist, ein Auto-Format für ein Projekt auszuführen, das vollständig abgeschlossen ist. Dies würde dazu führen, dass jeder Entwickler für das Projekt auf dem gleichen Fuß ist, wenn Sie später Features reparieren / hinzufügen. Während der aktiven Entwicklung halte ich es jedoch für eine sehr schlechte Wahl.

Grundsätzlich gilt: Übernehmen Sie dem Mitarbeiter die Verantwortung, den Stil des Unternehmens zu lernen, und zwingen Sie ihn nicht dazu, etwas zu sein, das es nicht ist.

Josh Janusch
quelle
+1: Gute Punkte, obwohl ich nicht sicher bin, ob sie die Gründe für eine automatisierte Neuformatierung überwiegen. Warum die Abstimmungen?