Category Archives: Books

Older women as protagonists in SFF

I asked on Twitter the other day for examples of science fiction and fantasy where the protagonists were middle aged and upwards women.

Why? No amazingly good reason. Mostly just I was rereading “A Key, An Egg, An Unfortunate Remark” by Harry Connolly, which I really like, and I was thinking that most of the examples of such books I’ve read I’ve enjoyed. There’s a broader political point about representation, and I do care about that, but I was mostly just looking for good and slightly different books.

Here are the results from that thread:

Ones I can personally recommend

These are the ones I’ve read and what I think about them.

A Key, An Egg, An Unfortunate Remark by Harry Connolly

This is the one that started the thought process. It’s good. It’s a mystery novel about a 60 year old high-society lady who used to be a monster hunter but has turned pacifist. She now basically dominates the magical scene of Seattle and forces people to play nice.

It’s stylistically a bit odd (at least partly due to a conceit you find out about a third of the way in that I enjoyed as a one off but think would get old fast), but a lot of fun and I definitely recommend it.

Gentleman Jole and the Red Queen by Louis McMaster Bujold

Probably doesn’t make a lot of sense if you haven’t read the previous books in the Vorkosigan Saga (which is very good but mostly does not count for this list) – it’s a book about the Cordelia Vorkosigan, the mother of the eponymous protagonist of most of the rest of the series. It’s also a book about how much of her life that her son (the protagonist of most of the other books) has been completely oblivious to.

I think everything Bujold does is great, but I really enjoyed this one in particular.

Paladin of Souls by Louis McMaster Bujold

I confess I remember literally nothing about this book except that it was by Bujold and didn’t change my opinion that I like almost everything she writes. So recommended on that strength but not much else.

The Ninth Rain by Jen Williams

Only partially counts and only partially recommended. The book arguably has three protagonists – a middle aged black lesbian, a young woman persecuted for witchcraft, and an immortalish man who is somewhere between a vampire and an elf and acts a lot like he was a young man.

I like Jen Williams but I only weakly recommend the book. The protagonist who gets it onto this list is great, but I felt like the story overall had a bit too much going on and didn’t quite live up to its promise.

The Fifth Season by N. K. Jemisin

A middle-aged mother tries to find her daughter, who has been abducted by her husband. A rare instance of the genre of post-apocalyptic high fantasy (which I enjoy in general).

N. K. Jemisin is very good and I recommend most of her books, including this one.

A Crown for Cold Silver by Alex Marshall

The protagonist is a retired revolutionary who conquered the known world and then deliberately faded into obscurity, but her past catches up with her and she’s forced out of retirement.

I actually remember very little about this book other than that I enjoyed it.

My Real Children by Jo Walton

A sort of sliding doors style exploration of a woman’s life as she lives it in two alternate histories of the world based on the differences caused by a single choice she made that turned out to have far-reaching ramifications. It covers most of her life from a young age but primarily the middle of it.

This novel is very good but absolutely heart breaking.

The Annihilation Score by Charles Stross

One of the many books in Charles Stross’s Laundry Files, this one focusing on Mo, the wife of the protagonist from earlier books.

Doesn’t really stand on its own without the rest of the series, and I’m kinda tiring of the Laundry Files a bit, but they’re still worth reading.

Rule 34 by Charles Stross

Not 100% sure this one counts, but the protagonist is a fairly senior police officer so is at the very least not young.

Good book, although it’s been long enough since I’ve read it that I’m hazy on the details. Would nevertheless recommend.

The witches books by Terry Pratchett

  • Equal Rites
  • Wyrd Sisters
  • Witches Abroad
  • Lords and Ladies
  • Maskerade
  • Carpe Jugulum

Nanny Ogg and Granny Weatherwax are some of my favourite of Pratchett’s characters. Can definitely recommend.

Jackalope Wives by T. Kingfisher

T. Kingfisher (secretly Ursula Vernon) is great and you should read everything she writes, but the titular Jackalope Wives and a few other stories in that collection (including “The Tomato Thief” where the protagonist of Jackalope wives reappears) is a grandmother who likes tomatoes and magic and puts up with very little nonsense.

