– На втором курсе программы студенты выбирают направление обучения. Ты выбрал, пожалуй, самое сложное – теорию языков программирования. Почему именно его?
– На первых курсах бакалавриата я много занимался машинным обучением. Мне было не особо интересно, но я зачем-то упорно продолжал это делать.
Но на третьем курсе я наткнулся на
курс Дениса Николаевича Москвина по Haskell на Stepik. И тут вспомнил, что учиться может быть интересно! Провел на курсе несколько недель, параллельно читая книгу по теме. Получил от этого всего огромное удовольствие, забросил ML и решил, что хочу заниматься языками программирования. Функциональное программирование здесь мне видится хорошей лакмусовой бумажкой: если понравилось — возможно, следует обратить внимание на языки как на потенциальную специализацию.
Вообще направление «Теория языков программирования» охватывает множество разных областей науки и технического знания. Любители программировать на низком уровне могут заняться виртуальными машинами и языковыми рантаймами. Почитатели формализмов оценят программирование с зависимыми типами и формальные доказательства. Где-то очень рядом с ЯП стоят теория вычислимости, теория доказательств, абстрактная алгебра, теория категорий и так далее. Интересно наблюдать, как все эти вещи переплетаются вместе в одном предмете.
Мне же интересен дизайн языков. Это, с одной стороны, довольно гуманитарная область: нужно оценивать языковые решения как с точки зрения UX и эстетики, так и исходя из когнитивных особенностей человека. С другой стороны, она очень техническая и теоретическая: возможна ли эффективная трансляция такого кода, получится ли сам целевой код достаточно производительным, как интегрировать решение в архитектуру компилятора, как изменения затронут взаимодействие с кодом на разных платформах и т.д.