Cargo cultingは避けられない
新しい開発者がcargo cultしか助けられないのは議論の余地がありません。彼らは単にフードの下で何が起こっているのか、なぜ物事が特定の方法で行われなければならないのかを本当に理解するのに十分なスタックを学
たとえば、私の最初のプログラミングコースの一つで、Javaではプログラムへのエントリポイントが次のようになることを学びました。
:p>
public static void main(String args)
そのメソッドシグネチャのすべての部分を理解するまでに何年もかかりました。その時に私に説明されたとしても、私はそれを理解していなかったでしょう。私は、メソッドの可視性、クラスとインスタンスのメソッド、戻り値の型、パラメータの型、配列(リスト/ベクトルとは対照的に)、コマンドラインの引数(およそれは大丈夫です。
JavaでコマンドラインやGUIプログラムを書くためには、そのことを理解する必要はほとんどありません。私たちは、新しい開発者が彼らが行うすべての決定のインとアウトを知っていることを期待していません。
彼らはちょうどスタックのすべての部分についてのすべての詳細を理解するのに十分な長さをプログラミングされていません。
gitが有向非循環グラフにコミットを格納し、各ブランチがノード内の一つのノードへのポインタであることを知っていることも期待していません。
graph.It彼らはgit checkout
git commit
を実行して自分の仕事に乗ることができるほど十分です。そして、「決して早送りマージしない」(または「常に早送りマージ」)のようなルールに従うならば、それは十分です。しかし、上級開発者にとっても、それは避けられません。
しかし、それは避けられません。上級開発者は、Stack Overflowで検索する必要があるすべてのgitコマンドを本当に理解していますか?または、GitHubで昨日検索したワンライナーのawk
sed
部分?または、WEBアプリケーションAPIが応答するHTTP応答のすべてのヘッダーですか?または、GitHubリポジトリからHTTPSとSSH URLを使用する場合はどうすればよいですか?または、ローカルのPostgreSQLインスタンスを最適に設定する方法は?またはあなたのNeo4Jインスタンス?または、rvm/rbenv/chruby/virtualenv設定を吹き飛ばして最初から再構築することなくデバッグする方法は?
カルトを貨物にしない唯一の方法は、すべてを知ることです。そして、誰もすべてを知っていません。
貨物のカルティングは良いです
貨物のカルティングは良いです使用される場合responsibly.It すべてを知っていることから私たちを保存します。よく使用されたとき、それは分野の皆のハードウォンの専門知識をてこ入れすることの行為である。間違いなく、それがどのように機能するかを理解せずに抽象化をまったく使用しています(これは抽象化の全体のポイントです!)は、リッパートの定義による貨物輸送である。
さらに、貨物のカルティングは、多くの場合、良い選択です。”これらの人々は、彼らが何をしているかを知っているように見えるので、私は彼らのリードに従います”と完全に合理的な戦略です。
実際には、プログラミングコミュニティは積極的に貨物カルティングを奨励しています。私たちが人々に”グローバルな状態を使わないでください”、または”PEP8に従ってください”と言うとき、私たちは彼らにカルトを貨物に伝えています。たとえば、開発者は、グローバル状態があなたを噛むことができる微妙な方法を(時にはそうではない)理想的に理解するでしょうが、理解があるまで、それrails(およびその無数のクローン)、Django、およびEmberに見られるような”設定上の規則”。js
責任を持ってカルトカーゴする方法
明らかに、カーゴカルトにはいくつかの大きな欠点がありますが、今ではいくつかのアップサイドも見てきました。私たちは、彼らがなぜ働くのかを常に完全に理解することなく、今すぐ仕事を終わらせるツールやテクニックを使用したいと考えています。貨物カルトを完全に避けるのではなく、どのようにして貨物カルトを効果的に行うことができますか?
一つの大きな注意点:貨物カルティングの固有のリスクは、あなたが根本的にあなたが行っている決定を理解していないので、あなたが何がうまくいかないか、またはあなたが遭遇する可能性のある問題のクラスさえも予測することができないということです。それは言った、ここに少数の先端はある。
テストを書く
コードがなぜ動作するのか理解していなくても、コードが期待どおりに動作するように自動テストを書くことができます。簡単な例は、Stack Overflowからソートアルゴリズムをコピーして貼り付けると、それが機能していることを確認するためのテストを書くことができます。しかし、テストは予期しない副作用やエッジがないことを証明するのが得意ではないので、注意してください。
cases.In ソートアルゴリズムの例では、どのエッジケースを心配する必要があるのか分かりません。
Refactor mercilessly
コードをきれいに保つほど、貨物のカルト化された決定を変更する必要があるときについて推論するのが簡単になります。テストなしでは効果的にリファクタリングすることはできません。
貨物カルティングコードの分離
可能な場合は、貨物カルティングコードをクラスまたはモジュールに分離します。より多くのあなたがそれを分離することができ、より多くのあなたは、その潜在的な損傷を制限します。また、それがより孤立しているほど、あなたがそれについてもっと理解したら、置き換えたり書き換えたりするのが簡単になります。
あなたのアプリの重要な部分にカルトを貨物しないでください
たとえば、高い並行性があなたのアプリにとって絶対的な必要性で本質的に並行性をうまく処理する言語(Elixir、Go、Clojureなど)を選択しても、魔法のように問題を解決することはできません。残念なことに(または幸いにも)、あなたは本当に掘り下げて何かを学ぶ必要があります。
失敗が悪いことが起こっている場合、カルトを貨物しないでください
人々の安全、プライバシー、お金などの場合。 危険にさらされている、カルトを貨物しないでください。明白な例として、誰かのペースメーカーがStack Overflowからコピーした特定のC one-linerを実行している場合、あなたの小さなトリックがなぜ機能するのか、そして失敗の
さまざまな入力を扱うときに貨物カルティングを避ける
たとえば、awk superをよく知らず、awk one-linerへの入力がユーザー入力から来る場合、破損する可あなたの入力が取ることができるさまざまな形式を予測することができれば、それは助けになりますが、あなたが予測できなかった入力ケースで破あなたのマシン上で動作するからといって、環境が異なり、ユーザーが考えたことのないことをする本番環境で動作すると仮定しないでください。エラー、例外、アサーションの失敗、およびパフォーマンスを監視すると、ユーザー、クライアント、または上司がそれを認識する前に何かが間違ってい
コードレビュー、ペアプログラミング、静的解析ツールなどあなたのコードを見るために、仮想またはそれ以外の他の目を取得します。
あなたのコードを見るために、他の目を取得します。ペアプログラミングとコードレビューは明白な例ですが、静的解析ツール(CodeClimateなど)も役立ちます。明らかな間違いをキャッチするだけでなく、常に期待どおりに動作しない可能性のあるコードを指摘するのに特に役立ちます。
より深い理解に移動
貨物カルティングから始めることで、あなたはすでにいくつかのコンテキストを持っているでしょう主題に深く潜より深い理解への道は、自己学習、指導、ペアプログラミング、または学習のために自分で行うことができます。
これは古いニュースです
上記のヒントは、あなたが前に聞いたことのあるすべてのものです。それは私達がすべて限られた知識を使用しているのである。私たちは、すべての貨物カルトすべての時間と我々は部分的な知識を前進させ、我々が行うことができます被害を制限することができますので、我々は直感、技、およびガイドラインを開発してきました。決して貨物カルトではなく、良い開発者は効果的に貨物カルトに学びます。