Sollten immer Best Practices für die Codierung verwendet werden [closed]

20

Sollte die Architektur beim Codieren von Software immer Best Practices oder praktische Praktiken in Bezug auf die zu erstellende Anwendung sein?

Wenn ich eine zweiseitige Webanwendung erstelle, die möglicherweise 5 Jahre alt ist und in den letzten 5 Jahren 2 Verbesserungen vorgenommen hat, sollte ich in Abhängigkeitsinjektion, Entwurfsmustern, Model-View-Controller mit View-Modellen usw

Kyle Johnson
quelle
53
Überengineering ist keine bewährte Methode.
5gon12eder
18
Es gibt keine einzigen "Best Practices", die für alle Software in allen Situationen gelten. Sie müssen abwägen, wie sich die Kosten für Ihre spezifische Situation am besten auszahlen.
Whatsisname
10
Sei ein pragmatischer Programmierer. Dies sollte Sie auf den Weg des geringsten Widerstands führen.
Jon Raynor
3
Können Sie eine Definition für bewährte Verfahren angeben? Viele Antworten scheinen dies mit einer wörtlichen Interpretation zu verwechseln, die sie erstellt haben.
JeffO
5
Es ist empfehlenswert, immer empfehlenswerte Methoden zu verwenden.
Gans

Antworten:

40

Sollte Codierung immer Best Practices verwendet werden

Immer? Nein, das ist albern.

Best Practices sind Richtlinien. Für die meisten Menschen ergeben sich in den meisten Situationen die besten Ergebnisse, wenn sie mit etwas Finesse umgesetzt werden. Hier setzen Sie an, wenn Sie über Lösungen nachdenken. Es wird jedoch Stellen geben, an denen Best Practices ignoriert werden können und sollten, da es bessere Lösungen gibt.

Das Problem ist, dass die Menschen nicht in die Zukunft sehen können. Und Anfänger (und einige Nicht-Anfänger) denken unweigerlich, dass sie sich in diesem speziellen Szenario befinden, in dem die Regeln für sie nicht gelten. Verwenden Sie im Zweifelsfall die bewährten Methoden. Jahrelange Debatten und Erfahrungen mit Tonnen von Ingenieuren, die schlauer sind als Sie oder ich, haben ergeben, dass sie konstant gute Ergebnisse liefern. Aber keiner (oder fast keiner) von ihnen kennt Ihr spezielles Problem so gut wie Sie. Gelegentlich treten Ausnahmefälle auf, in denen die Regeln gebogen werden können.

Telastyn
quelle
12
... Definieren Sie jedoch "Best Practice".
Svidgen
4
Ich denke, Anfänger möchten die Dinge "richtig" machen und einige bewährte Methoden (z. B. Softwaremuster) blind befolgen, ohne wirklich zu verstehen, warum sie existieren oder wie sie verwendet werden. Vielleicht ist das die zweite Stufe der Erleuchtung, die erste Stufe ist "Ich weiß nicht, was ich tue."
Robert Harvey
19
@RobertHarvey - zuerst lernst du, was zu tun ist, dann lernst du, warum du es tust, und dann lernst du, warum du es nicht
tust
1
@ HorusKol das könnte eines der tiefgreifenderen Dinge sein, die ich je gelesen habe.
Jared Smith
+1 für "Menschen können nicht in die Zukunft sehen"
Tulains Córdova
29

Ja. Das ist selbstverständlich. Warum würden Sie nicht das Beste tun?

Das ist jedoch nicht das Problem. Der schwierige Teil ist, herauszufinden, was die beste Vorgehensweise ist, denn um darauf zu antworten, müssen Sie genau wissen, welche Anforderungen Sie haben und wie sich das Projekt im Laufe der Jahre entwickeln wird, und das ist äußerst schwierig.

Eine gute Faustregel ist jedoch: Es ist KEINE bewährte Methode, die Namen einer Reihe von Designmustern zu übernehmen und sie einfach zusammenzufügen, ohne darüber nachzudenken.

