Der Unterschied zwischen Best Practices und gesundem Menschenverstand?

13

Es wird viel über Best Practices 1 in der Softwareentwicklung gesprochen. Ich habe gesehen, dass mindestens drei wichtige Punkte sowohl in Bezug auf SE als auch anderswo viel diskutiert wurden:

  • Was ist eine bewährte Methode und warum?
  • Sind Best Practices überhaupt eine Diskussion wert, weil es vernünftig ist zu behaupten, dass keine Praxis eine "beste" Praxis ist?
  • Wann sollten Sie auf eine bewährte Methode - oder vielleicht auf die meisten bewährten Methoden - verzichten, weil sie entweder nicht anwendbar zu sein scheint oder aufgrund externer Einschränkungen (Zeit, Geld usw.), die den Kompromiss unpraktisch machen?

Etwas, das weitaus seltener, aber mehr als nie auftaucht, ist ein Begriff des gesunden Menschenverstands in der Softwareentwicklung. Die jüngsten Erfahrungen haben diesen Gedanken wieder in den Vordergrund gerückt.

Mein erster Eindruck ist, dass es sich um eine andere Diskussion handelt als um bewährte Verfahren, aber möglicherweise mit einer Fremdbestäubung.

Wenn ich an gesunden Menschenverstand im Allgemeinen denke, denke ich an eine Reihe von Regeln, die Sie entweder aufgegriffen haben oder die Ihnen beigebracht wurden und die Ihnen eine Grundlage für die Vernunft und das Treffen von Entscheidungen geben. Dem gesunden Menschenverstand zu folgen ist ein guter Weg, um zu vermeiden, dass Sie Ihr gesamtes Bein abschießen. Aber jenseits einer ziemlich niedrigen Ausgangsbasis weicht der gesunde Menschenverstand einer Notwendigkeit, fundierte Entscheidungen zu treffen, und fundierte Entscheidungen können sogar den gesunden Menschenverstand außer Kraft setzen, wenn die Beweise überzeugend genug erscheinen. Ich spiele hier vielleicht ein bisschen locker mit der Definition, aber ich denke, sie ist nah genug, um mein Beispiel voranzutreiben.

Wenn ich an gesunden Menschenverstand in der Softwareentwicklung denke, denke ich an alle Regeln der Grundhygiene, um zu verhindern, dass eine Codebasis schnell in ein unverständliches Durcheinander zerfällt. Zum Beispiel Dinge wie: Keine einzige globale Struktur verwenden, um den Status innerhalb eines nicht trivialen Programms aufrechtzuerhalten und zu kommunizieren; keine Variablen / Methoden / Klassennamen verwenden, die nur zufälliges Kauderwelsch sind; Dinge, die wahrscheinlich denen ähneln, die wir Anti-Patterns nennen. Wo Best Practices als praktisches Analogon zu Lernmustern angewendet werden, kann die Anwendung des gesunden Menschenverstands als praktisches Analogon des Lernens von Anti-Mustern angesehen werden.

In diesem Sinne möchte ich einige Fragen stellen, deren Beantwortung mir dabei helfen könnte, meinen Weg zu finden.

Glauben andere, dass es in der Softwareentwicklung einen gesunden Menschenverstand gibt? Würde mich interessieren, die Argumentation so oder so zu kennen.

Wenn ja, ist es eine Diskussion wert? Ist es etwas, worauf wir genauso drängen sollten wie manchmal auf Best Practices? Lohnt es sich, noch mehr Druck auszuüben?

Wenn die Analogie zu Antimustern vernünftig erscheint, lautet die allgemeine Regel, dass Antimuster nur verwendet werden, wenn es keinen anderen Weg gibt, und selbst dann nur unter sehr begrenzten Umständen. Wie flexibel sollte man es zulassen, dass eine Codebasis vom gesunden Menschenverstand abweicht? Es erscheint unvernünftig, dass die Antwort "überhaupt nicht" lautet, da Zweckmäßigkeit manchmal Abweichungen erfordert. Aber es scheint eine andere Art von Argument zu sein, als wenn man eine "Best Practice" anwendet. Vielleicht ist es nicht so; Wenn Sie das nicht glauben, würde ich gerne erfahren, warum.

