I discovered mnemonics through Moonwalking with Einstein over ten years ago but I’ve just now started taking my training a bit more seriously so I figured I could include some logs here to help document and share my training progress.
I suppose I have two fundamental motivations:
- Its fun to create oddball visual images
- The techniques might help me learn topics that I don’t know much about already. Ultimately I think mnemonics aren’t nearly as useful for learning things that you already know a lot about because you have enough “hooks” to link the knowledge to AKA “understanding”. However if it’s a new topic you have to make new artificial hooks before the scaffolding of knowledge is in place. And since I’d like to learn a breadth of things mnemonics help those new things get into my head before the understanding is there.
My goals for training then are to train in traditional memory competition events for fun and for practice with quickly generating images. And also to train using mnemonic techniques in my daily life in order to learn subjects & topics that I don’t have a lot of experience with.
Currently I don’t have a developed number system and have only two competition journeys. I’m able to do about 20 minutes of random words training a day before the journeys I currently have get too cluttered. Today I did 17 words in 60 seconds, a new personal best. I have made progress on making images for my 3 digit number system and I would like to continue developing my numbers and cards systems however they aren’t nearly as important to me for my goals.
In terms of applied memory training, I frequently have to learn new complex code bases for my job and I’ve been experimenting with memorizing call graphs as a way to gain initial familiarity of the code I’m learning before diving into the code to get the complete understanding. So for example, memorizing graphs like this…
flowchart TD
func1(use_core1) --> B(core_func)
func2(use_core2) --> B(core_func)
func3(use_core3) --> B(core_func)
func4(use_core4) --> B(core_func)
B --> C(helper)
B --> D(processor)
C --> D
D --> P(poll)
P --> D
would be helpful for when I am in the weeds of reading code to understand how this specific code fits into the larger picture and help grow my understanding of the code base.
One way to approach this is to place images for an “edge” (using a “from” image interacting with “to” image) at each locus. However I am having the difficulty of repeating multiple images repeatedly in the memory palace. In the above example I’d be placing the image for core__func over and over again for each edge pointing to it. And in reality there are generally much more than 4 edges pointing to or from the same node.
Another method which can work is to format the code more like a tree than a graph like this…
top_level_function()
lock_thing()
do_thing()
do_part1()
do_part2()
unlock_thing()
get_busy()
continue()
cleanup()
free_item1()
free_item2()
Then you use a link method/story method like this: Line Items that have children AND siblings will be linked with 3 images, the current item, the child, and the sibling. For example you’d have an image combining [do_thing, do_part1, unlock_thing]. Line items with just a sibling get linked just with their sibling like a basic list. For example you’d have an image for [get_busy, continue] You could place these images on a journey if you’d like, you’d trace all the way down depth first with that method. This method doesn’t work well to capture multiple callers to the same function though but it does capture the order of calls in a function though, which is nice. And you could generate the list in reverse instead of the tree of callouts you get the tree of callers, and do the same method. For C code these lists can be easily generated with the tool cflow and cflow -r
Anyways, this is a little about myself and the things I think about and work on in terms of memory and mnemonics. I hope to update this somewhat regularly with updates on my trainings and methods. See you around!