Ansonsten kann Ihre Frage wirklich nicht beantwortet werden. Genau herauszufinden, was "Best Practice" für eine bestimmte Situation ist, ist das, worum es bei einem Softwareentwickler geht. Sie müssen es eingrenzen, um bessere Antworten zu erhalten.

Sara
quelle
6
Ihre Antwort wurde von mir nur wegen Ihres dritten Absatzes abgelehnt .
Robert Harvey
4
Ich werde für den dritten eine Gegenstimme abgeben, aber nur, weil es eine bewährte Methode ist, dies zu tun. <Grin & Duck>
Blrfl
5
Meine Zustimmung gilt für alle vier Absätze gleichermaßen.
Quuxplusone
4
"Best Practices" ist ein idiomatischer Ausdruck in der englischen Diskussion über Software-Engineering und bedeutet etwas anderes als das, was diese Antwort bedeutet, was so etwas wie "die bestmögliche Lösung für ein bestimmtes Problem" ist. So wird beispielsweise "Quellcodeverwaltung verwenden" als "Best Practice" beschrieben, unabhängig davon, ob ein Problem vorliegt oder nicht, für das die Quellcodeverwaltung nicht Teil der Lösung ist, dh unabhängig davon, ob es wirklich immer das Beste ist oder nicht . Dies mag ein entsetzlicher Missbrauch der Sprache sein, aber es ist das, woran wir festhalten.
Steve Jessop
1
@SteveJessop Mir ist dies bewusst. Es gibt jedoch viele "Best Practices", und manchmal treten Konflikte auf. Der Schlüssel ist Kontext und Umfang. Es gibt immer etwas, das Ihre Situation besonders macht. Nur wenn Sie genau wissen, welche Anforderungen Sie haben und welche Einschränkungen Sie haben, können Sie feststellen, welche "Best Practice" für Ihre Situation am besten geeignet ist. Ein tolles Beispiel: Die Verwendung der Quellcodeverwaltung ist eine bewährte Methode, es sei denn, jemand droht, die Erde in die Luft zu jagen, wenn Sie die Quellcodeverwaltung verwenden. Dies wäre ein zusätzlicher Kontext, der das ändert, was als Best Practice angesehen wird.
Sara
11

Die beste Vorgehensweise ist die, die die funktionalen und nicht-funktionalen Anforderungen Ihrer Software in Bezug auf Funktionen, Wartbarkeit, Leistung usw. am effektivsten erfüllt. Wenn diese Vorgehensweise einem "Industriestandard" entspricht, ist das fantastisch. Aber wenn nicht, gewinnt der Pragmatismus.

Wo ich derzeit arbeite, erstellen wir eine neue Web-Benutzeroberfläche für unser Produkt von Grund auf neu. Es wird in keiner Weise RESTVOLL sein; es wird ausschließlich POST verwendet. Es ist nicht mehrschichtig, verwendet keine Microservices und verwendet keine NoSQL-Datenbank. Es gibt keine Architektur wie Enterprise Java.

Mit anderen Worten, es ist überhaupt nicht hip.

Es enthält jedoch ein hochmodernes HTML5- Framework , das Angular-like-Databinding, automatische Skalierung auf verschiedene Gerätetypen wie Mobilgeräte und Desktops, Integration in die Kendo-Benutzeroberfläche von Telerik für all das Heben von Lasten sowie eine vollständig verschlüsselte und sichere Funktionalität bietet Datenkanal.

Das Beste daran ist, dass es in 30 Tagen fertig sein wird - eine Leistung, die eine Armee von Java-Entwicklern in einer Enterprise-Architektur pro Jahr in Anspruch nehmen würde, um dies zu erreichen. Der Code ist ES6 / Typescript; Es ist einer der saubersten Codes, die ich je gesehen habe.

Robert Harvey
quelle
Ich denke, Ihre Antwort veranschaulicht den Punkt, den ich in meinem machen wollte ... Zumindest denke ich so. +1 ... obwohl ich diese Frage aus Mangel an Details noch nicht beantwortet habe!
Svidgen
Klingt nach meiner Art von Projekt! Die Mode wird in der Entwicklung sehr müde.
Matt Lacey
RE Telerik: Ein Hinweis auf einige ihrer Widgets: Der DateTimePicker ist schrecklich, wenn er in Verbindung mit Angular verwendet wird, wenn Sie die Daten auf der Angular-Seite überhaupt ändern möchten.
Dan Pantry
@ DanPantry: Ich werde das im Hinterkopf behalten.
Robert Harvey
3

