Dear @Araq, Several months ago, I got bit by the programming language bug after trying to learn Nim.
I think, Nim is one of the best progress we have made in the area of programming languages, with such simple and elegant syntax but being a language really powerful with low-level capabilities. This was a big surprise to me to find out that a language need not be verbose and complicated like Rust to be a systems programming language. This created an interest in me to learn about compilers, interpreters, and other language tools. However, I am a person who does not possess a CS-degree (or Math) and have been an IT professional only for about 3 years coming from the legal profession. The reason why I am reaching out to you here is, first and foremost, because I do not know how to reach you privately. Secondly, if you get time, could you give an outline of a roadmap of things I should learn in an incremental manner to reach your level of knowledge and proficiency. At least, what would be the basic areas in which I need to gain solid understanding? Data structures? Algorithms? Computer Organisation? Math? Assembly programming? Type theory? Functional programming? I'm sure, if you were advising your younger self, you would have advised to stay away from learning certain things that are actually irrelevant but taught in the area of creating programming languages. Then, do I need to gain professional systems programming experience before I embark on a compiler engineer journey? And do I need professional experience in C or C++ or Assembly programming? I was primarily a web developer for most of my short IT career having decent exposure to JavaScript (and now a bit of Python). I have also learnt the very basics of C. It would have been nice if there a roadmap like [roadmap.sh](https://roadmap.sh). However, I'm sure you wouldn't have time for that. Do ADTs, pattern matching etc. make a world of a difference (I've been seeing this a lot on forums)? Is Nim a suitable good language to use as a bootstrapping language for a compiler or write an interpreter? Many in the [Programming Languages subreddit](https://reddit.com/r/ProgrammingLanguages) does not suggest Nim as a suitable option (they cite the lack of sum types and patter matching in Nim) and instead suggest Haskell, OCaml, or Rust. Of course, I would take your word above theirs given the fact that you have sufficient experience in actually making a programming language in this era which is used in production. Sorry, if this in inappropriate to raise in this forum; but as I mentioned, I do not know of any place to reach out to you privately.