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.