2010年7月13日火曜日

import thisとThe Zen of Python(2)

原文:http://www.wefearchange.org/2010/06/import-this-and-zen-of-python.html
原文投稿者:Barry Warsaw

注:本エントリーは、Guidoのブログではなく、そこで紹介されていた、Barry Warsaw氏のブログの翻訳です。翻訳と公開の許可をしてくださったBarry Warsaw氏に感謝します

Richard Jones氏は現在(元記事執筆時点)、PyCon Australiaでする話の準備をしている。彼はその準備の中で、私に"Zen of Python"の歴史についてたずねてきた。それはTim PetersがPython界に永遠に残した言葉で、Pythonの本質的な真実を良く伝えるものであり、さまざまな場面で引用されている。最初に調べたときには、このリストが最初に公表された時の情報を探すことはできなかったが、その後、自分のメールのアーカイブをすみずみまで調べたところ、"Zen of Python"が最初にPython-listというメーリングリストに投稿された時のメールを見つけることができた。"The Python Way"というタイトルで、1999年の7月4日に投稿されたものであった。

すぐに最初の出典を見つけることができなかったので、自分のアーカイブの探査に戻ったり、"this"モジュールの解析を行っていた。最近のPythonのインタプリタでは、次のようにタイプすると、"Zen of Python"を読むことができるというのをご存知だろうか?(訳注:日本語訳はこちら)

% python
Python 2.6.5 (r265:79063, Apr 16 2010, 13:57:41)
[GCC 4.4.3] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import this
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!

"import this"の背景の話は楽しいものなので、私は、これが追加された経緯について紹介したら面白いだろうと考えた。おそらく、Guidoの"History of Python"というブログに何かストーリーを追加するような内容になるはずである。

2001年の秋に、ForetecInternational Python Conference #10 (IPC 10, PyConの先駆けとなるイベント)の開催準備をしていた。ForetecはCNRIの子会社のイベント運営会社で、Pythonlabsの設立のために退社する2000年まで、Guido, Fred,Jeremyと私を雇っていた。その会社は動きが悪いこともあったが、好意的な面も多数ある会社であった。その時には既に、私たちは友人たちと一緒にZope Corporation(おそらく当時はまだDigital Creationsという名前)で働いていたが、ForetecはIPCの開催を継続していた。ForetecはカンファレンスのスローガンをTシャツにプリントしたいと考えており、Pythonコミュニティからスローガンの提案を集めようと考えていた。提案されたエントリーを審査して、勝者を決めるというタスクを行うことをPythonlabsは同意した。しかし、私の記憶では、当時奥さんの出産を控えていたGuidoには、エントリーを審査する時間とエネルギーがなかった。

私たちは500ほどのエントリーを受けつけたが、ほとんどはひどいものであった。Timは「Louise、5分も見ていると、脳が溶け出しそうになるよ」というようなことを言っていたが、なんとか作業を継続して、130エントリーほどになるまでカットした。最後の勝者が決まる、最後の1分まで、私たちはただただ気が狂いそうだった。Timは私に、リストを交換する提案をしました。リストを半分にして、半分だけ交換しました。Timは私よりも遥かに数学が得意であり、Pythonの数値の割り算のくせを忘れていたため、最後の2つのエントリーが抜けてしまった。それらが「好きなものはすべて食べられます。咀嚼するのはオプションです」(私には良いところがまったくないと思われた;)と、「import this」であった。Timは「Pythonのプログラムに関して学ぼう」というエントリーについて二人ともが良いと思っていた土壇場になって、このおもしろいものを復活させた。

私はこの「import this」という偉そうなセンテンスを気に入った。また、このセンテンスを利用すればマイケル・ジャクソン風のすばらしいTシャツが作れそうだという可能性を感じた。

"import this"を選択してすぐに、それをプログラムとして実装した方がいい、ということに気づいた。Python 2.2のリリースが間近だったため、私は、コードのチェックインを知らせる機能をオフにして"this.py"というthe Zen of Pythonを表示させるモジュールを忍び込ませてはどうか?という提案をした。TimかGuidoのどちらかが、内容を難読化するのにrot13という暗号化をしてみたらどうか?と提案した。その仲間内以外の人には誰にも話しをしなかった。Googleを探索して調べたところ、IPC 10が終了してすぐに、私たちはPython 2.2.1としてthis.pyをコミットして、このイベントを祝していた。つまり、2.2.1には、本来リリースすべき真面目な機能に加えて、このジョークの機能が追加されていたのである。私の記憶が正しければ、ここで仕込んだ小さなイースターエッグが発見されるまでには、多少の時間を要した。

これは、Pythonコミュニティにユーモアがあった時代を思い出させてくれるできごとである。

1 件のコメント:

  1. this.pyは何のためにあるのか調べていたところ、こちらの記事を発見しました。
    ちょうどpythonの勉強をしており、各モジュールの作りを確認していたところ、この意味不明なモジュールにぶち当たりました。
    この逸話は非常に好きですね~msとかでは考えられないので、
    ナイス記事、ありがとうございました

    返信削除