Frage

Beim schreiben eines mathematischen Beweis Ziel ist es, weiterhin die Komprimierung der Beweis.Der Beweis wird immer elegante, aber nicht unbedingt mehr lesbar.Kompression übersetzt, um besser zu verstehen, wie Sie herausfiltern von unnötigen Zeichen und Ausführlichkeit.

Ich höre oft die Entwickler sagen, Sie sollten machen Sie Ihre code-Fuß-Druck so klein wie möglich.Dies kann sehr schnell Ausbeute code nicht lesbar.In der Mathematik, es ist nicht so ein Problem, da die übung ist rein akademisch.Jedoch, in production code, wo Zeit Geld ist, dass die Menschen versuchen, herauszufinden, was einige sehr prägnante code tut scheinbar nicht viel Sinn.Für ein wenig mehr verbose-code, erhalten Sie die Lesbarkeit und Einsparungen.

An welcher Stelle Sie aufhören zu komprimieren software-code?

War es hilfreich?

Lösung

Ich versuche, ein Niveau zu erreichen, der Ausführlichkeit, wo mein Programm Aussagen Lesen sich wie ein Satz, den jeder Programmierer verstehen konnte.Dies bedeutet, stark refactoring mein code so, dass es alle kurzen Stück eine Geschichte, so dass jede Aktion beschrieben werden, die in einer separaten Methode (eine noch weitere Stufe könnte zu einer anderen Klasse).

Das heißt, ich würde nicht meine reduzieren die Anzahl der Zeichen, nur weil es ausgedrückt werden kann in weniger.Das ist, was ist code-golf-Wettbewerbe sind für.

Andere Tipps

Meine Regel ist sagen Sie, was Sie bedeuten.Einem gemeinsamen Weg, ich sehe Menschen gehen, falsch ist "die Kraft der Reduktion." Im Grunde ersetzen Sie den Begriff denken Sie mit etwas, das scheint zu überspringen Schritte.Leider verlassen Sie Begriffe aus Ihrem code, so dass es schwieriger zu Lesen.

Für Beispiel, ändern

for (int i = 0; i < n; i++)
    foo[i] = ...

zu

int * p = foo, q = foo+n;
while ( *p++ = ... < q );

ist ein Beispiel für eine Kraft Reduktion, die scheint, um Schritte zu speichern, aber es bleibt jedoch die Tatsache, dass foo ein array, so dass es schwieriger zu Lesen.

Ein weiterer häufiger man mit bool anstelle von enum.

enum {
    MouseDown,
    MouseUp
};

Diese werden

bool IsMouseDown;

Blätter aus der Tatsache, dass dies eine state-machine, so dass der code schwieriger zu pflegen.

So meine Faustregel wäre, in Ihrer Umsetzung, nicht Graben auf einer niedrigeren Ebene als die Konzepte, die Sie auszudrücken versuchen.

Sie können den code kleiner zu sehen, Redundanzen und Beseitigung von es, oder wird klug.Tun die ersteren und nicht die letzteren.

Hier ist ein guter Artikel von Steve McConnell - Best Practices http://www.stevemcconnell.com/ieeesoftware/bp06.htm

Ich denke kurz/prägnant sind zwei Ergebnisse von gut geschriebenen code.Es gibt viele Aspekte, die den code gut und viele der Ergebnisse von gut geschriebenen code, erkennen die beiden sind anders.Sie planen nicht für eine kleine Fuß Druck planen Sie für eine Funktion, die ist präzise und macht eine einzige Sache außerordentlich gut - dies SOLLTE dazu führen, auf einem kleinen Fuß-print - (aber möglicherweise nicht).Hier ist eine kurze Liste von dem, was ich würde konzentrieren sich auf, wenn Sie code schreiben:

  • fokussiert auf die Funktionen - eine Funktion sollte nur eine Sache, eine einfache Lieferung, multi vorgestellten Funktionen sind buggy und nicht leicht wiederverwendbar
  • lose gekoppelt - nicht erreichen, innerhalb einer Funktion auf Globale Daten und verlassen Sie sich nicht stark auf andere Funktionen
  • präzise benennen - verwenden Sie aussagekräftige genauen Namen der Variablen, kryptische Namen sind gerade, dass
  • halten Sie den code einfach und nicht Komplex, Mach dir nicht die Sprache spezifischer technischer wow, gut zu beeindrucken andere, schwer, leicht zu verstehen und zu pflegen - wenn Sie tun, fügen Sie etwas 'besonderes' Kommentar es so zumindest die Leute es zu schätzen wissen, die vor zu fluchen Sie aus
  • gleichmäßig Kommentar - zu viele Kommentare werden ignoriert und überholt, einige haben keine Bedeutung
  • Formatierung, stolz zu sein, wie der code aussieht, richtig eingerückt code hilft
  • die Arbeit mit dem Geist eines code Wartungs-person - denken, wie es wäre, den code zu pflegen, Sie sind writting
  • Sie werden ängstlich oder zu faul zum umgestalten - nichts ist perfekt die erste Zeit, reinigen Sie Ihre eigene Unordnung