Recommendations from Others

I haven’t read these yet, but I aim to fix this.

  • The Marq’ssan cycle by L. Timmel Duchamp’
  • Tea With the Black Dragon by R. A. MacAvoy
  • Holy Fire by Bruce Sterling
  • The Gaia Series (Titan / Wizard / Demon) by John Varley
  • Tehanu by Ursula Le Guin (I think I actually have read this one but it was ages ago and I have no memory either way of it)
  • Woman on the Edge of Time by Marge Piercy
  • The Year of the Flood by Margaret Atwood
  • Fair Peril by Nancy Springer
  • The New Moon’s Arms by Nalo Hopkinson
  • Remnant Population by Elizabeth Moon
  • Sassinak by Anne McCaffrey and Elizabeth Moon
  • The Baba Yaga by Una McCormack and Eric Brown (this is the third in a series where the first two don’t seem to qualify)

I’m currently reading through The Memoirs of Lady Trent series by Marie Brenna (which will probably count in some of the later books I haven’t read yet – the protagonist is writing her memoirs from an age where she would definitely qualify, but I’m so far only on book three where she’s only just in her 30s, which I am determined not to count as middle age while I’m still in them). After I’ve finished this series I’ll start making inroads into the above list and report back.

In the meantime, feel free to suggest more books, or point out ones I missed from the thread, in the comments.

This entry was posted in Books on by .

I like short books

(and I cannot lie)

I made a comment on Twitter the other day that short books, especially textbooks, tend to be atypically good – it requires skill and focus to condense an idea down into a compact text, and you often end up with a much better work as a result of it. As a bonus, you can often read through them over the course of an afternoon which lowers the cost of rereading significantly.

People asked me for some recommendations based on this observation, so I had a rummage through my shelves…

…and ended up actually much less convinced of my thesis than I started out. A lot of the shorter books seem to be ones I never finished or only half remember the contents of.

Another thing I realised is that my impression of what counts as “short” is very much influenced by printing – some books have thinner paper than others, some have larger pages, etc. and the result is that books that are within 50% of each other in terms of page count can look be radically different in size.

Despite those caveats, some of the books I dug up are still pretty good, so here’s a sampling of short books from my shelves that I’d recommend.

Best Kept Secrets of Peer Code Review

This was the book I was reading that prompted the observation. I reviewed it the other day. Nice, short book about some of the research on code review effectiveness.

Totals 164 pages, of which you’ll probably want to skip about 35 due to them being outdated.

Probability with Martingales

Martingales are essentially a mathematical model of gambling (and other gambling like things like literally all of finance). It seems to be named over the classic betting model of doubling your bet every time you lose, and is the theory you need if you want to understand why that’s more or less the only way to beat the house and if you have a finite amount of wealth then you can’t.

The book starts with a good introduction to probability and measure theory, then moves on to the theory of martingales. It’s reasonably comprehensive for the narrow area it covers, but takes quite a direct path through it. It’s generally well organised and well written, with just enough of the author’s voice coming through that it’s much less dry than many textbooks.

I really like this book. I don’t really know what level you need to read it – I had already covered about 30-40% of its contents in my degree before I read it – but it does require some level of mathematical sophistication.

Totals 251 pages, of which the main content comes to 191, of which the first 92 are mostly about probability and measure theory.

Finite Markov Chains and Algorithmic Applications

Confession: Despite this being one of the shorter books on the list, I’ve only actually read about half of it. I really enjoyed that half though.

I got this book because I wanted to learn more about Markov Chain Monte Carlo methods. I succeeded at that, and found its explanation of them to be fairly lucid and easy to follow. It also has some good sections on statistical counting

Unfortunately I then never used that knowledge so it dropped out of cache and I no longer really understand how they work. But if I need to I would definitely pick this book up again, only this time I’d do it while writing code to implement the algorithms in question.

Totals 114 pages, but they’re quite dense pages so it’s not fast reading.

How to Improve Your Foreign Language IMMEDIATELY

Finding this book reminded me that I should reread this book, despite the fact that I’m not currently actively working on any foreign languages.

