It’s
not a secret that big tech companies, such as Google, Facebook, and others,
organize their recruiting process around generalist engineers who understand
basic fundamental systems, data structures, and algorithms. In fact, it’s a
known issue in tech-recruiting; there are a lot of “programmers”, but not so
many “engineers”. And what does define an engineer in this case? An ability
to solve complex problems, with understanding (and experience) in those
generic concepts. And there is a
simple trick how you can gain great experience with transferable knowledge to
other systems. You take some complex theoretical field, which might not (yet)
be related to your main job, and implement it in a language you’re familiar
with. And while you build it, you learn all the different data structures and
algorithms that accommodate this system. It should specifically be something
generic (for example, state machines) so that you can further transfer this
knowledge to your “day-to-day” job. In
this course, we take this approach. To study automata “theory”, we make it
more practical: we take one of its widely used applications, the lexical
analysis and pattern matching, and build a RegExp machine.