質問

だから私はここに座ってキャッチボールをしながら聞いています スタック オーバーフロー ポッドキャスト #20 そしてジョエルは、ポインターを使用して動作するコードのパフォーマンスを向上させるために独自のコンパイラーを作成した MS の Excel 担当者について話していて、私は不思議に思いました。

   when is it NIH versus being a sensible investment of time?

現在のコンパイラのパフォーマンスが最悪だった当時の状況を考えると、このケースを経営陣に売り込むのは無理があることがわかります。 かなり 追加したい特定の最適化領域があった場合には、これは簡単です。

しかし今では、経営陣に行き、gcc を書き直す時間が欲しいと言おうとすることを想像できますか?

では、人々は、そのアイデアが追求する価値があるものなのか、それとも NIH 症候群で滴る「風車を傾ける」ような追求なのかをどのように判断するのでしょうか?

私が質問しているのは、運用プラットフォームのいくつかの側面を改善するためにある程度の時間を割り当てる必要があるためです。私が興味があるのは、「キャップを手に」、ほとんどの人が将来確実に成果を上げるとわかっている改善を行うための時間をザ・マンに依頼する方法です。

編集:強調するのを忘れていましたが、当社は大手放送局にプラットフォームを提供するサービス会社です。過去 15 年間にわたって有機的に成長してきたこのプラットフォームには、いくつかの改善が必要です。このサービスの提供は当社の中核的なビジネス機能です。

役に立ちましたか?

解決

すべては競争上の優位性に関するものです。

Excel チームのメンバーは、Excel を他の方法よりもはるかに小さくできるように独自のコンパイラを作成しました。これにより、ロード時間とプログラムが使用するメモリ量が削減されました。それが彼らの製品を競合他社よりも優れたものにしました。

同様に、Jeff は PhpBB を使用してこのサイトを作成することもできましたが、その場合は次のようになります。 ただ 競争のように。彼はフォーラムを持った単なる別の男だろう。彼は自分のサイトを競合サイトと区別できるように独自のフォーラム エンジンを作成しました。

NIH を導入することで明らかに競争上の優位性が得られる場合、またはそうすることで競合他社との差別化が図られる場合にのみ、NIH を導入する必要があります。

他のヒント

ジョエル自身がそう答えており、彼の最善のアドバイスは次のとおりです (これは合理的だと思われます)。それが中核的なビジネス機能である場合は、何があっても自分で実行してください。

それに加えて、 それがコア機能ではない場合は、経済的および技術的な正当な理由が必要です.

ところで、時間がかかる改善はどのような形でNIHでカバーされるのでしょうか?

数か月前にも(漠然と)同様の問題があり、ダウンストリーム ライブラリの不安定性に対応するためにすでに構築した別の方法をやり直す時間が必要でした。最終的に承認を得るのはかなり簡単だったようです。アプリは苦しんでいたので、彼らは私たちの言うことを信じてくれたのだと思います。

PS

おそらく愚かな質問であり、決して答えではありませんが、NIHとは何ですか?

メモリ割り当ては私のすべてのソフトウェア、ひいては私のビジネスの「中核」要件ですが、私は通常、独自のアロケータやコレクタを作成しません。

エンジニアリングにおける他のすべてのことと同様、どのような場合にも一連のトレードオフが存在します。これらを作成するには経験が必要で、さまざまな方法で適切に処理できますが、ブロガーのサウンドバイトで要約することはできません。

サードパーティ製品の品質を上手に評価できるように努めてください。この議論の始まりとなった log4net は、最近いくつかの有名なプロジェクト (nUnit など) によって削除された無視ウェアです。それは私をがっかりさせるのに十分だったでしょう。

ヴィンコさん、それはあなたの「中核的なビジネス機能」の定義によって異なります。私のビジネスが会計である場合、ローン利息の計算は間違いなく中核的なビジネス機能になりますが、それは決して私の会社に特有のものではありません。このような「標準」のものは、社内で作成することはほとんどありません。

利用可能なコンポーネントが必要な機能を備えている場合は、毎回それを使用します。それを機能させるために多くの議論をしなければならない場合は、代わりに自分で書くことを検討するかもしれません。法的な問題も考慮する必要があります。完全に優れたライブラリであっても、ウイルス ライセンス (GPL と LGPL) のせいで商用アプリケーションでは使用できない場合があります。

@Will 組み込みソフトウェアやメモリに依存するアプリケーションを作成している場合を除き、メモリ割り当てはビジネスの中核となるビジネス機能ではありません。それでも、競合他社よりもメモリ効率が高いということ以外にビジネス上の価値がある場合、それは依然として中核的なビジネス機能ではありません。そして、そのようなソフトウェアを作成していて、それがメモリ効率によって差別化されている場合、どうやって管理したのでしょうか?

もちろん、いつものようにトレードオフに常に注意する必要がありますが、それは答えにほとんど価値を加えません。「状況によります」は常に厳密に正しい答えであるため、意味がありません。

@メル同意します。私にとって、中核的なビジネス機能とは、競合他社との差別化を図る主要なビジネスに関連する機能です。あなたの会計の例では、あなたが言及した計算が会計会社の中核資産であるとは思えませんが、顧客サービスや法律の知識などの別のものです。

そして、私も同意しません。アプリケーションのその部分がおそらくあなたの利点(人々があなたのアプリを使用/購入することを促すもの)である場合でも、常に機能するものを使用する場合、それはあなたの利点ではなくなります。

競争上の優位性が必ずしもソフトウェアによるものではない(大きな計画ではほとんどない)ため、多くの人がビジネスを危険にさらすことなく既存のコンポーネントを使用できることを覚えておいてください。

この質問は非常にタイムリーであり、Excel の開発がこの質問のきっかけとなったことは非常に興味深いです。私たちの社内プロジェクトには、PHP アプリケーションにプログラムされた Excel 機能が必要でした。ある開発者はこの計画に 1 年半以上取り組んできました。Excel を書き直すことがどれほど難しいかは、実際に試してみるまでわかりません。とにかく、昨年 1 月に、PHP には、サードパーティによって書かれた PHPExcel ライブラリがあり、積極的に開発およびサポートされていることに気づきました (Excel 2007 もサポートしています)。したがって、Excel を再発明することは完全に理にかなっていました (特に、私たちの部門のプログラマーの入れ替わりを考慮すると、この人は来週退職することになります)。

この質問に答えるには、プロジェクトのコードに加えたい追加や変更が、現在の機能セットに大きな指数関数的な影響を与えるのか、それとも、指数関数的に短い時間で将来さらに多くの機能を追加できるようになるのかを自問する必要があります。過ごした。コードの変更が現在および将来、プロジェクト全体に与えるプラスの影響とマイナスの影響を分析し、文書化する必要があります。また、その変更によって維持が容易になり、プロジェクトの将来の成長に貢献できるかどうかを検討してください。そうであれば、特にあなたや他の関係者がいつか別の仕事に移る可能性がある場合には、アプリケーションの価値が高まります。 、または、あなたが他のプロジェクトで忙しいときに、他の誰かが変更を加える必要があるかもしれません。

ちなみに「NIH」とはNot-Invented-Hereの意味です。このトピックに関する Joel のブログ エントリのリンクを参照してください。 Not Invented-Here症候群を擁護するために

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top