Einen Weg zu finden, ein Gleichgewicht zu suchen, Lesbarkeit und nicht prägnant-ness.Programmierer sind ständig Scannen code visuell zu sehen, was getan wird, und so sollte der code so viel wie möglich fließen schön.

Wenn der Programmierer ist scan-code und trifft einen Abschnitt, dass ist schwer zu verstehen, oder Bedarf einiger Anstrengungen, um visuell zu analysieren und zu verstehen, es ist eine schlechte Sache.Mit gemeinsamen gut verstanden Konstrukte ist wichtig, bleiben Weg von der vagen und eher selten verwendet, es sei denn, erforderlich.

Menschen sind keine Compiler.Compiler können Essen, die Sachen und halten Sie in Bewegung auf.Dunkel-code ist nicht mental von Menschen konsumiert so schnell wie klar verstanden code.

Manchmal ist es sehr schwer lesbaren code zu produzieren, die in einem komplizierten Algorithmus, aber für die meisten Teil, die Lesbarkeit ist das, was wir suchen sollten, und nicht die Klugheit.Ich glaube nicht, dass die Länge des Codes ist wirklich ein Maß an Klarheit, da manchmal eine ausführlichere Methode ist besser lesbar als eine präzise Methode, manchmal eine präzise Methode ist besser lesbar als eine lange.

Auch Kommentare sollten nur ergänzen, und Sie sollten es nicht beschreiben, Ihr code sollte beschreiben Sie sich selbst.Wenn Sie haben einen Kommentar, eine Linie, weil es nicht offensichtlich ist, was getan wird, das ist schlecht.Es dauert länger für die meisten erfahrenen Programmierer-Lesen Sie eine englische Erklärung, als es tut, um Lesen Sie die code selbst.Ich denke, das Buch Code Complete hämmern diese eine Wohnung.

Soweit Objekt-Namen gehen, das denken auf das durchgemacht hat, eine Entwicklung mit der Einführung von neuen Programmiersprachen.

Wenn Sie die "geschweifte Klammer" Sprachen, beginnend mit C, die Kürze war als die Seele des Witzes.So müssten Sie eine variable, um einen Kredit-Wert mit dem Namen "lv", zum Beispiel.Die Idee war, dass Sie schreiben würden, eine Menge code, also halten Sie die Tasten sind auf ein minimum reduziert.

Dann kam der Microsoft-sanktioniert "Ungarische notation", wo die ersten Buchstaben der Namen einer Variablen gemeint waren, um zu zeigen, dass ihm zugrunde liegenden Typ.Könnte man benutzen, "fLV", oder etwas ähnliches, um anzuzeigen, dass der Darlehensbetrag wurde vertreten durch eine float-variable.

Mit Java, und dann C#, das Paradigma hat sich zu einer Klarheit.Ein guter name für ein Darlehen Wert der variable wäre "loanValue".Ich glaube, dass ein Teil des Grundes für dieses ist der Befehl-completion-Funktion in den meisten modernen Editoren.Da es ist nicht erforderlich, geben Sie einen vollständigen Namen mehr, Sie könnte genauso gut verwenden Sie so viele Zeichen wie nötig ist, um aussagekräftig sein.

Dies ist ein guter trend.Muss der Code verständlich zu sein.Kommentare werden oft als ein nachträglicher Einfall, wenn überhaupt.Sie sind auch nicht aktualisiert, wenn der code aktualisiert, so dass Sie veraltet sein.Beschreibung gut gewählt, Variablennamen sind der erste, beste und einfachste Weg, um lassen Sie andere wissen, was Sie bei der Codierung über.