As far as titles go, this is probably even worse than “Best Kept Secrets of Peer Code Review”. I guess you can’t judge a book by it’s cover? I wonder why nobody ever told me that.

This is basically a book about how to talk to people when talking to people is hard and you lack confidence. This is particularly valuable when you’re trying to talk to people in a language you don’t speak very well, but it’s also a more broadly applicable skill,

Totals 111 pages.

Combinatorics: Set Systems, Hypergraphs, Families of Vectors, and Combinatorial Probability

I really like this book but unfortunately turned out to really not care about most of its subject matter. If I needed to care about something it covered I would definitely read that chapter and do the exercises.

It did introduce me to Hall’s theorem, for which I am very grateful.

Totals 177 pages.

Foundations of Rational Choice Under Risk

This is basically a series of essays poking at the boundaries of subjective expected utility and seeing where it breaks.

I think I’ve read this book three times now, and enjoyed it every time, but I still can’t remember exactly which information I got from here and which information I got from elsewhere. Still, it was essential in fuelling some of my weirder opinions about decision theory.

Totals 161 pages.

Epistemology and the Psychology of Human Judgment

I actually don’t own a physical copy of this book, only a kindle edition, but the previous book reminded me of this one and I realised that I should really fix that, so I’ve now ordered a used copy.

I am barely trolling at all when I say that this epistemology textbook should be considered required reading for people who conduct interviews.

It’s all a bit epistemology inside baseball, but it contains a lot of good information from the heuristics and biases program as seen through the eyes of epistemologists, which is a useful thing for almost everyone who regularly has to make decisions (PS. That’s everyone).

I think this totals 204 pages, but I got that information from Google books.

Essays on The Theory of Numbers

A reprint of a number of papers by Richard Dedekind about the construction of the real numbers. This is (within epsilon of) my favourite construction of the reals, but you almost never see it in an undergrad course (cauchy sequences are more popular for some ungodly reason), and this is a nice, clear presentation of them.

Totals 115 pages.

A Short Course on Banach Space Theory

This is a really good book by a really good author which I sadly bought after my interest in the subject had waned somewhat. As a result I probably haven’t read more than a third of it, but I think I’d like to. I may revisit it as a result of writing this post.

I suspect it might make good companion reading to “Probability with Martingales” because it covers a lot more of the more general functional analysis and geometry that you get with \(L^p\)  spaces, much of which comes from and is touched on things that are covered in the former book.

Totals 184 pages.

Mathematical Methods in the Theory of Queuing

This is a really good introduction to queuing theory that I have read cover to cover and completely forgotten the contents of because I don’t really use queuing theory on any sort of regular basis. I should reread it and see if I can figure out how to make the contents stick, because this seems like a thing I’d actually like to keep in my head.

This was one of the books I had in mind when I made the claim that short books were really good.

Totals 120 pages.

Large-Scale Inference

This is a good book about empirical Bayesian methods, false positive control, etc.

Unfortunately I’ve only read about a third of it. I started reading it when I was in my “I should learn more statistics” that resulted in my getting distracted and writing Hypothesis instead. I found the bits that I did read to be very helpful explanations of things that I still don’t entirely understand.

I guess I should reread this one too.

Totals 263 pages, so it’s heading into the territory of being a bit too large for this list.

Counterexamples in Topology

AKA “A gallery of stupid shit you can do when constructing topological spaces” or “Murphy’s guide to topological spaces”

I really enjoy topology, but this book is a nice guide to why topological spaces are not quite as intuitive as you might expect them to be if you mostly use topology to provide nicer proofs while working primarily in metric spaces. It’s got lots of weird and wonderful examples of connections you’d expect to be true but aren’t.

Unlike most of the rest of the books on this list, this one is really not for reading cover to cover and is more of a reference book, because each example only takes a page or two.

Also in the category of subjects in which my interest has waned, but if you like this subject I can recommend this book.

Totals 244 pages.

To Mock A Mockingbird

A collection of neat logic puzzles wrapped in slightly contrived stories. I enjoyed it, but other people seem to enjoy it much more than I do. I’ve always liked logic puzzles slightly less than I would expect to and much less than other people would expect me to.

Still, it’s undeniably a good book which many people really enjoy.

