As well as the archive of my writing available here, I have self-published two books on programming topics. Both are available from my online store.
Building Git is a deep dive into the internals of the Git version control system, covering how it stores content, presents the current state and history to the user, performs branching and merging, and synchronises state between repositories in a distributed system.
It uses Git as an extended project where the reader rebuilds the popular tool from scratch, learning many computer science topics in the process. It covers Unix concepts such as working with files and processes; algorithms for searching graphs, detecting changes, and compressing data; and basic distributed/concurrent editing concepts.
Teaching by example, it covers numerous common testing problems that occur across many kinds of systems, and its contents can be applied to development in other dynamic object-oriented languages.