Hatena::ブログ(Diary)

naoyaのはてなダイアリー

August 09, 2005

Perlプログラマのレベル10 - Perlプログラミング救命病棟より

プログラマ、と一言で言っても、if文の意味をようやく理解したばかりの駆け出しのプログラマもいれば、汎用的で優れたライブラリを量産できるような凄腕のハッカーもいる、つまりはピンきりです。

Perlプログラマに関してはどうでしょう。一流のPerlプログラマになるためには、見えない階段があるようです。use strict を使い始めたらその階段を一歩上ったと言えるでしょうし、正規表現を理解したときも一段あがることになると思います。リファレンス、クロージャ、オブジェクト指向、CPANモジュール、mod_perl、MVCフレームワーク。それらも階段を構成する材料の数々と言えるでしょう。

さて、Perlプログラミング救命病棟という書籍から、ちょっと長いですがそんなPerlプログラマのレベル10のリストを引用してみます。

レベル1: Perl 関係の書籍や資料を何も読んでいない。Perl がプログラミング言語だということは知っているが、それ以外のことは何も知らない。他人の書いたPerl プログラムを実行できるので、プログラムの一部を編集することでプログラムの動作の一部(出力される文字列の内容など)を変更できることを知っている。プログラムのほかの部分に変更を加えてもなぜうまくいかないのか理解していない。この言語に合うメンタルモデルを持っていないので、Perl の構文をCOBOL とC++ のような他の言語のものとは区別できていない。

レベル2: 基本ブロック構造の構文を理解しているが、JavaScript のような言語に似ているという程度の認識にとどまっている。ブロックがある種のスコープ効果を生じさせるという理解はあるものの、レキシカル変数のことは知らないし、use strict や use warnings に出会ったこともない。条件の意味を変更することができ、基本的な算術演算子と論理演算子条件を使用できる。必要とするすべてのことを、他人の書いたプログラムに若干の変更を加えることで達成できると思っている。

レベル3: プログラムをゼロから作成したいが、ある種の教育が必要だとわかっている。Perl を学ぶのに適した書籍を推薦して欲しいと思っている。このレベルのプログラマの中には、ラクダ本[WALL00] をチュートリアルだと思って手に入れ、その内容を読破しようとして、重いトラウマに苦しむ者がいるかもしれない。

レベル4: use strict とuse warnings を初めて学び、有用性よりも厄介さを感じている。my の意味について思案している。いろいろなモジュールでほとんどの問題を解決できることは知っているが、それらの入手方法や使用方法は知らない。Perlのニュースグループに参加しているが、自分に関係のないトピックについての大量の議論に圧倒されている。

レベル5: 正規表現、演算子、I/O、およびスコープについて基本的な理解がある。皆が言っているので、my、use strict、およびuse warnings を使用している。多くの人たちがこのレベルを超えないのは、たとえ非効率であっても、再利用可能なコンポーネントの作成を除けば、ほどんど何でもできるからである。このレベルか次のレベルでは、リファレンスのことを知っている。

レベル6: Perl の講習を受けている人もいる。オブジェクトの使い方を知っており、この知識とComprehensive Perl Archive Network(CPAN)を利用すれば強力なプログラムをすばやく作成できると知っている。次のレベルに進んで、この能力拡大がどこまで行くのか見たいと思っている

レベル7: オブジェクト指向モジュールを自分で作成できるようになり、コードを再利用することの喜びをようやく感じている。パッケージならびにレキシカル変数とダイナミック変数の違いを理解している。Perl の正規表現(regular expressions)が「普通の」という意味のレギュラーではなく、単純なテキスト操作をはるかに超えるものだと知っている

レベル8: CPAN にバグレポートやパッチやモジュールを送ったり、ドキュメントについて提案したり、初心者に助け舟を出したりするなど、Perl コミュニティに寄与するための活動を開始している。AUTOLOAD などの高度な機能を知り、Class::MethodMaker などの開発者向けモジュールを使い始める。DBI やTk などの複雑なアプリケーションモジュールを適宜使用する。CGI.pm を駆使してWeb ベースのアプリケーションを作成する

レベル9: Perl カンファレンスに出席するなど、Perl コミュニティへの関与を深める。www.perlmonks.org や#perl(第12 章を参照)に頻繁にアクセスしているかもしれない。eval でコードをその場で作成したり、シンボルテーブルを操作するといったことを楽に行える。コーディングにおいて、たびたびパフォーマンスのことに気を遣う(たぶん必要以上に)。メジャーなモジュールをサブクラス化して重要な機能をつけ加えたモジュールを公開する

レベル10: Perl のobfuscation コンテストや「golf」コンテスト*3 に参加する。たとえば、普通のプログラマなら1 つのプログラムを丸ごと必要とするような関数を、埋め込みコードを使って単一の正規表現で実装してしまう。Perl コアにパッチを送ったり、新しいメジャーなモジュールを寄贈したりすることで、Perl コミュニティで有名人になるかもしれない

さらにレベル数を大きくしていくと、すぐに該当者がLarry Wall だけになります。

いかがでしょうか。レベルいくつに相当したでしょうか。僕が知る限り、レベル7以上のプログラマはそんなに多くないようです。レベル8以上になると、周囲の知人から探すのが難しくなってきます。レベル9以上の人は、知人の中には片手で数えられる程度しかいません。

このレベル10が書いてある Perlプログラミング救命病棟 (Programmer’s foundations)、実は僕が監訳をさせていただいた書籍です。原著は Perl Medic: Transforming Legacy Code。use strict も使っていないグローバル変数だらけのスパゲッティコード、いわゆるレガシーなPerlスクリプトをどうやって今風に生まれ変わらせるか、その過程を通じてPerlの"ダークサイド"に堕ちないようにするにはどうしたらいいか、を教えてくれる一冊です。

おそらく、レベル3 から レベル8 までのすべての Perl プログラマにおすすめできる本だと思います。発売日は9月5日。8月27日土曜日に開催される Lightweight Language Day and Nightで先行販売するとのことです。

Perlは変数宣言がなくて typo に気付かなかったりするのが嫌と思っている方や、使える言語はPerlと聞くと脊髄反射してしまう方などに是非読んでいただきたいのはもちろん、綺麗なコードを書くためにはどうすればいいか、CPAN から有用なモジュールを見つけるにはどうしたらいいか、テストを自動化するためにはどうしたらいいかといったことに頭を悩ませているPerlハッカーの方々にも読んでいただけると嬉しいです。

PerlMedic.jpg

da_kda_k 2008/07/15 02:07 いま読み返すと、CGI.pmがレベル8に位置づけられているのが変な気がします。

レベル7までの人はCGIアプリを作れない(=Perlは難しい)という誤解を招きそうな気が。

naoyanaoya 2008/07/15 11:15 そうなんですよね、自分も監訳したときに少し違和感を持ちました。著者の方がウェブアプリケーション専門ではなさそうだったので、その辺でギャップがあるのかもしれませんね。

treeboatreeboa 2010/03/25 19:42 僕はperlレベル6だから\(^ー^)/

treeboatreeboa 2010/10/29 23:08 とっくにレベル7になってたw

トラックバック - http://d.hatena.ne.jp/naoya/20050809/1123563794