
From the author: "Game Programming Patterns is a collection of patterns I found in games that make code cleaner, easier to understand, and faster."
To that end;
1) Buy/Beg/Borrow/Steal the Curt Schimmel book mentioned above. That one book will teach you all about how OSes manage caches/memory for SMP multiprocessing systems. You really get to understand multiprocessing at a fundamental level.
2) Memory Systems: Cache, DRAM, Disk by Bruce Jacob et al. - Old classic and a comprehensive book on all aspects of memory systems. Supplement with papers on newer technologies as needed.
3) Ulrich Drepper's classic What every Programmer should know about Memory - https://news.ycombinator.com/item?id=36420502
4) Cache-Oblivious Algorithm - https://en.wikipedia.org/wiki/Cache-oblivious_algorithm See in particular, Harald Prokop's thesis on the above linked to under "References" section.
5) Cache-aware Programming pattern from the book Game Programming Patterns - https://gameprogrammingpatterns.com/data-locality.html
6) There are lots more resources on cache-aware programming and using compiler builtins to help you do it. Here is a list of tips - https://johnnysswlab.com/make-your-programs-run-faster-by-be... This website has a lot of info. on all aspects of memory optimization.
7) AoS and SoA - https://en.wikipedia.org/wiki/AoS_and_SoA
Here are two resources I found quite helpful...
I've also been thinking about what constitutes a "good" encoding, and it definitely comes down to individual preferences, even preferences in a given moment. Today you're reading off a sticky-note and want to optimize for size, tomorrow you're laying out 3 notebooks for a huge project and want clarity.
I like the idea of a creator making the base pattern, and then sharing a link that lets the user customize the output encoding.
That customization could be visual (I want a different random seed that is used to parameterize different aspects of this pattern, so it's totally unique to me) or in the notation.
I think it'd be awesome to have a recursive notation editor. So you'd click on a variable and it expands to the verbose representation, which might include other nested variables that you can further expand (or not).
(side note, I hope you don't mind: Game Programming Patterns made a huge difference for me early in my career, thank you for bringing that into the world.)