Totals 243 pages.


It turns out that I have far fewer really short books than I thought, but I still feel like I believe the thesis that (non-fiction) books whose size is in the region of 100 pages are often very good. It seems like as you approach or exceed the region of 200 pages (which is where most of these books lie) this property weakens significantly and you have enough space that they just become slightly shorter “normal length” books.

These still have the potential to be very good (and I’ve picked up a bunch of the ones listed to reread. Argh/yay), but that doesn’t feel like it’s true for any particularly interesting reasons other than that I’ve bought good books because they were good.

So I guess I’m seeking recommendations. Can you suggest good non-fiction books that total somewhere in the region of less than 150 pages?

This entry was posted in Books on by .

Review of a book that reviews (code) reviewing

In an earlier version of my recent software development advice post, I said the following:

I also think this will not significantly reduce the number of bugs in your software. Code review is just not a cost effective bug finding tool compared to almost anything else.

I appear to be wrong in this claim, if the literature is to be believed. I don’t have a strong reason to doubt the literature, and on examination I’m not actually certain why I believed the contrary (it appears to be cached knowledge), so I’m going to change my opinion on this: Code review is probably a very cost effective way of finding bugs if you do it well, and may be reasonable at it even if you do it badly.

The thing that’s updated my opinion on the subject is reading “Best Kept Secrets of Peer Code Review“, after Richard Barrell sent me a link to a chapter from the middle of it reviewing the literature.

With a couple caveats (the title being terrible definitely counted amongst them), the book is pretty good. There are two chapters worth skipping, but that’s more a function of the fact that the book is from 2006 than anything else (GitHub’s pull requests, while far from a stellar code review system, are in all ways better than what was widely available back in 2006 and for the common path probably not much worse than the state of the art).

The authors clearly have an agenda and the book is there to promote that, but that’s OK. I have an agenda too – it’s very hard to have expertise without also having an agenda in support of that expertise. And even if I believe they’re overstating the case, the case they present is reasonably convincing. It’s also refreshingly empirical – most software engineering advice is full of anecdotes and opinions and, while this book absolutely contains some of those, it’s also got a really pleasant amount of actual research backed by actual data. The data is often not of amazing quality in that many of the studies are quite small scale so the statistics are likely under powered, but that’s still a better standard of evidence than I’m used to.

It’s also pleasantly short. The whole book is only around 160 pages, and I read it over the course of an afternoon.

Anyway, that’s the review section of this post done. Now it’s time for the review section.

I have a couple take homes from this book which are currently in the state of “Plausible sounding statements that I will think about further and probably upgrade most of to actual beliefs”.

  • Code review is a very cost effective way of finding defects compared to manual QA of the application – it both has a higher rate of finding them per unit of time and also finds bugs that QA were probably never going to find.
  • As your notion of “defect” broadens to include things like your coworkers having no idea what you wrote down, the above statement becomes stronger.
  • Code review should be done by individuals (possibly multiple individuals working in parallel) rather than teams working together. As well as being more expensive per unit time, team code review seems to be less effective in absolute terms at finding defects.
  • The generally believed opinion that a 10 line change gets more useful review than a 500 line change seems to be actually true but too generous – the actual cut off seems to be more like 200 lines. It’s unclear to me whether this means 200 lines added or a 200 line diff, but I believe it means the former.
  • Code review effectiveness drops off dramatically as the time taken approaches about an hour. It’s unclear to me if you can fix this by walking away from the review and coming back later. This may also be the origin of the 200 lines limit – it may be impossible for most people to effectively review code at a rate much higher than 200 lines / hour.
  • Code review benefits greatly from a careful first reading of code before you do any reviewing (and doing this stage more slowly is better. Presumably this hits diminishing returns at some point).
  • Code review benefits greatly from being structured with checklists.

The checklist one is interesting, and I am actually pretty convinced by it: The overall literature on checklists helping construct reliable processes seems to be reasonably convincing (but my opinion here is very trend driven and I have not actually read any primary research on this subject. It conforms to my biases about the world though, and thus must be true), and the specific data presented in favour of checklists for reviewing is moderately convincing. This is the advice that is the most likely to make an actual practical difference to how I review code in future.

