Kommentare
- Guter Code ist, wenn Sie ihn nach zwei Jahren betrachten und Ihr erster Gedanke nicht ' t " Alter, wtf ".
- Duplikat von Wie würden Sie wissen, ob Sie ' lesbar geschrieben haben? und leicht zu wartender Code?
Antwort
Ein guter Codierer 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 leichte Schüsse!“ Dies liegt daran, dass eine Poolspielerin, wenn sie ihren Schuss macht, nicht darüber nachdenkt, welcher Ball in welche Tasche fließt, sondern auch darüber nachdenkt, wo der Spielball landen wird. Das Einrichten für die nächste Aufnahme erfordert enormes Geschick und Übung, bedeutet aber auch, dass es einfach aussieht.
Wenn Sie nun diese Metapher zum Code bringen, ist eine gute Sache Der Codierer schreibt Code, der so aussieht, als sei es einfach und unkompliziert, auszuführen. Viele der Beispiele von Brian Kernighan in seinen Büchern folgen diesem Muster. Ein Teil des „Tricks“ besteht darin, eine richtige Konzeptualisierung des Problems und seiner Lösung zu entwickeln. Wenn wir ein Problem nicht gut genug verstehen, werden wir unsere Lösungen mit größerer Wahrscheinlichkeit zu kompliziert, und wir werden keine einheitlichen Ideen sehen.
Mit einer richtigen Konzeptualisierung des Problems erhalten Sie alles sonst: Lesbarkeit, Wartbarkeit, Effizienz und Korrektheit. Da die Lösung so einfach zu sein scheint, wird es wahrscheinlich weniger Kommentare geben, da zusätzliche Erklärungen nicht erforderlich sind. Ein guter Codierer kann auch die langfristige Vision des Produkts sehen und seine Konzeptualisierungen entsprechend gestalten.
Kommentare
- " Ein guter Codierer schreibt Code, der einfach und unkompliziert zu sein scheint. " < < GENAU! Ich denke, das liegt daran, dass die Leute normalerweise denken, ein guter Codierer sei jemand, der sehr " clevere " Hacks schreiben kann. Wenn der Code sauber und nicht übermäßig " clever " ist, muss es einfach sein, oder?
- Meine 2 Cent: Wenn Sie ' eine Sprache mit EASY-Automatik-Refactorings haben – Java und C # sind die beiden Beispiele, die ich am besten kenne – ' Es ist einfach, iterativ zu gutem Code zu wechseln. Ansonsten muss man sich zunächst gut vorstellen, aber dort gibt es eine Art Hühnerei-Problem.
- Einige Algorithmen sind an sich komplex. Ein guter Programmierer sollte kein Problem damit haben, sie zu schreiben, wenn sie wirklich benötigt werden – und sie so lesbar wie möglich zu halten.
- @hasenj: Ja, das liegt an diesem Lemma: dumme Leute schreiben Code, den der Compiler versteht. Kluge Leute schreiben Code, den dumme Leute verstehen.
Antwort
s pro Minute
( original )
BEARBEITEN: Die Grundidee ist, dass „Codequalität“ nicht in Regeln eingefügt werden kann, genauso wie Sie „Gute Kunst“ oder „Gute Poesie“ nicht in Regeln einfügen können, damit ein Computer bestimmen kann, „Ja, gute Kunst „oder“ Nein, schlechte Poesie „. Derzeit ist die einzige Möglichkeit zu sehen, wie leicht der Code für andere Menschen verständlich ist.
Kommentare
- Wir haben dies bei der Arbeit auf unserem Whiteboard festgehalten: -)
- @Cape Cod Gunny war in einem Buch von Onkel Bob ' auch
- Abgesehen davon, dass es ein großartiger Cartoon ist, denke ich, dass es wirklich so ist kommt auf den Punkt – guter Code ist Code, den andere Leute als angenehm zu lesen und zu pflegen empfinden.
- Guter Code ist also jeder Code, der nicht schlecht ist. Zum Beispiel ist es schwierig, guten Code zu definieren, es ist einfacher, schlechten Code zu definieren.
- Normalerweise finde ich diese " WTF? " ' s in der guten Code-Besprechung folgt in Kürze " Oooooh Okay … ich verstehe, was Sie getan haben."
Antwort
Es gibt wirklich keine anderen guten Kriterien als wie schnell Sie den Code verstehen können. Sie sorgen dafür, dass Ihr Code gut aussieht, indem Sie den perfekten Kompromiss zwischen Prägnanz und Lesbarkeit finden.
Die „WTF“ pro Minute „(oben) ist wahr, aber es ist nur eine Folge der allgemeineren Regel. Je mehr WTFs vorhanden sind, desto langsamer ist das Verständnis.
Kommentare
- @rmx: Definieren Sie ", um den Job auszuführen gut "
- Nun, dass die
RemoveCustomer
-Methode das Cutomer tatsächlich 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 ' ist das, was ich ' sage. - @rmx: aber fehlerfrei zu sein ist impliziert, isn ' nicht wahr? Wenn Ihr Code ' den Job nicht ordnungsgemäß ausführt, ist ' (noch) kein Code.
- @ rmx: in der Tat nein. Wenn Ihr Code leicht zu verstehen ist, ist ' leicht zu verstehen, wenn er ' schlecht funktioniert. OTOH, wenn es ' schwer zu verstehen ist, ist es ' schwer zu verstehen, wenn es dies tut ' s Job überhaupt.
- @rmx: PS Einfach ausgedrückt ist Ihr decrement () eine klassische WTF und verlangsamt somit das Verständnis von Teilen des Codes, in denen diese Funktion verwendet wird.
Antwort
Sie wissen, dass Sie guten Code schreiben, wenn …
- Der Kunde ist zufrieden
- Kollegen leihen Ihren Code als Ausgangspunkt aus
- Dem brandneuen Mann wurde gerade gesagt, er solle Änderungen an einem System vornehmen, das Sie vor 6 Monaten gebaut haben, und er / sie hat Ihnen nie eine Frage gestellt.
- Ihr Chef bittet Sie, neue Widgets für zu entwickeln Das zu verwendende Team
- Sie sehen sich den Code an, den Sie heute schreiben, und sagen sich: „Ich wünschte, ich hätte vor zwei Jahren einen solchen Code geschrieben.“
Wie geht es Ihnen? Messen Sie, ob der Code gut ist …
- Wie lange dauert die Antwort?
- Wie viele Roundtrips zum Server werden durchgeführt?
- Würden Sie die Anwendung persönlich verwenden oder denken Sie, dass sie klobig ist?
- Würden Sie sie beim nächsten Mal auf die gleiche Weise erstellen?
Guter Code funktioniert, wenn es so ist sollst. Guter Code kann bei Bedarf leicht geändert werden. Guter Code kann wiederverwendet werden, um Gewinn zu erzielen.
Kommentare
- " Der Kunde ist zufrieden " ist orthogonal dazu.
- @TRA – Wenn der Kunde zufrieden ist, bedeutet dies, dass Sie die Anforderungen verstanden und eine erwartete Lösung bereitgestellt haben.
- Sicher, aber schlechter Code kann dasselbe tun.
Antwort
Ein Code, der
fehlerfrei
wiederverwendbar
unabhängig
weniger komplex
gut dokumentiert
leicht zu ändern
heißt guter Code.
Ein gutes Programm funktioniert einwandfrei und weist keine Fehler auf. Aber welche inneren Qualitäten erzeugen eine solche Perfektion? Es ist kein Rätsel, wir müssen nur gelegentlich daran erinnert werden. Egal, ob Sie in C / C ++, C #, Java, Basic, Perl, COBOL oder ASM codieren, jede gute Programmierung weist dieselben bewährten Eigenschaften auf: Einfachheit, Lesbarkeit, Modularität , Schichtung, Design, Effizienz, Eleganz und Klarheitseffizienz, Eleganz und Klarheit
Quelle: MSDN
Kommentare
- Einfachheit, Lesbarkeit, Eleganz und Klarheit sind alle dasselbe. Modularität und Überlagerung sind nur Methoden, um Ihren Code klar zu machen und elegant. Das einzige, was in der Liste noch übrig ist, ist Effizienz, was irgendwie impliziert ist, und außerdem geht es oft darum, Kompromisse zwischen Effizienz und Klarheit einzugehen.
- Überprüfen Sie Folgendes: goo.gl/hdQt8
- Code kann fehlerfrei sein?
- Nein, ' t. (Praktisch)
- Effizient sollte zu Ihrer Liste hinzugefügt werden. Geschwindigkeit ist ' nicht erforderlich Dies ist zwar ein Hauptindikator für guten Code, aber guter Code sollte ' nicht unnötig langsam oder verschwenderisch sein.
Antwort
Kommt Ihnen das bekannt vor?
Philips gab mir die Möglichkeit, das Design eines neuen Produkts zu beobachten. Als es sich entwickelte, wurde ich zunehmend unruhig und begann, meine Bedenken meinem Vorgesetzten anzuvertrauen. Ich sagte ihm wiederholt, dass die Designs nicht „sauber“ seien und dass sie „schön“ sein sollten, so wie Dijkstras Designs schön waren. Er fand dies keinen nützlichen Kommentar.Er erinnerte mich daran, dass wir Ingenieure waren, keine Künstler. In seinen Gedanken drückte ich einfach meinen Geschmack aus und er wollte wissen, nach welchem Kriterium ich mein Urteil fällte. Ich konnte es ihm nicht sagen! Da ich nicht erklären konnte, gegen welche Grundsätze verstoßen wurde, wurden meine Kommentare einfach ignoriert und die Arbeit ging weiter. Als ich spürte, dass es einen Weg geben muss, meinen „Geschmack“ zu erklären und zu motivieren, versuchte ich, ein Prinzip zu finden, das gute von schlechten Designs unterscheidet. Ingenieure sind sehr pragmatisch; sie mögen Schönheit bewundern, aber sie suchen Nützlichkeit. Ich habe versucht, eine Erklärung dafür zu finden, warum „Schönheit“ nützlich ist.
Den Rest finden Sie hier .
Kommentare
- Da der Link im Beitrag von @mlvljr ' fehlerhaft ist Hier ist ein Link zur Google Books-Seite: books.google.co.in/…
- @balajeerc Danke (Ich habe auch den Link repariert, sodass er auf eine von Springer gehostete Version desselben PDFs verweist) 🙂
Antwort
Abgesehen von den Qualitätskriterien für natürlichen Code (minimales Kopieren / Einfügen, keine Spaghetti usw.) sollte ein guter Industriecode immer ein bisschen naiv und ein bisschen zu ausführlich aussehen, wie
int key = i; const bool do_not_create = false; Record r = cache.get(key, do_not_create); ++i;
im Gegensatz zu
Record r = cache.get(i++, false);
Kommentare
- Aber bedeutet
do_not_create = false
„passfalse
alsdo_not_create
Argument, damit es wird erstellt “oder„ pas sfalse
alsdo_create
Argument, damit es nicht erstellt wird „? In einer Sprache, in der Sie Argumentnamen verwenden können, würde ichcache.get (key:i, create: false); i += 1;
bevorzugen.
Antwort
Vielleicht würde eine Antwort durch Veranschaulichung des Gegenteils helfen (und es ist eine Entschuldigung, XKCD hier rein zu bekommen).
Guter Code ist
- einfach zu verstehen und
- leicht zu pflegen ,
- versucht nicht, alle Probleme zu lösen, von denen nur das vorliegende
- lange lebt, ohne dass Entwickler nach Alternativen suchen
Beispiele sind
- Apache Commons
- Spring Framework
- Hibernate Framework
Answer
Ich gehe einfach zu „wartbar“
Der gesamte Code muss gepflegt werden: Diese Aufgabe muss nicht schwieriger als nötig gemacht werden
Wenn ein Leser diese einfache Anforderung nicht versteht oder sie formulieren muss, sollte dieser Leser keinen Code schreiben …
Antwort
Guter Code wird für jede Person unterschiedlich sein, und die Sprache, mit der sie arbeitet, wirkt sich auch auf die möglichen Aspekte aus guter Code sein. Wenn ich mich einem Projekt nähere, suche ich im Allgemeinen nach folgenden Dingen:
- Wie ist das Projekt organisiert? Sind Quelldateien sauber organisiert und kann ich Code ohne großen Aufwand finden?
- Wie ist der Code organisiert? Ist klar dokumentiert, was der Code in der Datei bewirkt, z. B. durch die Verwendung eines Dateikopfs oder durch die Verwendung jeder Klasse, die sich in einer eigenen Datei befindet? Gibt es Funktionen in der Datei, die nicht mehr in der Anwendung verwendet werden?
- Wie sind die Funktionen organisiert? Gibt es ein klares Muster für die Deklaration von Variablen oder ein ziemlich zufälliges Muster? Hat der Code einen logischen Ablauf und vermeidet unnötige Kontrollstrukturen? Ist alles klar dokumentiert, wobei der Code wo nötig selbstdokumentiert ist und Kommentare das Warum und / oder Wie des Codes klar ausdrücken?
Darüber hinaus ist das Design des Codes Anwendung als Ganzes sinnvoll? Der Code in der Anwendung kann der beste der Welt sein, aber es kann immer noch schwierig sein, damit zu arbeiten, wenn das Gesamtdesign der Anwendung keinen Sinn ergibt.
Antwort
Lassen Sie mich der Lesbarkeit nicht zustimmen. Nein, nicht vollständig: Guter Code sollte lesbar sein, und das kann leicht mit genügend Kommentaren erreicht werden.
Aber ich betrachte zwei Arten von WTF: diejenigen, bei denen Sie sich fragen, ob der Programmierer weiter gekommen ist als das Programmieren von 101, und diejenigen, bei denen Sie die Genialität des Codes absolut nicht verstehen. Einige Codes können sehr seltsam aussehen Erstens, ist aber tatsächlich eine sehr erfinderische Lösung für ein schwieriges Problem. Die zweite sollte im WTF-Messgerät nicht zählen und kann durch Kommentare vermieden werden.
Sehr gut 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 oft der Fall ist. Man vermeidet dort For-Loops so weit wie möglich.Im Allgemeinen würde ich den schnellsten Code als den besseren Code betrachten, obwohl er weniger lesbar ist. Das heißt, wenn die Verbesserung natürlich erheblich ist 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 Speichernutzung eher schlampig: Es werden nur mehr Objekte erstellt. In einigen Fällen macht eine intelligente Speichernutzung den Code wieder weniger lesbar. Wenn Sie beispielsweise mit Gigabyte an 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.
Ja, die Lesbarkeit ist also wichtig für einen 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 jedoch nicht als abnormal angesehen. Eine Verbesserung der doppelten Geschwindigkeit und der Hälfte des Speichers ist also viel mehr wert als diese zusätzliche Lesbarkeit.
Kommentare
- Keine Regel / Regeln ausnahmslos
- Lassen Sie mich Ihrer Meinungsverschiedenheit nicht zustimmen: Sie sagen, dass Geschwindigkeit in Ihrem Bereich sehr wichtig ist und dass sie wichtiger ist als Lesbarkeit. Ich bin anderer Meinung, Sie sollten sich bemühen, die richtige Balance zu verwenden. Wenn keine Geschwindigkeit benötigt wird, zum Beispiel für eine High-Level-Schnittstelle, bevorzugen Sie möglicherweise etwas, das leicht zu warten ist. Wenn Geschwindigkeit benötigt wird, stimme ich Ihnen zu. Anstatt harte Regeln zu verwenden, ist es besser, den gesunden Menschenverstand zu verwenden, und Sie sollten ohnehin eine vorzeitige Optimierung vermeiden id = „668bace25d“>
ist dort los (genau dort in Kommentaren)?
Antwort
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, einzuspringen und zu verstehen, was ich tue, ohne dass ich jeden Block durchgehe von Code und zeigen, was es tut.
Anstatt dass er sagt: „Warte eine Minute, was?!“ Er sagt: „Oh, ok, ich verstehe, was Sie dort getan haben.“
Guter Code hat auch nicht viele hinterhältige Problemumgehungen oder „Hacks“. Zeilen, in denen Sie, während Sie „schreiben“, auch zu sich selbst sagen: „Ich weiß, dass dies kein guter Weg ist, aber ich muss es vorerst nur so machen. Ich werde mich daran erinnern, es später zu verbessern … „
Antwort
Es gibt viele Funktionen von“ gutem „Code , aber die wichtigsten, IMHO, sind Lesbarkeit und Wartbarkeit.
Ihr Code wird Fehler enthalten, wird wahrscheinlich erweitert und wiederverwendet, und sollte irgendwann neu berücksichtigt werden – selbst wenn Sie es erneut besuchen, besteht die Möglichkeit, dass Sie keine Ahnung haben, was zum Teufel Sie überhaupt getan haben Machen Sie sich selbst einen Gefallen und stellen Sie keine Hindernisse in den Weg.
Verwenden Sie diesen komplexen, aber äußerst effizienten Algorithmus, aber stellen Sie sicher, dass Sie ein wenig mehr Zeit damit verbringen, ihn zu dokumentieren, aber machen Sie es ansonsten Code klar und konsistent.