I was tricked into writing a VM while doing Advent of Code last year and it really deepened my understanding of programming (e.g., on how to implement simple coroutines).<p>Advent of Code is supposed to be 25 daily programming puzzles leading up to christmas. I went in thinking they were going to be algo/datastructure tasks but half of them were actually about implementing and using a VM for a made up assembly language! The difficulty ramp was gradual enough that I did it with no background in compilers and it was lots of fun.<p>If you want to experience it, in last year's version <a href="https://adventofcode.com/2019" rel="nofollow">https://adventofcode.com/2019</a> you write the VM in Days 2, 5, 7, 9 then apply it to solving problems in Days 11, 13, 15, 17, 19, 21, 23, 25.<p>I ended up loving the VM puzzles and ended up doing the AoC author's other challenges which have a similar theme: <a href="https://challenge.synacor.com/" rel="nofollow">https://challenge.synacor.com/</a>