優れたプログラマーの生産性-10,000倍の違いを考慮していますか?[閉まっている]


19

優れた旋盤オペレーターは平均的な旋盤オペレーターの数倍の賃金を命じますが、ソフトウェアコードの優れたライターは平均的なソフトウェアライターの価格の10,000倍の価値があります。- ビルゲイツ

同じチームに「素晴らしい」ソフトウェアエンジニアと「平均的な」ソフトウェアエンジニアがいるとします。1人のエンジニアの生産性を10,000倍高めるにはどうすればよいですか?彼らが機能、バグ、調査のシェアを引き受けており、一貫して品質を提供していることを考えると、私はこれを全く理解できません。私の説明は、おそらくそれらが「平均」を超えることを正当化するでしょうか?"すばらしいです"?


2
この質問がstackoverflowに適しているかどうかはわかりませんが、応答にも興味があります。
オースティンヘンリー

18
引用は素晴らしいものがあると言う価値の10k倍の価格の平均1の、そこに「生産性」については何も。
オッド

4
実際、優れたプログラマーは、平均的なプログラマーよりも生産性がはるかに低い場合があります。「仕事」をする代わりに、彼はレーダーから外れたより良い何かをし、おそらく生産的なプログラマーの仕事を廃止する全く新しい製品ラインを作成しさえしました。
-hotpaw2

2
私が確信していることの1つは、革新と!@#$の両方を行うには両方が必要なことです。
エリックReppen

6
安倍リンカーンはかつて「木を切り倒すのに8時間あれば、sixを研ぐのに6時間かかる」と言っていましたが、これはプログラミングでは決して真実ではなく、「良い」仕事をすることは迅速な仕事をはるかに上回ります。優秀なプログラマーは生産性が低いように見えるかもしれませんが、彼は将来のすべての問題に備えています。
BeardedO

回答:


57

引用の要点は、生産性が1万倍高いということではなく、1倍の価値があるということです。ソフトウェアには、欠陥のある設計または実装が何年も休眠状態になる可能性のある独特な状態があります(機械加工が間違っている部分は、通常「機能せず」フィールドに入りません)、製品のライフサイクルに至るまで困難な状況で頭を育てる日。

設計から実装、テスト、実稼働、保守に至るまで、欠陥を修正するための指数関数的なコストを誰もが知っている必要があります。

企業の評判だけでなく責任の可能性も考慮すると、問題を回避するのに十分な知識を持っている開発者は、無知または素朴に貧弱なソリューションを実装した開発者の10,000倍の価値があると結論付けるのは簡単です。

編集(2014年春):「ハートブリード」


1
プログラマーが他のプログラマーよりも10,000倍の価値を持つようになるのは、責任の欠如であることは微妙です。元々それを考えていなかった、ありがとう。しかし、測定するのは非常に難しいことのようです。
インパクト

2
@TheImpact:通常、コーディングが完了してプロジェクトが世に出た後に初めて明らかになるため、「測定」することは困難です。パフォーマンスと信頼性、そして一般的に「平均的な」プログラマーの思考の後。一方、彼らは優れたプログラマーから来たデザインのまさにファブリックに組み込まれています。
NotMe

10
+1。優れたソフトウェア開発者の価値が100である場合、それは-10の何倍ですか?
ニコール

3
需要と供給の問題もあります。レイモンド・チェン:「私は、この高度なコードを書くことを世界の約5人だけに任せています。私は彼らの一人ではありません。- blogs.msdn.com/b/oldnewthing/archive/2011/04/15/10154245 .aspx。」これは、セキュリティ関連のコーディングの場合に特に当てはまります。何年も問題が気付かれない(または、少なくとも、白い帽子に気付かれない)可能性があるためです。Schneierは、ほとんどのプログラマーはプログラマー自身が破ることのできない暗号化アルゴリズムを書くことができるとコメントしています。これは、作家が最高でない限り、誰かがそうすることができないことを意味しないことに注意してください。
ブライアン

1
アリアンVロケットの最初の打ち上げを考えてみましょう。ロケットが破壊される原因となった、キャッチされていないゼロによる除算がありました。それだけでなく、問題のコードは、ロケットが点灯した瞬間に価値を失いました。優れたプログラマーで何百万人も節約できたと考えてください。
ローレンペクテル

44

平均的なオリンピック水泳選手は、距離を隔てて時速2.5マイルで泳ぐことができます。

平均的な人(泳ぐことができる人)は、距離で時速約1.5マイル泳ぐことができます。

これは、平均的なオリンピック水泳選手が英語チャンネルを約8時間で泳ぐことができることを意味します。

そのため、オリンピックの水泳選手は平均よりも60%高速であり、平均的な水泳選手はレースを完了するのに約13時間かかると考えられます...

平均的なスイマーであるイギリス海峡を泳ごとしたら、1週間後に海岸に打ち上げられる唯一の方法です。

プログラミングの多くの側面は、英語チャンネルを泳ぐようなものです。それは流しまたは水泳です。10,000Xのほうが、動作する完成したソフトウェアと動作しない不完全なソフトウェアの違いを説明する正確な方法であるかどうかさえわかりません。


31

同じチームに「素晴らしい」ソフトウェアエンジニアと「平均的な」ソフトウェアエンジニアがいるとします。1人のエンジニアの生産性を10,000倍高めるにはどうすればよいですか?彼らが機能、バグ、調査のシェアを引き受けており、一貫して品質を提供していることを考えると、私はこれを全く理解できません。私の説明は、おそらくそれらが「平均」を超えることを正当化するでしょうか?"すばらしいです"?

