あるプログラマの若かりし頃の奇行集

昔は自分がプログラマとして成長するためには何が必要なのかを悩み、悩みはするが深く考えずに思いつきで奇行に走るということをよくしていました。今になって振り返る微笑ましくて面白かったので、いくつかを紹介します。十中八九読者の今後の人生に役立たないですが、失笑しながら読んでもらえれば幸いです。

gzipコマンドの全オプションを丸暗記しようとする

最初からプログラミングとあんまり関係ない話です。

Linuxを触り始めた頃にgzipコマンドの存在を知り、「全てのオプションを暗記して完全理解したい」と思いました。今覚えば、やるとしても他にもっと別のコマンドがあるだろうとは思いますが、たまたま目の前にあったgzipに飛びついてしまいました。

gzipのオプションは見たことがある人なら知っていると思いますが、めちゃくちゃ多いです。しかも圧縮アルゴリズムの名前は、少なくとも当時の私には理解できない謎の文字列でした。man gzipを研究室のレーザープリンタで印刷したのを覚えています。

その後どうなかったかというと、数日後に飽きて、あっさり止めました。

GNU Helloを熟読する

GNU Helloは、いわゆるHello WorldプログラムをGNUのお作法に則って書いたものです。そのようなお作法で他のソフトウェアを作る際に参考にできるようになっています。多言語化されていたり、たくさんのオプションをサポートしていたりと、かなり凝っています。コードのフォーマットはもちろんGNUです。

このソフトウェアを知ったとき、「なんかしらんがオープンソースの人はみんなこういうスタイルで開発しているらしいからマスターせねば」と固く信じて写経しました。「これ読みにくいし書きにくいし辛いなあ」と思いながら完遂したものの、全然しっくりこなくて面白くなくて、全てを忘れました。そしてオープンソースというかこれフリーソフトウェアですね。当時は違いがよくわかってなかったです。また、「みんなこういうスタイルで」も単なる思い込みですね。

オブジェクト指向こそ至高

オブジェクト指向というものがあります。今となってはわざわざ語るまでもない当たり前の概念ですが、当時は流行りものの一つという扱いを受けることが多々ありました。現在は「場面に応じて使いたい人が使いたいところで勝手に使えばいい」という思いを持っていますが、当時はプログラミングを始めて間もない頃だったので、私は最初に見たオブジェクト指向を親だと思うヒヨコでした。

当時はプログラムがオブジェクト指向かどうかを異様に気にしたり、全てをオブジェクト指向で書こうとしたりとか、手段と目的が見事に逆転したことをしていました。スカスカのにわか知識はたくさんつきましたが、プログラミングの腕は一切上がらなかったです。

なお、別にオブジェクト指向に恨みがあるわけでなく、わたしが勝手に意味を誤解して狂信者になって自滅しただけです。

マイクロソフトを強く憎む

マイクロソフトは今でこそWSLを出したりLinuxカーネルにコミットしたりAzureでLinuxを動かせたりと、Linuxをビジネスに最大限に活用しています。しかし、昔はそういうことは無かったです。私は聞きかじったにわか知識をもとにマイクロソフトは悪の帝国、オープンソースの敵、金の亡者、Micro$oft,M$、と、心のなかで罵っていました。Linuxのドライバが無いハードウェアのベンダやLinuxをサポートしないソフトウェアのベンダも巻き添えでけしからんと思っていました。

インターネット上の当時流行っていた2chのような場所で暴れる趣味はなかったので、幸いにも電子の海に爪痕は残っていません。しかし、思っていたことをそのまま公の場で発言していたら社会から消えていたかもしれません。よかったですね。

あとこれもプログラミング関係ないですね。

Design by Contractに囚われる

オブジェクト指向の話の続きです。この世界では有名なオブジェクト指向入門という本があります。契約による設計という面白い概念がありまして、それについて詳しく書いています。この本に出てくるプログラミング言語Eiffelはメソッドに事前条件、事後条件、普遍条件をコードとして書けるのですが、私はそれを痛く愛してしまいました。

愛が深まった結果、ガチガチに契約で縛った使いづらいクラスを量産しました。クイックソート用のメソッドの不変条件でバブルソートして結果を照合という、なんだかよくわからないことをしていました。

プログラミングの腕はとくに上がらず、変な考え方がしばらく定着して抜けなかったです。契約による設計に恨みがあって変な設計と言ってるわけではなく、私が脳内でよくわからない概念に囚われていただけです。

文芸的プログラミングに熱狂する

Knuth先生の文芸的プログラミングを知り、これしかないと悟り、すべてのプログラムを文芸的に書くことにしました。ところがまるでうまくいきません。半ば負け惜しみで言うと、文芸的プログラミングはそもそも常人には実践が困難です。

何度か試したあと、「これができるのはKnuth先生だけなのでは?」と悟り、飽きてやめました。

1バイトでも削らないと死ぬ

メモリ、ストレージリソースは貴重、1バイトでも削らなければならないという思いが強かった時期があります。なぜかはあまり覚えていませんが、恐らくは大昔の、本当に1バイトでも削るためにカリカリチューニングしていた時代の話に感銘を受けたのだと思います。

このような思いが強かった頃は、for文の添字となるi変数も「ここは高々数千回しかループしないので2バイトにする」「iは高々10なので1バイトにする」などと、どうでもいいところにこだわっていました。構造体をなるべく小さくするためのパッキングにも精を出していました。

悲しいかな、バイナリレベルの話に明るい人ならわかると思いますが、この自称チューニングはほぼ意味ないですし、大体の場合は害悪ですらあります。他にやることないのかと今なら思えますが、当時はこれが大事だったらしいです。

プログラミングの腕は上がりませんでした。しばらく変な癖が抜けませんでした。

おわりに

手段に囚われて意味のある実践ができてなくて迷走してることがありありと見て取れますね。こんな人でもなんやかんやで就職後にプロたちにしばき回されて一人前になれました。

まだまだネタは死ぬほどあるのですが、疲れたのでこれくらいにしておきます。