@kyanny's blog

My thoughts, my life. Views/opinions are my own.

「みんなの Python」を読んだ

まだオブジェクト、クラスあたりの部分が残っているけど、他はだいたい読んだ。

技術書をちゃんと一冊通して読み終えたことがあまりなかったので、全体に目を通せたのはうれしかった。 Python のコードは読みやすくて、「暗黙の○○」みたいなものが少ないように思えたので、より読み進めやすかったのかもしれない。あと本の装丁とか文章も自分にあっていたと思う。

オブジェクト指向の概念を学ぶために Perl で頑張った身としては、最初から文字列とか数字とか含めて全部がオブジェクトだっていうのは一貫性があってとてもわかりやすいと思った。正直、 Perl のコードを書きつつオブジェクト指向のなんたるかを学ぶのよりは、そこだけ手早くつかむために Python の文法を学ぶほうが早かったんじゃないかと思う。まぁ Ruby でもいいのだろうけど。標準でインタラクティブシェルが付属しているのも、学びやすい環境が整備されているなと思う。まぁこれも Ruby にもある。本のなかで普通に python シェルを使っているのがいいなと思った。「玄人だけが知っている裏技」じゃなくて誰もが使う、という風に仕向けているというか。

あと、標準モジュールが充実しているのもうれしい。ただ、 Python における CPAN モジュールのしめる重要性がどの程度なのかわからないので、 CPAN モジュールありきでプログラムしている自分の今の Perl の使い方と単純に比較できないと思う。 cvs とか xml とかメールまわりとかを標準モジュールでカバーできるのは楽そうだなと思う。

あと、モジュールのインポートの仕組みがとってもわかりやすかった。 Perl でオブジェクト指向を学んでいたときは、「なんで Exporter モジュールを使ってるのに定義するメソッドが import なんだ?」とか意味不明に思うことがたくさんあってつらかったし、 use したときに使える関数使えない関数の違いを理解するのも苦労した覚えがあるが、 import urllib で urllib.* が呼び出せるようになる、というのは見た目と使い方のずれが少なくて把握しやすいと思う。

インデントに関しては、 TMTOWTDI ならぬ TOOWTDI という思想に以前から興味と魅力を感じていたってこともあるし、先入観なく受け入れられた。というのは建前で、本音をいうと Emacs に任せきりなので特に何も考えていない。

弾さんのブログで読んだのだったか、メソッドを定義するときに def foo(self): と必ず self を渡さなくてはならないのは冗長だ、という意見については、 my $self = shift; に比べたらずっとタイプ数も少ないし my 宣言をつけわすれたり shfit と書いてエラーになったりすることもないので良いと思う。というのは冗談としても、「暗黙の○○」は少ないに越したことはないと思うので良いと思う。 Javascript だったか、 this があるのは。ああいうのとか、 $_ とかは、慣れれば便利だけど慣れない内はわかりづらいし危険でもある。そしてすでに何かのプログラム言語に慣れていて、わざわざ新しい言語を、仕事の都合とかで必要に迫られるわけでもなく単に学ぶ場合には、新しく覚える言語に特有の暗黙知が多すぎると「やっぱ慣れてる奴のほうでいいや」とあきらめてしまうことが多くなってしまう。自分が Ruby をちゃんとやれてないのは、「Perl なら while (<>) {} で書けるものを Ruby ではどう書けばいいの?」みたいな細かい違いにとらわれすぎてかえってストレスを感じてしまうからだ。新しい言語を趣味で学ぶなら、見た目とか文法とかは明らかに違っているほうが新鮮で良いと思う。

良いところをたくさん書いたので、悪いと思うところも二つ書く。一つは、良さの裏返しだと思うのだけど、いわゆるワンライナーが書けない(全く書けないわけじゃないだろうけど、 perl -pe '' で手軽なフィルタをかく、みたいな仕事には不向きだと思う)。標準入力すら import sys なので、かっちりファイルに書いておく感じになる。これはそういうことが得意な Perl の圧勝だと思う。まぁわざわざ苦手なことをさせて比較することもないと思う。

一番よくわからなかったのは、リスト内包表記だ。 [ i for i in range(10) ] とかだっけ。 list.map() とか、そういう感じのほうが見やすくてわかりやすいんじゃないかなあと思う。リスト内包表記の中に for を複数おけるとか、リスト内包表記を入れ子にできるとか、狂気の沙汰としか思えない。今は。慣れてくれば読み下せるようになり、便利さを実感するのかもしれないけど。

結局本の感想じゃなくて、言語の感想になってしまった。本はとても良いと思った。 Web アプリケーションに特化した版もあるらしいので、そちらも買ってみようと思うくらい良い本だった。

前から Python には興味があったけど結局やっていなくて、このタイミングでやり始められたのは Google App Engine が面白そうだと思っていじってみたくなったので、じゃあ入門書を一冊、と思って買ったのだけど、本一冊手元においてあとはオンラインのドキュメントをみれば Google App Engine をいじるのはすぐにできるので、 Google App Engine に興味があるけど Python だからっていう理由でまだやってないひとは、これを逆にチャンスだと思って Python を勉強して覚えるといいと思う。 bradfitz が Perl 版を作ってくれるのを待っている間に、 Google App Engine をいじって遊べるくらいには覚えられるんじゃないかと思う。

みんなのPython

みんなのPython

みんなのPython Webアプリ編 [みんなのシリーズ]

みんなのPython Webアプリ編 [みんなのシリーズ]