これは、「平均的な」ソフトウェアエンジニアにとって多くの「与えられた」ものです。実際には、優れたソフトウェアエンジニアは、平均的なエ​​ンジニアが正しく解決できない問題を数時間で解決します。優れたソフトウェアエンジニアは、5分の1のコードと1/10のバグで通常の問題を3分の1の時間で解決します。優れたソフトウェアエンジニアのコードはO(n)で実行され、平均的なソフトウェアエンジニアのコードはO(n ^ 3)時間で実行されます。優れたソフトウェアエンジニアは、待機中にソリューションを適応させることができます。一方、平均的なソフトウェアエンジニアは、仕様の遅い変更について不満を述べ、新しい要件を満たすには数週間かかると言います。これらはすべて、素晴らしいエンジニアが平均的なエ​​ンジニアの仕事をやり直すときに見た本当の違いです。


6
+1:残念ながら、問題が正しい解決策をもたらさないことはかなり一般的です。差し迫った問題を「修正」するだけの回避策や問題が頻繁に発生しますが、数週間でさらに多くの問題が発生することはほぼ確実です。「しかし、それは数週間で、私たちの将来の自己がそれらの問題に対処できるようにしましょう!」
ヨアヒムザウアー

ほぼ不可能な問題に対する有効なソリューションと無効なソリューションの違いは無限に近づきます。たとえば、組織が生き残る、倒産する、ラボで何かが爆発してすべてのエンジニアが殺される(古典的なテレビドラマのストーリーラインなど)などです。 。
hotpaw2

@ hotpaw2:確かに、私はそれほど劇的なことを考えていませんでした。トポロジカルソートのようなグラフ計算など、数学的な複雑さの問題を考えていました。平均的なエ​​ンジニアは、遅くてバグのあるソリューションを書くのに何週間も費やすかもしれません。優れたエンジニアがビジネス要件を既知の問題にマッピングし、公開されたライブラリまたはアルゴリズムを検索します。
ケビンクライン16

9

違いの観点からこれに取り組みます:

優れたエンジニアは、平均的なエ​​ンジニアよりも次のことをうまく行います。

  • 設計-変更の必要が少なく、より柔軟な設計を作成します。これは、ソフトウェアのライフタイム全体の節約につながります。
  • 機能-これらは高速で実装され、よりクリーンな実装になります。
  • バグ-より迅速に発見され、適切に修正され、将来のバグが少なくなることはありません。
  • 調査-より良い解像度と結果で、より迅速に結論付けられます。

まとめると、これらのでしょうセーブ開発時間にお金の会社の多くをして作るの余分な機会でお金の会社の多くを。


4

優秀なプログラマーは、賃金を稼ぐために「機能、バグ、調査を分担する」だけではありません。彼らは時々自分の会社を辞めて会社を立ち上げたり、スタートアップに参加したり、新しいスカンクワークスプロジェクトを開始したり、昔は全国的に有名な青空R&Dラボに参加して、誰も必要とさえ思わない製品を革新したりします、または偉大なプログラマーの洞察、スキル、汗の前に、ソフトウェアで行うことが可能でした。

このプログラマーの「価値」の多くは、リスクに対する比例的な報酬です。プログラマーは、2倍以上の報酬を得るのではなく、そのようなクレイジーなソフトウェア製品について考えることで解雇されることさえありました。

偶発的なソフトウェアスタートアップで何が起こるか:何百万/ 10億ドルで公開されるか、GoogleやFacebookなどに買収されます。同様の金額の場合、旋盤オペレーターはめったに起こりません(ただし、シリコンバレーのハイテク企業の創立者の少なくとも1人がワークショップで旋盤を使用していました)。


4
「....百万/十億のために公開する.....」メディアのレトリックにもかかわらず、これはソフトウェアエンジニアにとってもめったに起こりません。「それを作る」ことを一人一人のために、数千人があいまいに分類および/または1あまりにも多くのVCラウンドかかわらず、行くと彼らの口...に苦味以上のもので9-5日の仕事に戻って
mattnz

1
@mattnz:おそらく、そのプログラマーの10,000Xの価値に見合った10,000対1のオッズよりわずかに優れています。
-hotpaw2

3

最高のプログラマーだけが解決できる解決策がいくつかあります。何千もの平凡なものを投げてもうまくいきません。また、知識の断片をまとめて組み合わせることができたとしても、彼らの努力を調整することはより困難です。

SOに関する質問に答えることも同じです。平均的な開発者のグループから、答えを思い付くことができる多くの問題があります。これらのウェブサイトはおそらく、ほとんどの開発チームよりもはるかに優れた努力を調整しますが、それは悲しいことです。


3

ゲイツの引用を裏付けるいくつかの経験的証拠があると思います。タイピングプールでは、5パーセンタイルと95%パーセンタイルの出力の違い(タイピングプールで簡単に測定可能)が3対1のようなものであったことを読みました(ソースを思い出しませんが)。ワードプロセッシングソフトウェアが利用可能になった後、ソフトウェアの高度な機能を使用できる人はさらに相対的な優位性を獲得したため、比率は10または20対1のようになりました。

おそらく、ソフトウェア開発では、あらゆる種類のツールや手法などを利用する自由がさらにあるため、比率はさらに高くなります。違いを測定することはより困難ですが、ほとんどの試みは少なくとも10対1で行われます。簡単に測定できるものだけを測定しているため、おそらく違いを過小評価しているでしょう。

タイピングや旋盤の操作のようなものでは、上位1%の人々はおそらく、可能なことの生理学的限界にかなり近づいています。プログラミングの場合は明らかにそうではないので(コードの記述にかかる時間とコードの入力にかかる時間の比は膨大です)、さらに多くのバリエーションが必要です。


1
ワオ。ポイントの欠落について話します。アンカーポイントとしての「タイピング速度」から始まるプログラマーの生産性の尺度はすべて、素朴な答えを得ることになります。
-riwalk
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.