The advice on checklists is interesting in particular in how it’s constructed: They strongly recommend not having just a “standard” checklist, but actively curating one over time: When something is found in review that seems like it would make a good check list item, add it to the list! When an item hasn’t found anything useful in review in a while (say 6 months), think about removing it.

Here are a couple example check list items from the book that look generally useful to me (the example list this is from is much longer):

  • Documentation: All subroutines are commented in clear language
  • Documentation: Describe what happens with corner-case input.
  • Testing: Unit tests are added for new code paths or behaviours.
  • Testing: Unit tests cover errors and invalid parameters.
  • Testing: Don’t write new code that is already implemented in an existing, tested API.
  • Error handling: Invalid parameter values are handled properly early in the subroutine.

There are plenty more. The book suggests that checklists should really only have about the top 10-20 items that you’ve found most useful over time (the sample checklist has 25 items, so apparently they didn’t test the invalid input case here).

One interesting thing worth highlighting is that at least some checklist items may be worth automating out of the review entirely. e.g. “Testing: Unit tests are added for new code paths or behaviours” would mostly be better handled by enforcing a code coverage metric I think.

As well as improving the quality of the review itself, the book highlights another interesting application of checklists: It doesn’t have to just be the reviewer who goes over them! Doing a sort of self review by following the checklist yourself before submitting seems to be nearly as effective at removing bugs as the review itself would be (it is unclear to me if that remains true if you skip the review altogether – my feeling is that people are likely to get sloppy at the checklist if they imagine someone is not going to be checking it later). This presumably speeds up the review process a lot by reducing the number of back and forth exchanges required to pass it.

One suggestion off the back of this self review that they made (which seems to come from the Personal Software Process world) is that as well as maintaining a global checklist for reviews it might be worth maintaining individual checklists for reviews, where people maintain their own list of things that it’s worth them pre-checking because they often make a mistake in that area which then comes up in review.

Anyway, I’m really glad I read the book. I can’t swear to its correctness, but it’s an interesting and plausible perspective that I’ll be thinking about further.

PS. If you’d like to fuel my book habit, I have a public Amazon wishlist. I’ll happily review any books you buy me…

This entry was posted in Books, programming on by .

Weekly reading post #2

This is the weekly reading post. It should have been published yesterday but I forgot.

This Week’s Reading

Gifted books

The following books have arrived from my thank you wishlist:

Reading Suggestion Request

I’ve noticed that my non-fiction reading habits skew very male (my fiction reading habits skew in the opposite direction). A lot of that is about the gender bias of who publishes in areas I’m most interested in, but this still bothers me and I’d like to put some effort into fixing it.

So, I’d like recommendations for blogs and books by women that you think I’d find interesting as well. Comments are open for once, so feel free to post there or elsewhere as you prefer.

This entry was posted in Books, Weekly Reading Posts on by .

Weekly reading post #1

I’m going to be posting one of these every Sunday. It’s a catalogue of what I’ve been reading recently, any new books I’ve acquired or been gifted, etc.

Recent Reading

A statistical estimate of what I’ve spent time reading this week (0.4 hours – i.e. 24 minutes – is the smallest unit of granularity for the estimator):

New books

I’ve had five(!) new books gifted to me from the wish list recently.

These are:

Thanks hugely to all of you, and especially to Thomas for getting me three books at once!

I think I failed to mention this before, but I’m putting these on a goodreads shelf and reviewing them as I read them. Of the above I’ve given up on Militant Anti-Fascism (it’s not at all what I was expecting, and not in a good way), but I really enjoyed Utopia for Realists and the final quarter of Boyd would have to take a serious turn for the weird and worse for me to not also be able to recommend that. The others I’ve not yet started on.

Book Triaging

I’ve done a big sort out of my book collection into books I am likely to reread (or have too much sentimental attachment to even if I don’t) and books that realistically in the unlikely event that I want to reread them I can just buy them again. The latter are available for give away. In person delivery only for now, but if I’m likely to see you and you’d like me to bring you a book from the list, let me know.

This entry was posted in Books, Weekly Reading Posts on by .