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.
quelle
Antworten:
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.
quelle
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 diskutierenbest practices
, sondern oft gegen sie verstoßen.Eine bessere Definition wäre:
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.
quelle
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.
quelle
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.
quelle
quelle
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!
quelle
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:
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.
quelle
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.
quelle
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.
quelle
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.
quelle
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.
quelle
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.
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.
quelle