I awaited eagerly for the publication of this book. I had high hopes for it, but those hopes were dashed. This book suffers from three failings - the first of which is trivial, but annoying and confusing; the second is more problematic, and annoying and confusing; and the third is simply fatal. For an "absolute beginner" book, it fails not because it expects too much, but because it accomplishes too little.
First: The principal author, Tim Hall, is British. Because of this, he employs the Metric system in some of his code snippets, and the spelling used by speakers and writers of English in the United Kingdom. Now in and of itself, there is certainly nothing wrong with this; however in a book sold here in the USA, it is confusing. For example, on p. 43, the author begins to develop an application that is intended to calculate how much fabric will be needed to make curtains, depending on measurements input by the user. The measurements that he uses are given in centimeters and meters. Here is the US, however, fabric (from clothing to drapery to upholstery) is measured in inches and yards. Indeed, with the exception of the sciences (and to a lesser degree, a few others), we use the Imperial system of measurement (eg., pounds instead of kilograms, yard rather than meter, and quart instead of liter -- though that last one is becoming more common). In addition, the author uses both the American and British spelling of words. For example, on p. 44 he spells the word "meter" both as "meter" and as "metre"; and on p. 93, he spells the word "armor" as "armour". This is essentially trivial, but confusing and annoying.
Second: The book is riddled with examples of poor editing. For example, in versions of Python prior to 3.0, displaying text on the screen was handled by the print statement:
print "Hello, World!"
But in Python 3 and higher, the print statement no longer exists, as it has been replaced by a print function. Thus, the previous must be typed as:
In the first half of the book, however, the print statement appears more often than the print function. This is a problem because use of the print statement raises an error that causes the program to crash.
Lastly: The most serious failing of the book, unfortunately, is the poverty of the pedagogical technique employed by the author to teach programming. The author spends much more time covering version three of the Python language, and "professional" coding practices, than he spends actually teaching the reader how to program a computer with them. This is like teaching someone how an automobile works, or how to design one, without teaching someone how to drive it.
Many elements of the language are introduced, but we are given very little opportunity to practice programming a computer using them. No programming exercises are given during the course of reading the chapters, and none are given at the end of the chapters. Instead, the author introduces programming elements, shows their use as if the reader were typing them in a (Unix type) console himself, and then employs them in very large program toward the end of the chapter, one that he has written himself. There is no incremental building of knowledge and understanding through programming practice and experience, so the end-of-chapter program is a grievous labor to read through and understand.
For example, near the end of chapter five, there appears a program that covers six pages. It's a character-based roll-playing game of which the author, himself, says, there are "Limitations: Too many to mention." (p. 93). By the time you have finished typing in the code, much of which you will not understand unless you have a photographic memory, you're exhausted and your fingertips are numb! And when you have run the program, what you get in return for all of your efforts, is both disappointing and depressing. Following the program's listing in the book, the author briefly discusses some of the kinds of changes that you can make to the program, and suggests that you consider doing so, but he doesn't discuss precisely what or how. Furthermore, the roll-playing game was so completely uninspiring, that I felt no motivation whatsoever even to look at it again, let alone attempt to improve it. In chapter six, the author introduces more elements of the language, works them into the same roll-playing game, increases the amount of code to type in, and yet, produces the same results: an uninspiring and useless program that by now, you are beginning to despise.
The end-of-chapter applications are quite large, and this is precisely the problem. Essentially, this is because you are trying to run before you have learned how to walk, and to walk before you have learned how to crawl.
Conclusion: The first two problems that I discussed would be solved simply by a corrected editorial reprint of the book. The last, however, would be solved only by a complete rewrite of the material. The author is very enthusiastic about what he is doing, and I got the impression that he is an excellent computer programmer; unfortunately, being a good computer programmer is not the same as being a good teacher. And because the author is a poor teacher, you will not very well learn how to program a computer from reading this book.
As an alternative, I recommend Head First Programming: A Learner's Guide to Programming Using the Python Language, by Paul Barry and David Griffiths. Although this book uses Python 3, it isn't designed to teach the Python programming language; rather, it is designed to teach you how to program a computer (via Python 3), and their technique is excellent! Learning how to program a computer is what an absolute beginner is supposed to be doing. Programming concepts are language independent. The authors chose Python because Python makes learning (and implementing) programming concepts easier than other languages. Another very good one is, Hello World!: Computer Programming for Kids and Other Beginners, by Warren and Carter Sande. This book uses Python 2.5.1, so you won't become familiar with Python 3.x. The good news is that the author has a very good understanding of how people learn and he also knows how to teach.