Nein . Best Practices sind Dinge, die in der Regel zu 99% als die beste Vorgehensweise angesehen werden. Dies bedeutet jedoch nicht, dass sie immer für jede Situation gelten.

Als Entwickler müssen Sie diese bewährten Methoden kennen und anwenden, aber auch wissen, wann es sicher ist, sie beiseite zu legen.

Dies soll keine Eigenwerbung sein, aber ich habe kürzlich einen Blogbeitrag zu meiner Arbeit auf der Salesforce.com-Plattform verfasst, in dem eine dieser Gelegenheiten detailliert beschrieben wird . Eine der goldenen Regeln ist "Niemals eine Abfrage innerhalb einer Schleife durchführen", aber vor kurzem hatte ich zum ersten Mal seit 7 Jahren auf der Plattform einen guten Grund, mich nicht an diese Regel zu halten.

Das Wesentliche ist, dass die Plattform die Anzahl der Abfragen begrenzt, die Sie in einem bestimmten Ausführungskontext ausführen können. In diesem Fall musste ich jedoch eine Abfrage in einer Schleife durchführen, um zu vermeiden, dass der Heap-Speicherplatz knapp wird, und wusste, dass ich gut mit der Abfrage zurechtkomme Grenze.

Es ist also selten, aber manchmal sind Best Practices für ein Szenario nicht relevant. Wenn sie nicht passen, erzwingen Sie sie nicht.

Matt Lacey
quelle
2

Ich gehe davon aus, dass mit "Best Practices" eine Liste von Regeln gemeint ist, die jemand in ein Buch geschrieben hat. Wenn Sie den Ausdruck wörtlich meinen, sollten Sie natürlich immer den besten Code schreiben, den Sie können.

Muss ich darauf hinweisen, dass es nicht eine einzige, allgemein anerkannte Reihe von "Best Practices" gibt? Für jede Regel, die von einem Experten befördert wird, können Sie fast immer einen anderen Experten mit gleichen Anmeldeinformationen finden, der etwas anderes sagt.

Aber auf den Punkt: Kurze Antwort: In der Regel, aber nicht immer.

Jeder Bereich hat seine "Best Practices" und "Lehrbuchlösungen". Diese repräsentieren die gesammelte Erfahrung und Weisheit vieler, vieler Menschen über viele, viele Jahre hinweg und sollten nicht ignoriert werden. ABER! Es gibt immer besondere Umstände, Randfälle usw. Die wirklich fähige Person in jedem Bereich weiß, wann sie die Regeln befolgen und wann sie sie brechen muss.

Ich würde allgemein sagen: Beginne damit, die Regeln des Lehrbuchs zu befolgen. Wenn das Befolgen der Schulbuchregeln zu Problemen führt - unnötige Komplexität, schlechte Leistung, was auch immer -, sollten Sie überlegen, ob es keine bessere Idee ist, diese eine Regel einmal zu brechen.

Wenn Sie die Regeln ignorieren und gehen, wohin Ihre Laune Sie auch führt, wird Ihr Code wahrscheinlich ein Durcheinander sein. Egal wie schlau Sie sind, Sie sind nicht der erste Programmierer der Welt. Es ist sinnvoll, aus den Erfahrungen anderer zu lernen. In unserem täglichen Leben haben wir deshalb Eltern, Lehrer und Prediger: Wir müssen nicht jeden dummen Fehler wiederholen, um zu lernen, dass es ein dummer Fehler ist, den wir machen.

