だてブログ

ねことテクと趣味のブログ

Pythonを選んだわけ

こんにちはー。 今回は今勉強している"Python"というプログラミング言語を選んだわけとその他周辺ネタを触りつつ、自分へのメモ代わりに書いていこうと思います。

Pythonって?

そもそも"Python"は様々な分野で利用されている、汎用型スクリプトプログラミング言語です。
そもそもプログラミング言語テキストエディタに書けばすぐ実行できるスクリプト言語と、機械語に変換することで初めて発動するコンパイラ言語に分かれます。(難しいので詳細割愛)
わたしは比較的学ぶのが簡易なスクリプト言語、かつWeb(サーバ)で使えてそれでいて汎用的な言語を探していました。当てはまるメジャーな言語として、昔から掲示板やブログなどで利用されてきた"Perl", HTMLに組み込むことにより、Webではかなりの速さを誇る"PHP", そして日本人の作った完全オブジェクト指向かつわかりやすい日本で大人気"Ruby", そして世界ではかなりメジャーなのに、日本では流行っていない悲しい"Python"(笑) 日本ではRubyが流行っているためPythonは流行らなかったそうな。おかげで資料やQ&A探すのも一苦労。

ではなぜPythonを選んだのか。

Perl, Ruby, Pythonこの3つはよく比べられていて、あるプログラマはこの3つをプログラマの3大美徳にたとえて比較しています。

Perlハッカー小飼弾氏が語った
Python as a Foreign Language」"より

  • Laziness(怠惰)  → Perl
  • Impatience(短気) → Ruby
  • Hubris(傲慢)  → Python

『Laziness(怠惰)』は、100回同じことを繰り返すくらいだったら、10の手間でプログラムを書いて簡単にすませてしまうというもの。この分野で一番強いのが、Perlだと思います。

次が『Impatience(短気)』です。これは、要するにコンピュータが『短気』になるということ。『高速なCPUもっているのに何もしていないじゃないか』といわんばかりに、コンピュータもこき使う気性が一番マッチしているのが、現在だとRubyかなと思います。例えばRubyでは文字列とか数値ですとかが手元でガンガン拡張する流儀がある。そんなに待たずにできる。それによりRuby on Railsも出てきて、Rubyはこれでブレイクしたわけです。

『Hubris(傲慢)』とは『神罰が下るほどの過剰な自尊心』、そして『人様に対して恥ずかしくないプログラムを書き、また保守しようという気質』。これはやはりPythonでしょう」

Pythonは傲慢な言語と彼は仰っていました。どういうことなのか。
「人様に対して恥ずかしくないプログラム」というのがPythonのポリシーで、Pythonは基本的に(程度の差はあります)プログラミングのスキル次第でコードの長さが変わることはあまりないです。 わたしが少しかじってみた感じ、Pythonはコードの長さよりも読みやすさを重視している感じがありました。正規表現なども一応ありますが、見やすさが犠牲になるくらいならわかり易く冗長に書いてみるほうがいい。そういった特徴もあると思います。
Pythonは読みやすさ-「可読性」を重視している言語なのです。

その可読性の特徴にインデント下げによる見やすい表現技法があります。Pythonではwhile,for,if.def(関数), class(オブジェクト)などでは、行末に:をつけて、次の行からは8バイトインデントを開けて書かなければならないのです。それによるカッコなどは使わないため他言語よりカッコが少なくなり、インデント下げも加わり独特の見やすさを手にしたのです。(まぁでも関数やリスト、辞書などでカッコは使います。)

その可読性はそのまま保守性にもつながります。保守性は作成したずっとあとで自分もしくは他人が見ても、コードの居場所がすぐにわかり、書き直しやすいことが重要です。Pythonは見易く、オブジェクト指向などにも対応していて、コメントもかなり推奨されているので比較的保守性も高いです。

またPythonでは独自の思想をいつでもコマンド一つで見れるようになってます。(“Zen of Python”) “Zen"は日本の禅でPythonプログラマが持つべき心構えを簡潔にまとめています。

$ python

>> 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!
名前空間は優れたアイデアであるため、積極的に利用すべきである。

この規約は、Pythonプログラマだけでなく、全プログラマが守るべきものなんじゃないかなと私は思います。

もちろんPerlRuby,PHPにもそれぞれいいところはありますが、Pythonは初めて学ぶ言語としては比較的学び易く、またプログラマとしての暗黙の規律、常識も理解できる言語なのではないかなと思っています。速さやコードの短さも大事ですが、わたしはそれよりも可読性のほうが大事だなと思っています。まだまだ勉強中の身ですが、書いていてすごくシンプルで楽しいです。 ただまぁ日本の資料や文献、などが他と比べて少ないのが残念です。日本でもこれから伸びてくるとは思うんですけどねー。