The entire book Structure and Intrerpretation of Computer Programs is like that. It explains how to implement the language Scheme in any language (by decomposing the problem to small enough atomic entities you can implement and combine them in any language). I suppose it’s excellent practice since the book uses only Scheme, so the reader must implement the primitives of the interpreter themselves. So you need to figure out how to implement tiny things yourself (which is fun) and then goes on to show how those combine together into a wonderfull whole.