Dies ist weitaus offener und verdient vielleicht eine eigene Folgefrage. Auf welche Arten von Empfehlungen würden Sie hinweisen, die als Angelegenheiten des gesunden Menschenverstands erscheinen?

Andere Gedanken sind auch willkommen.


1 Vielleicht würde ich sie besser als "häufig wiederkehrende Domänenmuster" bezeichnen, aber der Name "Best Practices" ist weit verbreitet genug, damit jeder weiß, was er ist, auch wenn er sich nicht einig ist, dass er es ist. Wenn Sie der "beste" Teil stört, stellen Sie sich vor, ich hätte "Best Practices" durch etwas weniger Autoritäres ersetzt.

Ed Carrel
quelle
2
Mit gesundem Menschenverstand können Sie die Vor- und Nachteile mehrerer Lösungen ausloten und die beste für das Problem auswählen. Jemand, dessen Erfahrung darin besteht, ein paar Bücher über Entwurfsmuster und bewährte Methoden zu lesen, weiß nicht, wo und wie man sie anwendet.
Blrfl

Antworten:

10

Best Practices sind Vorgehensweisen, die sich in einem relativ weiten Bereich als gut erwiesen haben. Das Problem bei ihnen ist, dass A) der Ausdruck manchmal für das Marketing missbraucht wird und B) als feste Regeln, sie nicht flexibel genug sind; Es sollten keine festen Regeln befolgt werden, ohne darüber nachzudenken, ob sie für die aktuelle Situation gelten.

Best Practices sind großartig, wenn sie erklären, warum sie "am besten" sind und unter welchen Umständen sie verwendet werden sollten. Dann können Sie überlegen, wann Sie sie nicht verwenden sollen.

Das Problem mit dem "gesunden Menschenverstand" ist, dass er zu flexibel ist - er kann so ziemlich alles rechtfertigen, und man kann keine vernünftige Diskussion führen, wenn die Leute anderer Meinung sind und beide behaupten, dass ihre Position "gesunder Menschenverstand" ist. Es ist gut, aber schlecht als Richtlinie für ein Team zu haben, um zu folgen.

Michael Borgwardt
quelle
10

Ich denke du hast es rückwärts.

Wenn ich Programmierern die Grundlagen der Sicherheit beibringe, bringe ich ihnen immer die Verwendung bei best practices, und dennoch werde ich im Umgang mit Sicherheitsexperten (oder "sicherheitserfahrenen" Programmierern) nie darüber diskutieren best practices, sondern oft gegen sie verstoßen.

Eine bessere Definition wäre:

"Best Practices" sind für Experten selbstverständlich und sollten von Nicht-Experten angewendet werden.

Das heißt, Sie behaupten erst dann "gesunden Menschenverstand", wenn Sie über genügend Fachwissen auf diesem Gebiet verfügen, um die subtilen Kompromisse zu verstehen. und wenn Sie dies tun, sollten Sie nicht länger blind den "Best Practices" des Ausstechers folgen.

"Best Practices" sind ein temporärer Platzhalter, bis Sie genug Erfahrung haben, um Ihren eigenen "gesunden Menschenverstand" anzuwenden.

AviD
quelle
3
Oh, und wenn Sie nicht mit den Best Practices vertraut sind, haben Sie auch keinen gesunden Menschenverstand.
AviD
7

Best Practices -> "Zuerst lernen Sie die Regeln". Erleben -> "Dann lernst du, wann und wie man sie bricht".

