Cargo Culting ist unvermeidlich
Es ist unumstritten, dass neue Entwickler nicht anders können als Cargo cult.Sie haben einfach nicht genug vom Stack gelernt, um wirklich zu verstehen, was unter der Haube vor sich geht und warum Dinge auf eine bestimmte Weise getan werden müssen.
Zum Beispiel haben wir in einem meiner ersten Programmierkurse gelernt, dass in Java der Einstiegspunkt in das Programm ist:
public static void main(String args)
Es hat Jahre gedauert, bis ich an den Punkt gekommen bin, an dem ich jeden Teil dieser Methodensignatur verstanden habe.Selbst wenn es mir damals erklärt worden wäre, hätte ich es nicht verstanden.Ich hätte Methodensichtbarkeit, Klassen-vs. Instanzmethoden, Rückgabetypen, Parametertypen, Arrays (im Gegensatz zu Listen / Vektoren), Befehlszeilenargumente (und wie sie von der Shell analysiert werden) und verschiedene Details zur Java-Implementierung verstehen müssen.
Und das ist OK.Es stellt sich heraus, dass Sie kaum etwas davon verstehen müssen, um Befehlszeilen- oder sogar GUI-Programme in Java zu schreiben.
Wir erwarten nicht, dass neue Entwickler die Details jeder Entscheidung kennen, die sie treffen.Sie haben einfach nicht lange genug programmiert, um jedes Detail über jeden Teil des Stapels zu verstehen.
Wir erwarten auch nicht, dass sie wissen, dass git Commits in einem gerichteten azyklischen Graphen speichert und jeder Zweig ein Zeiger auf einen Knoten in der graph.It es ist gut genug, dass sie git checkout
und git commit
und mit ihrer Arbeit weitermachen können.Und es ist gut genug, wenn sie einer Regel wie „never fast-forward merge“ (oder „always fast-forward Merge“) folgen.
Aber selbst für erfahrene Entwickler ist es unvermeidlich.Welcher Senior-Entwickler versteht wirklich alle Git-Befehle, die er bei Stack Overflow nachschlagen muss?Oder der awk
und sed
Teil des Einzeilers, den sie gestern auf GitHub nachgeschlagen haben?Oder jeder Header in der HTTP-Antwort, mit der ihre Webanwendungs-API antwortet?Oder wann sollten Sie die HTTPS-vs. die SSH-URL aus Ihrem GitHub-Repo verwenden?Oder wie konfigurieren Sie Ihre lokale PostgreSQL-Instanz am besten?Oder Ihre Neo4j-Instanz?Oder wie debuggen Sie Ihr rvm / rbenv / chruby / virtualenv-Setup, ohne es wegzublasen und von Grund auf neu zu erstellen?
Der einzige Weg, Cargo Cult zu vermeiden, ist, alles zu wissen.Und niemand weiß alles.
Cargo Culting ist gut
Cargo Culting ist gut, wenn es verwendet wird responsibly.It erspart uns, alles wissen zu müssen.Wenn es gut verwendet wird, ist es der Akt der Nutzung der hart erkämpften Expertise aller anderen auf dem Gebiet.Verwenden Sie wohl überhaupt eine Abstraktion, ohne zu verstehen, wie sie funktioniert (was der springende Punkt der Abstraktion ist!) ist Cargo Culting nach Lipperts Definition.
Darüber hinaus ist Cargo Culting oft eine gute Wahl.“Diese Leute scheinen zu wissen, was sie tun, also werde ich ihrem Beispiel folgen“, ist eine vollkommen rationale Strategie.
Tatsächlich fördert die Programmiergemeinschaft aktiv das Cargo Culting.Wenn wir den Leuten sagen, „Benutze keinen globalen Staat“ oder „Folge PEP8“, sagen wir ihnen, dass sie Cargo Cult sollen.Zum Beispiel würde ein Entwickler idealerweise die (manchmal nicht so) subtilen Möglichkeiten verstehen, wie global state Sie beißen kann, aber bis das Verständnis da ist, ist es besser, es einfach zu vermeiden.
Einige andere großartige Anwendungen von Cargo Culting:
- „Konvention über Konfiguration“ wie in Rails (und seinen unzähligen Klonen), Django und Ember zu sehen.js
- Styleguides und ihre Werkzeuge, wie Rubocop, JSLint und Auto PEP8
- Viele statische Analyse-Tools, wie CodeClimate, Reek, Flay und Flog
- Die 12factor App guidelines
- Code Smells
Wie man Cargo cult verantwortungsvoll betreibt
Offensichtlich hat Cargo Culting einige große Nachteile, aber jetzt haben wir auch einige Vorteile gesehen.Wir möchten Werkzeuge und Techniken verwenden, die die Arbeit jetzt erledigen, ohne immer vollständig verstehen zu müssen, warum sie funktionieren.Wie können wir Cargo-Kult effektiv machen, anstatt Cargo-Kult insgesamt zu vermeiden?
Die einzige große Einschränkung: Das inhärente Risiko von Cargo Culting besteht darin, dass Sie nicht vorhersagen können, was schief gehen wird oder welche Art von Problemen auftreten können, weil Sie die Entscheidungen, die Sie treffen, grundsätzlich nicht verstehen.Das heißt, hier sind ein paar Tipps.
Write tests
Sie können automatisierte Tests schreiben, um sicherzustellen, dass Ihr Code wie erwartet funktioniert, auch wenn Sie nicht verstehen, warum der Code funktioniert.Ein einfaches Beispiel wäre, wenn Sie einen Sortieralgorithmus aus Stack Overflow kopieren und einfügen, können Sie einen Test dafür schreiben, um sicherzustellen, dass er funktioniert.
Seien Sie jedoch vorsichtig, denn Tests sind nicht so gut darin, zu beweisen, dass es keine unerwarteten Nebenwirkungen oder cases.In am Beispiel des Sortieralgorithmus wissen Sie nicht, um welche Randfälle Sie sich kümmern müssen.
Gnadenlos umgestalten
Je sauberer Sie den Code halten, desto einfacher wird es, darüber nachzudenken, wann eine frachtkultierte Entscheidung geändert werden muss.Und denken Sie daran, dass Sie ohne Tests nicht effektiv umgestalten können.
Isolate cargo culted code
Wenn möglich, isolieren Sie Cargo culted Code in eine Klasse oder ein Modul.Je mehr Sie es isolieren können, desto mehr begrenzen Sie seinen potenziellen Schaden.Je isolierter es ist, desto einfacher ist es, es zu ersetzen oder neu zu schreiben, sobald Sie mehr darüber verstanden haben.
Verwenden Sie cult nicht in kritischen Teilen Ihrer App
Wenn beispielsweise eine hohe Parallelität für Ihre App unbedingt erforderlich ist, können Sie wahrscheinlich keinen Threading-Code von Stack Overflow kopieren.Selbst die Wahl einer Sprache, die die Parallelität von Natur aus gut handhabt (wie Elixir, Go oder Clojure), löst Ihr Problem nicht auf magische Weise.Leider (oder zum Glück) müssen Sie sich wirklich einarbeiten und etwas lernen.
Mach dir keine Sorgen, wenn ein Misserfolg dazu führt, dass schlimme Dinge passieren
Wenn die Sicherheit, Privatsphäre, das Geld usw. der Menschen. sind in Gefahr, nicht Cargo Cult.Als offensichtliches Beispiel, wenn jemandes Schrittmacher einen bestimmten C-Einzeiler ausführt, den Sie von Stack Overflow kopiert haben, wissen Sie verdammt noch mal besser, warum Ihr kleiner Trick funktioniert und was die Fehlerfälle und Nebenwirkungen sind.
Vermeiden Sie Cargo Culting, wenn Sie mit unterschiedlichen Eingaben umgehen
Wenn Sie beispielsweise awk nicht sehr gut kennen und die Eingabe in Ihren awk-Einzeiler von Benutzereingaben stammt, ist dies wahrscheinlich der Fall brechen.Wenn Sie die verschiedenen Formen vorhersagen können, die Ihre Eingabe annehmen kann, wird dies hilfreich sein, aber Sie sollten bedenken, dass es wahrscheinlich zu Fehlern bei Eingabefällen kommt, die Sie nicht vorhersehen konnten.
Monitor in der Produktion
Nur weil es auf Ihrem Computer funktioniert, gehen Sie nicht davon aus, dass es in der Produktion funktioniert, wo sich die Umgebung unterscheidet und Benutzer Dinge tun, die Sie nie in Betracht gezogen haben.Durch die Überwachung von Fehlern, Ausnahmen, Assertionsfehlern und Leistung können Sie wissen, ob etwas nicht stimmt, bevor Ihre Benutzer, Clients oder Ihr Chef dies bemerken.
Codeüberprüfung, Paarprogrammierung, statische Analysetools usw.
Lassen Sie andere Augen, virtuell oder anderweitig, Ihren Code betrachten.Pair Programming und Code Review sind offensichtliche Beispiele, aber auch statische Analysetools (z. B. CodeClimate) können hilfreich sein.Neben dem Auffangen offensichtlicher Fehler sind sie besonders hilfreich, um auf Code hinzuweisen, der möglicherweise nicht immer wie erwartet funktioniert.
Gehen Sie zu einem tieferen Verständnis
Wenn Sie mit Cargo Culting beginnen, haben Sie bereits einen Kontext, wenn Sie sich entscheiden, tief in das Thema einzutauchen.Der Weg zu einem tieferen Verständnis kann Selbststudium, Mentoring, Pair Programming oder einfach nur das Lernen sein.
Das sind alte Nachrichten
Die oben aufgezählten Tipps sind wahrscheinlich alles, was Sie schon einmal gehört haben.Das liegt daran, dass wir alle mit begrenztem Wissen arbeiten.Wir alle Cargo Cult die ganze Zeit und wir haben Intuition, Techniken und Richtlinien entwickelt, damit wir mit teilweisem Wissen vorankommen und den Schaden begrenzen können, den wir anrichten können.Anstatt Cargo Cult zu verwenden, lernen gute Entwickler, Cargo Cult effektiv zu nutzen.