Book "reviews"

With short reviews, mostly just for personal reference.

Todo list:

Software engineering

Design Patterns: Elements of Reusable Object-Oriented Software

By Erich Gamma, Richard Helm, Ralph Johnson, John Vlissides [Leeds] [Amazon] [Foyles]

The "classic" book on software design patterns, targetting mainly C++. I really liked this book: it's written in the sort of academic style that I'm used to, and it formalised and explained many ideas I've been seeing in other books, and seeing when reading other people's code.

I guess I worry about the age of the book (20 years seems a long time in software development). Next up is to read Head First Design Patterns.

Other links:

Head First Design Patterns

By Eric Freeman et al [Leeds] [Amazon]

A classic: a "follow-up" to the "Gang of Four" design patterns book. It's aimed at Java programmers (but easy to read if you don't know Java but are willing to guess at what various things mean) but, mainly, it's trying out a very different "style" of book. Sort of hard to describe, but you'll know what I mean if you've seen any of this series.

It's very easy to read, and reinforced what I'd gotten out of the Gang of Four book. The examples are also more "business driven" and hence seem more up-to-date than the C++ examples in Design Patterns. The end chapter on MVC was useful; but the "summary" of the missing patterns was almost too short to be useful (when you can just look them up on Wikipedia anyway...)

That all said, I'm not sure this is something I'd want as a reference. The Gang of Four book is easier to dip back into, and C++ is in some ways the harder language to implement things in, so if you understand the idea, putting it to use in Java/C# should be easier.

Computer Science Books

Introduction to the design & analysis of algorithms

By Anany Levitin. [Leeds] [Amazon]

Nice, good read. Covers analysis of algorithm efficiency, which to a mathematician is all routine stuff. Focuses on searching and sorting problems, and graph problems. Has sections on Brute Force methods, Decrease-and-Conquer, Divide-and-Conquer, Transform-and-Conquer, Space/Time trade offs, Dynamic programming, Greedy techniques, Iterative Improvements, Approximate Solutions to NP problems. It's a good introduction, and many of the exercises are nice. But not enough detail to be used as a reference. Expensive.

Introduction to automata theory, languages, and computation

By John E. Hopcroft, Rajeev Motwani, Jeffrey D. Ullman. [Leeds] [Amazon]

A good, nicely mathematical, introduction to automatas, regular languages (the theory behind regular expressions) and context-free languages. The latter part of the book then picks up Turing machines, and nicely explains P vs NP etc. (I guess, naively, that non-deterministic things look quite motivated from the point of view of automatas, where they add nothing to the recognised languages).

Python Books

How to think like a computer scientist: Learning with Python

By Allen Downey, Jeffrey Elkner, Chris Meyers. [Leeds] [Amazon]

Easy read, introducing both basic programming, and Python. Could read in an afternoon. Nice that it introduced some basic ideas from computer science, as well as basic programming. But too basic for me, and not even suitable as a reference. Related to:

The Quick Python Book 2nd edition

By Vernon L. Ceder [Leeds] [Amazon]

A quick introduction to the basics of Python programming. I found this to be a very easy read after spending some time (re)learning C++ programming. I would think this would be hard work if you didn't know some programming already. It's not really a book I'd want to own though, as it doesn't need to be re-read, and it doesn't go far enough into the language to be a reference.

Learning Python

By Mark Lutz [Leeds] [Amazon] [Foyles]

The fifth edition is more like a door stop than a book (1600 pages, which even for a computer book is long!) I'm afraid I have to agree with many of the Amazon reviewers: this book is too verbose, and many of the words could have been cut without losing information. There is a lot of repetition. I found it unhelpful that the same (simple) example would be repeated endlessly with minor variations as new ideas were introduced. Longer, more complicated worked examples would have helped in places.

However, I did find the book to be extremely clear. That it was verbose also meant it was an easy read-- something I could literally read in bed. I think it was worth reading, but I'm not sure I'll be going back to it much. There are various "cookbook" books which seem more useful-- once you know the basics, it makes more sense (to me) to look at real-world examples. For example: how would I actually use a metaclass in a complex problem?

