DroidScript
DroidScript
инструменты для мобильной разработки

Если визуальные языки программирования так доступны, то почему использовать их так сложно?

Статьи  
05.05.2019

Когда речь заходит о визуальных языках программирования, то в качестве основного их преимущества указывается отсутствие необходимости текстового программирования, что "делает программирование более доступным и увлекательным для новичков". Из этого можно сделать вывод о том, что текстовое программирование по определению сложнее, непонятнее и неинтереснее соединения блоков. Так ли это на самом деле, и обладает ли блочное программирование теми преимуществами, о которых твердят из года в год?

Недавно на глаза попалась старая версия инструмента Waterbear, который "позволяет сделать программирование более доступным и увлекательным". Посмотрим несколько блоков.

Блоки Waterbear

Можно ли назвать эти блоки доступными и понятным? Синий блок, видимо, предназначен для сложения, но запись 0 + 0 явно выглядит понятнее. А что означают все эти пиктограммы? Разобраться можно, но для полноты ощущений предлагаю перейти в игровую песочницу Waterbear и посмотреть демонстрационные примеры.

В новой beta версии Waterbear произошли положителные изменения, но многие примеры являются нерабочими и можно сказать, что на этом "визуальный синтаксический инструмент, который можно использовать с различными языками и проектами" закончился.

При использовании блоков не нужно вникать в нюансы синтаксиса языка программирования, но это не отменяет необходимости изучать блочный синтаксис.

Перейдём к следующему преимуществу. "Хорошо сделанный язык блочного программирования может полностью устранить синтаксические ошибки". А хорошо сделанный компилятор не может полностью устранить синтаксические ошибки? Нужно отметить, что далеко не во всех реализациях визуального программирования осуществляется контроль типов данных. Является ли это недостатком. Да, если приходится методом тыка определять тип блока, документации по которому нет.

Привлекательность блочного программирования не в малой степени основывается на использовании небольшого количества блоков. Почему Scratch или App Inventor простые? Потому что их ядро содержит небольшое количество блоков, а не потому, что блочный синтаксис сам по себе понятнее текста. Если ограничить функциональность языков программирования на уровне блоков и создать аналогичные готовые компоненты (как в той же Delphi), то и С++ будет выглядеть вполне так несложным для начинающих.

Работать с блоками просто, когда сущствуют нужные блоки. Если же нужного блока или примера его создания нет, то всё резко усложняется.

"Блочное программирование делает последнее увлекательнее и интереснее". За счёт чего? Интерес появляется за счёт игровой составляющей и прикладного практического применения. Что будет, если учащимся предложат в Scratch и App Inventor решать такие задачи?

"Увлекательное" решение какой-то задачи по ОГЭ.

Большинству делать это будет столь же "интересно и увлекательно", как и на любом текстовом языке, а первоначальный интерес к программированию будет похоронен под грузом учебных задач, как это произошло с BASIC и Pascal.

Если говорить о самообразовании, то доступность программирования напрямую связана с доступностью примеров и справки, чем, как известно, разработчики очень не любят заниматься. Их мнение о том, что использование блоков понятно по определению, глубоко ошибочно. Бывают ситуации, когда пользователи месяцами не могут понять то, как используется тот или иной блок. Более того, сами разработчики иной раз не понимают, что же они вывалили пользователям. Забавно видеть на форуме сообщения, в котором пользователь сообщает о том, что он посмотрел документацию, но так и не понял, как же работать с нужными ему блоками и просит дать хоть какой-то рабочий пример. А как понять, что перед тобой асинхронный блок, если это нигде не указано?

Описание функциональности блоков недостаточно для понимания того, как их использовать. Необходимы примеры. В том же Thunkable X встречается просто абсурдная ситуация - для понимания того, как использовать свойства и блоки, сначала нужно вникнуть в то, как похожее работает в текстовом программировании - в React Native. Идём дальше, если нормальной документации нет, то по логике на форуме можно было бы организовать адекватную поддержку с последующим дополнением документации показанными на форуме примерами. Но простые вопросы зачастую игнорируются. Многое можно найти в Google, но вы же заявили, что предлагаете понятный для начинающих инструмент, который будет доступен тем, кто мало знаком с программированием? Заявили. Блоки для выполнения этого действия существуют? Существуют. Так дайте же простой пример и объяснение того, как их использовать!

Как и в любом творчестве в программировании есть свои сложности, но при внимательном рассмотрении часто проблема состоит не в объективной сложности текстового программирования, а во множестве субъективных факторов (включая информационную поддержку), которые затрудняют или не позволяют сделать эту деятельность доступной и увлекательной.

Статьи  
© 2016-2018 Александр Страшко