夜のラブレター

今までの人生で、いわゆるラブレターを書いたことが、多分3回くらいある。 偉いことに、どのラブレターも相手に渡すことができて、 幸いなことに、どの相手からも返事が返ってきた。

書いている時には、ドキドキする文章。
次の日に読み返すと、恥ずかしくなる文章。
そして、10年後にふと懐かしく思い返す文章。

そういう心が動かされる文章はだいたい夜、それも午前0時を回った頃に書かれるのが、古来からの決まり事のように思われる。 幸いにも、もうラブレターを書く必要はなくなったのだけれど、午前0時を回ると、ふと当時の気持ちが生まれてくる。 そんなわけで、「心動かされるソースコード」について、思うところを書いてみました。

-----

ソースコードっていうのは、いわゆるプログラムのこと。 そんなものに心を動かされるのか、と疑問を持つ人も当然いると思います。 でも、今まで確かに、幾つかのソースコードに心動かされたことはあるのです。 その衝動は、幾何学の問題に引かれたたった一本の補助線に、相通じるところがあります。

ここからすごい具体的な話になるのですが、Z80というマシン語のコードがあります。 例えば、Aレジスタという入れ物に0を代入したい時、このような命令が用意されています。

"LD A,0" (7ステート、2バイト)

LDはLoadの略で、"Aに0をロードする"みたいに読み下します。 しかし、0を代入する時に限り、次の命令を代わりに使うことができます。

"XOR A" (4ステート、1バイト)

XORは、Aレジスタとの排他的論理和をとる命令です。 代入用の命令ではないのに、代入ができてしまう。 しかも速度がほぼ2倍になり、サイズはほぼ1/2になる。 若干の副作用があるので常に置き換えられるとは限らないのですが、「すごい」「使ってみたい」と子供心をくすぐる、たった一行のコードでした。

その後、ソースコードを書くことを仕事にする中で、いろいろなコードに出会ってきました。

"再帰"、"Visitorパターン"、"クイックソート"、"リンクリスト"、"二分木"、...

どのコードも初めて触れて、そして理解した時には、感動、くやしさ、憧れ、その他さまざまな感情が湧き起こりました。 共通するのは「知らなければ不恰好でひどく長いコードが、知ることによってエレガントで簡潔なコードになること」 これでなかったのではないかと、そう思います。 いい文章を書こうと思ったら、過去の名文を徹底的に読むこと。 そういう精神で、これからも新しいコードを発見し、今の不恰好なソースコードを改善できればいいのではないか。

そんな風に感じたところで、そろそろ睡魔が襲ってきました。 続きはブログではなく、ソースコードで書きたいと思います。 プログラマの人、一緒にエレガントなソースコードを目指して、頑張りましょう。