(KLab×はてな エンジニア応援ブログコンテストへの応募エントリーです。)
会社の本棚には僕の個人的な持ち物であるオライリーの本が多い。最近もC++を勉強するためにとこれまたオライリーの"C++実践プログラミング"を買った。会社でC++に詳しいShu MASUDAさんは不思議そうに、
「何でその本を買ったんですか?」
と聞いてきた。確かにC++ならば他に良書が多数あるし、オライリーの"入門C++プログラミング"は大きく期待外れだったし、オライリーの本の翻訳は品質もバラバラなので当然の疑問だ。
Perlがわからない
2002年の暮れ頃、深夜の会社で一人、Perlモジュールのソースをわけも分からず端から読んでいた。5日間の期限でキャンペーン応募フォームの作成を命じられたためだ。その頃の僕は専門学校での教科書レベルのCと前職で使ったVBやASPのWindows上のWebアプリ経験しか無く、PerlといってもPerl4時代の書き捨て掲示板CGIを多少改修できる程度の知識しかなかった。
しかし突然、以前その会社に在籍していた先輩から、先輩自身がPerlで自作した独自Webフレームワークでのアプリ開発を命じられた。今考えてみれば先輩は、
「どうせ出来ないだろうが1日あれば自分が作れるからいいか」
という程度の考えで指示をしたのだろう。1日費やしても進捗どころか1行も書く事が出来ない状況に僕は暗澹たる気持ちになった。
ラクダの絵の描かれた本を買う
しかし未熟とはいえ業務としてのプログラミング、つまり「何が分からないのかも分からない」という状況への耐性は出来ていたので、リリースまで家に帰らない覚悟を決め、Webで評判の高かった"ラクダの絵の描かれた本"を買って先輩独自のWebフレームワークのソースを端から読んでいく事にした。
当時は概要もまったく掴めぬまま愚直に全てのファイルを読んでいたが、今考えてみれば下記のような物だったと思う。
- Perlで書かれた独自のApacheハンドラ。(何という拡張子をマッピングしていたかは忘れたが独自の物)
- 独自のテンプレートライブラリ。
- File IOのレベルで独自の基本ライブラリ群。(たしか内部的にTime::HiResだけはCPANモジュールを利用していた)
- 全てPerl5からのオブジェクト指向機能を使用している。
- コメントやドキュメントは全く無い。
基本ライブラリ群のトップレベルのネームスペースである2文字のアルファベットが作者である先輩のイニシャルであることに気付いた事でさえ当時の僕にとっては大発見だった。結局ソースコードもラクダ本も一通り読み通したものの、1行も書けずにリリース日を迎えた。
どんなにこっぴどく怒られるのかと思っていたが、先輩は"期待はずれ"といったため息を吐くだけで特に何も言わなかった。社長は技術のことは分からないが、"komagataがどうやら連日徹夜で何かやっていたらしい"ということは伝わっていたため「とりあえず寝ろ」ということで近所のカプセルホテルに泊まれることになった。結局アプリは先輩の会社が作り上げてリリースされた。
不思議な体験
しかしその後、あることを切っ掛けに今まで意味不明な記号の羅列や呪文の様にしか見えなかったソースや本の文章が急激に理解できるようになった。パズルのピースがはまっていくように次々と頭の中の記憶の断片が意味の通る知識としてつながった。これはちょっとしたカタルシスだった。その切っ掛けとはいろんなことを省いていくと、とどのつまり下記の1行の理解である。
sub foo {
my $self = shift;
}
非Perlプログラマーへの解説
sub
はperlで関数(サブルーチン)を作るキーワード。my
はローカル変数宣言のキーワード。shift
関数は暗黙的に@
を引数に取る。shift(@)
@
はその関数の引数が配列として入っている。perlのサブルーチンには明治的な引数宣言は無い。- インスタンスメソッドの第1引数はオブジェクト自身になる。
- つまりオブジェクトへの参照を
$self
に入れるというperlでインスタンスメソッドを書くときのイディオム。
これがわかると「あれも読める、これも読める、読めるぞー!」とばかりに貪るようにソースや本を読み漁った。ラクダ本以外にもPerlと付くオライリーの本は片っ端から読んだ。("バイオインフォマティクスのためのPerl入門"以外)
先輩独自モジュール群はほとんどCPANやPerl本体に付いてくるより優れたモジュールが存在することがわかった。先輩自身のエゴで独自に手作りしたコードに苦しめられたことに腹が立った。オライリーの各種書籍やPerl, CPANの公式ドキュメントにはそういった独自のやり方とは正反対の世界標準・公式のやり方のための情報が盛りだくさんだった。
そこから僕が全く付いていけなかった先輩より遥かにスゴいプログラマーがインターネットには沢山いることがわかり、そこからオープンソースやプログラミングにどっぷりハマっていくことになった。
何故オライリーの本を買うのか
つまりオライリーとは僕にとって"全然分からないものが分かるようになる魔法の本"なのである。
今はPerlを書くことはあまり無くなったが、今でも未知の技術を勉強し始めるのに自然とあの"リアルな動物の本"を手に取ってしまうのである。
posted with amazlet at 09.10.05
ラリー ウォール ジョン オーワント トム クリスチャンセン
オライリー・ジャパン
売り上げランキング: 137434