Wenn Sie jedoch 100% der Zeit einer Liste von Regeln aus einem Buch folgen, werden Sie häufig feststellen, dass Sie einen quadratischen Stift in ein rundes Loch hämmern. Die Leute, die das Regelbuch geschrieben haben, sind möglicherweise nicht auf einen Fall wie Ihren gestoßen. Und selbst wenn dies der Fall ist, haben sie es möglicherweise ignoriert, wenn es selten genug ist. Eine Regel, die 80% der Zeit funktioniert, ist eine hervorragende Regel - vorausgesetzt, Sie verstehen, dass sie 80% der Zeit und nicht 100% der Zeit funktioniert.

Ich habe ein Buch über Datenbankdesign geschrieben, das viele Regeln enthält, denen ich Datenbankdesignern rate, zu folgen. (Ich werde es unterlassen, den Titel zu nennen, damit ich nicht so aussehe, als würde ich schamlos in der Eigenwerbung ausrutschen.) Ich ermutige jeden, der eine Datenbank entwerfen möchte, ein Buch wie das meine zu lesen und alles daraus zu lernen . Aber natürlich gibt es Zeiten, in denen Sie die Regeln brechen sollten, die ich aufführe.

Ich habe einmal ein Dokument mit Programmierstandards für ein Entwicklerteam geschrieben, das ich damals geleitet habe. Und die letzte Regel lautete ungefähr so: "Wenn Sie einen guten Grund haben, gegen eine der oben genannten Regeln zu verstoßen, fahren Sie fort, ABER Sie müssen einen Kommentar in Ihren Code einfügen, der erklärt, warum Sie gegen die Regel verstoßen haben. Wenn Sie nicht kommen können Wenn das Schreiben des Kommentars schwieriger ist als das Befolgen der Regel, befolgen Sie die Regel. " Wir hatten nur eine Handvoll Fälle, in denen es sich lohnte, erklären zu müssen, warum jemand gegen eine Regel verstieß.

Jay
quelle
1

Mit " Best Practices " meine ich "informelle Regeln, die die Softwareentwickler im Laufe der Zeit gelernt haben und die zur Verbesserung der Qualität von Software beitragen können" und keine wörtliche beste Art, eine bestimmte Aufgabe zu erledigen.

Ja, bis Sie einen Grund haben, dies nicht zu tun. Es sollte ein guter Grund sein, dass Sie ernsthafte Überlegungen angestellt und die Umstände und Grenzen der vorliegenden Aufgabe berücksichtigt haben. Das bedeutet, dass Sie die Praxis vollständig verstehen und anwenden können. Lassen Sie uns nicht auf die Idee eingehen, dass es nicht die beste Art des Denkens sein muss, wenn Sie es nicht verstehen. Siehe die Definition.

Sie werden nicht immer das Beste tun. Wenn der Chef Sie auffordert: "Versenden Sie diesen Mist, oder Sie sind gefeuert!" Sie werden es versenden und wahrscheinlich nach einem anderen Job suchen, aber Sie werden es trotzdem versenden. Manchmal tun Sie etwas, das gut genug ist. Natürlich wollen Sie sich das nicht zur Gewohnheit machen, aber manchmal müssen Sie die Wagen zum Rollen bringen, und Sie können sich keine Sorgen machen, dass die Pferde blind sind.

JeffO
quelle
1

Einige Dinge sind wichtig, andere nicht.

Sie sollten Ihre Wahl der Sprache und des Stils auf das jeweilige Problem zuschneiden.

Eine "Best Practice" für die Ausnahmebehandlung könnte beispielsweise darin bestehen, Ausnahmen immer zu erfassen und zu protokollieren. Wenn Sie jedoch einen Komponententest erstellen, empfiehlt es sich häufig, sie auszulassen, damit das Komponententest-Framework sie korrekt protokolliert.

Beachten Sie andererseits die "DRY" -Regel. Das Streben nach Code, der sich nicht wiederholt, ist immer gut, nicht nur aus den offensichtlichen Gründen, sondern auch, weil Sie, je mehr Sie auf diese Weise codieren, ein besserer Codierer werden - es ist eine großartige Möglichkeit, Ihre Codierungs- / Denkfähigkeiten zu verbessern Anstatt zu tippen und zu kopieren / einfügen, fühlen Sie sich auf lange Sicht im Allgemeinen wohler, wenn Sie Ihren Code überarbeiten (selbst wenn Sie damit gerechnet haben, dass es sich um Wegwerfcode handelt), wenn Sie einige vernünftige Regeln befolgen.

