flat7th

memo/20130917

created 2013-09-17 modified 2013-09-17 

ある現場で、いまだにムーアの法則を盾にする人がいました。気になって、考えを整理しました。

ムーアの法則を盾にする人たち登場時代


昔(1990年代ごろ)、ムーアの法則を盾に、必要な設計をサボる人たちがいた。

曰く、「コンピュータはどんどん速くなる。なので、メモリの解放など気にせず、スレッドをたくさんつくり、人間がプログラミングする工数を削減するほうがビジネスで勝てる」と。

これ、この説が出た当初から、コンピュータの性能を出し切るような世界で働いているひとたち(ゲームとか組み込みとかの人たち)は「バカなこと言ってんじゃねーよ」という態度で冷静に眺めていました。


ムーアの法則を盾にしたらダメ時代


2000年代ごろ、やっぱあれダメじゃね?という認識が広がりました。

  • CPUのベース周波数競争、コア数競争が進んだが、発熱が多く電気を食いファンがうるさいと気づく
  • C10K問題が顕在化
  • CAP定理が認識された
  • スケールアップ型の限界が見え、スケールアウト型が増えた

ソフトウェアの作りの違いで鮮やかに解決する人たちが登場し、逆に「ムーアの法則を盾にするひとたち」が駆逐されて行く。

Android と Java


Javaは、いわゆる「ムーアの法則を盾にする」思想で設計されたプログラミング言語です。

Androidは Java の開発環境を用いていますが、厳しいリソース環境に対応するため、
  • 独自のVMを作ったり
  • シングルスレッドのイベント処理APIを豊富に作ったり
して、古い Java の思想と決別しています。

マルチコアの活かし方


マルチスレッドやマルチコアを活かすにも良いやり方とヘタなやりかたがあります。

  • 「同じ作業をするワーカーがたくさん」型は失敗する
  • 「パイプライン」型の処理はうまくいく

仕事をどう分割して、ワーカーをどう配置するか、それはある意味で経営者としての采配に近いです。
ワーカー同士が競合すると、仕事がうまく進まない。
個々のワーカーが、十分な裁量を持って、独自に作業をすすめるとうまくいく。
ワーカー同士が競合するのは、経営者のタスク分割設計が拙いから。

ソフトウェア設計者は、「仮想のワーカー」をいくらでも作ることができ、いつでも雇い入れ、いつでも解雇することができます。上手に経営しましょう。




私の意見


ムーアの法則を盾にする思想を否定する論

  • コンピュータ システムのビジネスは、常に「今までできなかったことが できるようになった」ことを飯のタネにしている。
    • 例:弾道計算、画像解析→動画解析、SNS等の多ノード計算、…
  • 同じコスト・同じコンピュータで、高性能のソフトウェアを開発する人が、常に登場する。
  • 自分のアタマを使い、いま使える物といまのニーズをうまく結びつけた人が、ビジネスでは常に勝つ。

その意味で、ソフト屋は、程度の違いこそあれ、エッジに立たなければならない宿命にあります。そのための苦労は、必要な苦労です。

優秀なプログラマが集まらないから仕方がない?
いいえ。それはあなたの「いま使える物」(リソース)の条件の一つです。
それをどう上手く使ってニーズと結びつけるかを設計するのが、あなたの、私たちの、仕事です。

私はこう考えています。

ムーアの法則を盾にする思想は、
  • 必要な仕事をサボるための言い訳
  • 負け犬根性
である

ソフトウェア設計者の皆さん、ムーアの法則を盾にするのは、やめましょう。


* 日々のメモ