Wie schreibe ich weniger Code?

12

Eine Qualität, die ich entwickeln möchte, ist das Schreiben von präziserem Code. Wenn man, zumindest meiner Meinung nach, prägnanter schreibt, ist die Möglichkeit, Fehler zum Code hinzuzufügen, geringer. Es ist einfacher, den Code für andere zu lesen.

Meine Frage ist, ob es etwas ist, das nur mit Erfahrung verbunden ist, oder ist es etwas, das Sie explizit tun können, um diese Qualität zu entwickeln?


quelle
6
Zeichnen Sie die Tendenz und sehen Sie, wenn Sie die x-Achse überqueren ...
1
Obligatorischer Zeiger auf Makros, Makros, Makros: paulgraham.com/avg.html
vemv
Sie können sehr knappen, lesbaren Code generieren, indem Sie den sinnlosen Programmierstil übernehmen. Sinnloses Programmieren ist das Programmieren nur durch Anwenden von Funktionen. Sie erkennen es an der umfangreichen Verwendung von Funktionen höherer Ordnung wie Map, Filter, Concat, Fold / Reduce / Inject / [andere Namen für eine Liste Katamorphismus einfügen] usw.
dan_waterworth
2
-1: Dies scheint wie Selbstglückwünsche in Verkleidung.
Jim G.
Ich habe noch keinen lesbaren Punkt-freien Code gesehen. nicht in einer bedeutenden Bibliothek.
Simon Bergot

Antworten:

12

Ich würde sagen, dass es im Großen und Ganzen etwas ist, das mit Zeit und Erfahrung verbunden ist, aber Sie werden feststellen, dass Sie diese Qualität wieder in Ihre regulären Arbeitssprachen zurückbringen, wenn Sie mit knapperen Sprachen arbeiten.

Sicherlich fand ich nach ein oder zwei Jahren Arbeit mit Ruby, dass mein C # viel verspannter wurde. Ich denke, wenn ich die funktionale Programmierung besser verstehen würde (ein ständiger Ehrgeiz), würde ich wahrscheinlich mehr davon nehmen.

Es gibt auch einige Richtlinien, die hilfreich sein können - zum Beispiel, wenn Sie dieselben zwei Zeilen mehr als einmal schreiben und sie in ihre eigene Methode aufteilen. Dies ist eine einfache Richtlinie, die jedoch schnell Codezeilen einspart und das Programmieren durch Ausschneiden und Einfügen vereinfacht, wofür sich die meisten von uns von Zeit zu Zeit schuldig machen.

Wenn Sie sich mit Vererbung auskennen, können Sie häufig sparen, wenn Sie denselben Code an verschiedenen Stellen wiederholen, indem Sie übergeordneten Klassen gemeinsame Funktionen zuweisen. Dies ist im Prinzip offensichtlich, wird jedoch in der Praxis häufig übersehen.

Es kann einen Unterschied zwischen dem Schreiben von weniger Code und dem Verwenden von weniger Code in Ihrer Anwendung geben. Manchmal können Sie die Codegenerierung verwenden, um zu vermeiden, dass Sie sich wiederholen müssen, sodass Sie nur wenige Codezeilen schreiben, diese jedoch eine ganze Menge anderen Codes für Sie generieren - Das kann Ihnen viel Hebelwirkung verschaffen. Sehen Sie sich an, was ein Tool wie Rails oder Entity Framework in dieser Hinsicht leistet, um festzustellen, wie nützlich es sein kann. Machen Sie sich die Notwendigkeit klar und denken Sie zweimal, dreimal und dann viermal darüber nach, wie Sie Ihre eigene Codegenerierung implementieren - das kann Sie in die Hölle von YAGNI führen.

Verstehen Sie Ihre Sprache, Ihre API und Ihre Tools. Dies scheint wieder offensichtlich zu sein, aber im Laufe der Jahre habe ich so viel Code geschrieben, dass ich später feststellte, dass es sich um Wiedergabefunktionen handelt, die ich gerade von der API geerbt oder mithilfe einer Sprachfunktion vereinfacht haben könnte Die Dokumentation für die API, mit der ich arbeite, erspart mir später viele Stunden beim Codieren oder Debuggen. In ähnlicher Weise haben die meisten Plattformen, mit denen Sie arbeiten, eine Körnung - lernen Sie, so zu arbeiten, wie Sie es erwarten, und Ihr Leben wird viel einfacher. Verbringen Sie einige Zeit damit, die Richtung des geringsten Widerstands für die Plattform zu finden, mit der Sie arbeiten, und Sie werden die Dinge viel besser erledigen.

Wenn Sie sich fragen, ob es einen besseren Weg gibt, etwas zu tun, gibt es wahrscheinlich einen und es lohnt sich immer herauszufinden, wie man es besser macht.

