Визуальное программирование vs DSL
В последнее время набирают популярность low-code и no-code платформы. В них для разработки приложений предлагается использовать визуальное программирование. При таком подходе, разработчики, в качестве которых выступают обычные бизнес-пользователи, вместо написания программного кода создают приложение при помощи мыши в графическом интерфейсе. Также визуальное программирование в некотором виде используется, например, в Конфигураторе 1С.
Однако, возникает вопрос. Какие преимущества дает визуальное программирование по сравнению с Domain Specific Language? Безусловно это зависит от области применения. С одной стороны, в классических языках визуальное программирование практически не используется. В то же время при разработке графического интерфейса такой подход конечно же имеет много преимуществ. Однако, при создании интерфейсов, например, с помощью популярной библиотеки React все-таки больше используется плоский код.
Плюсы и минусы
В использовании DSL я вижу следующие плюсы :
Поддержка системы контроля версий. В визуальном программировании значительно менее удобно следить за изменениями в логике программы и решать конфликты в коммитах.
Возможность копирования/вставки, поиска и замены по текстовым значениям, генерации кода.
В визуальном программировании к плюсам можно отнести следующее:
Более низкий порог входа. Большинство пользователей умеют нажимать на кнопки, вводить значения в поля и перетаскивать объекты на формах.
Лучшая наглядность при создании пользовательского интерфейса.
Следует отметить, что DSL и визуальное программирование не являются альтернативами друг друга. При правильном подходе визуальный конструктор может и должен генерировать DSL. В качестве такого языка часто используется XML. Однако, читабельность XML оставляет желать лучшего.
Сфера применения
Одним из главных недостатков визуального программирования все-таки является слишком ограниченная сфера его применения. Да, для создания простых CRUD приложений оно подходит достаточно неплохо. Однако, когда требуется некоторое усложнение логики, то все равно приходится возвращаться к программному коду. Тем самым создается определенный семантический разрыв, когда часть логики создана визуально, а часть при помощи классического кода.
Использование DSL, в свою очередь, позволяет создавать достаточно сложные приложения со значительно меньшими усилиями. Написание кода на специализированным языке может казаться для пользователей сложной задачей. Однако, не стоит забывать, что язык SQL создавался именно для обычных пользователей, и до сих пор используется не только программистами. И если DSL является таким же высокоуровневым как SQL, использует обычные слова вместо специальных символов, то порог вхождения значительно снижается (вот пример одного из таких языков).
Безусловно, для управления «динамическими» системами графический интерфейс подходит значительно лучше, чем текстовый. Например, большинство пользователей все-таки используют графическую оболочку операционных систем, а не командную консоль (хотя для управления серверами, на мой взгляд, консоль местами удобнее). Однако, программы являются более статическими системами. Как правило, изменение работы программ осуществляется регламентно, достаточно редко и могут приводить к другим значительным изменениям (например, миграции данных). И в этом случае значительно повышается важность проверки сделанных изменений, что значительно проще делать именно с плоским программным кодом.
IDE
Одной из отличительных особенностей визуального программирования является то, что разработчик сразу видит все возможности среды разработки. Тем самым ему значительно реже приходится обращаться к документации. С другой стороны, это создает визуальную сложность, тем самым «размывая внимание». Разработчику сложнее понять, какие именно настройки он изменил, а какие установлены по умолчанию. В плоских файлах все изменения можно легко увидеть при помощи системы контроля версий.
В целом же, использование DSL позволяет создавать значительное более мощные IDE за счет того, что все современные IDE имеют мощные механизмы по разработке плагинов под кастомные языки. Поэтому можно легко создать мощную IDE, значительно более удобную в использовании, чем написанных с нуля IDE для визуальной разработки. Что мы собственно говоря и сделали, получив при этом IDE значительно превосходящую по возможностям тот же Конфигуратор 1С.
Заключение
Разработка стоящего решения на самом деле является самой сложной частью процесса разработки программного обеспечения. Low-code платформы, концентрируясь именно на визуальном программировании, преувеличивают, утверждая, что написание кода — это самое сложное. На самом деле ни одна платформа low-code не избавит вас от необходимости тратить время на правильное проектирование вашего пользовательского программного обеспечения или от последствий, которые вы получите, если будете строить решения на основе плохой архитектуры.
Человек, который сможет более-менее нормально проектировать решения с использованием визуального программирования, без проблем сможет освоить и DSL. При этом, в сложной разработке, плоский код будет ему значительно удобнее по той же причине, почему и в классическом программирование используется именно язык вместо визуального программирования (возможность Copy/Paste, Find/Replace, VCS и т.д.).
В конце хотелось бы упомянуть еще один важный плюс DSL. Скорее всего, в ближайшем будущем, такие языки увеличат популярность по отношению к визуальному программированию, по мере развития технологий AI. Мы пытались обучать ChatGPT своему абсолютно новому языку, и результаты были весьма интересными и перспективными. Вполне возможно, спустя некоторое время, DSL можно будет использовать для автоматической генерации программ на основе требований на естественном языке. Шансов на это значительно больше, чем с классическими языками программирования.