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.
JavaScript Testing Recipes is a complete guide to testing modern-day JavaScript, in the browser and on the server using Node.js. It covers the conceptual basics of automated testing, and applies these techniques to a number of common JS problems, including browser-based GUIs, server-side APIs, and command-line applications.
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.