In dieser Frage habe ich gefragt, ob Sie als schlechter Autor daran gehindert werden, guten Code zu schreiben. Viele der Antworten begannen mit "es kommt darauf an, was Sie mit gutem Code meinen".
Es scheint, dass die Begriffe "guter Code" und "schlechter Code" sehr subjektiv sind. Da ich eine Ansicht habe, kann es sehr unterschiedlich sein, wie andere sie sehen.
Was bedeutet es also, "guten Code" zu schreiben? Was ist "guter Code"?
code-quality
gablin
quelle
quelle
Antworten:
Ein guter Coder ist wie ein guter Poolspieler.
Wenn Sie einen professionellen Poolspieler sehen, werden Sie vielleicht zunächst nicht beeindruckt sein: "Sicher, sie haben alle Bälle reingelegt, aber sie hatten nur einfache Schüsse!" Dies liegt daran, dass eine Poolspielerin, wenn sie schießt, nicht darüber nachdenkt, welcher Ball in welche Tasche passt, sondern auch darüber nachdenkt, wo der Spielball landen wird . Das Einrichten für den nächsten Schuss erfordert enormes Geschick und Übung, bedeutet aber auch, dass es einfach aussieht.
Mit dieser Metapher schreibt ein guter Codierer Code, der einfach und unkompliziert zu sein scheint . Viele der Beispiele von Brian Kernighan in seinen Büchern folgen diesem Muster. Ein Teil des "Tricks" besteht in der richtigen Konzeptualisierung des Problems und seiner Lösung . Wenn wir ein Problem nicht gut genug verstehen, verkomplizieren wir unsere Lösungen mit größerer Wahrscheinlichkeit, und wir werden keine einheitlichen Ideen erkennen.
Mit einer richtigen Konzeptualisierung des Problems erhalten Sie alles andere: Lesbarkeit, Wartbarkeit, Effizienz und Korrektheit. Da die Lösung so einfach zu sein scheint, wird es wahrscheinlich weniger Kommentare geben, da keine zusätzlichen Erklärungen erforderlich sind. Ein guter Programmierer kann auch die langfristige Vision des Produkts erkennen und deren Konzeptualisierung entsprechend gestalten.
quelle
( original )
BEARBEITEN: Die Grundidee ist, dass "Codequalität" nicht in Regeln festgelegt werden kann, genauso wie Sie "Gute Kunst" oder "Gute Poesie" nicht in Regeln festlegen können, sodass ein Computer bestimmen kann, ob "Ja, gute Kunst". oder "Nein, schlechte Poesie". Derzeit besteht die einzige Möglichkeit darin, festzustellen, wie leicht der Code für andere Menschen verständlich ist.
quelle
Es gibt wirklich keine guten Kriterien, außer wie schnell Sie den Code verstehen können. Sie machen Ihren Code gut, indem Sie den perfekten Kompromiss zwischen Prägnanz und Lesbarkeit finden.
Die "WTFs pro Minute" (oben) sind wahr, aber sie sind nur eine Folge der allgemeineren Regel. Je mehr WTFs, desto langsamer das Verständnis.
quelle
RemoveCustomer
Methode tatsächlich das Cutomer entfernt, ohne es zu vermasseln. Sie können Stunden damit verbringen, es hübsch aussehen zu lassen, aber das bedeutet nicht, dass es tatsächlich funktioniert. "Wie schnell Sie Code verstehen können" ist nicht das einzige Kriterium für "guten Code", was ich sage.Sie wissen, dass Sie guten Code schreiben, wenn ...
Wie messen Sie, ob der Code gut ist ...
Guter Code funktioniert, wenn es sein soll. Guter Code kann bei Bedarf problemlos geändert werden. Guter Code kann wiederverwendet werden, um Gewinn zu erzielen.
quelle
Ein Code, der ist
Bug-frei
wiederverwendbar
unabhängig
weniger komplex
gut dokumentiert
leicht zu chagen
heißt guter Code.
Quelle: MSDN
quelle
Kommt Ihnen das bekannt vor?
Bitte sehen Sie den Rest hier .
quelle
Abgesehen von natürlichen Codequalitätskriterien (minimales Kopieren / Einfügen, keine Spaghetti usw.) sollte ein guter Industriecode immer ein bisschen naiv, ein bisschen zu ausführlich aussehen
im Gegensatz zu
quelle
do_not_create = false
heißt es "false
alsdo_not_create
Argument übergeben, damit es erstellt wird" oder "false
alsdo_create
Argument übergeben, damit es nicht erstellt wird"? In einer Sprache, in der Sie Argumentnamen verwenden können, würde ich bevorzugencache.get (key:i, create: false); i += 1;
.Vielleicht würde eine Antwort durch Abbildung des Gegenteils helfen (und es ist eine Ausrede, XKCD hier reinzuholen ).
Guter Code ist
Beispiele beinhalten
quelle
Ich gehe einfach mit "wartbar"
Der gesamte Code muss gepflegt sein: Keine Notwendigkeit, diese Aufgabe schwieriger als nötig zu machen
Wenn ein Leser diese einfache Anforderung nicht versteht oder sie benötigt, sollte er keinen Code schreiben ...
quelle
Guter Code wird für jede Person anders sein, und die Sprache, mit der sie arbeitet, hat auch Einfluss auf den Code, der als guter Code angesehen wird. Wenn ich mich einem Projekt nähere, suche ich im Allgemeinen nach folgenden Dingen:
Ist das Design der Anwendung darüber hinaus insgesamt sinnvoll? Der in der Anwendung enthaltene Code kann der beste der Welt sein, es kann jedoch dennoch schwierig sein, mit dem Code zu arbeiten, wenn das Gesamtdesign der Anwendung keinen Sinn ergibt.
quelle
Lassen Sie mich in Bezug auf die Lesbarkeit nicht einverstanden sein. Nein, nicht ganz: Guter Code sollte lesbar sein, und das kann mit genügend Kommentaren problemlos erreicht werden.
Aber ich betrachte zwei Arten von WTF: die, bei denen man sich fragt, ob der Programmierer weiter gekommen ist als die Programmierung 101, und die, bei denen man die Genialität des Codes absolut nicht versteht. Einige Codes können auf den ersten Blick sehr seltsam aussehen, sind jedoch eine sehr erfinderische Lösung für ein schweres Problem. Die zweite sollte nicht im WTF-Meter gezählt werden und kann durch Kommentare vermieden werden.
Sehr lesbarer Code kann sehr, sehr langsam sein. Eine weniger lesbare Lösung kann die Geschwindigkeit um ein Vielfaches verbessern. R ist ein großartiges Beispiel für eine Sprache, in der dies häufig zutrifft. Dort vermeidet man gerne For-Loops. Im Allgemeinen würde ich den schnellsten Code als den besseren Code betrachten, obwohl er weniger lesbar ist. Das heißt, wenn die Verbesserung erheblich vom Kurs abweicht und genügend Kommentare eingefügt werden, um zu erklären, was der Code tut.
Darüber hinaus kann die Speicherverwaltung in vielen wissenschaftlichen Anwendungen von entscheidender Bedeutung sein. Code, der sehr gut lesbar ist, ist in der Hauptspeicherauslastung in der Regel schlampig: Es werden nur mehr Objekte erstellt. In einigen Fällen wird der Code durch eine intelligente Speichernutzung wieder weniger lesbar. Wenn Sie zum Beispiel mit Gigabyte DNA-Sequenzen jonglieren, ist das Gedächtnis ein entscheidender Faktor. Auch hier halte ich den weniger speicherintensiven Code für den besseren Code, unabhängig von der Lesbarkeit.
Also ja, Lesbarkeit ist wichtig für guten Code. Ich kenne das Adagium von Uwe Liggis: Denken tut weh und Computer sind billig. In meinem Bereich (statistische Genomik) werden Rechenzeiten von einer Woche und eine Speichernutzung von über 40 GB nicht als abnormal angesehen. Eine Verbesserung um die doppelte Geschwindigkeit und die Hälfte des Speichers ist also weit mehr wert als die zusätzliche Lesbarkeit.
quelle
Was mich betrifft ... Ich weiß, dass ich guten Code schreibe, wenn ein Mitarbeiter, der an einem anderen Projekt arbeitet, vorbeikommt und in der Lage ist, zu verstehen, was ich tue, ohne jeden Codeblock durchzugehen und zeigen, was es tut.
Anstatt dass er sagte: "Moment mal, was ?!" Er sagt: "Oh, ok, ich verstehe, was du dort getan hast."
Guter Code hat auch nicht viele hinterhältige Problemumgehungen oder "Hacks". Zeilen, in denen Sie sich während des Schreibens auch sagen: "Ich weiß, das ist kein guter Weg, es zu tun, aber ich werde es erst einmal so machen müssen. Ich werde daran erinnern mich später zu verbessern ... "
quelle
Es gibt viele Funktionen von 'gutem' Code, aber die wichtigsten, meiner Meinung nach, sind Lesbarkeit und Wartbarkeit.
Ihr Code wird Bugs enthalten, wird wahrscheinlich erweitert und wiederverwendet und sollte irgendwann überarbeitet werden - selbst wenn Sie ihn erneut besuchen, besteht die Möglichkeit, dass Sie keine Ahnung haben, was zum Teufel Sie haben in erster Linie getan, um sich selbst einen Gefallen zu tun und keine Hindernisse in den Weg zu stellen.
Verwenden Sie diesen komplexen und dennoch äußerst effizienten Algorithmus. Nehmen Sie sich jedoch etwas mehr Zeit, um ihn zu dokumentieren, und machen Sie Ihren Code ansonsten klar und konsistent.
quelle