Perlプログラマの7つの段階

2000年に開催されたYAPC19100でTom Christiensenがおこなった発表に「Seven Stages of a Perl Programmer」と題するものがあった。発表の資料がここにある。そして、7つの段階をまとめたものがここにある。古い内容だが、日本語訳がないようなので作ってみた。伊藤直也氏のブログのこのエントリにある10段階と比較すると、時代の変化を感じさせてそれもまた興味深い。

初心者(novice)

  1. CGIPerlを入れ替え可能な言葉だと思っている。
  2. Perlを雑音の乗ったモデムを通じて見た、できの悪いCプログラムのようだと、まだ思っている。
  3. ドル記号の概念についてあやふやである。
  4. Perlはもっとshかtclのようであるべきだと思っている。
  5. UNIX発想思考(Unix mindset)」について聞いたことがあるが、それは治療可能な精神状態(treatable condition)であればと願っている。
  6. キーボード入力を読み込む方法が分からない。
  7. 正規表現を誰かの呪いの言葉だと思っている。
  8. Perlコンパイルされるのか逐次実行(interprete)されるのか明確な答えを誰も与えてくれないのはなぜかと不思議に思っている。

新参者(initiate)

  1. $_について学び始めた。しかしちょっと気に入らない。
  2. -wフラグを時間の無駄だと考えている。
  3. PerlはもっとC++Javaのようであるべきだと思っている。
  4. Perlはなぜ2つの別々の種類の配列を持っているのか理解しようと、まだ努力している。
  5. perlbugをどうやって使うかは知っているが、間違ったバグ報告を送っている。
  6. 暗黙のコンテキスト変換に悩まされたことがあるが、まだ理解していない。
  7. ==とeqを分けておくことが出来ず、+は文字列を連結すべきだと考えている。

利用者(user)

  1. Perlはテキスト処理だけのためのものだと考えている。
  2. Perlデバッガを使っている。
  3. 他の人の書いたモジュールを使ったことがある。
  4. オブジェクトとは何かと疑問に思っている。
  5. 自分なりにCPANを使う方法を知っている。
  6. localとmyの違いを知っている。
  7. を使っている。
  8. 参照(reference)は何のためのものか理解しようと、まだ努力している。
  9. Perlはもっとschemeかeiffelのようであるべきだと思っている。
  10. perlbugに本当のバグ報告を送っている。

熟達者(expert)

  1. JAPHを書いて友人を感心させ、同僚をいらつかせている。
  2. すべてのプログラムをuse strictで始める。
  3. Perlは正にPerlであるべきだと思っている。
  4. コンテキストの暗号(cryptocontext)を利用してさんざん他の人をいらつかせている。
  5. ハッシュへの参照を使ってレコードとオブジェクトをどうやって作るかを知っている。
  6. syscallを使ってドキュメント化されていないオペレーティングシステムコールを呼び出すいたずらをしている。
  7. Perlのオブジェクト機構の柔軟さを呪っている。
  8. 置き換えで/eを使っている。
  9. タイプグロブは何のためのものか不思議に思い始めた。
  10. 自分自身でPerlでモジュールを書いたことがある。
  11. すべてのデータを正規表現の観点から見始めている。
  12. 入れ子のデータになぜ正規表現がマッチしないかを理解している。
  13. 小さなユーティリティをPerlで書き直している。

ハッカー

  1. Perlでゲームを書いている。
  2. Cで拡張モジュールを書いたことがある。
  3. AUTOLOADとクロージャを興味深いやり方で使っている。
  4. シュワルツ変換(Schwartzian Transform)の美学を正当に評価している。
  5. Perlのオブジェクト機構の柔軟さを喜んでいる。
  6. 自分自身のpod2XXX変換プログラムを書いたことがある。
  7. Perlの-Dフラグによる出力を理解している。
  8. Perlのシンボル表に直接アクセスしている。
  9. バグ報告に動作しているパッチを付けて送っている。
  10. Perlが組み込まれた特別版のviかemacsを使ってファイルを編集している。
  11. 自分が提供したモジュールや、ドキュメント、ツールが標準のPerlディストリビューションに入っている。

導師(Guru)

  1. どんなPerlの質問にも瞬時に答えられる。
  2. 何でもPerlで書ける。そしてそうする。
  3. ドキュメント化されていない言語の機能を利用する。
  4. Larryでさえ考え込ませるようなプログラムを書いている。
  5. クロージャを使って不透明なオブジェクトとコンパイル済みの正規表現を実装している。
  6. Perl-to-Cコンパイラの出力を読んで理解することが出来る。
  7. 大規模アプリケーションにPerlインタープリタを組み込んでいる。
  8. 自分自身の-d:debuggerモジュールを書いたことがある。
  9. オブジェクト指向プログラミングを、それが存在する前から活用していた。
  10. パッチパンプキンを持つ順番になって、議論に参加している。

魔術師(Wizard)

  1. Larryの奥さんとファーストネームで呼び合っている。
  2. Perlコンパイラインタープリタの主要な部分を書いたか書き直したことがある。
  3. 正規表現エンジンか、メモリ割り当てルーチンか、ガベージコレクタを書き直すことを考えている。
  4. Perlでゲームは書かない。なぜならPerl自体がゲームであると悟っているから。

2005-09-09追記

初心者の項目の「UNIX mindset」の部分が分かりにくいという指摘を「どーんとやってみよう」さんから戴いたので変更した。