Zusammenfassend gesagt, seien Sie flexibel und codieren Sie nicht nur unlesbaren Müll, weil Sie denken, dass es sich um Wegwerf-Code handelt.

Bill K
quelle
1

Ich werde versuchen, es aus einer anderen Perspektive zu betrachten.

Die heutigen modernen Frameworks machen es sehr einfach, ein Basisprojekt mit MVC, Dependency Injection, Layered Architecture usw. einzurichten (Spring Boot Lover hier). Ich würde sagen, beginnen Sie mit einer generierten Basis und verwenden Sie die für Sie bereitgestellten Tools, bis Sie auf etwas stoßen, das eine handgemachte Lösung erfordert. Dann können Sie aus diesen Best Practices herausschneiden.

Es ist nicht schwerer, so etwas wie Spring Boot für eine 2-seitige Web-App zu verwenden und dann eigene Servlets, JDBC-Abfragen und andere Dinge zu rollen.

Uylmz
quelle
1

Nach meiner Erfahrung gibt es nur eine Best Practice, die ich für verbindlich halte:

Halte es einfach, dumm (KISS)

Mit anderen Worten: Für welche Tools, APIs, Architekturen usw. Sie sich auch entscheiden - wenn Sie es einfach halten, ist es wahrscheinlich einfacher, an der Zukunft zu arbeiten, weniger Bugs zu haben, schnell, speichereffizient und alles andere, was Sie sich wünschen.

All diese anderen Dinge, über die die Leute sprechen: Prinzipien, Muster, Praktiken usw. - Ich betrachte dies als eine Palette von Werkzeugen, aus denen ich auswählen kann und die am besten zu dem Projekt passen, an dem ich arbeite. Sie alle bieten Techniken und Ideen zur Lösung von Problemen. Der Trick besteht darin, herauszufinden, ob Sie diese Probleme überhaupt haben.

drekka
quelle
0

Die besten "Best Practices" enthalten immer einen Abschnitt, in dem Sie mit Ihrer Intelligenz und Erfahrung herausfinden sollten, wann die Punkte in diesem Handbuch unangemessen sind. Sie können auch einen Abschnitt zur Überprüfung, Genehmigung und Dokumentation derartiger Ausnahmen enthalten, in dem sie als Teil der "besten" Praktiken aufgeführt werden.

Bradley Ross
quelle
0

Sollte die Architektur beim Codieren von Software immer Best Practices oder praktische Praktiken in Bezug auf die zu erstellende Anwendung sein?

In der Theorie ja.

In der realen Welt [immer noch] ja, solange Sie es sich leisten können.

Was natürlich "Nein" bedeutet.

Zeit- und Gelddruck werden immer versuchen, Sie auf den Weg einer "schnellen und schmutzigen" Lösung zu bringen, weil sie dem Kunden einen "besseren" Wert liefert. Wie dies umgesetzt wird, ist für den Kunden oder dessen Buchhalter nicht von Interesse. Wenn Sie in zwei Tagen einen Job [schlecht] oder in drei Monaten perfekt machen können, wonach werden Sie Ihrer Meinung nach gefragt?

Die Lücke zwischen den beiden - Best Practice und dem, womit Sie "davonkommen" müssen - heißt "Technical Debt"; Es ist vollkommen akzeptabel, solange Sie einen Plan haben, diesen zurückzuzahlen, dh zurückzugehen und die Dinge später zu verbessern. Wieder nicht etwas, für das Sie immer (jemals?) Das Budget bekommen.

Eine Taktik besteht darin, eine frühe Beta-Version mit der darin enthaltenen "Schnellkorrektur" zu veröffentlichen, aber sicherzustellen, dass die erforderlichen Architekturverbesserungen vor der "vollständigen" Version priorisiert werden. Wieder nicht etwas, was Sie immer (jemals?) Tun müssen.

Phill W.
quelle