研究者が Python を使うべき5つの理由と避けるべき5つの理由

最近よく見かける10の理由が面白いので書いてみたいと思った。「Pythonを使うべき10の理由」的な内容にしようかと思ったのだが、一般論として書くよりは、個人的に Python を最もよく利用するシーンである、研究室における利用を想定して書いてみた方がより Python の特長の一面を表せるのではないかと考えた。しかし、単に Python マンセーしても仕方ないので、10の理由のうち半分を推奨する理由として、残り半分を推奨しない理由として列挙してみる。

タイトルにある「研究者」というのは、かなり広い意味を持ってしまうので、まずは前提条件として自分の立場を書いておき、それに近い領域の研究者としてみたい。まず僕は「研究者」といっても学生である。また、工学系の分野の研究をしており、シミュレーションよりは実際に手を使った実験が中心である。したがって、大規模科学計算のような分野についてあまり知らない。研究において Python を使うのは、実験で得られた値と理論との一致を確かめるための小規模なシミュレーションや、それを使った未知の物性値の導出、または実験データの整理などがメインである。そういった立場で以下の理由を挙げていきたい。

<研究者が Python を使うべき5つの理由>

1. Lightweight Language である

研究とは、未知のテーマに対して試行錯誤しつつ様々な試みを行っていくプロセスの連続であるから、それに付随するツールも日々変化しなければならない。書き捨てプログラムも多いし、その場その場で柔軟にコードに修正を入れることも多い。だから、Lightweight であることは重要である。

2. オブジェクト指向設計を強要しない

Pythonオブジェクト指向言語として利用できるが、無理してオブジェクト指向設計を行う必要はない。もともと関数で表される理論を無理にオブジェクト指向的に変換する必要はない。そもそも、この分野にいる大半の人間はコンピュータサイエンスとはほぼ無縁に近いから、オブジェクト指向なんてものは知らないし知ろうともしない。ただし、モデルによってはオブジェクト指向設計がうまくハマるから、「強要しない」ことと同じくらいに「できる」ことも重要である。

3. NumPy, SciPy がある

これは重要。非常に重要。もし無かったら僕は Python を研究には使っていない。これらは Python の処理速度を補う上で必須のツールであるし、信頼性の高い計算用ライブラリも利用できる。科学計算用のプログラミング環境は他にも多々あるが、Python という汎用的なプログラミング環境に、NumPy や SciPy によって科学計算の分野が取り込まれることで生まれるメリットは非常に大きい。

4. Windows でインストールが楽

僕のマシンは Mac だが、工学系の研究室においては Windows が主流である。したがって Windows で動く環境でなければならない。最近は UNIX 系のツールも Windows に対応するようになったが、Python の場合は普通のインストーラが使える。ダブルクリックでインストールできる。とりあえず試してみようという気になりやすい。

5. Battery Included かつ豊富なサードパーティライブラリ

研究でプログラムするのは、先にも述べたとおりシミュレーションや実験データの整理などが目的だ。しかしそれら意外の処理ももちろん必要となる。ファイルの入出力のようなシンプルなものから、人によってはネットワークを使ったデータのやり取りや、データベースの利用、場合によっては分散処理も必要になるかもしれない。こういった場面においても Python は様々にサポートしてくれる。

<研究者が Python を避けるべき5つの理由>

1. C ではない

コンピュータサイエンスとは基本的には無縁だが、やはりプログラミングが必要な分野では「とりあえず C やっとけ」みたいな雰囲気がある。で、みんな嫌々ながらも C をやる。しかし当然興味もないのですぐ忘れる。しかしその割に、「プログラミングといったら C でしょ」みたいなイメージは持っている。というか、その他のプログラミング言語を知らない場合もある。そんな人に、「Python どうですか」って突然言っても「へ?」である。

2. FORTRAN でもない

FORTRAN の呪縛はものすごい。いまだに科学計算の分野ではバリバリの現役の上、FORTRAN の持つ資産もものすごい。この分野における COBOL。幸い、Python には f2py があるし、NumPy や SciPy のように FORTRAN と優しく適度な距離感をもって接することは不可能ではない。

3. インタープリタである

ある程度プログラミングを知っている人の場合、次に来るのは「インタープリタだろ」というものだ。たしかに今のマシンは Python で Web アプリケーションを動作させるのに十分な速度を持ったかも知れないが、数値計算の要求はオーダーが数桁異なるので素の Python では力不足感は否めない。でも NumPy や SciPy を利用すれば大抵は問題にならない。

ちなみにパフォーマンスに関する問題は 80-20 の法則とからめて、必要ならそこだけ拡張ライブラリとして C で書けば良い、という話があがる。たしかにそれはそうだが、拡張ライブラリを書く人はあまりいないので、既に 80-20 のボトルネックとなる部分が解決できるライブラリが存在していることは重要だ。

4. まわりの誰も知れない

プログラミングを好きでするというよりは、必要だからする人にとって、誰も知らないのはハードルが高い。こればかりは頑張って Python を広めるしかない。ただ、一つ言っておきたいことは、たしかに C はみんな知っているが、知っているのは名前だけであって、使い方を知っている人はあまりいないということだ。だったらさっさと独学で Python を始めたほうが目的地へは早くつくと思う。

5. 生協に本が売っていない

C も JavaMATLAB も置いてある。Perl も、Ruby も置いてある。でも Python ないよというケースは多々あるんではないか。悔しい。ただし「初めてのPython 第2版」は発売当時置いてあった。生協の中の人、GJ。

おわり。