2013-03-03

お前らの言う大規模開発ってなんだよ。

型論争の一部。

動的型陣営と静的型陣営がそれぞれ大規模開発に向いてるとか向いてないとか言うけど、「大規模開発」って何よ?って話。

自分としていくらかのパターンがおもいつくし、それぞれ質的に異なるからごっちゃにしても話が混乱するだけだ。

お前らの言う大規模開発ってどれだよ?あともちろんこれ以外にもあれば募集。

  • 人的な大規模開発
  • 量的な大規模開発
  • データ量的な大規模開発

人的な大規模開発

ITゼネコンみたいな連中が行う、何万人月というコストをかけて行う開発。失敗した特許庁の開発みたいなやつだ。典型的にはワンオフ品なので、かけたコストのわりに品質は低い。fizzbuzzも書けない人すら1人月と数えられるし、そういう人が生息するのはここである2013年現在では多分Java(かたまにScalaなど)で開発される。末端の人には自分たちの担当領域外の仕様をどうこうする権利が基本的にはない。

量的な大規模開発

OSカーネルのみの狭義のOSではなくパッケージとしての広義のOS全体)とか、あるいはモダンブラウザみたいな、膨大な機能セットをもち、様々な環境ロバストに動く必要がある開発。膨大な機能セットの中には、膨大な後方互換のための機能(例えばブラウザであればクソみたいなレガシーHTMLでもなんとなく見せてやるような機能)や、ありとあらゆるハードウェア言語などの細かな実行環境の組み合わせで動作するための抽象化および各環境のための固有の機能を含む。オープンソース形態で開発されることもよくあり、2013年においては多分C/C++で開発される。自分たちで仕様コントロールする権利があったりなかったりする。

データ量的な大規模開発

1日のPVが億オーダー以上になるようなWebサービスなど。昨今だと1日にGバイト〜Tバイトにもなるデータを解析できるシステムもセットになってることが多い。サーバの1台や2台がハードウェア的な故障してもロバストに動き続けるための機能や、そのときリカバリが容易であること、壊れた分や単なる新規追加ののサーバの補充が容易であること、みたいや機能および設計上の工夫が求められる。人的な大規模開発や量的な大規模開発と比べると比較的少人数(数人〜数百人。数千人になるのは数えるほど)で開発される。2013年においても様々な言語で開発されていて決定打はない。自分たちで仕様をある程度コントロールする権利がある。

haskell はどの大規模開発に向くか?

例えばこの方が、Haskellは大規模開発に向いていると主張されているが、おそらく人的な大規模開発には向かない。これは2013年においてHaskellを使うユーザがそれほど多くないから、というのも大きな理由だがそれだけではない。Haskell学習コストが低いことを目指して作られた言語ではないことも極めて本質的かつ決定的な理由の一つである。(自分の思う学習コストが低いことを目指して作られた言語とは例えばJavaPHPだ。)fizzbuzzを書けない人をHaskellを書けるまでに教育するのは、どうしたらいいのだろう?

Haskellが量的な大規模開発に向いているかどうかは(自分無知により)よく分からない。典型的には量的な大規模開発を実現するためには、そのソフトウェアWindowsとか各種ブラウザ並に多くの計算機上で稼働することが必須だ。そうでないと膨大な開発コストがペイできない。オープンソース的に貢献を募るとしても、量的に巨大なソフトウェアに貢献する人を一定以上集めるには、それなりのユーザベース(単に使うだけの人も含めて)が必要であるHaskellの実行環境というのは全然枯れていないが、10年前のハードウェアOSを未だに使っている人の計算機上でもちゃんと動くのだろうか?HaskellってVMで動くんだっけ?ネイティブコードを吐くんだっけ?

  • プログラミングの知識があまり無い自分にとっては、大工が金槌の材質で言い争ってるようにしか見えない。肝心の家の建設は置いてけぼり。

  • 道具のよしあしによって家を作る課程や結果に影響がでるなら、道具のよしあし向き不向きを大工同士で語るのは大いに結構なのでは。

  • Haskellはネイティブコードコンパイラあるよ。 OCamlにもある。 F#は.netで動くわけだよね。 論点を整理し直そうぜ風に書き始めたのに結論ありきな締めくくりで、あんま理性的じゃないね...

    • 元増田だけど、そうであれば、量的な大規模開発にかんしてはhaskellは向いていると考えていい気もする。 ちなみにどの辺りが結論ありき?(量的なのはもともと判断を保留している。)...

  • 元記事はそんなに外してもいないと思いますけどね。 静的型付き言語として関数型言語を持ち出してくるのは、論点が違うような気がしました。 静的型、型推論の嬉しさって、関数が一...

  • 「Javaは学習コストが低くHaskellは学習コストが高い」みたいな話をよく見るけど、本当なのかねぇ。 初期のJavaならともかく、AutoBoxingの落とし穴とかワイルドカードの正しい使い方とか、...

    • 落とし穴が多いってことと学習曲線の立ち上がりってことには直接の関係はないのでは。 PHPなんて落とし穴だらけだが、初学者の言語としてしばしば使われてるのは、とりあえずHTML書い...

    • そう思うのは多分あなたが、馬鹿な人の気持が分からない程度には賢くて、馬鹿な人がむやみに怖がらないようなものを設計できるほどには賢くないからだと思うよ。

記事への反応(ブックマークコメント)

ログイン ユーザー登録
ようこそ ゲスト さん