Die Bereitschaft, mit Alternativen zu experimentieren (natürlich in unkritischem Code - vorzugsweise in persönlichen Projekten und Throw-Aways), kann dabei helfen, die Erfahrung aufzubauen, die Sie benötigen.

Gesunder Menschenverstand ist natürlich nicht dasselbe wie Erfahrung, und Sie brauchen nicht immer viel Erfahrung, um den Fehler beim Anwenden einer guten Technik am falschen Ort zu erkennen - aber es ist sehr einfach, falsche Rationalisierungen für Überanwendung und zu konstruieren Unteranwendung einer Technik, und da "gesunder Menschenverstand" hier eindeutig keine angeborene Kenntnis der Programmierung ist, ist dieser Sinn eindeutig nur innerhalb bestimmter Gruppen "gemeinsam".

Es ist sehr einfach, "Partei zu ergreifen". Unmöglich zu vermeiden - manchmal ist wirklich eine Seite richtig und die andere ist wirklich falsch, und es wäre irrational, für ein Gleichgewicht zu streiten. Das Problem dabei ist, dass die wahre Hölle nicht so sehr ein Best-Practice auf Relevanz abwägt, sondern wenn zwei widersprüchliche Best-Practice-Meinungen kollidieren.

Der Umgang damit ist wahrscheinlich viel mehr mit den Fähigkeiten der Menschen als mit den technischen Fähigkeiten verbunden. Ich bin sehr schlecht darin :-(

Trotzdem ist es immer noch wichtig, aus den Erfahrungen anderer Menschen zu lernen und herauszufinden, was die besten Praktiken sind, warum sie angewendet werden und welche Vor- und Nachteile sie haben.

Steve314
quelle
6

Es scheint mir, dass diese Frage eine semantische Täuschung ist. Wenn wir diese Definitionen verwenden, gibt es keine Frage:

Best Practice: Eine in der Praxis bewährte Methode zur Lösung eines Problems in einem bestimmten Bereich (dh Best Practices in Echtzeit sind für Best Practices in Datenbanken völlig fremd).

Common Sense: Berufserfahrung, die dazu dient, den Programmierer vor Gefahren zu warnen, die zu vermeiden sind

Letztendlich ist eine Best Practice ein Meta-Entwurfsmuster zur Lösung einer bestimmten Kongruenz von Problemen und wird auf der Grundlage von Erfahrungen aus der Praxis ausgewählt, während der gesunde Menschenverstand ein Leitfaden zur Problemlösung ist, der auf allgemeinen Beobachtungen über mehrere Problemgruppen basiert.

Patrick Hughes
quelle
Nun ... es ist semantisches Etwas. Ich bin mir nicht sicher, was Tricks angeht. "Gesunder Menschenverstand" bedeutet nicht immer, was es sagt. Es hat einen Sinn dafür erlangt, dem akademischen Regelwerk nicht zu folgen - ein Aspekt des All-Brains-and-No-Common-Sense-Dings, der sich im Grunde auf das Denken außerhalb des Rahmens des Regelwerks bezieht. Manchmal sind Best Practices nicht wirklich anwendbar - die Realität ist zu komplex, als dass eine endliche Menge von Verallgemeinerungen perfekt wäre -, daher muss man manchmal seine eigene Erfahrung und - ähm - "gesunden Menschenverstand" einsetzen.
Steve314
@Patrick: Es war nicht meine Absicht, alle trickreich zu sein. Ein Teil meiner Fragestellung bestand darin, das Verständnis dieser beiden Konzepte, insbesondere des "gesunden Menschenverstands", zu untersuchen, das ich bis zu diesem Punkt hatte. Jeder offensichtliche Trick ist wahrscheinlich nur ein Zeichen dafür, dass meine Intuition für diese Ideen bei weitem nicht perfekt ist.
Ed Carrel
5
Common sense = You.CommonSense

Best practices = Sum(Experts.Experience + Experts.CommonSense)
Benjol
quelle
2
... * Marketing
keppla
4

Interessantes Timing. Letzte Woche wurde dieser Artikel veröffentlicht, in dem diskutiert wurde, warum gesunder Menschenverstand nicht in allen Situationen ideal ist.

Der gesunde Menschenverstand ist hervorragend auf den Umgang mit der in alltäglichen Situationen auftretenden Komplexität abgestimmt. Und weil er in diesen Situationen so gut funktioniert, neigen wir dazu, ihm in allen Situationen zu vertrauen

(meine Worte in Fettdruck)

Grundsätzlich - Menschen sind nicht in der Lage, gesunden Menschenverstand in Bereichen wie diesem zu verwenden, in denen wir kein tief verwurzeltes System entwickelt haben. Deshalb sollten wir IMMER einen dokumentierten Satz von Standards verwenden und uns nicht auf unseren eigenen gesunden Menschenverstand verlassen!

Rory Alsop
quelle
Kognitive Voreingenommenheit ... schon wieder. Und deshalb müssen Sie ein anerkannter Experte sein, bevor Sie sich auf Ihren gesunden Menschenverstand verlassen können ...
AviD
2

Der gesunde Menschenverstand entspricht weder dem Erlernen von Anti-Mustern noch unterscheidet er sich von oder im Gegensatz zu bewährten Verfahren.

Das erste Problem mit dem gesunden Menschenverstand ist sein Name - es führt zu dem Schluss, dass es sowohl normal als auch vernünftig ist. Wie üblich ist es in beiden Punkten einem Angriff ausgesetzt. Verwenden Sie Ihr Beispiel:

Anti-Patterns werden nur eingesetzt, wenn es keinen anderen Weg gibt, und selbst dann nur unter sehr begrenzten Umständen

Nach meinem Verständnis entstehen auf diese Weise keine Anti-Muster. Es ist eine Ansammlung kultureller und sozialer Faktoren; über einen längeren Zeitraum hinweg Best Practices und Standards zu missachten; die Kosten in der Zukunft zu ignorieren, um kurzfristige Vorteile zu erzielen - zum Beispiel, um eine Frist einzuhalten, indem eine kurzfristige Lösung verwendet wird, die ein Alptraum für die Instandhaltung ist; etc. Kein Körper macht sich bewusst daran, ein Anti-Pattern zu entwickeln - er wächst einfach.

Ebenso wird gesunder Menschenverstand viel zu oft verwendet, um zu bedeuten, "dass dies gemeinsam geschieht", und um das Fehlen von Überlegungen, Einsichten und harter Arbeit bei der Lösung des Problems zu rechtfertigen. Es wird auch als Rechtfertigung für "es ist so, wie ich es tue, es ist also offensichtlich gesunder Menschenverstand" verwendet - und als Verteidigung gegen Überprüfung und Kritik.

Was Best Practices anbelangt, sind die ersten beiden Absätze von Michael eine hervorragende Zusammenfassung dessen, was Best Practices sein sollten - eine Ressource, die jedem hilft, das zu verbessern, was er tut. Es bietet auch Transparenz über Entscheidungen (insbesondere über Entwurfsentscheidungen) und die Fähigkeit, von anderen zu lernen. Der Nachteil von Best Practices besteht darin, dass eine Checklisten-Kultur erstellt wird - "Ich habe alle Kästchen angekreuzt, was ich getan habe, muss in Ordnung sein" -, ohne Gedanken, Sorgfalt und Aufmerksamkeit auf die Art der Anwendbarkeit der Checkliste anzuwenden.

Chris Walton
quelle
1

Dies ist ein schlüpfriges Argument, das sich oft in einen Religionskrieg verwandelt.

Fast jeder Best Practice kann mit einem gültigen Fall des Gegenteils begegnet werden.

Einige Best Practices sind besser als andere. Globale Zustandsvariablen werden fast immer besser auf eine andere Art und Weise erstellt, und GOTO ist normalerweise eine schlechte Idee, aber wenn Sie in die Argumente Muster / Anti-Muster oder direkte Daten / abstrahierte Daten einsteigen, wird es ein wenig weniger klar. Dies gilt umso mehr, wenn Sie über Entwicklungsmethoden und -praktiken sprechen.

In einigen Situationen stehen der gesunde Menschenverstand und bewährte Methoden sogar im Widerspruch zueinander.

Es gibt kein Regelwerk für bewährte Praktiken und keine einzelne Gruppe, auch wenn sie existiert, könnte jedes mögliche "Beste" für jede mögliche Situation definieren. Viele Dinge, die als Best Practices bezeichnet werden, sind nur schlechtes Marketing, das versucht, nicht informierte Tools oder Schulungen für Einzelpersonen zu verkaufen.

Auch wenn Ihr gesamtes Team der Meinung ist, dass etwas das Beste ist, ist es nicht immer möglich, es auf diese Weise für verschiedene einschränkende Faktoren umzusetzen.

IMHO müssen Sie Best Practice als Leitfaden verwenden, was bei Ihrem Design genauer zu berücksichtigen ist. Möglicherweise haben Sie einen gültigen Grund für die Abweichung, aber Sie müssen wahrscheinlich sicherstellen, dass alle anderen Mitglieder des Teams zustimmen, bevor Sie etwas Seltsames bauen.

Einige der Argumente über Best Practices nach diesem Punkt beschränken sich darauf, nichts zu erstellen, was der nächste Entwickler, der daran arbeiten muss, hassen wird. Jeder hasst Code, der nicht zu seinem Stil gehört, und jeder gibt jedem, der geht, die Schuld an allem. Entweder erklärst du es dem nächsten Entwickler, nachdem er über etwas gemurrt hat, oder du wirst nicht da sein und schlecht reden von unabhängig davon, wie Sie es codieren. Dies macht diese Sorge zum größten Teil irrelevant.

Rechnung
quelle
1

Der gesunde Menschenverstand liefert nicht immer die besten Ergebnisse. Es wurden jedoch bewährte Methoden ausprobiert. Dies macht Best Practices zu einer zuverlässigeren Informationsquelle.

DeadMG
quelle
0

Die besten Praktiken sind nicht die besten und der gesunde Menschenverstand ist nicht die Regel. ;-)

