Ich habe einige Programmierer gesehen, die ihren Code immer wieder modifizierten, um ihn nicht nur "gut funktionieren", sondern auch "gut aussehen" zu lassen.
IMO, 'sauberer Code' ist eigentlich ein Kompliment, das anzeigt, dass Ihr Code elegant, vollkommen verständlich und wartbar ist. Der Unterschied ergibt sich, wenn Sie sich zwischen einem ästhetisch ansprechenden Code und einem stressigen Code entscheiden müssen.
Also, wie viele von Ihnen schreiben tatsächlich 'sauberen Code'? Ist es eine gute Übung? Was sind die anderen Vor- oder Nachteile davon?
productivity
ykombinator
quelle
quelle
Antworten:
Ich würde argumentieren, dass viele von uns keinen sauberen Code schreiben . Und im Allgemeinen ist das nicht unser Job . Unsere Aufgabe als Softwareentwickler ist es, ein Produkt zu liefern, das pünktlich funktioniert.
Ich erinnere mich an Joel Spolskys Blogpost: The Duct Tape Programmer .
Er zitiert aus Coders at Work :
Ich werde auch an die Blog-Antwort von Robert Martin erinnert :
Wenn der Code, den ein Entwickler schreibt, sauber ist UND funktioniert (ist lieferbar), ist es gut für alle. Aber wenn ein Entwickler versucht, sauberen und lesbaren Code auf Kosten der rechtzeitigen Bereitstellung zu erstellen, ist das schlecht. Lass es funktionieren, benutze Klebeband und versende es. Sie können es später umgestalten und es superschön und effizient machen.
Ja, es ist eine gute Praxis, sauberen Code zu schreiben, aber niemals auf Kosten der Lieferfähigkeit. Der Vorteil der pünktlichen Lieferung eines mit Klebeband versehenen Produkts überwiegt bei weitem die Vorteile von sauberem Code, der nie fertiggestellt und ausgeliefert wurde.
Ein gutes Stück Code, auf das ich gestoßen bin, ist nicht sauber. Einige sind geradezu hässlich. Aber sie wurden alle veröffentlicht und in der Produktion eingesetzt. Einige mögen sagen, dass es unprofessionell ist, unordentlichen Code zu schreiben. Ich stimme dir nicht zu. Die professionelle Sache ist, Code zu liefern, der funktioniert, ob sauber oder chaotisch. Der Entwickler muss sein Bestes geben, unabhängig von der Zeit, die vor der Auslieferung zugeteilt wurde. Dann gehen Sie zurück, um aufzuräumen - das ist professionell. Hoffentlich ist der gelieferte Code kein reines Klebeband und "sauber genug".
quelle
Sie müssen sicherstellen, dass Ihr Code gut lesbar, sauber und wartbar ist. Das müssen alle Programmierer tun.
Aber du sprichst
over styling
(wie dieser Begriff besser als Girl-Code ), der nur dem Ego seines Autors dient.Ich habe in der Vergangenheit viele Entwickler gesehen, die so stolz auf ihre Kreation waren (wissen Sie, wie in den Toiletten;)), dass sie stundenlang ihren Code bereinigten und polierten. Einige von ihnen waren so akribisch, dass sie dafür sorgten, dass die richtigen Leerzeichen zwischen den Mitgliedern eingehalten wurden.
Es ist zu viel.
Ich finde ein solches Verhalten kontraproduktiv. In einem professionellen Kontext müssen Sie professionell sein . Sie erhalten Ihre Zufriedenheit, indem Sie sauberen, gut lesbaren und wartbaren Code schreiben und mit zufriedenen Benutzern oder Kollegen sprechen.
quelle
Ich würde der akzeptierten Antwort auf diese Frage nicht zustimmen.
Ihre Verantwortung ist natürlich das Versenden, aber normalerweise sind Sie auch dafür verantwortlich, etwas zu versenden, das von Ihnen und zukünftigen Entwicklern so kostengünstig wie möglich gewartet werden kann.
Ich habe einige Zeit als armer Wartungsprogrammierer oder Berater vor Ort verbracht, der ein riesiges undokumentiertes System verstehen und debuggen muss, und ich kann Ihnen sagen, dass schlechte Designs und unordentlicher verwirrender Code zu Stunden oder sogar Tagen verschwendeter Anstrengung führen können. Ich kann mir viele Situationen vorstellen, in denen ein zusätzlicher Arbeitsaufwand von N Stunden durch den Erstentwickler zu einer Zeitersparnis von 5N hätte führen können.
Ich weiß, dass diesbezüglich eine Statistik im Umlauf ist, aber meiner Erfahrung nach wird jede Codezeile, die geschrieben wird, während der Erweiterung und Wartung 5-20 Mal gelesen.
Also würde ich sagen, dass Code innerhalb eines Zolls seines Lebens bereinigt werden soll . Es braucht Zeit, aber es ist wahrscheinlich eine Nettokosteneinsparung über die gesamte Laufzeit des Projekts.
quelle
Würde irgendjemand von uns ein Auto kaufen, wenn wir wissen, dass es unter der Motorhaube unordentlich und schwierig ist, Fehler zu beheben, zu warten oder zu reparieren, und mehr Ressourcen für den Betrieb benötigt, als es sollte?
Warum sollte es bei einer Software anders sein?
Nur weil die Endbenutzer nicht unter die Haube schauen können, heißt das nicht, dass sie es nie erfahren werden. Früher oder später wird es auftauchen.
Beantwortung der Frage "Schreiben Sie tatsächlich 'sauberen Code'?" -- Oh ja.!
quelle
Wenn mit "sauberer Code" gemeint ist, gebe ich mir alle Mühe, um sicherzustellen, dass der Code so klar wie möglich ist?
Oh Ja.
Je sauberer, klarer der Code, desto einfacher ist die Pflege und Sie sparen auf lange Sicht Zeit. Betrachten Sie sauberen Code nicht als Eitelkeit. Betrachten Sie es als Investition, um in Zukunft Aufwand und Zeit zu sparen.
quelle
Ehrlich gesagt kommt es darauf an. Ich mag es, wie jeder die Party-Linie darüber anspricht, dass "alles andere als sauberer, gut dokumentierter Code eine reine Farce ist!", Aber ich arbeite in einem Geschäft mit lächerlichen Bereitstellungszyklen und null Versehen: Ich gebe mein Bestes, aber ich schreibe es Mit viel Code ist es extrem schwierig, den sauberen, perfekten Code zu schreiben, von dem alle anderen behaupten, dass sie ihn schreiben.
Ich versuche, Code zu schreiben, der leicht von jemandem gepflegt werden kann, der ungefähr meine Fähigkeiten hat. Ich kommentiere die kniffligen Teile, benenne die Programme, Variablen und klassenfreundlichen Namen, setze sie ein und gehe weiter. Ich habe keine Zeit für etwas anderes.
Manchmal fühle ich mich ein bisschen schuldig, aber nicht sehr. Sie sollten einige der Schrecken sehen, mit denen ich täglich zu tun habe. Jahrzehntelanger benutzerdefinierter Code in undurchsichtigen Sprachen ohne Dokumentation. Einer meiner Mitarbeiter entwickelt sich ausschließlich in Visual Basic 6.0 und stellt überall kryptisch benannte Binärdateien bereit. Die Frau, die ich ersetzte, programmierte ausschließlich in RPG .
Es ist für mich einfach extrem schwierig zu glauben, dass jeder nur sauberen Code generiert , so viel schrecklichen Mist, wie ich in meinen Jahren als Programmierer gesehen habe .
quelle
Ich glaube, ich mag den Begriff "Mädchencode" nicht, aber sauberer Code = wartbarer Code. Alles andere ist unprofessionell.
In der Regel überlege ich mir den nächsten Entwickler, der sich mein Durcheinander ansehen muss.
Die meiste Zeit bin ich ... einige Monate später ... wenn ich mich nicht mehr daran erinnere, wie es funktioniert ... und ich noch weniger Zeit habe, eine Änderung vorzunehmen.
quelle
Ich versuche, "sauberen Code" im Sinne von Bob Martin zu schreiben (zB OO-Design). Es ist sehr wertvoll, sauberen Code zu schreiben. Es ist viel leichter zu warten.
Dann lasse ich ReSharper es für mich "hübschen Code" machen (zB Ausrichtung, Zeilenumbrüche usw.). Es hat einen guten Wert, schönen Code zu schreiben. Aber es gibt sinkende Renditen. Einige Prettifikationen machen es aufgrund der einfachen Lesbarkeit ein bisschen wartbarer.
Wenn Sie der Meinung sind, dass Sie große Codeblöcke ordentlich aneinanderreihen müssen, um sie lesbar zu machen, dann ist das Problem Ihr verdammt großer Codeblock! Es ist zu groß. Ich sehe viele Beispiele von Menschen, die sich große Mühe geben, einen sehr schlecht gestalteten Code zu verschönern.
Wenn ich ReSharper nicht hätte, hätte ich immer noch sauberen Code, aber es wäre nicht ganz so hübsch.
Ich denke nicht, dass ich mehr als ~ 5% meiner Programmierzeit für das Verschönern verwenden sollte. Das heißt, je leistungsfähiger mein Redakteur und je kompetenter ich damit bin, desto mehr Prettifikation kann ich tun.
quelle
Es scheint, dass niemand die Frage aufwirft, was im besten Interesse Ihres Unternehmens liegt.
Oft, wenn nicht immer, sind Programmierer nur Mitarbeiter, und obwohl die Entscheidungen des Managements uns frustrieren, verfügen wir häufig nicht über alle Daten, die sie liefern.
Nehmen wir zum Beispiel an, das Unternehmen ist mit einer Klausel beauftragt, dass Sie nicht bezahlt werden, wenn die Software nicht rechtzeitig fertig ist. Ja, sauberer Code ist wichtig, aber wichtiger ist, dass der Code bis zum Zahlungstag funktioniert!
Ein weiteres Beispiel: Das Unternehmen befindet sich in einer schlechten finanziellen Lage und muss etwas Geld sammeln. Ratet mal, wen interessiert Qualität? Sie können es später reparieren, wenn Sie müssen, versenden Sie es einfach!
Ein Argument könnte sein "Warum sollte ich ausverkaufen und beschissenen Code schreiben?". Warum sollte Ihr Unternehmen Ihnen jeden Monat einen schönen Scheck ausstellen? Entscheidungen, mein Freund. Wenn Sie nach Idealismus streben, versuchen Sie es mit der Free Software Foundation . Ich höre, dass sie ein paar ziemlich coole Sachen machen (ich meine das hier und respektiere FSF und OSS).
Auf der anderen Seite ist es besser, wenn Sie an einem Projekt arbeiten, bei dem eine explosive Zunahme der Nutzung zu erwarten ist (obwohl solche Projektionen so gut wie nie genau sind), ein solides Fundament mit der besten erforderlichen Codequalität zu legen, da dies mit ziemlicher Sicherheit zu Wartungsarbeiten führt seien Sie die größeren Kosten für das Projekt.
Programmierer lieben 'sauberen' Code, was auch immer das bedeutet. Wir können uns nicht einmal darauf einigen, was sauber ist, aber wir lieben es. Manchmal ist es jedoch genauso unwichtig wie die Benutzerfreundlichkeit und Korrektheit. Diese scheinen zwar synonym zu sein, sind es aber nicht. Wenn Sie in 4 Stunden Code gesehen haben, der von einem echten Perl-Hacker in der Absicht geschrieben wurde, zweimal verwendet und weggeworfen zu werden, werden Sie feststellen, dass er nicht sauber ist, aber funktioniert.
Abgesehen vom Ego sollten wir es manchmal einfach zum Laufen bringen. Beachten Sie, dass ich es nicht als Gewohnheit empfehle, schlechten Code zu schreiben. Ich weise nur darauf hin, dass es notwendig sein könnte. Perfektion braucht Zeit, die Ihr Unternehmen möglicherweise nicht hat. Wenn es Ihrem Arbeitgeber nichts ausmacht, erstellen Sie Software, aber wenn Sie müssen, schreiben Sie einfach den Arbeitscode und achten Sie nicht auf die "Sauberkeit". Es ist einfach keine "Einheitsgröße" -Antwort - Sie sollten Prioritäten setzen.
quelle
Ich bin nicht sicher, ob "gut aussehen" und "elegant, perfekt verständlich und wartbar" gleichwertig sind.
Ich versuche Code zu schreiben, der "elegant, perfekt verständlich und wartbar" ist. Ich überarbeite meinen eigenen Code, um diesen Kriterien besser zu entsprechen.
Ich sehe keine Nachteile, außer den daraus resultierenden Kosten in der Zeit.
Damit Code "gut aussieht", gibt es viele automatisierte Tools, die alles richtig einrücken und platzieren, wie Sie es wünschen.
quelle
Zu viel von irgendetwas ist niemals gut.
Bei "unsauberem" Code ist jedoch zu beachten, dass dies leicht zu " kaputten Fenstern " führen kann. Wenn der Code sehr schlecht formatiert ist, sind wahrscheinlich viele Neueinsteiger weniger geneigt, gute Arbeit mit Wartung und Weiterentwicklung zu leisten, was zu einer Abwärtsspirale führt, die sich möglicherweise auf den Betriebszustand der Software auswirkt.
Daher ist es für mehr als nur Ihre Kollegen von Vorteil, ein bestimmtes Maß an Sauberkeit im Code beizubehalten. Verbringen Sie nicht zu viel Zeit damit (~ 5% wurden erwähnt). Erfahren Sie, wie Sie mit den Werkzeugen Ihres Handwerks manuelle Aufgaben automatisieren (in diesem Fall die Code-Formatierung). Übernehmen Sie Verantwortung für das, was Sie tun, und tun Sie immer das, was für Ihr Unternehmen / Ihre Kunden / Benutzer am vorteilhaftesten ist.
quelle
Dies ist ein Zitat aus Clean Code von Bob Martin:
quelle
Ich denke, "sauberer Code" sollte so sauber oder sauber sein, wie Sie es in Ihren Physik- / Ingenieur- / Mathematikprüfungen getan haben. Wenn es zu chaotisch ist, wird der Grader Ihre Arbeit nicht verstehen und sie wahrscheinlich als falsch markieren, auch wenn sie richtig ist.
quelle
Ich mag, dass Code lesbar ist, aber das Wichtigste ist die Konsistenz. Für mich bedeutet dies Konsistenz mit Benennungskonventionen und Abständen zwischen Funktionen, Klammern in derselben Zeile oder in der nächsten Zeile der if-Anweisung usw.
Natürlich gibt es Zeiten, in denen jemand etwas mit einem konsistenten Codestil programmiert, und das macht mich immer noch wahnsinnig. Besonders Code, der nicht "atmet". Zum Beispiel:
Nun ... Mit Objective-C-Methoden und mit vielen, vielen verschachtelten if-Anweisungen und Zeilen, die viel länger als 80 Zeichen sind, sieht es noch schlimmer aus. Aber es nervt mich trotzdem :)
quelle
Ich bin sehr bemüht, Code zu bereinigen. Ich denke, es hilft sehr, die Fehler hervorzuheben.
Ich stimme dem Konzept "Ship the fucking thing now" nicht zu, da sauberer Code eine Investition in die Zukunft ist. Außerdem werden zu viele Programme mit zu vielen Fehlern ausgeliefert. Meiner Meinung nach ist es besser, einen Fehler zu beheben, als eine neue Funktion zu implementieren.
Auch wenn Sie sich Schätzungen der Programmiererproduktivität ansehen , denke ich nicht, dass ich sehr schlecht abschneide. Sauberen Code zu schreiben ist eine Gewohnheit und je mehr Erfahrung ein Programmierer hat, desto effizienter wird er. Wenn man es nie versucht, wird man offensichtlich nie Erfahrung damit bekommen.
Ein weiterer zu berücksichtigender Punkt ist, dass die meiste Entwicklerzeit für das Lesen von Code aufgewendet wird, sodass lesbarer Code die Zeit, die zum Lesen aufgewendet wird, erheblich verkürzt. Das Verstehen von undokumentierten Algorithmen kann zum Beispiel kostspielig sein und neue Fehler verursachen.
Eine Sache, die ich auf jeden Fall vermisse und die ich gerne eines Tages hätte, ist ein automatischer Code-Formatierer, den ich an meinen Stil anpassen könnte. Das würde mir viel Zeit sparen, vor allem, wenn ich den Code anderer Leute lese.
Sauberes Codieren hat eine Verbindung zum Perfektionismus, der möglicherweise nie zustande kommt, aber ich denke, das ist hauptsächlich ein Problem, wenn Sie anfangen, weil Sie später investieren und Ihre eigenen eleganten Codeteile wiederverwenden, kombiniert mit Ihrer Erfahrung Wenn Sie älter werden, werden Sie sehr produktiv sein und weniger von Fehlern heimgesucht als die chaotischen Programmierer.
Dies ist ein Codeteil, der meinen Codierungsstil demonstriert.
quelle
Vermeiden Sie einfach "Vanity Code". Es gibt viele Entwickler, die Dinge nur aus Eitelkeit (oder aufgrund einer Zwangsstörung) und sonst nichts tun. Mein Höschen wird wirklich mit diesen Leuten verdreht.
quelle
Ich schreibe Code, der versucht, das gegebene Problem auf die effizienteste und theoretisch "eleganteste" Weise zu lösen. Nur in diesem Sinne ist es sauber. Wenn es 'hübsch' ist, wenn ich fertig bin, soll es so sein.
Was ich in meinen begrenzten Erfahrungen festgestellt habe, ist, dass die Hässlichkeit, wenn sich Leute über 'sauberen Code' beschweren, in der Regel auf eine schreckliche Lösung und nicht auf Kodierungskonventionen zurückzuführen ist.
quelle
Ich würde sagen, ich bemühe mich, saubereren Code zu schreiben, aber das kann sich aus Zeitgründen ändern oder wenn ich an etwas Schwierigem arbeite. Es neigt dazu, chaotisch zu werden, wenn man sich darauf konzentriert, es zum Laufen zu bringen. Dann gehe ich zurück und räume auf, während ich es überprüfe. Wenn Sie zum Code zurückkehren und zu viel Zeit damit verbringen müssen, Ihr Gedächtnis aufzufrischen, haben Sie es nicht genug kommentiert.
Sauberer Code ist gut, aber wie alles andere muss er sauber genug sein. Das Einrücken von 5 Codezeilen mit 4 Leerzeichen und einer Zeile mit 5 Leerzeichen erhöht die Leseschwierigkeiten nicht.
quelle
Ich denke, es hängt davon ab, was Sie tun. Wenn ich eine Proof-of-Concept-Anwendung schreibe, codiere ich meinen Arsch im Grunde genommen ab und blicke nicht zurück. Wenn ich an einer Anwendung arbeite, an der ich eine Weile arbeiten werde, stelle ich sicher, dass ich sie gut genug codiere und in einem Monat verständlich mache.
Ich denke, dass das Styling Ihres Codes ein bisschen zweifelhaft ist. Wie oben bereits erwähnt, besteht Ihre Aufgabe darin, einen Produktcode zu erstellen, der nicht formatiert ist. Ich würde jedoch sagen, dass man sich zumindest an einen definierten Stil für das Kommentieren und Codieren von Dingen halten sollte. Ich würde es hassen, die Hälfte der Variablen mit Kamel und die andere Hälfte mit Ungarisch zu sehen.
Aber es kommt auch darauf an, was Sie mit "sauberem Code" meinen.
quelle
Ich gebe zu, das zu tun; und der Vorteil wird nicht jedes Mal verärgert, wenn ich es sehe. Ich denke, es ist auch einfacher zu lesen, und daher werden Fehler offensichtlicher. aber der wahre Grund ist, dass ich hässlichen Code nicht ausstehen kann.
quelle
Das Umgestalten des Codes, um ihn elegant zu gestalten, erleichtert das Lesen und die Wartung. Selbst kleinere Dinge wie das Ausrichten Ihrer Variablenzuweisungen:
ist leichter zu lesen als
Das heißt, es ist einfacher zu überfliegen, wenn Sie später debuggen.
In PHP sind außerdem beliebig viele zufällige Codeblöcke zulässig. Ich benutze diese, um logische Aufgaben zu gruppieren:
Dies fügt dem relevanten Code eine klare Definition hinzu.
Bearbeiten : Als zusätzlichen Bonus können Sie einem dieser logischen Codeblöcke ganz einfach einen voranstellen,
if (false)
wenn Sie ihn vorübergehend überspringen möchten.quelle
Ich schreibe einfach meinen Code und folge dabei den Unternehmensstandards. Wenn ich es "hübsch" haben will, kann ich es durch einen Code-Verschönerer laufen lassen.
quelle