私のコード履歴書

プログラムをはじめてから今まで、いったいどんなものを書いてきたのかを列挙すると面白いとおもったのでやってみます。どういう意図で何を作って、その結果どう思ったとかも覚えていれば書いてみます。なるべく時系列順にしていますけど、記憶があいまいなのでけっこう入れ替わっているはずです。あと山のように列挙してもあれなので、印象的なものだけ書いてます。RPGツクールなどのツールで作ったものは除いています。

  1. MS-DOS上で動くしょぼいゲームを何個か。マイコンBASICマガジンについていたソースコードを意味をあんまり理解しないままぽちぽち打ち込んでいたはず。N88日本語BASICだったとおもう。何かしら動くものができたので感動した記憶がある。とくに画像表示のためにM×N文字のスクリーンに相当する配列を用意してそこに文字やら色やらを配置するコードを見て、「なるほど、こういうこと(画像はコンピュータではこうやって表現する)だったのか!」と興奮した。
  2. 画面上のランダムな場所に敵が出てくるのをマウスで撃ち殺すというゲーム。ASCIIのマルチゲームScripterというASCIIが出したムックに処理系が入っていた簡単なプログラミング言語で作った。「とりあえずなんかつくってみたい」という理由で習作として作ったはず。絵が出るので面白かった。すごく簡単にできたので便利だなあと思った。
  3. Windows倉庫番Delphiで作った。最初はソース内部にステージをベタ書きしてたが、苦痛になってきたのでステージエディタも作った。その後に絵を自分で書きたかったのでドット絵エディタも作った。ツールを作ると楽ができるのに気づけた
  4. 倉庫番で全画面を描画するなどの凝ったことをするとドット絵の表示にもたつくのに気づいた。これをきっかけに速度計測と描画の高速化を繰り返すというのを一か月くらいやって、最終的に画像描画ライブラリを作った。これもDelphi…というかObject Pascal。別のひとがDelphiからDirectXにアクセスして画像描画ができるライブラリを作ってたんだけど、条件がそろえばこれより速かったので感動した。自作ライブラリはVRAM直接アクセスをしていたせいかバグがあるとOSごと落ちんだけど、これがユーザプロセスとOSの境目に到達した最初の経験だったかもしれない。「なんで?」とすごく気になった記憶がある。
  5. はじめてC言語に触れてhello world書いた。その後本の先頭からいくつかサンプルを試してみたが、飽きてすぐやめた。成果がグラフィックとして目に見えないとつまらないらしい。よく後年OSにはまったものである。
  6. Petzolt本でWindowshello world(窓一枚出してクライアント領域だかタイトルバーだかに「hello world」って出す)を作った。あまりにめんどくさかったので苦痛になって「二度とやるか。Delphi最高」って思った
  7. プレステが流行ったので「これからはポリゴンだ」という謎の思い込みにより「ポリゴンってどういう原理なんだ?」といろんな本を読んで行列とかを勉強して、ポリゴン描画エンジンを作った。これもDelphi。その後3Dゲームを作ろうと思って3Dモデルを作るプログラムも書いた。で、いざゲームを書こうとするも、デザインセンスが皆無なことと、「実はゲーム作るのに対して興味ないのでは?」というみもふたもないことに気づいてしまった。
  8. Cより便利なC++にハマって「オブジェクト指向」「とにかくCライブラリじゃなくてC++ライブラリ」「テンプレート」がクールとおもって、とにかく色々な技術、機能を使うのがかっこいいと思って一年以上迷走しながらしょうもないわかりにくいプログラムを書き続けた。たとえばcout << "hello world" << endlのようなみたいなやつもprintfよりよいと確信していた。変態テンプレートライブラリLokiもまじめに勉強した。その後プログラムがつまんなくなって「これが俺のやりたかったことなのか?」と思って全部やめた。
  9. 「これからはlispだ」という謎の思い込みによってschemeをはじめる。どっかの雑誌でShiro Kawaiさんのgaucheを知ったのがきっかけだったと思う。SICPを読みながらあれこれ試して小さなプログラムをいっぱい書いた。最初はラムダだの再帰だのが全く理解できなくてつらかったが、そのうちわかった。その後に機能の濫用→つまんなくて飽きる、といういつもの流れ。その後schemeで直接コードを書くことはなかったが、このときの知識は後々大きく役立った。
  10. 「ゲームを起動しているのは誰だ!?」「なんかOSっていうのがあるらしい」ということでOSカーネルについて調べることになった。で、タネンバウム本やら蒲池さんの本やらを読んだりしながら(川合さんのOS自作本が出るのはこれから5年くらい後)アセンブリ言語の概念とx86アーキテクチャについて学んだ。アセンブリ言語で書かれた小さなプログラムをいっぱい書いた。「なんて生産効率が悪いんだ」と思って、今に至る。現在でもアセンブリ言語は理解できなくもないが好きではない。
  11. 「これからはOSカーネルだ!」と思ってなんか書いた気がする。OSカーネルといえるほど大したものではなくて、32bitモードに入った後で飽きた気がする。どうも自分はブートプロセスを含めたハードウェアに強く依存する部分は別に好きではないとわかった。もともとは「ソフトウェアを起動しているのは誰なのか」という疑問からはじまってOSカーネルに興味をもったわけだが、OSカーネルを起動するブートローダが、および、ブートローダを起動するファームウェアには興味をひかれなかった。なぜかは不明
  12. 「これからはLinuxだ!」と思って(当時Linxuインストールブームの最後の炎が残っていた頃だったかと)PCの環境を全部Linuxに入れ替えて*1Cプログラムをいっぱい書いた。いわゆるUNIX系OSシステムプログラミング
  13. 「これからはLinuxカーネルだ!」と思ってシステムコール追加したりhello worldモジュールを足したりした。これはC。このあたりで理由は知らないが「俺はLinuxカーネルで食っていく」という強い確信を持つようになる。できるかどうかとかは気にしていなかった
  14. カーネル開発業務、サポート業務の一環として、バグ修正パッチやら再現プログラムやらを10年以上にわたってたくさん書いた。あとたまには機能追加パッチも。ほぼCで、たまにアセンブリ言語。目的を達成するのに一番最小なコードを書く快感に目覚める
  15. 上記業務のあいまに「これからはアプリだ」「俺だってスクリプト言語とかナウいやつを使うんだ」と思ってJavaScriptやらRubyやらを覚えようとするが、全部断念。アプリには興味無いらしいことがわかった。
  16. 現在は転職したのでK8sやRookのコードをGoで書いている
  17. この後はK8sやRookに加えてCephのコードをC++ないしPythonで書く機会が増えると思う。たぶん

唐突に「これからは〇〇だ!」となって思いつきで行動する衝動性が目立ちますね。わたしはそういう人間です。

他の人のを見ると面白そうなので、書ける人がいればお願いします。おわり。

*1:当時は気軽に仮想マシンを使える状況になかった