Entweder für Best Practices oder für den gesunden Menschenverstand stelle ich sie mir gern als Muster vor. Denken Sie an die Definition eines Musters: Eine Lösung in einem Kontext , die Kräfte in einen resultierenden Kontext auflöst .

Für alles, was Sie tun möchten, sollten Sie den Kontext kennen, auf den es angewendet wird, die Kräfte, die es auflöst, und den resultierenden Kontext, den es erstellt. Entscheiden Sie dann in Ihrem Team, welche Muster Sie generell verwenden möchten. (Dies kann formal oder informell sein, aber in beiden Fällen ist es viel größer als nur das Buch der Viererbande. Dazu gehören Sprachausdrücke und lokale Hilfsbibliotheken, nicht nur veröffentlichte Muster.)

Wenn Sie aufgrund Ihrer Erfahrung der Meinung sind, dass es unter bestimmten Umständen besser ist, kein bestimmtes Muster zu verwenden, sondern etwas anderes zu tun, lassen Sie es die Leute wissen. Wahrscheinlich sind der Kontext oder die Kräfte hier unterschiedlich (oder der daraus resultierende Kontext wäre unerwünscht). Es ist mir egal, ob es sich um eine Besprechung, einen Codekommentar oder was handelt, aber wenn Sie klarstellen, dass Sie das Muster absichtlich gebrochen haben , Sie werden Meilen voraus sein.