Ich hatte ein informatik-professor, der sagte: "Als Ingenieure sind wir ständig erstellen von Arten von Dingen, die vorher nicht existierten.Die Namen, die wir Ihnen geben werden-stick, also sollten wir vorsichtig sein, um die Dinge zu nennen sinnvoll."

Es muss eine balance zwischen kurz-süße Quelle code und Leistung.Wenn es schön ist source und läuft am schnellsten, dann gut, aber für die Willen der schönen Quelle, es läuft wie ein Hund, dann schlecht.

Streben umgestalten, bis der code an sich liest sich gut.Entdecken Sie Ihre eigenen Fehler in die Prozess, wird der code leichter zu verstehen, für die "nächste Mann", und Sie werden nicht belastet werden durch die Aufrechterhaltung (und später vergessen zu ändern) in die Kommentare, was du schon zum Ausdruck gebracht, die im code.

Wenn das fehlschlägt...sicher, mir einen Kommentar hinterlassen.

Und erzähl mir nicht, "was" in die Kommentare (das ist, was der code ist für), erzählen Sie mir, warum".

Im Gegensatz zu langen/Wandern?Sicher!

Aber es kommt der Punkt, wo es so kurz und so präzise, dass es schwer zu verstehen, dann haben Sie zu weit gegangen.

Ja.Immer.

TROCKEN:Don ' T Repeat Yourself.Geben Sie einen code, der sowohl für präzise und sicher.Schreiben Sie den gleichen code mehrmals ist ein guter Weg, um es hart zu halten.

Nun, das bedeutet nicht, Sie sollte machen eine Funktion einer code-Blöcke suchen, aus der Ferne gleichermaßen.

Ein sehr häufiger Fehler (horror ?) zum Beispiel ist factorizing code tun fast die gleiche Sache, und behandeln die Unterschiede zwischen den vorkommen, indem ein flag-Funktion-API.Das sieht inocuous auf den ersten, aber wird code-flow-schwer zu verstehen und Fehler anfällig, und noch schwieriger zu gestalten.

Wenn Sie Folgen gemeinsamen refactoring-Regeln (Blick über code smells) Ihr code wird mehr und mehr prägnant als Nebeneffekt, wie viele code-Gerüche werden über die Erkennung von Redundanz.

Auf der anderen Seite, wenn Sie versuchen, den code so kurz wie möglich, nicht nach einer sinnvoll Richtlinien, irgendwann müssen Sie aufhören, weil Sie einfach nicht mehr sehen, wie code zu reduzieren.

Stell dir vor, wenn die erste Schritt ist das entfernen aller nutzlos, leer...nach diesem Schritt wird der code in den meisten Programmiersprachen werden so schwer zu Lesen, die Sie nicht viel Gelegenheit zu suchen Sie andere mögliche Verbesserung.

Das Beispiel oben ist sehr überspitzt gezeichnet, aber nicht so weit von dem, was Sie bekommen, wenn Sie versuchen zu optimieren-Größe, ohne eine sinnvolle Leitlinie.

Es gibt keine exakte Linie, die gezogen werden kann, zu unterscheiden zwischen code, glib und code, die ist blumig.Verwenden Sie Ihr bestes Urteil.Andere haben Blick auf Ihren code und sehen Sie, wie einfach Sie verstehen können es.Aber denken Sie daran, Korrektheit ist die Nummer 1 Ziel.

Die Notwendigkeit für kleine code-Fußabdrücke, ist eine Reminiszenz aus der Zeit der assembly-Sprache, und das erste, leicht high-level-Sprachen...es gibt kleine code-Fußabdrücke, wo eine echte und dringende Notwendigkeit.In diesen Tagen aber, das ist nicht so sehr eine Notwendigkeit.

Das heißt, ich hasse verbose code.Wo ich arbeite, wir schreiben code, der liest, so viel wie möglich wie eine Natürliche Sprache, ohne zusätzliche Grammatik oder Wörter.Und wir nicht abkürzen nichts, es sei denn, es ist eine sehr gängige Abkürzung.

Company.get_by_name("ABC") 
makeHeaderTable()

