PEP8を超えて
Python関連の映像では、私はRaymond HettingerとDavid Beazley*1のものが最も好きだ。
まず、どちらも非常に話が上手い。ユーモアを交え、あまり急かした感もなく、それでいて聞き手のことを考えた話の運びであるように思う。あと英語が訛っていないので聞きやすいということもある。
さらに、話している事柄がおもしろい。David Beazleyはgeneratorやconcurrency関連のかなり高等な話題が多い。必死に考えながら聞いていないと何を言っているか分からなくなることも多い。
David Beazleyのプレゼンで一番わけわからず、またわくわくしたのがcoroutineについて語っている以下のもの。
A Curious Course on Coroutines and Concurrency
Python coroutineを使えばtask schedulingができてOSが書ける!というお話。*2
対して、Raymond Hettingerはどちらかというと平易かつ簡単なPythonの使い方の説明が多い。itertools
やcollections
などのstandard library developerという立場の人間のトーク内容としては少し意外かもしれない。ちゃんとイテレータ・プロトコルを利用しよう、コンテキスト・マネージャを使おう、ディクショナリーの機能をきっちり把握しよう、namedtuple
で可読性を高めよう、などと、一つ一つの点ではあまり物凄いことは言っていない。
しかし、それで出来上がるPythonコードの美しさは素晴らしい。より可読性が高く、宣言的な*3記述は、「ぜひこんな風に書きたい!」と思わせるもの。簡単なIdiomをスマートに使いこなすことのほうが、複雑であまり知られていない言語機能を多数取り入れるよりも、Pythonの哲学に合致しているし、読みやすいし、そして多くの場合効率がいいというのは大切なことだ。
というわけで、最近のMontrealでのPyCon 2015のビデオがyoutubeに上がっていたので見てみた。
邦題としては「PEP8を超えてー読みやすく美しいコードを書くためのベストプラクティス」となるだろうか。
PEP8とはPythonのコーディングスタイル・ガイドライン。standard libraryはこのガイドラインに沿って書いてあり、
PEP8は素晴らしい*4が、Pythonコードの美しさというのはそのガイドラインに従うだけでは絶対に実現できない、というのが話の主眼。プレゼン中にEmacsでコードを書く・編集するという、かなり度胸のあるトーク方法だが、話の内容に大変うまくマッチしている。
23:30あたりからの「今までのPEP8エディットで可読性は上がったように見える。けど実はこれは全然Pythonicなコードじゃないんだ。なぜなら本当にPythonicな方法で上の処理を書くなら、こんな風になるはずだから」というくだりが特に感動的。try-except-else-finally
の代わりにカスタムで作ったcontext manager
、getSize
やindexを使ったループの代わりにAPI wrapperで__len__
、__getitem__
を実装してイテレータ・プロトコル、setter
やgetter
などのメソッドを@property
を使ったattributeアクセスに交換、とすることで、20行ほどのロジックやエラーハンドリング、Java風APIの入り混じったコードが見る見るうちに分割され、実際のビジネスロジックの部分は非常にきれいに3行で記述されるという結果になる。
小技の冴えで読みやすく宣言的なコードができる、というのを目の当たりにするのはかなり感動した。こういう動画を見ると、「どんな言語も慣れてしまえば大体同じ」という文言がいかに間違いかを実感する。*5
こういうPyConなどのテクニカルトークビデオが豊富に、そして即座に見れるというのは本当にいい時代だなぁ。