Sean McMillan
quelle
-1

Best Practice ist das, was sie dir in der Schule beibringen. Der gesunde Menschenverstand ist das, was der Chef von dir will. Ersteres erstellt Software, die bestimmte Standards in Bezug auf Eleganz, Stil und dergleichen erfüllt. Letzterer zahlt die Rechnungen / verdient das Geld, so dass Sie jede Woche bezahlt werden.

Eins ist Kunst, das andere Geschäft, zu viele von uns vergessen es.

mattnz
quelle
Der Chef kümmert sich nicht darum, wie Sie Ihre Handlungsweise rationalisieren, er kümmert sich darum, keine Probleme zu haben. Eine Lösung, die Sie als "mit gesundem Menschenverstand erreicht" bezeichnen, ist für ihn genauso gut wie eine "mit bewährten Methoden erreicht"
keppla
Lassen Sie mich meine Antwort umformulieren. Best Practice wird oft als Entschuldigung für Überentwicklung verwendet, insofern als sie in vielen Softwarehäusern synonym sind. Common Sense verzichtet im Interesse eines erfolgreichen (in der Regel kommerziellen) Abschlusses des Projekts auf Überengineering.
Mattnz
-1

Um es ein wenig zu übertreiben: Der Unterschied ist, dass der gesunde Menschenverstand Vorurteile sind, und dass die beste Praxis die Wissenschaft ist (sollte es sein)

