More Joel on Software/Joel Spolsky

Joel on Softwareのエッセイ集の2作目。

最高の人材はマーケットには出てこない。そんな中、優れた開発者を見つけるには・・・

  • こちらから出向く(これはすぐにでもできること)
  • インターンシップ(これもできるかな)
  • 自分のコミュニティを作る(Joelはできただろうが、他の人にはちょっと・・・)

OracleのMAPプログラム。それぞれのクラスで最高と思われる大学卒業生に提示されるもので、そのアイデアは彼らがOracleに来て1週間か2週間働きたいと思うグループを選べるというもの。

ソフトウェア開発者にとってのインセンティブは何か?

  • 外的動機づけ・・・金銭的な報酬
  • 内的動機づけ・・・よいコードを書きたいと思う気持ち。

人々がやりたいことをやるのに報酬を払うと、「過剰正当化」と呼ばれる効果が生じる。「自分がバグがないコードを書いているのは、それによってもらえるお金のために違いない」と考え、内的動機づけが外的動機づけによって置き換えられることになる。

Javaスクールの危険。ポインタや再帰を理解する脳みそを持ち合わせていないプログラマをふるい落とせるほど難しい部分がJavaにはないので、ドロップアウト率が低くなる。ポインタや再帰の明らかな重要性以上に重要なのは、これらの学習から得られる精神的柔軟さと、これらを教えている授業からふるい落とされないために必要な精神的態度が、大きなシステムを構築する上で欠かせないということだ。

コンピュータサイエンスの学生へのアドバイス

  1. 卒業するまでに文章の書き方を学ぶこと(よい仕様書を書く)
  2. 卒業するまでにC言語を覚えること(Cを知らないプログラマは解剖学を知らない医者と一緒だ)
  3. 卒業するまでにミクロ経済学を学ぶこと(ビジネスの基礎を理解しているプログラマは理解していないプログラマよりビジネスにおいて価値が高い)
  4. コンピュータサイエンス以外の授業を退屈という理由だけでさぼらないこと(退屈さから逃げない)
  5. プログラミング中心の授業を取ること(形式論<実習)
  6. 仕事がみんなインドに行ってしまうと心配するのをやめること(「本当に優れた」プログラマはどこでも不足している)
  7. 何をするにせよ、いいインターンシップの仕事をすること(Fog Creekで・・・)

理想主義者と現実主義者。FirefoxIEMicrosoftの製品は、なぜ後方互換性にこだわるのか。Excelの1904年オプションの話。WindowsXPが古いバージョンのWindowsのバグをエミュレートしなければならなかった話。いつものごとく、理想主義者は原理的には100%正しく、そしていつものごとく実際的に正しいのは現実主義者だ。この争いは何年も続く。私はこれが理由で、Microsoftが大好きだ。いや、大好きだったという方が正しいかな。少なくとも、Bill GatesがいるころのMicrosoftは最高だったと思う。

Officeのファイル形式が複雑なのは、非常に古いコンピュータで早く処理できるようにデザインされているから。ファイル形式はアプリケーションの複雑さのすべてを反映する必要がある。

スケジューリングについて。

  • 見積もりができるのはその作業をするプログラマだけ
  • バグを見つけたら修正し、かかった時間を元の作業につける
  • マネージャに開発者の見積もりを減らさせない

関数プログラミングMapReduce

間違ったコードは間違ったように見えるようにする。ハンガリアン記法について。