元パソコン少年はマシン語の夢を見るか
2006.03.10
このブログの副題にもあるとおり、私は高校生の時から半田ごてを握ってパソコンをプリント基板から作ったり、アセンブラでプログラムを書いて雑誌に投稿していたりした、いわゆる「パソコン少年」の第一世代である。
そんな私が最初に C という言語に出会った時は、「Cでプログラムを書くのは素人だけだ。本当のプログラマーはアセンブラだ。それも16進のマシン語を直接書けなきゃだめだ」などと生意気なことを言っていたものである。しかし、大学に入ってから作った Candy をディスプレイドライバーを除いて全てCで書いたのも私である。
C++ にも最初は抵抗があった。当初はコンパイラの性能も低かったので、とんでもないコードを生成していたし(コンパイラの吐き出したマシン語を読まずにはいられないたちであった)、「オブジェクト指向の本質は言語ではない、プログラミングスタイルだ」(どこかで聞いたことがある)と言いながらあえて C でVTalbleを作ってCOMのプログラミングをしていたものである(Windows95 には私がCで実装したCOMオブジェクトが複数ある)。
C++ にやっと慣れたころに普及し始めた Java にはもっと抵抗があった。今となっては笑い話だが、「プログラマー自身がメモリの管理をしないで効率の良いプログラムが書けるわけがない」と真っ先に批判したのも私である。
そんな私がやっと本気で Java でプログラムを書き始めたのは UIEvolution を設立した2000年からであるが、今度はさらに Perl、PHP、Ruby といったスクリプト言語へのシフトが始まっているではないか。若いエンジニア達には負けられないとやっと勉強を始めたのが今年の1月。最初は不自由でしかたがなかったが、ようやく小規模なプログラムならなんとか書けるようになって来た。
なんでこんなことを長々と書いているかと言うと、昨日、なかなか面白い経験をしたからである。
UIEngine にクライアント側での非同期なデータバインディングをさせるためのサーバー側のモジュールにミニコンパイラ、というものがあるのだが、今まではC++版とJava版しか用意していなかったのだ。大企業を相手にしている分にはそれでも十分なのだが、今時のハッカー達からのフィードバックによると、「それではぜんぜんダメ」なのだそうである。
そこでC版のソースコードを元に、PHP版を作ることに決めたのが先週。移植を始めたのが昨日なのだが、幾つか驚いたことがある。まず第一に、移植がものすごく簡単であったこと。結構複雑なプログラムなので、1週間ぐらいかかると見ていたのだが、一日で終わってしまった。次に、ソースコードがものすごくコンパクトになったこと。Cだと2000行のプログラムがPHPだとわずか200行である。最も効果的だったのが、テーブルデータを一つの array で表現できてしまう点で、そのおかげで API がものすごく簡素化できたのである。テーブルデータを持った array をコンストラクターに渡すだけで良いので、テーブル上のデータ一つ一つに関して addField() を呼ばなければならない C 版のAPIとは比べものにならないぐらい簡単だ。
そうやって作った PHP のプログラムを見ながら思い出したのが、上に書いた「本当のプログラマーはマシン語が書けなきゃ」と強がっていた昔の自分である。一度否定したものを、いつの間にかちゃっかりと使ってしまっている私の身代わりの速さを、私自身は「柔軟性がある」と高く評価しているのだが、半周ぐらい遅れて走ってくる部下にとっては結構迷惑だ、というのが巷(ちまた)の評判である。やっと追い付いたと思った時には、「おまえどっちに走ってんの」と言われるのだから…。
>半周ぐらい遅れて走ってくる部下にとっては結構迷惑だ、というのが巷(ちまた)の評判である。
(苦笑)
Posted by: Jun | 2006.03.12 at 14:40
半田ごて、ASM、C、C++、Java、Perl、PHPという経歴は(レベルは違いますが)私と全く同じです。
「プログラマーがメモリ管理しないで...」というのも私が当時の部下に言ってきた「プログラマー気質」の文言。いやぁ、なんとも気恥ずかしい思いで読ませていただきました。
半導体の電子の動きまで理解しようとしていた私ですので「本当のプログラマーはマシン語が書けなきゃ」というのは論理武装という点では今でも持論ですが、それだけではなくて抽象的な概念を受け入れる感性を持っていないといけないのが、ここ10年ほどの流れだと思います。
進化論じゃないですが、両方持っている人が変化に適応しやすいんじゃないんですかね。
Posted by: Yos | 2006.03.12 at 16:41
私は元パソコン少年さんの一世代後のパソコン少年(今はおやじですが)ですが、16進ダンプをみてマシン語に挫折したほうでした。
当時はI/Oって雑誌が16進ダンプでのせていましたが、暗号みたいなのをみてだめだと思ってしまいましたね。
その後UnixでC言語で開発するようになり、Perl->Java->PHP->Rubyと移ってきて今はRuby on RailsでRubyを一番使っていますね。
おっしゃるとおりツールによって開発効率がかなりよくなることは私も実感しますね。
昔CからPerlに切り替えたとき、Perlのコーディングの簡単さに感動しました。
なんといってもコードの中で簡単に正規表現を使えるのがうれしかったですね。
ツールも進化していくと下のレイヤーが隠されてしまうためにバグがわかりにくくなるという弊害もあると思います。
遅ればせながら私は最近80486のアセンブリー言語を勉強するようになりました。
レジスターは変数みたいなもので割り込みで関数呼び出しみたいなことするんだということがわかって普通のプログラミング言語と似ているなと思いました。(当たり前なのでしょうが。)
元パソコン少年さんのように上から下までわかっているエンジニアって少ないでしょうね。
エンジニアだと中身はどうなっているのかなって好奇心が出てくるものだと思うんですが、忙しいとなかなかそこまで見る余裕はないかもしれませんね。
Posted by: Anthony | 2006.03.12 at 16:55
お久しぶりです。といっても、Blog上ですが。
僕も、ごちゃごちゃとした経歴があります。今では、C#で.NET WinForm (Object プログラミング)を触っていますが、昔は68Kのアセンブリから入り、高速化のためプログラムをハードウエアに実装し変えたこともあります。UNIXのカーネルに興味を持った時期があり、UNIX デバイスドライバの開発をしていた時期、それからちょっと経路を変えてBIOSや Windows NT HAL の開発もしたことがあります。どれも、趣味じゃなくて、仕事だったのですが。
Posted by: masato | 2006.03.14 at 21:20