Happy to see all these materials with different perspectives.
1) LLVM has made it easier to build JITed or even compiled languages than ever before, that will run on multiple platforms while having decent performance.
2) Languages like Rust have come along (tying back to point 1) showing that there can be more to languages than the C/C++s and the Javas etc of the world (yes I know we've had stuff like Haskell and Lisp for a long time but they've never broken into the mainstream, despite how much I wish this was otherwise).
3) Various projects like Crafting Interpreters, Jon Blow's work on Jai, plus other smaller languages like Zig have made people better understand "this isn't as crazy hard as I thought".
I sort of hope we see a proliferation of new and interesting languages that explore idea spaces the way Rust is exploring memory safety (including the hope someone explores gradual safety the way we've started to see gradual typing).
1. Learn the theory. Yes, you need to. On this matter, the book "Types and Programming Languages" (or TAPL for short) is the bible: https://www.cis.upenn.edu/~bcpierce/tapl/
2. Implement toy type systems. There are several resources for this, but personally, I like this one: http://plzoo.andrej.com/