> - Write code in a functional language
This is a great place start. The ML family of languages are excellent for tokenizing and lexing, which is what you'll be doing when you get to your compiler project. For getting your feet wet I'd highly recommend working through the first few chapters of Okasaki's 'Purely Functional Data structures'. It's SML, which is really close to OCaml syntactically.
Once you're done with that you could jump to an OCaml project, say converting sexepressions to an AST of sorts, and practice the fundamentals of lexing/tokenizing.
And then the OCaml ecosystem has a parser generator, menhir, which is like yacc but better.
Anyway, this is the path I took and had a blast. I haven't written my own language but have dabbled with some of this stuff in a practical way now including adding new syntax to the multicore fork of Merlin (IDE syntax). It's now obsolete because multi core is mainline. But reading through and modifying code written by experts that walks an AST was an excellent learning experience; seeing what state needs to be carried forward, what sort of errors can be recovered from, those recovery strategies.
No matter what path you choose I'm sure you'll find it interesting.