ist in etwa so knapp, wie wir gehen.

Im Allgemeinen, ich mache die Dinge klar und einfach, mit zu arbeiten.Wenn Prägnanz/Atemnot dient mir in das Ende, umso besser.Oft kurze Antworten sind das deutlichste, so Kurzatmigkeit ist ein Nebenprodukt der Hand.

Es gibt ein paar Punkte, die mir in den Sinn, die bestimmen, Wann zu stoppen Optimierung:

  • Lohnt sich, Zeit zu investieren Durchführung von Optimierungen.Wenn Sie Menschen verbringen Wochen und nicht alles finden, gibt es bessere Verwendungen dieser Mittel?

  • Was ist die Reihenfolge der Priorität-Optimierung.Es gibt ein paar verschiedene Faktoren, die könnte man sich kümmern, wenn es um die code:Ausführungszeit für die Ausführung Raum(beide ausgeführt und nur der kompilierte code), Skalierbarkeit, Stabilität, wie viele features, die implementiert werden, etc.Teil von diesem ist der trade-off von Zeit und Raum, aber es kann auch sein, wo einige code gehen, z.B.kann middleware ausführen von ad-hoc-SQL-Befehle oder sollten diejenigen, die geroutet werden gespeicherte Prozeduren, um Leistung zu verbessern?

Ich denke der wichtigste Punkt ist, dass es eine moderation dass die meisten guten Lösungen haben.

Die code-Optimierungen haben wenig zu tun mit der Codierung Stil.Die Tatsache, dass sich die Datei enthält x Leerzeichen oder neue Zeilen weniger als am Anfang macht es nicht besser oder schneller, mindestens in der Ausführung der Bühne - formatieren Sie den code mit weißen Zeichen, die unsually vom compiler ignoriert.Es macht sogar den code noch schlimmer, weil es immer eine Zumutung für die anderen Programmierer und sich selbst.

Es ist viel wichtiger für den code zu kurz und sauber in Ihrer logischen Struktur, wie die Prüfung Bedingungen, control flow, Annahmen, die Fehlerbehandlung oder die gesamte programming interface.Natürlich würde ich mich auch hier schlau und nützliche Kommentare + der Dokumentation.

Es ist nicht unbedingt eine Korrelation zwischen concise code und Leistung.Das ist ein Mythos.In etablierten Sprachen wie C/C++ Compiler sind in der Lage zu optimieren die code sehr effektiv.Gibt es einen Grund, müssen in solchen Sprachen zu vermuten, dass der mehr präzise code ist der bessere Leistung code.Neuere, weniger Leistung-optimiert Sprachen wie Ruby Mangel der compiler-Optimierung Funktionen von C/C++ - Compiler, aber noch immer gibt es wenig Grund zu glauben, dass prägnante code ist besser durchführen.Die Realität ist, dass wir nie wissen, wie gut der code in Produktion, bis es in die Produktion und ist profiliert.Einfach, harmlos, können die Funktionen enormen performance-Engpässe, wenn es genug Orte innerhalb des Codes.In stark konkurrierenden Systeme die größten Engpässe sind in der Regel verursacht durch schlechte Parallelität algorithmen oder übermäßige sperren.Diese Probleme sind selten gelöst, indem er "präzise" - code.

Unter dem Strich ist dies:Code, der schlecht können jederzeit umgestaltet werden, sobald profiling bestimmt, es ist der Engpass.Code kann nur effektiv umgestaltet werden, wenn es ist leicht zu verstehen.Code, der geschrieben wird, zu sein, "präzise" oder "clever" ist oft schwieriger zu gestalten und zu pflegen.

Schreiben Sie Ihren code für die Lesbarkeit dann Refactoring für die Leistung, wenn notwendig.

Meine zwei Cent...

Code sollte kurz, konkret und konzentriert.Du kannst immer erklären Ihre Ideen mit vielen Wörtern in der Kommentare.

Sie können Ihren code so kurz oder kompakt, wie Sie möchten, solange Sie einen Kommentar.Diese Weise kann Ihr code optimiert werden, aber immer noch Sinn.Ich tendiere zu bleiben irgendwo in der Mitte mit beschreibenden Variablen -, Methoden-und sparce Kommentare, wenn es ist immer noch unklar.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top