2003/08/02
「サクサク開発」
でおなじみのやまろうです。ものすごく順調なんですよ、開発!
進捗会議で普通、「何日遅れてます」とか「オンスケです」とか
言いますけど、「全部終わっちゃいました」なんですよ!ってことで
他の人の担当分とかをやってたんですけど、それも終わってしまって
かなり余裕かましてます!必要な技術をきちんと身に付けて正しい
開発方法を行えば、XPの「週40時間労働(適度なペース)」も夢では
ないわけですな!
話は変わりますが、
本屋でCマガジンをぱらぱらと立ち読みしていたら(買えって?)、
コンピュータを根本から理解するみたいな内容でした。そのなかで、
「コンピュータに意味はない、意味は人間が作るものだ」
みたいなことが書いてありました。じっくり読んだわけではない
んだけども、こんな風に解釈してみました。
例えば、ある人が物凄い3Dのゲームを
作ったとします。はたまた、ある人はHello Worldと表示するだけの
プログラムを作りました。この2人の作ったプログラムは僕たち人間
からしてみると、全然違うものなので、コンピュータの中でも、全く
違う種類の処理が動いていると思うでしょう。しかし、実際にCPUの
中で行われていることは、3DゲームだろうがHello Worldだろうが同じです。
んなばかなー!?と思われるかもしれませんが、CPUの中で行うことは
大雑把に言って2進数の演算、メモリーや周辺機器との通信のみです。
これらのことはアセンブラのプログラムを書いてみるとよく理解出来ます。
私は、専門学校と入社1年目の時にアセンブラを学びました。
専門学校では、講義を聞いただけで、いまいちピンと来ませんでした。
会社では入社1年目の時、以前お話したまさに雑魚扱いされてた頃、同じ現場に
いた上司から教わりました。その人の技術力は凄まじく、まさに
コンピュータの根本をわかっている人でした。その人は、
「コンピュータの本質を知ることが大切なんだ」
と口癖のように何度も言いました。
コンピュータの本質とは・・・・?
僕が考えるに、コンピュータは機械語しか、実行しない。つまりは2進数の演算
しかしないということだと思います。JavaもC++もRubyだって、過程は違えど
最終的にはマシン語に変換されるのです。
アセンブラを実際に書いてみて感じたことは、マシン語ひとつの出来ること
って、小さいんだなぁということです。たとえばif文をアセンブラで書くと
比較命令とジャンプ命令を組み合わせます。マシン語にはif文(値を比較して、
処理を分岐させる)なんていう高等な?命令はありません。
あるのは
・値を比較する
・指定したアドレスにジャンプする
といった単純なものです。
なので、当然while文なんてものもありません。
勿論の如く、メソッドもクラスもインターフェースもありません。
「えっ?Javaにはあるじゃん、どういうことよ?」
それは、コンパイラとJVMがマシン語の小さな命令ひとつひとつをうまく
組み合わせて、メソッドやクラスやインターフェース等を表現しているのです。
なので、3DゲームもWebアプリもコンソールアプリも、
コンピュータの中で行われてることはマシン語の実行なのです。
その人はこんなことも言っていました。
「ノイマン型コンピュータが発明されてから今日まで、コンピュータの中で
行われてることは何も変わってないんだ。だから、どんなに新しい技術が
出てこようとも、本質を理解していれば大丈夫だ」
そして、その頃から、僕はJava等の高水準言語でプログラミングしていても、
「今if文書いたけど、これはコンパイラによって比較とジャンプ命令が
生成されるんだよなぁ」とイメージ出来るようになりました。
さらに、EJB等の高度なAPIも、
「うーん、リモート呼び出しってことは、ネットワークで通信してるってこと
だから、内部的にはソケットを使ってて、何バイト目が1だったら、その後ろ
は引数のデータと思ってねとかの決まりごとがRMI-IIOPプロトコルってやつ
なんでしょうなぁ?」
とか想像しています。内部的なことを想像できると、その技術を使いこなす
助けになります、そして楽しいです。なので、クラスライブラリを使うときも、
どんな風に実装されてるのかを考えて使っています。
ということで、今回はコンピュータの本質を考えてみました。
「コンピュータに意味はない、意味は人間が作るものだ」
↓
「人生に意味はない、意味は人間が作るものだ」
ってか?
やまろう