この記事は、過剰なエンジニアリングと、非常にシンプルであるという理由だけで古い松葉杖ソリューションを好む人々に捧げられています。 カットの下の翻訳。
ジェイミー・ザウィンスキーは、私が「松葉杖プログラマ」と呼ぶ人の一人です。 そして、私はこのフレーズをかなりの敬意をもって発音します。 彼は一生懸命に働き、未来を作り、あらゆる種類の有用なものを開発するプログラマーの出身です。 つまり 彼らは作業成果物の作り方を知っています。
彼の2つのお気に入りのツールは松葉杖とWD-40であるため、これはまさにチームが自転車を作成する場合に必要な人です。 そして、自転車が毎分1マイルの速度で丘を駆け抜けるときでも、彼はエレガントにそれらを所有しています。 一方、他のプログラマーはまだ立ち上がっており、どちらが良いかを主張しました。チタンまたはボーイングが787で使用した宇宙時代のユニークな複合材料です。
完了すると、ずさんな自転車が手に入りますが、確実に離陸することを確信できます。
ピーターザイベルの著書Coders at Workでジェイミーのインタビューを読んだばかりです。 これは、Peter Norwig、Guy Steele、Donald Knutなどの偉大なプログラマーへの膨大なインタビューのセットです。 この本は非常に興味深いので、昨日は通常の30時間ではなく、60分間もソファで過ごしました。 読むだけで止められませんでした。 私が言ったように、それを読んでください。
どうぞ! 待っています。
ご注意 Perev。:Coders at Work-インタビュー集。 有名なプログラマーが同じ質問リストに答えます。 1つのインタビュー-1つの章。 わずか15章。
これは松葉杖のプログラマーが大好きなものです。 想像してみてください。あなたはチームで働いています。 あなたはコードを必死に走り書きしています。 そして、誰かがコーヒーマグを手に持ってテーブルに近づき、おしゃべりを始めます。彼らは、マルチスレッドCOMユニットを使用すれば、アプリケーションのクールさを最大34%高めることができると言います。 そして、これはそれほど難しくありません、彼はテンプレートのパックを集めました、そして、あなたがしなければならないのは、それぞれが4つの引数の平均をとる17のテンプレートから継承する多重継承を使用することです、そして、あなたは関数の本体を書くだけです 一連のクラスの多重継承の巨大なリストと、COMのマルチスレッドユニットだけが表示されます。 そして、あなたの意識は浮かんでいて、あなたはこのおしゃべりが何について話しているのか理解するのをやめます。 しかし、彼はただ去りたくないだけでなく、彼が去ったとしても、単一の実装なしで完全に多重継承に基づいてさらにスマートなクラスを書くために彼のオフィスに戻った後にのみです。 そして、構造全体がバタンと崩れたとき、すでに真夜中に来て、それを理解するように頼まれるのはあなたです 。なぜなら、 それはすでにデザインパターンに関するいくつかのクソ会議であるからです。
松葉杖のプログラマーは言うことを恐れていません:「多重継承は吸う。 彼を捨てます。 捨てるだけです。」
ご覧のとおり、他の人は誰もが馬鹿のように思えないほど恐れており、複数の継承、テンプレート、マルチスレッド、COM、またはこれらのいずれかを機能させるのに十分な事実を同時に頭に置くことができないことを認めています。 そのため、会議で講演したり、記事や本を書いたり、彼らが推進するギズモが私たちにとってあまりにも複雑であることに気付かないほど高度な建築宇宙飛行士の流行のプログラミング狂気に恐ろしく同意します。
そして、NetscapeについてZawinskiが言っていることは次のとおりです。「C ++やマルチスレッドを使用しないなどのソリューションで、製品を予定通りにリリースすることができました。」
彼は後にNetscapeで電子メールクライアントを作成しましたが、画面にメッセージを直接表示する担当チームはコンポーネントをリリースしませんでした。 「ウィンドウの中央に空の大きな長方形を置く必要がありました。そこではテキストを簡単に表示できました。 しかし、彼らはDOM / DTD側から物事を見ようとして、理論的にもプロジェクトに近づきました。 「うーん...抽象レイヤーを追加して、デリゲートをデリゲートに委任するだけで、その後シンボルが最終的に画面に表示されます。」
「過剰なエンジニアリングはあなたを大いに悩ませるようです」とピーターは言いました。
「はい」とザウィンスキーは言った。 -一日の終わりに、クソ製品をリリースしてください! もちろん、コードを書き直してすっきりさせることはクールであり、3回目以降は本当に美しくなります。 しかし、それは目標ではありません。 あなたはコードを書くためではなく、製品をリリースするためにここにいます!
私のヒーロー
Zawinskiは多数の単体テストを気にしません。 彼らは「理論的には見栄えがする…。 ゆっくりと開発のペースを選択する場合-これがあなたの方法です。 しかし、「6週間で完全にゼロから作成する必要がある」を見て、まあ...これはカットなしでは非現実的だと理解しています。 そして、私はあまり重要ではない何かを捨てるつもりです。 また、単体テストは重要ではありません。 それらが存在しない場合、ユーザーは不在について文句を言うことすらありません。」
動揺する前に、ザウィンスキーが世界を変えたときにNetscapeにいたことを思い出してください。 彼らは、他の誰かがすべてのクリームを取り去るのに数ヶ月しかないと思っていました。 多くの重要なコードがこのスタイルで書かれています。
松葉杖プログラマは実用主義者です。 ザウィンスキーは、リチャードガブリエルの忠告を広めました 。 人々がすでに持っている50%の理想的なソリューションは、誰も持っていない99%の理想よりも多くの問題を解決し、長生きします。 リリースは機能です。 本当に重要な機能。 製品に含まれている必要があります。
松葉杖プログラマーによく知られている原則:少し複雑すぎるコーディングテクノロジは、プロジェクトを埋めます。 Crutchプログラマーは、C ++、テンプレート、多重継承、マルチスレッド、COM、CORBA、および他の多くのテクノロジーを避ける傾向があります。多くの場合、長い間考えればアプリケーションは正当化されますが、人間の脳にとっては少し複雑です。
もちろん、COMを使用してWindows上のC ++でマルチスレッドコードを記述しようとしても、正式には何も問題はありません。 しかし、これは壊滅的なバグを伴うゴミであり、その多くは特定の時間シナリオでのみ発生します。すべては、脳がそのようなコードを扱うにはあまり良くないからです。 平凡なプログラマーは防御的な立場を取り、そのような過度に複雑なコードを書くことができないことを認めたくありません。 そして、彼らはチームの勇敢な人が鈍いC ++テンプレートアーキテクチャでプロジェクトを耕すことを可能にします。そうでなければ、彼らはSpock自身が理想的なプログラミング技術として認識するものを使用するのに十分に進歩していないことを認めなければならないからです
松葉杖はプログラマーにあなたが彼らについて考えることをたわごとを与えません。 彼らは、シンプルで使いやすいツールの支持者であり、追加の脳力を解放して、ユーザーに新しい機能を作成するよう指示します。
ただし、注意が必要な点が1つあります。松葉杖のプログラマーは、ITに匹敵するナイスガイです。 はい、昨日汚れた服を着て、汚れた歯で家をボサボサにして去ることができて、彼らの性質によってまだ見栄えの良いダンディー。 私の友人であるあなたは、乱れた髪で公共の場に現れることはできません。さもなければ、あなたは地区全体を怖がらせるでしょう。
あなたはハンサムな男ではないからです。
松葉杖のプログラマーは、このすべてのがらくたを処理するのに十分な才能を持っています。 彼らは製品をリリースするのに十分であり、ユニットテストを書いたり、リンクリストの「前」と「次」のポインタを突いていない場合でも、32ビットのメモリを解放することができます。 彼らはこれを処理するのに十分ですので。
トピックに関する追加資料:
Java OVER ENGINEERING ( クラスファクトリーファクトリー )
数学者への恥 (ドミトリー・ドルゴフによる壮大なメモ)