Table of Contents
1 Preface
久々の更新です。これまで何をやっていたのかというと、Fluent Python を読んでいたのです。最初はEffective Pythonの時のように読書メモをブログに上げようと思ったのですが、あまりに本の内容そのままになっていたので、個人的なメモにしました。
更にPCを変えたので、環境を作り直しています。pelicanは動くようになりましたが、うまくgithubにアップロードできるでしょうか。。。試したところ、なんとかできたようです。本題に入ります。
1.1 経過
英語でPython中上級者向けの推薦本を検索すると、次の3冊がよく出てきます。
- Effective Python Second Edition Brett Slatkin著
- Fluent Python: Clear, Concise, and Effective Programming Luciano Ramalho著
- Python Cookbook, Third Edition David Beazley, Brian K. Jones著
Introducing Python, Python Crash Courseと読んできて、更に次のレベルにステップアップしたいと考えていたので、評判の良い上記の3冊をその順番で読んでしばらく修行することにしました。
どれも難易度が高そうなので、単にさらっと読むと消化不良に陥りそうです。そこで、日本語でメモを取りながら読むことにしました。Effective Pythonの読書メモはこのブログで公開しています。
Effective Pythonを読了して気を良くした私は、そのままFluent Pythonに入りました。しかしこちらは700ページの大作です。果たして最後まで行き着くでしょうか。。。
2 Fluent Python
2.1 読みやすさ
意外にも、Fluent PythonはEffective Pythonよりもすんなり読み進めることができました。もちろん内容は高度で、Effective Pythonが踏み込めていない詳細な説明もたくさんありましたが、その分、検索をして一通り周辺知識を底上げしてからでないと読み進められない箇所はあまりありませんでした。
ほとんどのページ登場するソースコードスニペットも、それほど苦労せずに理解できたと思います。ただ、ソースコードには番号だけが振ってあって、その説明が後で出てくるので、ソースコードと説明を行ったり来たりしなくてはならず、読みづらかったです。また、ページの切り替わりでインデントがわからなくなる点もやや困りました。手動入力して実行するときにエラーになるので。
全般的に、高度な内容を中級者でもわかる程度までかみ砕いてよく説明されていると思いました。
2.2 古さと間違い
この本は2015年の出版で、Python 3.4時点の内容で書かれています。このため、f-stringやwalrusオペレーター(:=
)を使っていないことと、コルーチン、asyncio周りの説明に古さを感じました。特に今ではawaitと書くべきところがyield fromとなっているのは、混乱するので何とかして欲しかったところです。せめてオンラインのerrataでそのあたりの補足があればよかったのですが。ちなみに、Python Crash Courseには、古くなった内容をケアするサイトが用意されていて助かりました。
errataが用意されているところからわかるように、誤字脱字の間違いは意外と多かったです。しかし、読み進めることが困難になるようなミスはありませんでした。
2.3 内容
肝心の内容は、素晴らしいの一言です。さすがに700ページあるだけあって、私が説明して欲しいことはほぼ全てカバーされていましたし、初めて見るようなこともたくさんありました。Effective Pythonで消化不要気味に感じていたところが詳しく説明されているのはありがたかったです。
iterator, iterable, ジェネレーター関数の違いは、本書を読んで初めて腹に落ちた気がします。スペシャルメソッドの役割と、それらを実装することによる効果が理解できたのもよかったです。
一点、最後に出てくるメタプログラミングだけはもう少し説明が欲しかったです。再三「使うな」と言われるので、深く理解する必要は無いのかもしれませんが。
2.4 対象読者とレベル
対象となる読者は中級レベルで、上級者を目指す人向けだと思います。入門書を一冊読んだばかりで、例えばリストとタプル、セットの違いが漠然としかわかっていない人には厳しいでしょう。
コンピューターサイエンスの基本的な知識も多少は無いと読み進められないと思います。スレッドとプロセスの違い、コンテキストスイッチの仕方、ロックの必要性といった知識が無いと、コンカレント処理の説明は厳しいです。それでも、コルーチンやasyncioの説明は、だいぶ想像力を働かせないといけません。。。
何か他のスクリプトでない言語、例えばC/C++やJavaの経験も欲しいところです。
Pythonは入門者に優しい、敷居の低い言語ですが、結局、やることが高度になると、それなりの知識が要求されます。
2.5 効果と結論
Effective PythonもFluent Pythonも中上級(intermediate-advanced)向けと言われているようです。私がこれらの本を読む前は初中級くらいだったと思いますが、2冊比較的じっくり(ie, メモを取りながら)読み終わってみて、中上級になれたのかというと、やや怪しいように感じます。おまけして中級になれたくらいでしょうか。
コルーチンやメタプログラミングのような高度な知識が多少なりとも付いた一方で、Pythonでコーディングする能力が劇的に伸びた気はしません。実践不足のため基礎がしっかりしておらず、所々抜けがあるものと思われます。更に、読んだことの多くは既に忘れてしまっているでしょう。Effective Python分も含めて、読書メモを使って何度も復習したいと思います。