Home日記コラム書評HintsLinks自己紹介
 

フィンローダのあっぱれご意見番 第162回「Use the Source」

← 前のをみる | 「フィンローダのあっぱれご意見番」一覧 | 次のをみる →

私は英語は得意ではないと思っている。 とはいっても全然分からないこともない。 高校生の頃に、ブラッドベリの原書とか読んでいたような気がする。 普通に高校程度の英語力があれば、 かなりの英語力があってしかるべきものだと思うのだが、 実際はそういう能力はどこかに蒸発してしまったようだ。

 

※ ブラッドベリ: SF作家。 叙情的な作品が有名、だと自分では思っている。

一つ役に立っているのは、読む速度である。 つまり、ある程度は速読できるのである。 というか、私の速読は飛ばし読みの技術のような気がするので、 つまり危険極まりないものである。 この技術は原書を読んでいたというより、 昔、マニュアルが殆ど英語だった頃(今でもそうか?)、 どうしても大量の英語マニュアルを読まなければならなかった頃に、 自然に身に着いたワザだと思う。 もっとも、私は和書も速読できるのだが。

特に英文は、読んでいてあまり分かった気はしない。 目から入って大脳を経由せずに /dev/null あたりに出て行くような感じだが、 全く何も残らない訳でもない。 とりあえず、最近これが役に立つことがよくある。 新しい技術の情報が、英語で入ってくることが多いからだ。

  

例えば、 最近何となく流行している JSF + Spring + Hibernate の連携処理などは、 和書も結構出てきたが、 やはり英文のドキュメントに比べると2、3歩遅れてしまう。 特に、Java のオープンソース系の技術は、更新ペースが速いので、 邦訳が出た頃にはメジャーバージョンアップされていて使い方のコンセプトまでが違っていた、みたいなこともありそうな雰囲気だ。

 

※ JSF (Java Server Faces) は Sun のサイトのJ2EEのドキュメントを参考に。

訳本が出るタイムラグは我慢できたとしても、 もっと困るのは、 ユーザー掲示板の類だ。 Hibernate が動かない、というような Q&A の掲示板は、 圧倒的に英語のものが多いのである。 それも、バージョンが上がった直後に、 集中して、ここがおかしくなった系の質問が出てくる。 この時点で書かれていることが理解できるかどうかで、 問題解決に必要な時間が大きく違ってくる…と思っているのだが、 そういえば、先日面白いことがあった。

Spring という Java のフレームワークがある。 この中の動作がどうも分からないので google で検索していたら、 とある掲示板がヒットした。 ただし、 実はその掲示板が英語ではなかったのである。 多分、表示している文字から想像すると、 内容は韓国語で書かれていたはずだ。 実は私はハングルを全く理解できないのだが、 それがハングルかどうか判断できる程度の知識ならある。 というか、URL からみても、韓国にあるサイトなのは間違いないのだが、 ここでポイントは、そこが Java の掲示板だということだ。 しかし、全て韓国語で書いてあると、 それが Java の掲示板かどうかも分からないはずではないか?

実際にプログラムを書いていて、 Web で疑問を解決しようとしたことのある人なら、 そういうことが意外とあることを、経験的にご存知かもしれない。 つまり、Java の掲示板は、何語で書いてあってもだいたい分かるのである。 なぜなら、Java のコード部分とか、スタックトレースとか、 そういったところは英文、あるいは Java で出てくるのだ。 それはどう見ても Java のプログラムだったりする。 日本人が書いた Java のプログラムであっても、 ラベルとか変数名は滅多に日本語が出てこない。 かなりの確率で英語である。 日本以外でも、このあたりの傾向は変わらないらしい。

結論からいえば、この掲示板を見て問題は解決したのだ。 コードとか、あるいは参考情報への URL とか、 とにかく自然言語とは関係ない情報だけを読んで、問題が解決したのである。 これはつまり、 ナレッジとしては、コードだけでも実は結構役に立つということではないか。

ということで、ブログに何か事例を書くときには、 最近特に、 できるだけそういったソースレベルの情報を出そうと心がけている。 ただ、やはり先日、分からないことがあったので、 いくつかキーワードを英文で指定して google で探してみたら、 最初にヒットしたページが私のブログだったのでずっこけた。 これでは他の人も困るというか、無駄なことをさせてしまわないかと恐縮である。 逆に考えれば、これはビジネスチャンスかもしれないし、 あるいは、正しい解決方法を書く義務があると解釈すべきかもしれない。 それにしても、google で検索したときに、そういう位置に出てくるのが、 未だに理解できない。

§

ボトルネックという言葉はご存知だと思う。 開発プロセスの中だと、 クリティカルパスという概念もある。 いずれも、そこを何とかクリアしないとどうにもならない、 という意味で何か共通の要素がある。

ボトルネック: ビンの首の所が狭くなっているため、 そこを流体が通る速度が全体の速度を決定することになる。

