Печальная история о применении конечных автоматов в программировании
Об авторе: Анатолий Шалыто, профессор, д.т.н., Университет ИТМО Соискатель бакалаврской степени написал выпускную квалификационную работу по построению программ при применении стандарта IEC 61499 – открытого стандарта для построения распределённых си...

Об авторе: Анатолий Шалыто, профессор, д.т.н., Университет ИТМО
Соискатель бакалаврской степени написал выпускную квалификационную работу по построению программ при применении стандарта IEC 61499 – открытого стандарта для построения распределённых систем управления и автоматизации. В этом стандарте имеются блоки, описывающие поведение программ с помощью графов переходов конечных автоматов.
Как выразился молодой человек, он в своей работе построил сверлильный станок. Это вызвало у меня некоторое сомнение, и я вслух предположил, что он на самом деле написал программу, управляющую таким станком. Молодой человек подтвердил это предположение. После этого я спросил, построил ли он хотя бы один граф переходов, и получил положительный ответ.
Потом я поинтересовался у соискателя, на каких языках он пишет программы на работе. Оказалось, что на языках Kotlin и Java. После этого я задал ему ещё один вопрос: применял ли он графы переходов при написании (очень хотелось написать словосочетание «при проектировании», но я решил не пугать молодого человека этим словосочетанием) программ на указанных языках, за исключением каких-либо особых случаев, как, например, при поиске подстроки с помощью алгоритма Ахо-Корасик, который рассказывается в рамках курса «Алгоритмы и структуры данных» во всех университетах мира, где этот курс читается. Молодой человек уверенно ответил: «Нет».
После этого я спросил, а слышал ли он что-либо про автоматное программирование? И снова он произнес уверенное «нет».
Сказать, что в этот момент мне стало немного обидно – это, значит, ничего не сказать. Это связано с тем, что молодой человек заканчивает бакалавриат кафедры, на которой я уже 25 лет развиваю эту парадигму программирования. И это при том, что в своё время по этой тематике было выполнено немереное число курсовых и выпускных работ, а также было защищено почти полтора десятка диссертаций.
Конечно, я уже несколько лет не читаю этот курс, но отсюда не следует, что никто из других преподавателей кафедры и руководитель соискателя не могли хотя бы упомянуть про этот подход к программированию, который относят к одной из парадигм программирования, тем более, что один из их основных преподавателей нынешних студентов был моим аспирантом и защищал диссертацию по этой тематике, не говоря уже о том, что некоторые из остальных преподавателей, по крайней мере, делали у меня курсовик по использованию автоматов в программировании. Да и сам молодой человек, если бы не был лохом, мог бы в Интернете что-нибудь посмотреть и почитать на эту тему.
Я утёрся и задал следующий вопрос: «Не показалось ли Вам странным, что в стандарте, описывающем будущее промышленной автоматики, автоматы являются единственным средством описания поведения программ, а Вы в своей практической деятельности никогда не применяли автоматы? И не надо говорить, что управлением в промышленности Вы не занимаетесь…». Молодой человек честно ответил, что он об этом даже не думал – самому в голову не пришло, а из преподавателей никто не «подтолкнул» в этом направлении.
Для того, чтобы приобщиться к автоматному программированию, я предложил молодому человеку в магистерской диссертации переписать на автоматах одну или несколько программ, написанных им на работе с использованием флагов, и сравнить полученные программы.
Ещё в августе 2002 появилась статья об использовании предложенного мною автоматного подхода к программированию в весьма странном месте: Вавилов К. Программирование за… 1 (одну) минуту… // Компьютер Price. 2002. № 31. Константин [Вавилов] однажды услышал мою лекцию, и понеслось…
После того, как я опубликовал тексты «Автоматное программирование» и «Ещё об автоматном программировании», Костя написал мне: «Лично для меня это Великая история и несомненное применение в различных разработках алгоритмов и ПО. На любую критику есть конкретные примеры – реально работающие на объектах Петербурга и России, эффективные, задокументированные, понятные программы (см., например, работы здесь; здесь; и здесь). После этого я спросил Костю: «И сейчас применяешь?». Он ответил: «Да. По-другому уже не получается мыслить…».
У меня есть другие подобные примеры, и хочется, чтобы и молодой человек, с которого я начал, понял, что человечество не зря собирается строить свое будущее в промышленной автоматике на автоматах.
С этой надеждой я и заканчиваю писать этот текст, но меня не покидает ощущение, что нечто подобное мне придется говорить и писать неоднократно.