Машины состояний - фундаментальное понятие, используемое сегодня во многих практических приложениях, начиная от программирования пользовательского интерфейса, такого как React, автоматизированных систем ответов, лексического анализа в парсерах и теории формальных языков, например, машина регулярных выражений, и заканчивая жизненными случаями, такими как обычные светофоры, торговые автоматы и другие.
Машины состояний основаны на более крупной теоретической области в области информатики, известной как Теория вычислений, а также на ее прямой теоретической модели - Теории автоматов.
В этом курсе мы изучаем Теорию автоматов на практическом примере реализации машины регулярных выражений.
Почему стоит брать этот курс?
Не секрет, что крупные технологические компании, такие как Google, Facebook и др., организуют свой процесс найма вокруг инженеров-универсалов, которые понимают основные фундаментальные системы, структуры данных и алгоритмы. Фактически это известная проблема в сфере технологического найма: существует много "программистов", но не так много "инженеров". И что определяет "инженера" в этом случае? - способность решать сложные задачи с пониманием (и опытом) в области общих концепций.
И есть простой трюк, как можно приобрести большой опыт с переносимыми знаниями в другие системы. - Вы берете некоторую сложную теоретическую область, которая может быть (пока что) не связана с вашей основной работой, и реализуете ее на языке, с которым вы знакомы. И, создавая это, вы учитесь всем различным структурам данных и алгоритмам, которые подходят для этой системы. Это должно быть конкретно чем-то универсальным (например, машинами состояний), чтобы вы могли передать это знание в свою "повседневную" работу.
В этом курсе мы придерживаемся этого подхода. Чтобы изучить "Теорию" автоматов, мы делаем ее более практичной: мы берем одно из ее широко используемых приложений - лексический анализ и поиск шаблонов - и создаем машину регулярных выражений.
Мы не только полностью поймем, как работают регулярные выражения "под капотом" (и что сделает их использование более профессиональным), но и сможем применить это знание о формальных грамматиках, языках, конечных автоматах - НКА, ДКА и др. - в других областях нашей работы.
Для кого этот курс?
Для любого любознательного инженера, желающего получить общие знания о конечных автоматах и регулярных выражениях.
Заметьте, что этот курс не о том, как использовать регулярные выражения (вы должны уже знать, что такое регулярное выражение и активно использовать их на практике как предварительное условие для этого курса), а скорее о том, как реализовать регулярные выражения - снова с целью изучения универсальной сложной системы.
Кроме того, лексический анализ (конечные автоматы НКА и ДКА, в частности) является основой теории парсеров. Так что, если вы хотите понять, как работают парсеры (и, более конкретно, их токенизатор или модуль "Лексер"), вы можете начать с этого места. Путь инженера-компилятора начинается именно с конечных автоматов и лексического анализатора.
Каковы особенности этого курса?
Основные особенности этих лекций:
- Кратко и точно. Каждая лекция является самодостаточной, краткой и описывает информацию, непосредственно связанную с темой, не отвлекаясь на несвязанные материалы или беседы.
- Анимированное представление в сочетании с редактированием примечаний в реальном времени. Это упрощает понимание темы и показывает, как (и когда) структуры объектов связаны. Статические слайды просто не работают для сложного контента!"
Автор, конечно, как всегда мудак ленивый, половину кода надо писать самим и потом не с чем сравнить