Use the force, Luke. というのは、 スターウォーズでルークの頭の中に送り込まれるメッセージだったと思う。 Star wars の最初の作品が流行した頃、 世の中にパソコンが出始めた頃でもあった。 当時はマイコンと呼ばれていた小さな箱に入った機械が、 まさか2005年の今、こういうとんでもない化け物になるとは、 殆どの人が予想していなかったかもしれない。 いや、今でもこれが化け物であることを認識していない人が殆どなのかもしれないが。

当時流行した joke に、Use the source というものがあったのだ。 つまり「ソースを読め」というのだ。

アルゴリズムは環境に依存する。 メモリのコストが高いと、なるべくメモリを使わずに何でもやろうとする。 ディスクに一時ファイルを作りながらデータをソートするような発想が必要になる。 データ通信のコストが高いと、 受信したデータはなるべくキャッシュしておきたくなるし、 データを圧縮したりして、転送量を最小にするための工夫が必要になる。 逆に、メモリが激安になり、 自由にメモリ空間を使えるということであれば、 とりあえずメモリ上に全部データを入れておいて検索するような方法もアリということになる。

  

例えば、100万人のデータを処理しなければならないとする。 100万人という数値をきくと、 ものすごく多そうな印象を感じるかもしれないが、 要するに 1M人である。 メモリが安くなった昨今なら、 えっ、その程度なの、 という感じがするのではないか。 もし1人あたりのデータが1KBなら、1GBあれば全部入ってしまうのだ。 いまどきの pc なら、その程度のメモリは楽に実装できたりするから、 メモリに全部読み込んで処理するという戦略は、 それほど無謀なことではない。

 

※ 厳密にいえば、1M人は百万人よりも4万8千576人多い。

これが、「Use the source!」とか言っていた時代であれば、 パソコンに搭載されているメモリは 16KB とか 64KB。 メガじゃない、キロという世界だ。 1M人なんて大量のデータは、1人を1ビットに圧縮できたとしても入りきらない。 つまり、パソコンで100万人のデータを処理したいのなら、 何か別の方法を考えるしかないということだ。 また、今でこそ数百GBのハードディスクが当たり前のように使える時代になったが、 少し前までは、数百GBのデータはパソコンでは処理不可能に近いサイズだったのである。

§

時代が変化すると、とりまく環境も激変する。 最近激変している要素の一つは、通信コストである。 データ量あたりの料金が安くなっただけでなく、速度も向上している。 今だと、pcのハードディスクにソフトウェアを保存しておいて、 そこから起動するのが定番パターンだが、 もし毎回ダウンロードしてきた方が安くて速い、ということになったら、 パソコンの使い方自体が変わってくるかもしれない。 CPU の処理速度が問題になるような処理は、 ネットを使って他のpcにやってもらう、というアプローチが既に有名なのだが、 通信速度が上がれば、ちょっとしたことも他のpcにやらせる、 というのが現実的な意味を帯びてくる。

昔、インテリジェンスフロッピードライブというのがあった。 外付けのフロッピーディスクドライブである。 このドライブには、本体からコントロール用の命令を送って実行することができたのだが、 ドライブ側にも CPU が付いていた。 しかも、この CPU にプログラムを実行させることができたのだ。 パソコンからプログラムとデータをフロッピードライブに送ってやり、 何か計算させて、結果を本体に戻す、というようなことができたのだ。 そういうことをして何か面白いのかというと、 今となってはよく思い出せないのだが、結構面白かったような気もする。

  

最近は描画用のグラフィックチップ (GPU) に計算させてしまおう、 なんて試みもある。 General-Purpose Computation on GPUs と呼ばれている。 GPUは、 特に、描画のための演算に対して非常に優れた性能が出るように作ってあるのだが、 最近は高機能な命令も処理できるようになってきて、 ただものではない GPUの計算速度を描画に使うだけではもったいないから、 他の計算もさせてしまおう、というアイデアが出てきたわけだ。

 

GPCPU

例えば、 Xbox 360 が搭載する GPU の計算性能が 1TFLOPS、 PlayStation3 に搭載されるものは 1.8TFLOPS だといわれている。 現在最速で計算ができるスーパーコンピュータの性能は、 数十TFLOPS のオーダーである。 単純に計算すれば、 仮に PS3 を 100台つないで並列計算するようなシステムが作れるなら、 スパコンよりも速くなる可能性があるのだ。

 

※ Xbox 360、PlayStations3: 家庭用ゲーム機。

§

ルークはデス・スターを破壊するために、 細い溝の中を飛行して爆撃した。 この時使ったのが force (理力)である。 大量の戦闘機で攻め込んで急所に大量に爆弾を突っ込めばよさそうな気もするが、 デス・スターの弱点を攻めるには、 溝の中を通ってピンポイントで爆撃するしかない。 つまり、そこがボトルネックなのだ。 プロジェクトが行き詰ったときに、 大量に人員投入してもダメで、スーパーエンジニアが一人で攻める方が成功率が高い、 というのにどことなく似ているような気がする。

  

(C MAGAZINE 2005年12月号掲載)
内容は雑誌に掲載されたものと異なることがあります。

修正情報:
2006-03-01 裏ページに転載。

(C) Phinloda 2005, 2006 All rights reserved.