Practical Python by Magnus Lie Hetland
Review by Craig Banker (cmbanker@gmail.com)

This book is good. You should read it.

As it is targeted for the "Beginner to Advanced" user crowd, I
expected this book to walk the user through the basics of Python
before  haulin' full speed through some foggy and highly impractical
examples. (Yeah baby . show me another implementation of the
towers of hanoii). Not this book.

I looked to this publication to improve my effectiveness as a python
programmer; specifically for, new insights (paradigm surfing),
clarification of newer concepts, and some good examples to make the
concepts stick.

What I found in the book's 557 pages (if you lose the index and
appendices), was four themes: getting started (i.e qu'est-ce que c'est
en Python?), data structures, abstraction, and project examples.  The
first two themes were intertwined logically, followed by
abstraction and object orientation concepts, then ten projects to
glue these concepts together.

Getting Started, obviously is geared for the beginner. It more or less
covered the very basics of the language such as installation,
variables, statements, functions, modules, and other important stuff
non-beginners take for granted.  After basic orientation, Hetland
gently introduced Data Structures (such as strings, lists, tuples, and
dictionaries) and   illustrated their essence with some neat tricks.
I was tempted to skim over this section but forced myself to read it
in detail. (and I must admit, re-reading beginner's stuff is something
I actively avoid)   However,  I did find a few twists on the same old
things; this made the effort worthwhile.

Next, Hetland presented Abstraction in a way that made me reconsider
how I looked at those buzzwords (polymorphism, super/sub classing).
He clearly demonstrated how abstraction can help a pythoneer manage
complexity as well as how truly easy it is to implement.   After
reading this section,  several techniques I see in use in open source
projects now make better sense.   (I had to fight of the urge to
run away and rewrite some of my own code at this point.)    He also
spelled out some handy rules of thumb for object usage.

The final section in the book dealt with program examples.  These
examples were clear and paralleled real life programming tasks.  They
ranged from: XML processing, to network sockets, to game development
using pygame.   Hetland framed each example in proper context : the
problem to solve, specific goals, some handy tools, and a couple of
successively refined developments.

This book properly blends programming concepts with design concepts
(abstraction) and cements its lessons with entertaining examples.  I
recommend this book to anybody interested in starting or expanding
their python programming skills and approach.