So you want to be a compiler wizard (2016)
Some other good projects:* Lambda calculus evaluator* Hindley Milner typechecker for lambda calculus* Stack based calculator (extend with variables)* Play around with macros* Work through Crafting InterpretersBut really in my experience the best way to get better at compilers (I can't claim to be a wizard) is to just build a goddamn compiler. Start by writing a parser (you can crib from Crafting Interpreters), writing the simplest possible typechecker for arithmetic (crib from Hindley Milner), then a code generator to whatever target you want. Code generation is tricky, but if you're generating arithmetic, it's really not that bad.If at any point you get confused or have no clue what to do, take a deep breath and guess! Yep, just guess how to do it. I've done this quite a few times and later learned that my guess was really a dumbed down version of idk, solving the AST typing problem, or lambda lifting, or whatever. If that's too hard, scroll through other compilers and figure out what they do.Once you get something working, celebrate! It's pretty cool seeing even arithmetic end up as code generated and run.Then start adding other features! Add local variables. Add nested functions. Add whatever.The secret is to treat a compiler as a challenging software development project. Because that's what it is. Start writing code and figure it out.Granted this is not great advice if you want a usable compiler at the end. I'm just trying to learn, not make something for people to use.