Finally, a slight pet peeve: there's almost no mention of the standard library! Yes, the library does evolve quite quickly, and it's large. But it would be great to have a quick guide to the modules, and their main uses. The online help can do the rest, but even knowing where to start looking can be useful.

Python Pocket Reference

By Mark Lutz [Amazon] [Foyles]

Genuinely pocket sized, this 7 by 4 inch, 250 page book does what it says. It's a great little reference, for both Python 2.7 and 3.4, to the core language and main standard library modules. I've found it to be a really useful format to dip into as I've learnt about Python-- the physical book format means you can flick between pages easily, look things up the index in no time etc. Python of course comes with a great help package, and for general standard library reference, I do find myself just using the help file, or looking online. But, for example, for syntax issues, the book is much easier to flick though, and a much faster reference.

If I had to quibble, then I'd say that the module coverage at the end is a little odd: I probably don't need a quick reference to the sys module, nor to writing GUIs or interfacing with databases. I wouldn't mind having more on, say, the collections module, or similar. Maybe that's my bias as a user.

And, for the price, you can't go wrong!

Python For Data Analysis

By Wes McKinney [Amazon] [Foyles]

pandas is a data analysis library for Python, and this book, written by the original author of pandas, is an excellent guide to its usage. The book starts with some "interactive" (you are invited to download data from internet sources yourself, and use the code provided to analyse it) demos of the main features. Then chapters cover the main features: the "dataframe" model, loading and saving data, how to "wrangle" data (reshape, clean, merge), grouping operations and then some more specialist chapters on time series and financial data.

pandas is built upon the numpy optimised array system, and the book also contains an excellent introduction to numpy, along with a closing chapter on more advanced features. Similarly, matplotlib is used for plotting, and a chapter introduces this package. Also included is a chapter on the (also excellent) ipython interactive python system, and finally, an appendix which provides a brief, but useful, introduction to the basics of python itself.

Inevitably, as pandas is developed, the book won't cover the cutting edge. However, I found it to be a great introduction, and very easy to read. The code style, of mimicking an interactive python session, means you can read the book and see how the code would work, without having to actually have a computer in front of you (but that's obviously the best way to learn).

C++ Books

More Effective C++

By Scott Meyers [Leeds] [Amazon] [Foyles: Out of stock]</a>

Rather old, but still, I found, a beautiful read (but which I mean, I could read this in bed, and make sense of it, but I also never felt the pace was tedious, nor the language verbose.) It is presented as a series of "items", each covering some aspect of C++. Some of these are rather out of date: talk of the STL being something strange, for example! I think also some items would these days be covered under the term "design patterns" (e.g. Proxy Classes).

I'm not quite sure about the re-readability. It would be very nice to have a rather short reference: perhaps a list of the titles and a paragraph or two summary. A quick search online didn't find such a thing.

Scott Meyers has an interesting website: Scott Meyers: Books which contains details of a version of Effective C++ for C++11/14.

Practical C++ Programming

By Steve Oualline [Leeds] [Amazon]

Not a book for me. It's somewhat an introduction (although many online reviews suggest that if you are a beginner, it's hard work) and barely touches on more advanced features. However, I think the real issue is how old it is. Today, templated just work. We have C++11. Compilers and pretty good at optimising. You have a good standard library. The book dedicates just a short chapter to templates, and some of that is around practical issues about getting the compiler to work. There are also some scathing reviews on the O'Reilly website.

In the book's defense, it does touch upon some software engineering issues, which is nice to see.

Other books

Getting Things Done

By David Alen. [Leeds] [Amazon]

Interesting read, if overly long. I've put some of the ideas into practise-- keep lists of things to do; but also key to the whole thing is this idea of "What's the next action?". The Wikipedia entry gives a good overview, and some of the reviews on Amazon similarly give good summaries.