------
As a nitpick about the theory of automata, I would draw a big red line between regular languages and context free grammars.
Regular languages have very useful engineering properties: they have predictable (linear) performance and give you "free" lookahead. (That is, nondeterminism is a math-y idea that many programmers are not comfortable with, but it's useful for engineering.)
They are better than Perl-style regexes for building reliable and understandable systems, which "blow up" on a regular basis.
In contrast, context-free grammars have almost no useful engineering properties by themselves. (There are subsets like LALR(1) that do, but they come with a bunch of tradeoffs.) As the article mentions, learning about recursive descent parsing first is probably more practical.
Also, you're MUCH more likely to encounter a regular expression in real code than a context free grammar. In 15 years of professional programming I probably dealt with regexes on a weekly or monthly basis, but had to write or modify a grammar exactly zero times. It does help to be more familiar with regexes and regular languages.
This post/sketch elaborates on related points:
Comments on Eggex and Regular Languages http://www.oilshell.org/blog/2020/07/eggex-theory.html