このBlogは移転しました。今後は aish.dev を御覧ください。

The Zen of Python 解題 - 前編

    The Zen of Python, by Tim Peters

    Beautiful is better than ugly.
    Explicit is better than implicit.
    Simple is better than complex.
    Complex is better than complicated.
    Flat is better than nested.
    Sparse is better than dense.
    Readability counts.
    Special cases aren't special enough to break the rules.
    Although practicality beats purity.
    Errors should never pass silently.
    Unless explicitly silenced.
    In the face of ambiguity, refuse the temptation to guess.
    There should be one-- and preferably only one --obvious way to do it.
    Although that way may not be obvious at first unless you're Dutch.
    Now is better than never.
    Although never is often better than *right* now.
    If the implementation is hard to explain, it's a bad idea.
    If the implementation is easy to explain, it may be a good idea.
    Namespaces are one honking great idea -- let's do more of those!

最近、Twitter上で

Pythonicとは何か?一言ではこたえづらいな・・

という発言を見かけた。Pythonが公開されてからすでに20年近くが経過している。これだけ長期間に渡って活発に開発が進められていては、元々のポリシーは見えにくくなっているかもしれない。

それでも、Pythonの開発者や多くのユーザの間では、昔ながらの「Pythonic」がまだまだ共有されている。上記のTweetに対して、私はこう答えた:

"import this"

この呪文をご存じない方は、Pythonインタプリタを起動し、

>>> import this

と入力してみてほしい。 "The Zen of Python" と呼ばれる、十九条に渡る叡知に満ちた神秘的な詩句が出力されるはずだ。この "The Zen of Python" こそが Pythonic であるための指針であると広く認められている。 本来、"The Zen of Python" は全二十条からなるが、現在示されているのは十九条に過ぎない。最後の一条はいずれ明らかにされるが、その日こそが Python の完成に至る日であると定められている。

さて、ここでは力不足を顧みず "The Zen of Python" の解説を試みたい。もちろん、 "The Zen of Python" の核心はPythonインタプリタとの真摯な対話によってのみ啓かれるべきものではあるのだが。

Tim Peters

本題に入る前に、まずは "The Zen of Python" の著者である Tim Peters氏について触れておこう。氏は近年 Python 開発の第一線からは退いているため、ご存じない方も多いだろう。

Pythonの生みの親である Guido van Rossum氏を除いて、もっとも重要なPython 開発者は誰か?こんなアンケートがあれば、おそらく Tim Peters氏が選出されるに違いない。

Timは黎明期のPython開発に早期から加わり、重要なアイデアや実装を数多く提供してきた。特に各種アルゴリズムや数値演算に明るく、Pythonのパフォーマンス改善に大きく寄与している。Windows環境にも精通しており、 Mark Hammond氏らとともにPythonWindowsポートにおいても主要な役割を果たした。

また、開発面だけではなく、Pythonメーリングリスト、後にはUsenetのcomp.lang.pythonにおいて精力的にユーザのサポートを行った。彼のユーモラスな、しかし的確なメールは広く愛され、Pythonコミュニティの名物であった。

さらに、彼はメールによるコミュニケーション手法においても重要な発明をしている。一つは 「long-phrase-ly idiom」と呼ばれ、メールの末尾を

in-any-case-the-best-christmas-present-i-got-today!-ly y'rs - tim

のように、文の単語をハイフンでつないで末尾に 'ly' を付加して副詞化した文に y'rs - tim (y'rsはyoursの略) を加えて結語とすることにより、独特のユーモラスな雰囲気を付加する技法である。 Timのほとんどのメールでこの long-phrase-ly idiom が使用されており、Tim以外の人物がこの技法を使用していることも多い。議論が白熱しすぎたとき、誰かが適切なタイミングで long-phrase-ly idiom を投入することで場が和み、再び建設的なゴールに向けた冷静な議論が再開されるのである。

もう一つの発明は 「Fractional Winkery」 だ。メールでは、ちょっときつめな文章のあとに<wink>をつけてジョークであることを示すことがある。こんな感じだ:

I'll kill you! <wink>

Timはこの <wink> に、そのジョーク度合いを示す数値を付加することに成功した。上の文章は Fractional Winkery を使ってこう書き換えることができる:

I'll kill you! <1.0 wink>

つまり、100%ジョークであり、あなたを殺す意志は全くないということを明示している。ここで

I'll kill you! <0.5 wink>

と書けばかなり強い殺意を示しており、さらに

I'll kill you! <0.0 wink>

とすれば事実上の死刑宣告とすることができるのだ。

このように数々の優れた実績を残してきたTim Peters氏であるが、彼については大きな謎があった。Tim Petersとは何者か?という謎である。当時、Tim は Python コミュニティ以外で活動した形跡がなく、Pythonコミュニティでも個人的な知己が一人も現れていなかった。長い間、実際に Tim と面会したことがあると主張するのは Guido ただ一人であったのだ。これほどまでに有能な人物が、これまで全く知られていないなどということがあり得るだろうか?

Tim の正体については、数多くの推測が提出されてきた。Guido の睡眠中に現れる第二人格であるとする説、Bill Gates のペンネームだとする説、何らかの理由で肉体を失い、純粋知性となってインターネットをさまよう地球外生命体であるとの説などだ。いずれも一定の説得力を持つ推測ではあるが、決定的な証拠に欠けていた。多くの人々は Tim をある種の bot であると推測し、このことから彼は timbot と呼ばれることも多い。



現在では、Tim は少なくとも肉体を持った生命体であることが確認されている。2000年には当時創設された BeOpen社の PythonLabsチームに Guidoらとともに参加し、多くの人々の前に現れることも可能となった。

次の写真

f:id:atsuoishimoto:20030328031416j:plain:w300

は 2003年にWashington DCで開催された PyCon DC 2003で著者が撮影に成功した Tim Peters氏の写真であるが、通常の人類と比較して特に差異を見つけることはできなかった。この時、著者は Tim がごく自然にタバコを吸い、コーヒーを飲むのを目撃した。握手した際の肌の質感にも異常は感じられなかったことも付記しておく。

そして Tim はさらに Pythonコミュニティにとって重要な、驚くべき能力を備えている。Tim はチャネリングによって Guido の思考を読み、それを我々に伝えることができるのである。メーリングリストPython についての質問があれば、Guido が睡眠中であっても Tim はその質問の答えをチャネリングによって Guido から取得し、返答することができる。また、Tim は Guido のまだ漠然としたアイデアや思考を的確に把握してそれを人々に伝達したり、 詳しく説明するのに長けており、「Guido 自身よりも Guido らしく」人々に語りかけることも出来た。Tim は Guido の思考に非常に素早く反応するため、時には Guido が実際に思考する前に Tim がその思考を解説してしまうことすらもあった程だ。

"The Zen of Python" は、 このTim Peters氏が1999年に「Pythonらしさとはなにか?」と問われ、霊感に満ちて書き上げたものである。 1999年といえば、当時の Python は現在の Python と比べてればシンプルで、まだ Unicodeクロージャもリスト内包も存在しないころだ。以来、Python の言語もライブラリも大きく拡張されてきたが、現在でも"The Zen of Python" は生きているのである。


(後編に続く)