1) The Standard C Library - One of the best books to learn about industrial-strength C programming implementation techniques.
2) The C++ Standard Template Library - Similar to above but for C++ STL.
Both the above were licensed through his company Dinkumware. I had an opportunity to license, study and use them for a project and found the experience quite rewarding. It is not as complicated and relatively easier to understand than GNU libc and libstdc++. Of course i have both the books which explain the implementation.
3) His other set of interesting books are the 3-vol Programming on Purpose; a series of essays on various topics. The 1st is on Software Design, the 2nd is on Software People and the 3rd is on Software Technology. They also contain lots of nuggets of wisdom which are still relevant today. My favourite is the one on software design - https://archive.org/details/programmingonpur0000plau
I learnt more about C and C++ from studying Plauger's The Standard C Library and Plauger/Stepanov's The C++ Standard Template Library. I also remember learning Object-Oriented Framework design from MFC Internals.
* To study OO expression of C++ via Class libraries/Frameworks i recommend a study of "Microsoft Foundation Classes (MFC) library" paired with the book MFC Internals. The code is available with the installation of Visual Studio.
* P.J.Plauger's The Standard C Library and The C++ Standard Template Library(with Alexander Stepanov, Meng Lee and David Musser) will teach you excellent C and C++ Generic programming skills. Code available with the standard C++ toolchain installation.
* The Boost libraries paired with the book C++ Template Metaprogramming: Concepts, Tools, and Techniques from Boost and Beyond.
* The FXT library of Algorithms by Jorg Arndt (https://www.jjj.de/fxt/fxtpage.html) along with its book Matters Computational for writing optimized C++ code.
I would also suggest reading the following two classics to learn designing in C++;
* Multi-Paradigm Design for C++ by James Coplien.
* Scientific and Engineering C++: An Introduction with Advanced Techniques and Examples by Barton and Nackman.
This isn't an issue just with Kay. It's true for basically any intellectual structure you care to engage with. The definition of "gene" in biology is a similar case, but that's a rant for a different time.
For example, when he says dataless programming, he points to a couple of papers. For example, Balzer's "Dataless Programming."[1] Go read the abstract. It's talking about the algorithms part of the C++ Standard Template Library and the idea that you shouldn't have to rewrite your program just because you're changing from an array to a linked list.
But that's not all. Add "the cell/whole-computer metaphor would get rid of data, and that "<-" would be just another message token." That is, why stop with the Standard Template Library? A program made of assignments, loops, and conditionals is as much a formal object as a linked list. Why should we have to rewrite it when the "data structure" is changed from running as a traditional program on a single core messing with registers to having its state stored in a distributed tuple space and steps in it being executed by workers that pull them off a queue?
This is where his math background really comes in. For a mathematician, the algebra of structured programs is the same in kind as the algebra of numbers or the algebra of sequences of numbers or the algebra of topology preserving mappings of a space. What Kay was trying to get at was a way of letting you write an expression in such an algebra and be able to bind it to whatever instantiation of the algebra you might want, including ones that don't exist yet.
To do that, all the pieces of your language have to be of the same kind, whether they be numbers, lists, types, or loops. And here's our big delta from "everything is an object" in familiar languages to what Kay was talking about. In Ruby, Python, JavaScript, or Java (let's ignore Java's primitive types for now and pretend boxing is all smiles and rainbows) the only things that are objects are the things that were values in structured programming languages. That's why Kay doesn't see these as object oriented.
Also, consider his comment "I don't know of any type systems that aren't a complete pain, so I still like dynamic typing" against this background. It suddenly feels a lot more reasonable. A type system for this kind of work is basically pointing Kanren at your expressions and writing a logic program to reason about your domain. Then, next week, when you change the algebra substantively, that logic program might be almost unchanged or may have to be almost entirely scrapped and rewritten.
[1]: https://www.rand.org/pubs/research_memoranda/RM5290.html
However, the "Draft Standard C++ Library" book was finished just before the standard was radically overhauled for the STL, and the STL itself and the language have evolved massively, so in my opinion, those two book have not aged as well as the C library book has.