Dropboxは全部Pythonで信頼性の高いソフトウェアを作った(後編)~PyCon APAC 2013
Pythonユーザーが集まり、情報交換し、交流するためのカンファレンス「PyCon APAC 2013」が9月13日、14日に都内で開催されました。PyCon APACはこれまでシンガポールで開催されており、今回初めて日本で開催されました。
(本記事は「Dropboxは全部Pythonで信頼性の高いソフトウェアを作った(前編)~PyCon APAC 2013」の続きです)
Pythonは遅いのか?

Pythonに対するクレームについて見ていきましょう。
まず、Pythonはすごく遅いと言われます。

でもたぶん、あなたのアプリはCPUによって制約されているわけではないでしょう。ごく限られた分野、例えばゲームとか科学計算ではないのならば、多くの制約はハードディスクやネットワーク、もしくはメモリから来ているのではないでしょうか。
それにもしも本当にCPUによって制約されているのであれば、そういうアプリはだいたいCやC++で書かれているとは思うけれど、Pythonにも選択肢はあって、それはCythonやPyPyを使うことです。

あるいは、CPUに制約されている部分を小さく分離してCで書き直すのがいいでしょう。

Pythonは並列処理もサポートしている
Pythonはマルチスレッディングをサポートしていないという指摘。これは正しくもあり、間違ってもいます。

まず、マルチスレッディングがあるのは並列処理(Parallelism)や並行処理(Concurrency)のためで、並列処理は物理的に複数の処理をすること、例えばマルチコアの活用など、並行処理は論理的に複数処理をすること、例えばサーバのイベント処理などです。
Pythonは並列処理に対応しています。もしもプロセッサがマルチコアならば、multiprocessingを使えばいいのです。(追記 9/19 10:36 このセンテンスの表現を正確にするため一部書き換えました)

並行処理も、tornado、twistedなどでサポートしているのです。

さらにシェアドメモリさえサポートしています。

つまりPythonでは並列処理や並行処理のためにマルチスレッドを用いる必要はない、ということなんです。

動的型付けで得るもの、失うもの
最後の指摘は、動的型付けは得ることよりも失うものの方が大きい、というものです。

まず、得るものとは何か? について考えましょう。ここで僕が言えるのは、動的型付けではなくダックタイピング(注:ダック型付けと書くべきか?)をすべきということです。

動的型付けの利点を得ようとするのならば、規律をもってコードを書くこと、その方法を学ばなければなりません。それにはこれを読むことをお勧めします。これは僕の人生を変えた記事です。

では、動的型付けで失うもの、コストとはなんでしょうか? その典型がNamErroの発生でしょう。

これは変数名や関数名のスペルミス、間違った属性へのアクセスなどで起きます。でもこれはPythonの問題なのでしょうか? いや、あなたのミスですよね。
例えば、アプリケーションがデッドロックしたらそれはmutexのせい? ポインタがエラーを起こすのはNull値があるせい? そうではありませんよね。
Mutexはシェアドメモリへのアクセスを実現してくれるし、Null値はそうした値を表現してくれます。だったら、なぜNamErroが起きたことでPythonを非難するのでしょうか? コンパイラがなくてそうしたエラーを事前に指摘してくれないから?
静的分析は実行前に一般的な実行時エラーを見つけてくれます。

Pythonにはそうした優れたツールもすでにあります。それにコードに対するヒントなども教えてくれるので、規律あるコードを書くのに役に立つはずです。

Dropboxでも過去にNameErrorやAttributeErrorなどを見つけてくれています。

自動化されたテストを書こう!
それから(静的分析に加えて)僕がさらに言いたいのは、自動化されたテストを書こう、ということです。

このことは何度も聞いてるとは思うけれど、これは、絶対にするべきなのです。本当に。

静的分析もテスト自動化もどちらも優れた方法であり、事前にあなたのエラーを見つけるための方法です。
そのうえ、将来あなたと一緒に働く人にとって、より自律的にコードをかけるようにもなります。将来の誰かを助けることになるのです。

実は、われわれも長い間自動化テストを書いていませんでした。そのおかげで開発がどんどん遅くなっていきました。

2009年11月の時点で自動化テストは0でした。いまではクライアントで1000を超えるテストコードがあります。

結論。Pythonで信頼できるソフトウェア基盤は作れます。

サンキュー。
あわせて読みたい
エンタープライズ用途の開発言語、Javaがもっとも利用され今後も上昇傾向。HTML5も急速上昇の見通し
≪前の記事
Dropboxは全部Pythonで信頼性の高いソフトウェアを作った(前編)~PyCon APAC 2013