Links to further pages

Github resources; work in progress

Software Engineering Books

See also the links above, where e.g. Design Patterns is filed under C++.

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

I've been making a vague attempt to learn some more about computer science. Here are some books I've been reading, with some reviews. These are essentially little more than notes to myself so I don't forget the contents.

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).

Programming 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:

  • Think Python (How to Think Like a Computer Scientist) by Allan Downey. This is free to download, or [Amazon] £20 from O'Reilly.
  • "Python for Software Design: How to Think Like a Computer Scientist" by Allan Downey, ISBN 978-0521725965. At a rough read, this seems rather similar to the older book, but without the data types chapters at the end. [Amazon] £9 only.

Free books etc.

Programming blogs etc.

Python

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.