いものやま。

雑多な知識の寄せ集め

私のコード履歴書。(その1)

技術書典で買った『失敗プログラマー 第2版』を最近読んだ。

その中で「私のコード履歴書」というのがあり、著者がプログラミングを始めてからどんなものを書いてきたかを列挙してるんだけど、これが面白かった。

そこで、自分もコード履歴書を書いてみようと思う。

中学〜高校

初めてプログラミングっぽいことをしたのは中学の情報の授業。 LOGOでタートルグラフィックスに触れたのが最初のはず。

まぁ、このときはとくに刺さらず、むしろペイントでお絵描きする方が面白かった印象。

そして、本格的にプログラムを書いてみようとしたのは、高校の頃。

入学したときにiMac DVを買ってもらって、ネット見たりクラリスワークス(後のAppleWorks、そしてiWork)で遊んでたんだけど、ゲームを自分でも作ってみたいなと思ったのがきっかけ。 当時のMacでゲームプログラミングだとHyperCardという素晴らしい環境があったんだけど、全盛期は過ぎていて下火になっていたこともあり、スルー。 じゃあどうしたかというと、C言語Macアプリのプログラムを組むとかいうハードモードからスタートした。。。

C言語自体の難しさもあるんだけど、MacGUIアプリを作るのは、今GUIアプリを作るのに比べても何倍も難しさがあった。 main()関数から普通に書き始めて、各種UIもコードで書いて、さらにイベントループやイベントのディスパッチまで一から自分で書くというね。 他のアプリのウィンドウの後ろに隠れてた状態から前に出たときにはウィンドウの内容を自分でリフレッシュしたりとか。

しかも、当時は全然分かってなかったけど、MacClassic環境は協調型の擬似マルチタスクで動いていて、OSに制御を返すにはI/O待ちになるか明示的にsleep()を呼び出す必要があった。 下手なループに入ってOSに制御を返せないと、アプリが固まるだけじゃなくてOSも固まる。。。

さらにはメモリも仮想メモリの仕組みがなくて(今から考えると信じられない・・・)、全部のアプリ(OSも含む!)で1つのメモリ空間を使ってた。 このため、各オブジェクトはハンドル(ポインタのポインタ)を使って管理するという仕組みになってた。 ポインタだけでも難しいのに、さらにそのポインタとかなると大変だし、メモリ確保のときにはハンドルのポインタを渡したりするとかいうね(今はメモリのことをよく分かってるので理屈は分かる)。 そしてちょっと間違ったアドレスに触れば、アプリが死ぬだけじゃなくてOSもろとも死ぬとかいう世界。。。

当然、当時はそんなことは全然分かっていなかったので、サンプルプログラムは動かせてもちょっといじると動かなくなって、その原因も分からなくて、ダメだった。 いや、今から考えてもこれを最初にやるのは無理すぎる。。。

逆にいうと、そういう経験があるからこそ、オブジェクト指向仮想メモリプリエンプティブマルチタスクの素晴らしさが分かるとも言える。 関心を局所に抑えて他に影響を与えないようにして、自分の関心のあるところだけ見れるようにするのはすごい大切。。。

ちなみに、使ってたツールはMacintosh Programmer's Workshop(通称MPW)やResEditというApple公式で出してた無料のツール。 これらのツールも懐かしい・・・

面白かったのはResEditで、当時のMacはファイルがデータフォークとリソースフォークという領域に分かれていて、リソースフォークにメタ情報であるアイコンやどのアプリで開くのかなどが収められていたんだけど(この辺りも特殊でMacでのプログラミングを難しくしてた)、ResEditを使うとリソースフォークが簡単に編集できたので、アイコンを変えたりして遊ぶことができた。 懐かしいなぁ・・・

大学(前半)

大学に入る前にジオシティーズで趣味のホームページを作り始めて、そしてインフォシークに引っ越し。 そのときに掲示板とかを導入したのもあって、CGIに興味をもった。

そんなわけで、大学に入ってから『初めてのPerl』(通称「リャマ本」)でPerlの勉強をした。

この本がとてもいい本で、読み進めながらいろいろとプログラムを作っては動かせるのが楽しく、Perlにハマった。 C言語だと大変なことがPerlだとラクラクとできたのも大きい。 Perlはいろいろと批判も多い言語だけど、正直Pythonオブジェクト指向崩れのコードを書くくらいなら、設計を実用性に全振りしたPerlを使った方がいいと思う。

そして、CGIオライリーの本で勉強。

その集大成として学部1年から2年になるときの春休みに作ったのが、サークルで運営していたWebサイトのCMS。 今から思えばかなりハチャメチャなことをしてて、あるソースコードから別のソースコードを使う方法も知らない状態だったので、「複数のソースコードを読み込んで一つのソースコードに吐き出すプログラム」を書いたりもしてた。 テンプレートエンジンを使うとかの発想もなかったので、かなり愚直なプログラム。 まぁ、それでもちゃんと動いてたんだから、正直よくできたものだよなぁと思う。

ちなみにHTMLとかCSSについてもこの頃に独学で学んだ。 あとviもこの頃に『入門vi』で学んだはず。

そんな感じで、ちょっとMacからLinuxへ興味が移ってる。 これはMac OS Xへの絶望が大きくて、最初はMac OS Xのかっちょいい見た目に憧れたんだけど、実際に触れてみるとClassic環境とはかなり印象が違ったのが原因。 かといってWindowsを使うのもなぁというのもあって(結局は一時期Windowsにしてたんだけど)、それならカスタマイズ性の高いLinuxを使って、いつかは「ぼくの考えた最強のMac OS」をLinux上に実現できたらなぁと思ったから。 まぁ、普通にUnixの考え方に慣れて、かつ、最強にユーザフレンドリーなUnix環境にmacOSが成長したので、今は普通にmacを使ってるわけだけどw


長くなったので一旦区切り。

今日はここまで!