Meiner Erfahrung nach wird "gesunder Menschenverstand" verwendet, wenn man keine Beweise oder zumindest Argumente für eine Vorgehensweise liefern möchte. Das bedeutet nicht, dass der Weg notwendigerweise falsch ist, aber es bedeutet nicht, dass er auch gut ist.

Unter den Dingen, denen ich begegnet bin und die als vernünftig eingestuft wurden, sind diese Edelsteine.

  • Die HTTP-Methode ist weitgehend irrelevant. Verwenden Sie GET, wenn Sie wenig Daten übertragen. Verwenden Sie POST, wenn Sie mehr Daten übertragen (dh zu viel für die URL).
  • Funktionen sollten nicht zu klein sein, da es schwierig ist, sich daran zu erinnern, was sie tun. Eine große Funktion ist 5 kleineren vorzuziehen, da Sie sie als eine lesen können
  • Die Datenbank und der Webserver MÜSSEN auf demselben Computer ausgeführt werden, andernfalls wird der Webservice zu langsam. Die einzige Möglichkeit zur Skalierung besteht darin, den Code durch Hacks und den Verzicht auf Abstraktion zu beschleunigen, sodass die Leistung einer Maschine ausreicht.

Das Lustige an "Common Sense" ist, dass es nicht so häufig vorkommt: Wählen Sie zwei Teams aus und lassen Sie sie sagen, was sie für "Common Sense" halten, und genießen Sie die Religionskriege.

Andererseits würde ich als 'Best Practice' Möglichkeiten in Betracht ziehen, Dinge zu tun, die ein bisschen mehr 'Peer Review' haben. Um etwas als "best practice" zu betrachten, würde ich erwarten, dass es klar genug formuliert ist, um als Konzept präsentiert zu werden ("strukturierte Programmierung" ist "best practice", "gotos sind verwirrend, meide sie" ist gesunder Menschenverstand) und mehrmals angewendet, mit guten Ergebnissen.

keppla
quelle
Wollen Sie damit sagen, dass "Best Practice" immer in jeder Situation angemessen ist, und wo Best Practice bewusst nicht durchgeführt wird, ist es schlecht ("nicht gut").
Mattnz
1
Nein, ich sage, "Best Practice" hat eine höhere Wahrscheinlichkeit, nicht völlig unvernünftig zu sein, weil es im Gegensatz zum gesunden Menschenverstand "Peer Review" überstanden hat, was nur einer Person vernünftig erscheinen muss. Ich bin nicht dagegen, etwas umzusetzen, was man als "gesunden Menschenverstand" ansieht, ich bin dagegen, etwas als gesunden Menschenverstand zu rechtfertigen.
Keppla