It's been a while since the last Expert Python
Programming review on Planet
Python. Y'all might've forgotten about this book by now. Time for a
reminder? (Actually, I'm just lazy busy, and this is why this review hasn't appeared
sooner.)
I received a free PDF copy of this book from Packt Publishing, with the
understanding that I'll post a review on my blog. This is it. Short summary:
it is a good book marred by a lot of mostly inconsequential little mistakes.
I'd give it four stars out of five.
Aside: the PDF that I could download was personalized and had my
name and address in the footer of every page. A very nice form of DRM that
did not restrict my software choices for reading the book (Evince and also
PDF Reader on Nokia Internet Tablets).
I bring it up here because it seems that Packt could've also applied fixes
for the
known errata to the personalized version, yet missed that opportunity.
Perhaps it's technically more difficult than slapping a footer on every page.
Or maybe it's better if everyone buying the book, whether in paper or in
PDF, gets to see the same text.
The author (Tarek Ziade) covers a wide range of topics in the book, ranging
from syntax (probably useful for those who've been programming in Python for
quite a few years, and didn't have the time to keep up with the language
changes before picking up this book) to style, source code organization,
project infrastructure, software life cycle, documentation, testing and
optimization, and finally ending with a review of some of the popular design
patterns. The middle parts were the most interesting for me personally. I
learned a thing or two, disagreed with the author on a few minor points (which
are mostly a matter of preference), and managed to finish the book despite
constant irritating little pricks I feel when I notice an error (I confess I'm
a pedant. A missing space after a colon drives me up the wall).
As an example of the disagreement: I have an aversion to code-generating
tools where you have to edit the generated code by hand. I could say more, but
this is a topic for another time. Next, I strongly dislike sudo
easy_install since it scribbles onto the part of the filesystem
exclusively reserved for your OS's package management tools. And I don't think
porting the original 23 design patterns to other programming languages is a
good way to describe what those languages are about. (Also, set
tabstop=4 in your .vimrc? Heresy! The Right Thing To Do is
set softtabstop=4, as all right-thinking Vim users will
doubtlessly agree. All hail the one true text editor! Oh dear, now I'm
glad I don't have comments on this blog...)
The goodies: Chapter 1 (the bits about PYTHONSTARTUP
on page 19) gave me persistent history for my interactive Python prompt, nicely
complementing the coloured prompt and tab-completion I already had snarfed from
somewhere else on the net (probably Peter Norvig's Python IAQ). Chapter 12
provided good examples of how to do profiling for time (page 281) and memory
(page 291). I like Tarek's @profile decorator (measure time, pystones
and memory at the same time). My profilehooks module was
not mentioned, *sniff* ;-). Chapter 13 told me about Queue.join
and task_done
that snuck into the stdlib with Python 2.5 without me noticing.
I haven't mentioned topics covered in the book that I was already familiar
with, such as setuptools, virtualenv, zc.buildout, Sphinx, Nose, Buildbot, or
Mercurial. Yet, in my opinion, those are the most useful parts of the book.
The breadth of the topics is amazing: I could hardly think of something that
every serious Python programmer should know that isn't wasn't mentioned. I
believe the depth was exactly right: mention solutions that are available, show
how they feel when used and what they can do, point to the relevant web page
and then stop. And not only tools, the descriptions of workflows (how to
organize your source trees, how to develop software consisting of multiple
packages, how to make releases), while hardly universal, are invaluable.
One thing prevents this from being a perfect book: errata. At around page
95, according to my notes, I invented a new metric of book quality: WTFs per
page, It's closely related to WTFs per minute, but
independent of your reading speed. At around page 165 I got tired of making a
note of every little thing that I noticed and started just reading. This was
considerably more enjoyable. I hope there's a second edition will all the bugs
shaken out. To that end, I should go through my notes again and submit them
via the online errata form. Yay, more work...