みんなのPython

http://www.amazon.co.jp/exec/obidos/ASIN/479733665X

えーとこういう本は私好きです。言語覚える時はリファレンスついてる本が好きです。その人が何故その言語を好きか、みたいなことが書かれてるとなお良いです。私の趣味の一つは人の趣味を聞くことなので。

ちなみに以下の文章は主に Ruby と比較してるんですが PythonRuby もよく知らないのでいいかげんです。そして本の感想では全然ないです。

さて。Pythonのごく基本的な部分は学べたんじゃないかなと予想します。そんなこんなで一番気に入ったPythonの機能はリスト内包表記でした。何故かというとパズルチックで書いてて楽しいからです。事実、この本でも「華麗で短いプログラミング」という章がありまして、こういう主旨には全くもって賛成なのですけど、しかしこの「華麗で短い」ってのはPythonのゴールでは決して無いんじゃないかなぁとか思うと非常になんか、面白いなぁと思います。こう、普段は堅物なのに、たまになんかほげほげみたいなそういう。

で、えーとプログラムを書いてて楽しいというのは非常に重要なことなんですがこの楽しさは可読性と負の相関を持ってることが多いと思ってまして、Pythonの基本的な方向性ってのは、私個人として見た場合は楽しさの方向からは遠ざかっている気がしてます。しかしこれは保守性との一定のトレードオフを考えたということでしょうし、悪いことじゃないんだと思います。

あと「オレ驚き最小の法則」みたいなのに反している部分がいくつかあると思います。例えば…と書こうと思ってたことが jmuk さんのところに書いてありました。

http://www.jmuk.org/d/?path=2006/09/06#d06t03

要は私の感覚では del が許せないです。 del は Array や Hash のメソッドであってくれないと。 len も許せないです。この2つはもう、完全に「オレ驚き最小の法則」に反しているのは間違いないです。初学者がPythonを学ぶ時にどうかは知りませんが、私が学ぶ時は、絶対に Array やら Hash 的なもののメソッドとして実装されてるはず…と信じて探しますから。簡単に説明すると del は del hoge['hage'] とかして、 hoge というハッシュの hage という要素を削れます。いや要するに D の昔の delete なんですが、というか D が Python をたくさん参考にしてるであろうことはよくわかりました。

でもなんか、 Python は昔の文法をキチンと残していたりとかドキュメントがきちんとしてるとか、商用用途というかそういう系統の管理はいきとどいてるなぁと感じました。そら MS だの Google だのが気にするよなぁと思いました。

あと Ruby にもあるのかもしれませんが、 fileinput モジュール(標準入力やら第一引数やらのファイルを適切に読み込める)なんかがやけに気が効いてるなぁと思いました。印象としては、まずベースの機構は Ruby の方が複雑で(特異クラスとかそのへん未だによくわからない部分が)。でも複雑なぶん Ruby の方が表現力が高くて色んなこと驚き最小でできて、 Python の方が adhoc な印象なつけ加えや冗長な表現が多い、と。でも Python はそれを補うために汎用的じゃないけどピンポイントで気の効いた機構(リスト内包とか fileinput モジュールとか)で補う、みたいな印象を受けました。

個人的な結論としては、 Pythonツンデレだなぁ、と、そう思いました。

あとなんかどっちかというと悪口が多いですが、いや実際 Python はそんなに気にいってもいないのですが、 Stackless Python が面白そうなのでいじってみたいなぁと思って勉強を始めたので、もうちょい触ってみたいと思っています。

追記: すっかり忘れてましたが、 Ruby と比べて Python の方がシンプルだと感じた部分も結構あります。なんか Ruby だとクラスメソッドとかそのへん未だによくわかってないのですが、 Python はモジュールシステムも含めてそのへん全部スロットにおさまってる感じだったので、わかりやすい気がしました。驚き最小。というか Ruby のそのへんは結構色々驚いた記憶があります。

なにかあれば下記メールアドレスへ。
shinichiro.hamaji _at_ gmail.com
shinichiro.h