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.

Reply via email to