Glenatron
quelle
Ja, meiner Meinung nach ist der einzige Grund für private One-Line-Funktionen das DRY-Prinzip
Seit ich mehr dieser Funktionen habe, ist die Anzahl der Codezeilen in meinen Klassen merklich gesunken und es sieht viel übersichtlicher und klarer aus.
Glenatron
Klingt nach ein bisschen Widerspruch, mehr Funktionen, aber weniger Zeilen, aber vielleicht sehe ich den gleichen Trend auch in meinem Code. Ich muss darüber nachdenken ...
Haben Sie weitere dieser Richtlinien, die befolgt werden könnten? Klingt, als ob sie für einen jungen Entwickler wie mich nützlich sein könnten.
Stuart Clark
@stuartmclark - Ich habe ein paar mehr hinzugefügt, obwohl ich vermute, dass es nicht zu viel gibt, was Sie anderswo nicht gehört hätten.
Glenatron
16

Eine gute Möglichkeit, weniger Code zu schreiben, besteht darin, das Rad nicht neu zu erfinden und vorhandene Softwarekomponenten zu verwenden, sofern verfügbar.

Eine häufige Antwort erhalte ich, wenn ich frage, warum die Leute ihren eigenen ORM oder ihre eigene Protokollierungsengine oder ihre eigenen UI-Komponenten oder ihr eigenes All haben:

Aber unser ist besser

Ich glaube, dass diese Aussage in den meisten Fällen richtig ist, aber die negativen Auswirkungen auf den ROI sind in den meisten Fällen sehr hoch. Sie Mama macht die besten Gerichte richtig? Aber du kannst deine Mutter nicht bitten, jeden Tag nach Hause zu kommen und sie vorzubereiten.

Aus diesem Grund denke ich, dass Entwickler sich für die finanziellen Auswirkungen ihrer Entscheidungen interessieren sollten. Einige von ihnen sind:

  • Zusätzliche Arbeit zum Erstellen der Komponente erforderlich
  • Zusätzliche Arbeit für Neuankömmlinge, um es zu lernen
  • Riesige zusätzliche Arbeit, um es zu pflegen

Ich denke gerne, dass diese Komponentenanbieter Ihr erweitertes Team sind, das für einen winzigen Teil dessen arbeitet, was Sie bezahlt hätten, um es selbst aufzubauen, zu warten und zu verbessern.

Es ist besser für das gesamte Unternehmen, den ROI zu maximieren, als an der Maximierung unserer Ego-Zufriedenheit zu arbeiten;) Je mehr Geld Ihr Unternehmen erhält, desto wahrscheinlicher werden sich Ihre Arbeitsbedingungen und Ihr Gehalt erhöhen.


quelle
1
Ich habe mich auch dessen schuldig gemacht. Vor ein paar Jahren habe ich meine eigene Dateipfad-Klasse geschrieben, die Dateipfade zwischen den Formaten Win, Unix und Apples konvertieren kann. Wir haben nur Fenster benutzt. Vielleicht ist das auch eine Regel, mach niemals Dinge zukunftssicher
Manchmal liegt es an Ihrem mangelnden Wissen über ein bestimmtes Framework. Ich habe auch meine eigene Pfadklasse geschrieben, als ich anfing, mit .NET zu arbeiten, und einige Tage später die Klasse System.IO.Path entdeckt :-)
Ich bevorzuge die Spaghetti meiner Mutter, aber das Zeug im Glas war gut genug. Das läuft wirklich auf die Verantwortlichen der Anforderungen hinaus. Wenn sie sich nicht mit der 85% igen Lösung zufrieden geben, haben Sie keine andere Wahl.
JeffO
Meine Mutter macht die Spaghetti viel besser als deine.
1
+ die Internetseiten für "Vermeiden Sie es, das Rad neu zu erfinden". Eine der wichtigsten Fähigkeiten, die ich entwickelt habe, besteht darin, Probleme zu identifizieren, die wahrscheinlich schon jemand gelöst hat. Es gibt mir nicht nur fast immer eine bessere Lösung, als ich es selbst durch die Behandlung einer Reihe von Randfällen, die ich wahrscheinlich übersehen hätte, hervorgebracht hätte, sondern es gibt mir auch die Möglichkeit, an den Problemen zu arbeiten, für deren Lösung ich tatsächlich bezahlt werde .
BlairHippo
5

Meiner Meinung nach kann weniger Code auf verschiedene Arten geschrieben werden:

  • Du wirst es nicht brauchen . Codiere noch nichts, was du noch nicht brauchst. Code nur die Anforderungen angeben. Auf diese Weise reduzieren wir den Code, der zum Schreiben benötigt wird.

  • Wiederholen Sie sich nicht . Ich glaube, dass die Verwendung von CMS, Framework oder der Third Party Library eine Möglichkeit ist, das DRY-Prinzip anzuwenden.

  • Abstraktion . Und nicht zuletzt kann die Abstraktionsprogrammierung den Code sehr reduzieren. Durch das Abstrahieren des Codes wird die Chance, den Code wiederzuverwenden, erhöht, da die Duplizität verringert wird.

junxiong
quelle
3

Über das Verständnis einer Programmiersprache hinaus hat es meiner Meinung nach viel damit zu tun, ein Problem zu verstehen und eine gute Lösung zu finden. Es gibt viele Lösungen für die meisten Probleme, nicht alle sind optimal. Sie können von Stadt A nach Stadt B über verschiedene Straßen fahren - eine dauert zwei Stunden, die andere doppelt. Es ist die gleiche Idee in der Programmierung. Sie können eine Sprache sehr gut beherrschen, aber Sie können eine Lösung finden, die beispielsweise zwei Seiten Code umfasst, während jemand anderes eine Lösung findet, die in einem Viertel der halben Codegröße implementiert werden kann. Ich habe das im Laufe der Jahre viel gesehen.

Stellen Sie sicher, dass Sie das Problem gut verstehen. Analysieren Sie es, finden Sie eine oder mehrere Lösungen, wägen Sie die Vor- und Nachteile ab (natürlich variieren die "Lösungen mit einem 's'" von Problem zu Problem erheblich - im Allgemeinen hier). Dann gibt es die Umsetzung der gewählten Lösung, die Hier kommt Ihr Verständnis der Sprache (und des Rahmens, falls dies zutrifft) ins Spiel.

MetalMikester
quelle
Wie viel Zeit verbringen Sie mit der Vorbereitung der Lösung im Vergleich zur Programmierung der Lösung?
Das hängt natürlich vom Problem ab. Ich spreche nicht Tage hier. Es zahlt sich normalerweise aus, ein wenig Zeit mit dem Nachdenken vor dem Codieren zu verbringen. Es geht auch nicht wirklich um die dafür aufgewendete Zeit, da es sich um eine gute - und auf lange Sicht ideal wartbare - Lösung handelt. Ich kann beschissenen Code für beschissene Lösungen schreiben - das kann jeder.
MetalMikester
1

Man kann sagen, dass die gesamte Kunst des Programmierens auf genau dies hinausläuft.

Sie können Sprachen lernen, bei denen Klarheit und Prägnanz traditionell im Vordergrund stehen (z. B. Haskell, Scheme, Python), oder sogar Paradigmen wie Faktor und andere konkatenative Sprachen. Letztendlich sollte jedoch alles, was Sie lernen möchten , dazu beitragen, dass Sie kürzer schreiben , weniger redundanter Code.

Pi Delport
quelle
1

Wenn Sie nicht zugeben, ein Problem zu haben, werden Sie, wie bei allen anderen Problemen, keine Lösung suchen. Erfahrung wird zu einem Faktor, wenn Sie gelernt haben, wie weniger Code aussieht. Wenn Sie Ihren Code erneut aufrufen, ist es eine gute Zeit, um festzustellen, ob Sie Code wiederverwenden oder weniger Code umgestalten können. Microsoft konnte die Druckgeschwindigkeit mit Windows 2000 verbessern, indem es NICHT zweimal gespoolt wurde (Zitat eines Microsoft-Mitarbeiters in einer der kostenlosen Demos).

JeffO
quelle
Also sollte ich meinen Code überarbeiten und ihn überarbeiten, um herauszufinden, wie man weniger Code schreibt, oder, wie Piet sagt, Code terser?
2
@Gorgen - Sie könnten, wenn Sie Zeit haben oder sich einen Code ansehen, den Sie vor einer Stunde geschrieben haben. Wenn Sie ein Beispiel auf SO entdecken, werden Sie manchmal aufgefordert, Ihren eigenen Code zu ändern.
JeffO
0
  1. Geh zurück zu deinem älteren, langatmigen Code,
  2. Versionskontrolle,
  3. Schreiben Sie einige Tests, um eine begründete Hoffnung zu haben, keine neuen Bugs einzuführen.
  4. umschreiben.

Wiederholen Sie nach Belieben. Und willkommen in der Hölle.

ZJR
quelle
-2

Testgetriebene Entwicklung könnte helfen. Mit dieser Option schreiben Sie nur den Mindestcode, der zum Bestehen dieses Tests erforderlich ist.

Chandramouli
quelle
In diesem Zusammenhang bezieht sich das Minimum auf die Merkmale und nicht auf die Länge.
Vemv