Визуальное программирование — почему это плохая идея

Автор оригинала: Mike Hadlow
  • Перевод
image

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

Язык визуального программирования — это такой язык, который позволяет программисту создавать программы, манипулируя графическими элементами, а не печатая текстовые команды. Известным примером является Scratch, язык визуального программирования родом из MIT, который используется для обучения детей. Его преимущества заключаются в том, что он делает программирование более доступным для новичков и не-программистов.

В 1990-х годах было очень популярное движение по внедрению визуального программирования в корпоративную среду с помощью так называемых CASE-инструментов, где корпоративные системы можно было бы определять с помощью UML и генерировать [их код] без необходимости в привлечении обученных разработчиков программного обеспечения. Это связано с концепцией «round tripping» («туда и обратно»), где система может быть смоделирована визуально, программный код будет генерироваться из полученных моделей, а любые изменения кода могут быть возвращены обратно в модель. Увы, подобные инструменты так и не смогли выполнить свою миссию, и большинство из экспериментов [по их внедрению] в настоящее время в значительной степени заброшены.

image

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

  • Языки текстового программирования запутывают то, что по существу является простым процессом.
  • Абстракция и декупликация (decoupling, уменьшение связности) играют небольшую периферийную роль в программировании.
  • Инструменты, которые были разработаны для помощи программированию, не важны.

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

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

Решение для большинства языков визуального программирования состоит в том, чтобы сделать «блоки» более сложными, чтобы каждый визуальный элемент был эквивалентен большому блоку текстового кода. Визуальные инструменты рабочего процесса являются здесь непосредственным камнем преткновения.

Проблема в том, код должен все равно должен быть где-то определен. Поэтому процесс кодинга [на крупных визуальных элементах] превращается в «программирование свойств диалогов». Визуальные элементы сами по себе представляют собой лишь самый высокий уровень движения программы при исполнении, и большая часть работы теперь выполняется в стандартном текстовом коде, скрытом в визуальных «кубиках». В итоге мы взяли худшее из обоих миров и получили текстовое программирование, не поддерживаемое современными инструментами.

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

Между визуальным «кодом» и текстовым кодом существует рассогласование импеданса (набор концептуальных и технических трудностей), и программисту приходится перемещаться по интерфейсу между ними, часто затрачивая больше усилий на усовершенствование самого графического инструмента программирования, чем на решение изначальной задачи [по написанию программы].

image

И теперь мы подошли ко второму заблуждению, что абстракция и декупликация играют небольшую роль в программировании. Визуальное программирование исходит из предположения, что большинство программ являются простыми процедурными последовательностями, несколько похожими на блок-схему. Как правило, большинство начинающих программистов считают, что программное обеспечение именно так и работает.

Однако, как только программа становится больше, чем довольно тривиальный пример, ее сложность скоро сокрушает программиста новичка. Новички обнаруживают, что очень сложно рассуждать о большой процедурной базе кода и часто увязают в попытках создания стабильного и эффективного программного обеспечения большого масштаба. Главной инновацией в языках программирования стала попытка управлять сложностью, обычно через абстракцию, инкапсуляцию и уменьшение связности. Все системы типов и конструкции объектно-ориентированных и функциональных языков программирования на самом деле всего-лишь попытка взять под контроль сложность этих языков.

Большинство профессиональных программистов будут постоянно абстрагировать и декуплицировать код. По сути разница между хорошим и плохим кодом в основном и заключается в том, насколько программисту удалось это сделать. У инструментов визуального программирования очень редко есть эффективные механизмы для таких вещей, в результате «визуальный» разработчик оказывается в ловушке доступных возможностей, эквивалентной BASIC'у 1970-х годов.

image

Последнее заблуждение состоит в том, что визуальные программисты якобы могут обойтись без всех инструментов поддержки программирования, которые были разработаны на протяжении десятилетий. Взгляните на длительную эволюцию редакторов кода и сред IDE. Например, Visual Studio поддерживает эффективный инструмент intellisense, позволяющий подсматривать тысячи API-интерфейсов, доступных в одной только в библиотеке базового класса. Отсутствие хорошего контроля над версиями — еще один серьезный недостаток большинства инструментов визуального программирования.

Даже если они сохраняют свой макет в текстовом формате, «диффы» не имеют никакого или почти никакого смысла. Очень трудно сделать 'blame' (найти коммит и ответственного за изменения конкретной строки) в большой глыбе XML или JSON. Вещи, которые не имеют никакого значения для функционального исполнения программы, такие как положение и размер графических элементов, при этом постоянно приводят к изменениям в метаданных, что делает «дифф» еще более сложным для синтаксического анализа.

Языки текстового программирования научились разделять структурные блоки кода на отдельные исходные файлы, поэтому изменение одной части системы легко слить с изменением в другом. Визуальные инструменты обычно сохраняют результат по принципу «одна диаграмма на один файл», что означает, что слияния становятся проблематичными, и еще сложнее, если семантическое значение «диффа» трудно анализировать.

Апдейт

Вероятно, я ошибся, когда взял экранный снимок Scratch и использовал его в качестве основного примера в моем первом абзаце. Я не преподаватель, и у меня нет собственного мнения о эффективности Scratch как инструмента обучения. Многие люди говорят, что он чрезвычайно полезен в обучении программированию, особенно для детей. Все, что помогает попасть людям в чудесный и захватывающий мир программирования, следует только похвалить. Я действительно не намеревался сейчас критиковать конкретно Scratch, это просто пример системы визуального программирования, о которой, как мне казалось, большинство из моих читателей должно было хотя бы слышать.


Другим контр-примером, приведенным в Reddit, были инструменты статической структуры, такие как дизайнеры пользовательского интерфейса, дизайнеры схем баз данных или дизайнеры классов. Я согласен, что они могут быть очень полезными. Все, что помогает визуализировать структуру данных или масштабную структуру программы, является бонусом. Но их никогда не бывает достаточно. Об этом свидетельствует полный провал инструментов из 90-х, таких как Power Builder, которые базировались на графических визуализациях для создания среды разработки без необходимости работать с кодом.
Об авторе:
Заметки, мысли вслух, обучение у всех на виду, недоразумения, ошибки, неразбавленные мнения. Я Майк Хэдлоу, проповедующий разработчик. Я живу недалеко от Брайтона на южном побережье Англии.


Перевод выполнен при поддержке компании EDISON Software, которая профессионально занимается разработкой и тестированием софта.

Только зарегистрированные пользователи могут участвовать в опросе. Войдите, пожалуйста.

Визуальному программированию быть?

Edison
99,00
Изобретаем успех: софт и стартапы
Поделиться публикацией

Комментарии 692

    +5
    Есть такой инструмент как node-red который совмещает лучшее обоих миров — позволяет писать маленькие куски программы, а сложное межмодульное соединение делать визуально.
      +18

      Как раз таки "сложное" лучше писать в коде, который обмазывается тестами и кладется в CVS.
      Особенно межмодульное соединение.

        0
        То что сторонние инструменты (cvs) работают с текстами лучше, чем с визуальщиной это проблемы интеграции сторонних инструментов и ide. просто, имхо, пока никто не ставил такую задачу, поэтому и cvs для визуальщины это cvs на основе копирования неархивных файлов в архив.
        И обмазывание тестами межмодульное взаимодействие тоже из той же серии. Сделать и поддерживать DI для визуальщины даже проще, чем в коде. Пример — Unity Shader Graph который в режиме online использует облегченные ноды, а на этапе «рендринга» подсовывает нормальные классы.
        0
        Еще есть NoFlo и еще куча всего. Это кажись было всегда и зовется Workflow Engine/BPMS в зависимости от области применения и навороченности. Но я бы не назвал это визуальным программированием. Эти инструменты избавляют нас от рутинного написания пайплайнов (которые в коде бы выглядили громоздко и немного уродливо) + добавляют всякие плюшки по мониторингу и т.д
          0
          Никогда 8-ки не делали? Это когда есть два нода расположенных один над другим, выходы которых заведены на входы друг друга. Выглядит забавно, но не думаю, что добавляет понимания.
          Вот пример: flows.nodered.org/flow/720044a3c587a310813a9326ed3cb08a
          +6
          Любые способы хороши, если они формируют у человека алгоритмическое мышление, способность постановки задачи и способность разбивать сложные задачи на совокупность простых. А как потом из умных мыслей составить программу человек уже сам разберётся.
            +3
            Однако это не повод учить плохому.

            >способность разбивать сложные задачи на совокупность простых.
            Есть проверенные временем способы декомпозиции и композиции. Скажем, ФП как (упрощенно) композиция программ из функций, в их математическом виде. Основано на математике, по большей части — теории категорий. Есть ООП, под которую тоже подводили математический фундамент, но в целом тут с этим намного хуже.

            Большинство же средств визуального программирования ни на чем не основаны. Как тут резонно пишут, есть области, где визуальные средства хорошо прижились. Но при этом очевидно есть и такие, где эти средства делают только хуже. То о чем автор пишет, к сожалению очень и очень типично, даже если он местами излишне обобщает.
              0
              Я смотрю на это иначе. Представим себе человека не знакомого с программированием, ему можно с помощью визуального программирования создать навык составления алгоритмов и быстро научить решать сложные задачи или долго топтаться на месте объясняя синтаксис, где и сколько надо ставить кавычек, скобок, пробелов, заглавных или прописных и долго ещё ждать момента когда человек станет способен ставить и решать задачи, ибо ещё синтаксис не изучил.
              Среда визуального программирования накладывает много ограничений и любому кто хочет решать сложные задачи придётся из неё выйти и изучить ЯП, но до этого уровня надо сначала дорасти
                +1

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

                  –2
                  Предполагаю, что этот человек сейчас воюет в Сирии на стороне запрещенной организации?
                    0

                    Или проходит срочную службу где-нибудь в артиллерийском дивизионе.

                      0
                      Есть мобильное приложение… нужно приложить телефон к гаубице и он по наклону акселерометра рассчитает траекторию.
                        0
                        а ещё это приложение отсылает координаты расчёта куда надо — и можно наводить ракеты на расчёт…
                    +2
                    Любую сложную вещь можно объяснить достаточно простыми словами, опуская детали, что б сначала человек осознал общую картину, а потом усложнять модель снижаясь на уровень деталей. Этот принцип вполне подходит к программированию, если начать с визуального, то обучение ускорится
                      0
                      Есть риск, что обучение на этом и закончится. Зачем человеку опускаться глубже в пучину IT, если можно до конца дней своих двигать красивые квадратики в редакторе, соединять их стрелочками и говорить «яжпрограммист».
                        0
                        Для начального обучения детей — вполне достаточно. я видел результат — у детей 4 класса вполне сложилось понимание алгоритмов.
                        что же касается применения взрослыми в жизни, то если это решает задачи — почему бы и нет? (программированием чаще всего это не назвать)
                          0
                          Считайте меня пессимистом и циником, но боюсь, рано или поздно (боюсь, что рано, лет через 15) придет к тому, что программистом будет считаться как раз человек, двигающий красивые квадратики в редакторе.

                          А те, кто действительно когда-то писали код, окажутся на свалке истории как никому ненужные старперы, несущие какую-то пургу про «сборку мусора», «выделение памяти» и «приведение типов».

                          Эх, где моя муза, я бы такой рассказ на эту тему накатал!

                          — Сборка мусора?? Что это? Какое еще выделение памяти? Нет, это ты не понимаешь! А я все понимаю, я же программист! Вот смотри, я двигаю вот этот красный квадратик, видишь у него внизу черная фигнюшка. Я вот к ней прикрепляю чёрную стрелочку и веду вот сюда, к этому синему квадратику. Видишь в углу синего — кружочек? Я к нему прицепляю вот эту зеленую линию и веду вот сюда. Ага. А теперь я нажимаю на кнопку «BUILD PROGRAM» и оно работает. Работает же? Ну и зачем мне твои алгоритмы читать?


                            0
                            не получится. такая система не будет развиваться. Хотя часть разработки туда, безусловно, перейдет.
                            вспомни «Профессию» А.Азимова…
                            заодно можно вспомнить и «Основание» с жрецами Церкви Галактического Духа.
                              0
                              Считайте меня пессимистом и циником, но боюсь, рано или поздно (боюсь, что рано, лет через 15) придет к тому, что программистом будет считаться как раз человек, двигающий красивые квадратики в редакторе.
                              Через 15 лет ещё не вымрут люди, всё это создавшие. Так что вряд ли. Но вот если соотнести тут обсуждаемое с вот этой вот статьёй… то есть ощущение, что хотя описанной проблемы и не возникнет… но мало кому понравится как её не возникнет.

                              Просто 90% населений (хорошо если не 99%) окажутся… ненужными. Просто — ненужными. Включая подавляющее большинство «программистов, двигающих квадритики».

                              И никто не будет им обеспечивать не «базовый безусловный доход», ни еду, ни что-либо ещё. Максимум — бетонную клетушку и небо в клеточку (хотя в этом случае какая-то еда им будет положена… хмм...).

                              Я бы сам был рад ошибаться — ибо вовсе не в восторге от подобного будущего… но пока не вижу что именно могло бы его остановить…
                                0
                                И никто не будет им обеспечивать не «базовый безусловный доход», ни еду, ни что-либо ещё.

                                Разве что министерство обороны.
                                  0
                                  но пока не вижу что именно могло бы его остановить…

                                  Война. Или чудо.
                              0
                              Если человек понимает как работает алгоритм, он его и на бумажке нарисует, и в редакторе что надо соединит, и, если возможностей редактора мало, напишет прогу на любом языке. Спорить глупо, что человек изучивший синтаксис яп уже обладает большими возможностями, но изучение яп это рутинная, а не творческая операцию, сиди и запоминай, возможно даже обезьяну получится научить, что за чем следует, а вот с алгоритмами тут уже не уверен что получится.
                            +3

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

                              +1
                              Или баллистический калькулятор, в который нужно вбить какие-то данные. Только этот процесс не относится к программированию никак.
                            +2
                            >когда человек станет способен ставить и решать задачи, ибо ещё синтаксис не изучил.
                            Вы так говорите, как будто ставить и решать задачи — это проще, чем синтаксис, и синтаксис только этому и мешает :)

                            Ну да, я согласен (наверное частично), что при обучении детали синтаксиса могут мешать. Для первого-второго языка. Но вообще говоря, этому тоже надо научиться — потому что в профессиональном применении этих языков за много лет все равно будет десятки, если не сотни, и научиться приспосабливаться к синтаксису, понимать его — тоже полезно.
                              0
                              При первоначальном обучении (особенно детей) важно обеспечивать короткий цикл «действие-результат». «Классическое обучение» (особенно «директивное», типа «Тебе сказали учить — значит, учи и не расссуждай») с этим справляется гораздо хуже.
                              Визуальные инструменты типа Скратча — по максимуму отвязаны от деталей. Для детей (первоначального обучения алгоритмам) это замечательно. Дальше — можно уже учить языку (где-то видел толи плагин, толт нечто подобное для Скретча — показывает «нацарапанное» в виде Java). Это как раз этап роста программ, и то, что в визуальном виде занимает огромный объем — в текстовом получается весьма компактно. и этим переход от визуального к текстовому представлению (со всеми минусами типа бОльшего объема работы с клавиатурой, изучения синтаксиса) хорошо объясняется. Ну а обучение профессиональному применению — это уже отдельная тема.
                                +1
                                А ничего, что стреч — текстовый. Просто как во времена синклер бейсика управляющие конструкции зашиты, чтобы нельзя было получить ошибку компиляции из-за опечатки.
                                  +1
                                  И где он текстовый? если детишки, которые гоняли этого персонажа по полю, не использовали язык? И они не знали, что там за словеня такие импортные — while да until? цифры они использовали, это было.
                                    +3
                                    Я до института не знал, что за словеня такие импортные — while да until, но это не мешало мне использовать их в качестве команд QBASIC.
                                    Точно так же дети стремительно осваивают англоязычные менюшки в играх — потыркался и запомнил.
                                      0
                                      моя на русском программировала. А как вы им эти вайлы объясняли? Переводили наверное просто.
                                      А текстовый он прямо на скриншоте:
                                      when flag clicked
                                      say Hello world
                                      stop this script
                                        +1
                                        Ну, я преподавал детишкам старшего школьного возраста, причем в те времена, когда таких инструментов как скрэтч не было. а то, что видел — детишкам примерно 4 класса объясняла учительница информатики.
                                        наксолько я помню, объяснение были типа «вот когда нажмешь на флажок такого же цвета», «если тут числа равны, то выполняются шаги в этой части, а если не равны, то в этой», «сначала выполняются шаги, потом проверяется условие», «а вот сюда мы пишем то, что нам скажет кот в этом случае» (только мне кажется, что там был пес а не кот)
                                    +1
                                    Еще раз, для ясности — я в целом согласен, что для начального обучения визуальные средства могут быть полезны. Просто они, как правило (то есть, я не видел исключений) описывают именно алгоритм, и совершенно забывают при этом про данные. А данные, их типы, и все что с этим связано — это очень важная часть. Настолько же важная, как алгоритмы.

                                    То есть, я к чему клоню — попробуйте скажем на Скретче описать простейшую вещь — выполнить REST запрос к какому-то сервису, получить ответ, распарсить JSON. Я боюсь, что почти ни один из визуальных языков не сможет вообще этого сделать, либо результат будет ужасен. При этом классические языки (не все, но многие) такие задачи решают на ура — то есть это однострочник, например.

                                    Ну и второе — это обмен знаниями. Если мы про текстовое представление — то я могу вам прямо вот тут написать фрагмент кода:

                                    a= 2*2

                                    И вы его сможете применить (если не выполнить, то скопипастить). Расскажите, как это выглядит в визуальной среде? Многие ли из таких инструментов вообще хоть чего-то стоят без своей IDE?
                                      0
                                      a= 2*2 без текстового редактора (чем не IDE?) тоже немного стОит ;)
                                      Скретч, действительно, на самом деле ничего не визуальный. Древний basic, положенный на пазл.
                                  +2

                                  Такой подход рекомендуют для детей 8 лет. Это вышеупомянутый Scratch или IDE для лего.
                                  Обучение взрослых людей имеет такой контекст, что им нужно сразу давать промышленный язык программирования. Если бы им было целесообразно давать сначала визуальное программирование, то в интернете не было бы такого количества курсов по конкретным языкам.
                                  Для алгоритмических задач весь синтаксис промышленных языков и не нужен. Объявление переменных, условия, циклы, массивы — не такой уж огромный объем. А вот исключения, абстрактные классы, интерфейсы и т.п. в концепцию визуального программирования хоть и вписываются (UML), но проще не становится.

                                    +5
                                    Представим себе человека не знакомого с программированием, ему можно с помощью визуального программирования создать навык составления алгоритмов и быстро научить решать сложные задачи или долго топтаться на месте объясняя синтаксис,

                                    Зачем представлять? Мы все были когда-то людьми, не знакомыми с программированием. Тяжко было начинать? Не очень, согласитесь?
                                    «Долго топтаться на месте» — это минут 15, чтобы объяснить, как устроен хеллоуворлд. После этого можно писать простые алгоритмы, этого достаточно.
                                      –2
                                      Мы все были когда-то людьми, не знакомыми с программированием. Тяжко было начинать? Не очень, согласитесь?

                                      Верите — не помню! Девушка просит «научи», а я не знаю как, потому что кто бы мне рассказал, как я сам научился!
                                        +2
                                        Зачем представлять? Мы все были когда-то людьми, не знакомыми с программированием. Тяжко было начинать? Не очень, согласитесь?

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

                                        «Долго топтаться на месте» — это минут 15, чтобы объяснить, как устроен хеллоуворлд. После этого можно писать простые алгоритмы, этого достаточно.

                                        Для того, чтобы «писать простые алгоритмы» нужно, чтобы человек понимал, что такое алгоритмы, как они строятся и как разбить элементарную операцию на алгоритм. А это не 15 минут времени. Далеко не 15 минут. Это такой же навык, который со временем нарабатывается.
                                        Дальше — алгоритм, который есть в голове нужно изложить в программном коде. Это тоже не «15 минут ознакомления с синтаксисом и погнали». Этот самый синтаксис будет долго въедаться в память и человек будет учиться излагать свой алгоритм в программном языке.

                                        Не помните, как вы или ваши одногруппники не знали, как выразить чётность числа?
                                        Банальное if (num % 2 == 0)… не писалось, потому что не было понимания, что и как работает. Алгоритм в голове был(делится на 2 — чётное). По отдельности человек примерно понимал, как синтаксис выглядит. Но вот сесть и написать — ступор.

                                        Не стоит недооценивать сложность входа в программирование. Это не так легко, как вам кажется.
                                          +1
                                          Для того, чтобы «писать простые алгоритмы» нужно, чтобы человек понимал, что такое алгоритмы, как они строятся и как разбить элементарную операцию на алгоритм.

                                          Нужно. Но разве есть какая принципиальная разница, на чём учиться плести алгоритмы, на цветных квадратиках, или на словах и математических знаках?
                                            0
                                            Разница лишь в сложности входа и количеству одновременно усваиваемых знаний.
                                            В случае визуалки — ты просто строишь алгоритмы из простых блоков, которые ты просто читаешь и видишь перед глазами. Если это какая-то игровая визуалка, то у тебя ещё и ограничены варианты блоков. Основной акцент идёт на алгоритм.
                                            В случае ЯП — у тебя нет готовых простых блоков перед глазами, есть куча непонятных конструкций, которые нужно запомнить(!), нужно проассоциировать с своей логической моделью(чтобы, если грубо, знать, что условие когда\если — это if) и не забыть применить, когда требуется, не перепутать. Акцент с алгоритма смещается на борьбу с собой и языком и процесс идёт немного сложнее.

                                            И в целом, я не защищал визуальный подход. Он при обучении может быть хорошим инструментом, которым можно пользоваться, но это всё зависит от человека, педагога и пр.
                                            Меня зацепило ваше непонимание сложности обучения программированию.
                                              0
                                              Есть одна принципиальная, я детей алгоритмам учил, когда они ещё читать не умели. В scratch и других подобных вещах. Лень искать видео, как у меня трехлетний ребёнок по линолеуму по квадратикам ходит и яблоки собирает слушая команды по алгоритму написанному самим же в какой-то программе с визуальным программированием. В три года он легко въехал в цикл.

                                              У меня есть сотрудники, как дети, очень далёкие от программирования, алгоритм бизнес-процесса в текстовом виде не могут написать, а вот нарисовать его в draw.io у них получается. Если бы мне от них требовался алгоритм более сложный, я бы наверное им дал scratch и заставил там его описать.

                                              Всему своё время и место.
                                                0

                                                SFC и FBD нормальные наглядные языки, которые точно требуют знания алгоритмизации, текстовые пошаговые языки тоже не плохи.

                                                  +1
                                                  Именно так. Слова мы тоже учимся в детском саду собирать из кубиков с картинками. И блок-схемы не зря народ рисовал раньше — а сейчас перестал.

                                                  Графические схемы очень помогают в понимании, пока всякие ключевые слова и паттерны проектирования не выучены.

                                                  Но рассказывать про то, что на них можно хорошо и удобно сделать что-то сложное… ну не стоит.
                                                    0
                                                    in.mathworks.com/matlabcentral/mlc-downloads/downloads/submissions/35781/versions/4/screenshot.JPG

                                                    Попробуйте на досуге хорошо и удобно закодировать это. (Именно закодировать — потому, что кодогенератор реально даст оптимальный код, для конкретной целевой системы с учетом оптимального способа хранения весов и наличия-отсутствия FPU, чему не будет отвечать ни одна возможная реализация, кроме опять-же, вдруг написанных для целевой системы). Ну это конечно, если вы понимаете насколько прост серенький кубик… Хотя чего там понимать — простейшая моделька. 1 лист всего.

                                                    Визуализацию не забудьте закодировать — которая «MSE View», в 3 щелчка мышки там появилась — ибо средство языка.

                                                    И конечно ваш код должен быть столь же понятен, как эта картинка для
                                                    программиста на скажем — фортране…
                                                      0
                                                      Никаких проблем — если мне дадут равную по возможностям библиотеку. Код будет выглядеть чуть запутаннее — но точно так же поместится в экран.

                                                      А теперь вы представьте, что любого из этих прямоугольников на схеме язык не завезли, и попытайтесь реализовать его на основе базовых элементов…
                                                        0
                                                        Интересно какая такая библиотека «равная по возможностям» позволит вам загонять в себя переменную представленную в матричном виде с произвольными размерностями сетки. Я честно говоря кроме матлаба затрудняюсь язык назвать в котором могла бы существовать подобная библиотека.
                                                          0
                                                          А в чём, собственно, проблема «загнать» в переменную матрицу с произвольными размерностями сетки? Массивы как бы давным-давно изобрели и они во всех нормальных языках есть. В том числе и массивы переменного размера.
                                                            0
                                                            В том что «массив неопределенного размера» в любом языке — абстрактное понятие и требует наличие структуры для своего описания, т.е. километры текста с объяснениями, что там как и зачем. А учитывая, что таких там не один и не два — представляю, сколько текста у вас уйдет на одно только описание этих структур массивов неопределенных размеров. При том, что алгоритм то не нов, и общеизвестен-общеупотребим — т.е. по сути вместо прямого решения поставленной задачи (а именно решение нарисовано на картинке), вы просто будете описывать какую то его конкретную реализацию (велосипедную) — описание которой нужно только вам, интересно только для вас и валидно оно будет только внутри вашего языка.
                                                              0
                                                              Всё что вы перечислили — забота авторов библиотеки. Вы на своём визуальном языке тоже структуры данных и алгоритмы не сами делали.
                                                                0
                                                                Нарисованное на картинке решение (конкретная реализация) будет валидна тоже только внутри вашего языка. И людям, не имеющим матлаба — неприменима и поэтому неинтересна.

                                                              +1
                                                              Вторую часть поста Вы «деликатно» пропустили:

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

                                                            0
                                                            Попробуйте на досуге хорошо и удобно закодировать это.

                                                            Если я правильно понял задачу, то вот тут описано как ее решать на Python


                                                            Только на питоне можно еще комментарии к коду писать с пошаговым объяснением своих мыслей.


                                                            Исходный код
                                                            import numpy as np
                                                            
                                                            def sigmoid(x):
                                                                return 1.0/(1.0 + np.exp(-x))
                                                            
                                                            def sigmoid_prime(x):
                                                                return sigmoid(x)*(1.0-sigmoid(x))
                                                            
                                                            def tanh(x):
                                                                return np.tanh(x)
                                                            
                                                            def tanh_prime(x):
                                                                return 1.0 - x**2
                                                            
                                                            class NeuralNetwork:
                                                            
                                                                def __init__(self, layers, activation='tanh'):
                                                                    if activation == 'sigmoid':
                                                                        self.activation = sigmoid
                                                                        self.activation_prime = sigmoid_prime
                                                                    elif activation == 'tanh':
                                                                        self.activation = tanh
                                                                        self.activation_prime = tanh_prime
                                                            
                                                                    # Set weights
                                                                    self.weights = []
                                                                    # layers = [2,2,1]
                                                                    # range of weight values (-1,1)
                                                                    # input and hidden layers - random((2+1, 2+1)) : 3 x 3
                                                                    for i in range(1, len(layers) - 1):
                                                                        r = 2*np.random.random((layers[i-1] + 1, layers[i] + 1)) -1
                                                                        self.weights.append(r)
                                                                    # output layer - random((2+1, 1)) : 3 x 1
                                                                    r = 2*np.random.random( (layers[i] + 1, layers[i+1])) - 1
                                                                    self.weights.append(r)
                                                            
                                                                def fit(self, X, y, learning_rate=0.2, epochs=100000):
                                                                    # Add column of ones to X
                                                                    # This is to add the bias unit to the input layer
                                                                    ones = np.atleast_2d(np.ones(X.shape[0]))
                                                                    X = np.concatenate((ones.T, X), axis=1)
                                                            
                                                                    for k in range(epochs):
                                                                        i = np.random.randint(X.shape[0])
                                                                        a = [X[i]]
                                                            
                                                                        for l in range(len(self.weights)):
                                                                                dot_value = np.dot(a[l], self.weights[l])
                                                                                activation = self.activation(dot_value)
                                                                                a.append(activation)
                                                                        # output layer
                                                                        error = y[i] - a[-1]
                                                                        deltas = [error * self.activation_prime(a[-1])]
                                                            
                                                                        # we need to begin at the second to last layer 
                                                                        # (a layer before the output layer)
                                                                        for l in range(len(a) - 2, 0, -1): 
                                                                            deltas.append(deltas[-1].dot(self.weights[l].T)*self.activation_prime(a[l]))
                                                            
                                                                        # reverse
                                                                        # [level3(output)->level2(hidden)]  => [level2(hidden)->level3(output)]
                                                                        deltas.reverse()
                                                            
                                                                        # backpropagation
                                                                        # 1. Multiply its output delta and input activation 
                                                                        #    to get the gradient of the weight.
                                                                        # 2. Subtract a ratio (percentage) of the gradient from the weight.
                                                                        for i in range(len(self.weights)):
                                                                            layer = np.atleast_2d(a[i])
                                                                            delta = np.atleast_2d(deltas[i])
                                                                            self.weights[i] += learning_rate * layer.T.dot(delta)
                                                            
                                                                        if k % 10000 == 0: print 'epochs:', k
                                                            
                                                                def predict(self, x): 
                                                                    a = np.concatenate((np.ones(1).T, np.array(x)), axis=1)      
                                                                    for l in range(0, len(self.weights)):
                                                                        a = self.activation(np.dot(a, self.weights[l]))
                                                                    return a
                                                            
                                                            if __name__ == '__main__':
                                                            
                                                                nn = NeuralNetwork([2,2,1])
                                                                X = np.array([[0, 0],
                                                                              [0, 1],
                                                                              [1, 0],
                                                                              [1, 1]])
                                                                y = np.array([0, 1, 1, 0])
                                                                nn.fit(X, y)
                                                                for e in X:
                                                                    print(e,nn.predict(e))
                                                              0
                                                              У вас частный случай кастрированного серого квадрата реализованный в векторной форме занял аж 4 экрана текста… А квадрат — общий случай с матрицами произвольного размера. Представляю сколько экранов у вас именно прям его реализация займет?

                                                              Только на питоне можно еще комментарии к коду писать с пошаговым объяснением своих мыслей.

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

                                                              Самое главное что вы глядя в квадрат с ходу поняли, что он делает а вот я глядя в ваш код с ходу этого не пойму и никто не поймет — от того вам так важны комментарии в этом коде.
                                                                0
                                                                У вас частный случай кастрированного серого квадрата реализованный в векторной форме занял аж 4 экрана текста… А квадрат — общий случай с матрицами произвольного размера. Представляю сколько экранов у вас именно прям его реализация займет?

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


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

                                                                  0
                                                                  Так а вам это сразу и заявили: ВП — проблемно ориентированная технология! И в решении своих конкретных проблем она и связанные с ней языки многократно мощнее любых языков общего назначения, именно поэтому она и доминирует в своих областях… В данном случае представлен минимально возможный набор знаний как о задаче, так и методе ее решения — никакой код ни на каком языке так изящно не способен это передать являясь одновременно и программой и инструкцией к симулятору и кодогенератору.

                                                                  Вот текстовый вид модельки www.mathworks.com/matlabcentral/fileexchange/35781-multilayer-perceptron-neural-network-model-and-backpropagation-algorithm-for-simulink?focused=5228360&tab=model

                                                                  Вот сам код www.mathworks.com/matlabcentral/fileexchange/36253-the-matrix-implementation-of-the-two-layer-multilayer-perceptron-mlp-neural-networks
                                                                    0
                                                                    И в решении своих конкретных проблем она и связанные с ней языки многократно мощнее любых языков общего назначения, именно поэтому она и доминирует в своих областях…

                                                                    По каким критериям вы посчитали кратность мощности? Как убедились в доминировании?
                                                                    Мы сейчас про Mathlab и Simulink? Они всего лишь конкурируют с питоном и скалой в области математических вычислений.
                                                                    Я не исключаю, что вы используете визуальные языки для программирования в вашей суперсекретной и очень ответственной области. Но это совершенно не означает их превосходства. Просто у вас инерция системы.


                                                                    Вот текстовый вид модельки…
                                                                    Вот сам код

                                                                    Как именно код соотносится с моделькой? Это ведь разные документы.


                                                                    код ни на каком языке так изящно не способен это передать являясь одновременно и программой и инструкцией к симулятору и кодогенератору.

                                                                    Код на питоне вполне себе инструкция к кодогенератору байткода.
                                                                    Что вы понимаете под "симулятором"? Инструмент для запуска вашей модельки? В таком случае, код на питоне это еще и инструкция к симулятору.

                                                                      0
                                                                      По каким критериям вы посчитали кратность мощности? Как убедились в доминировании?

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

                                                                      Мы сейчас про Mathlab и Simulink? Они всего лишь конкурируют с питоном и скалой в области математических вычислений.
                                                                      А в симулинке знают, что с ними питон конкурирует? ;) Ах ну да — в области «вычислений»… В которой может конкурировать любой «языкнейм».
                                                                      Просто у вас инерция системы.

                                                                      Напоминаю — это у вас инерция системы! Вы до сих пор пишите, что то там в тексте хотя есть ВП — БОЛЕЕ НОВАЯ и более совершенная технология создания ответственных и сложных программных продуктов!

                                                                      Как именно код соотносится с моделькой? Это ведь разные документы.
                                                                      Так же как и матлаб соотносится с симулинком — это ведь разные продукты!

                                                                      Код на питоне вполне себе инструкция к кодогенератору байткода.
                                                                      А картинка вполне может быть инструкцией к кодогенератору питона… И если вы против такого слоя то в вашей логике и С++ вообще не нужен ибо это просто инструкция к кодогенератору ассемблера!
                                                                        0
                                                                        ВП — БОЛЕЕ НОВАЯ и более совершенная технология создания ответственных и сложных программных продуктов!

                                                                        Увы, нет. Вы продемонстрировали что некоторые продукты имеют преимущество в качестве DSL.
                                                                        Но не объяснили, почему эти продукты должны быть визуальными.
                                                                        Почему схема должна быть в виде картинки, а не в виде списка корпусов и списка порядка соединения пинов?
                                                                          0
                                                                          Вам не кажется что ответ очевиден?
                                                                          В кадах схема представлена в виде списка корпусов и порядка соединения пинов — но даже само слово «схема» говорит о генерируемой из этого текста картинке. Мы говорим «нарисуй мне схему» человеку — подразумевая конкретные действия и конкретный результат, а не «напиши мне схему».

                                                                          Когда я впервые познакомился с словом алгоритм и всем из этого вытекающим — я никак не думал, что через каких то 30 лет с этим простым словом будет связанна не «схема алгоритма», а его извращенное описание на 100500 текстовых языках…
                                                                            0
                                                                            Да, но при разработке схемы мы читаем спеку устройства и соединяем пины.
                                                                            Какая разница, таскать провода мышкой, или писать строкой, что с чем должно быть соединено?
                                                                            ИМХО, строкой удобнее и компактнее. А картинку можно и потом сгенерить.

                                                                            что через каких то 30 лет с этим простым словом

                                                                            По прежнему связано то же самое. Не путайте алгоритм и архитектуру приложения. Это вещи разного уровня.
                                                                              0
                                                                              Да, но при разработке схемы мы читаем спеку устройства и соединяем пины.
                                                                              Какая разница, таскать провода мышкой, или писать строкой, что с чем должно быть соединено?

                                                                              Как в вашем языке будут описываться резисторы и конденсаторы имеющие общепринятое в мире графическое изображение которое в школе проходят?!

                                                                              Откуда следует очевидность вашего описания? (общепринятого — из школьного учебника следует).

                                                                              Зачем это ваша никому не нужная сущность?

                                                                              Почему графические элементы схем в любом каде одинаковые — а текст с ними же каждый фигачит кто во что горазд? Какой из диалектов этих текстов вы предлагаете познать для описания связей элементов текстом и почему?
                                                                                0
                                                                                Как в вашем языке будут описываться резисторы и конденсаторы имеющие общепринятое в мире графическое изображение которое в школе проходят?!

                                                                                Так же как в вашем визуальном: использоваться готовые из внешней библиотеки.

                                                                                Откуда следует очевидность вашего описания?

                                                                                Оттуда же, откуда очевидность вашей схемы.

                                                                                Зачем это ваша никому не нужная сущность?

                                                                                Сущность — та же, что и у Вас, только без графического представления.

                                                                                Почему графические элементы схем в любом каде одинаковые — а текст с ними же каждый фигачит кто во что горазд?

                                                                                Потому что никто не озаботился разработать язык для этой задачи. Приходится пользоваться универсальными языками.
                                                                              0
                                                                              совершенно неочевиден. Схема более традиционна для чтения человеком. Но в некоторых случаях и человек может обойтись без схемы, только нет-листом. Причем это уменьшит количество ошибок. ну и даст верифицируемость и моделируемость.
                                                                            0
                                                                            Убедится в доминировании очень не сложно — достаточно в этой области посмотреть на объем исходных текстов написанных живыми людьми и объем транслированных.

                                                                            Вы серьезно предлагаете сравнивать языки по объему исходного кода? В любой технологии один и тот же код можно выразить несколькими способами с разной степенью наглядности и объемом кода.


                                                                            А картинка вполне может быть инструкцией к кодогенератору питона…

                                                                            На самом деле нет. Инструкцией к кодогенератору является модель, у которой есть графическое представление. Помимо графического представления, у нее еще есть какая-то структура данных для сохранения в файл. Вы ведь не можете взять фотографию этой модели и автоматически сгенерировать код по ней.

                                                                              0
                                                                              Вы серьезно предлагаете сравнивать языки по объему исходного кода? В любой технологии один и тот же код можно выразить несколькими способами с разной степенью наглядности и объемом кода.
                                                                              В мечтах адептов писания руками — да… В реальности — 90% написанного руками говнокод. Поэтому лучше выразить одним способом — и способ этот машинный.
                                                                              Вы ведь не можете взять фотографию этой модели и автоматически сгенерировать код по ней.
                                                                              Это лишь вопрос сложности вашего кодогенератора. Вы все время забываете что квадратик может быть развернут.
                                                                                +2
                                                                                В реальности — 90% написанного руками говнокод.

                                                                                99% натыканного мышкой — тоже.
                                                                                  0
                                                                                  99% натыканного мышкой — тоже.

                                                                                  код написаный руками авторов «рисовалки» сильно снижает возможность «рисовальщиков» наговнокодить. Хотя не убирает полностью. Особенно в силу того, что рисовальщики просто не имеют представления о том, что происходит «внутри квадратика». уровень ардуинщиков.
                                                                                    –1
                                                                                    Особенно в силу того, что рисовальщики просто не имеют представления о том, что происходит «внутри квадратика».


                                                                                    Вы путаете обучение детей в детском саду программированию и узких профессионалов в конкретных отраслях с многолетним опытом. Это программисты не понимают, что происходит внутри квадратика — поэтому им надо развернуть, поглядеть, подумать, погуглить, слова какие то знакомые поискать… Переписать все нафиг 10 раз потому что — ой а вот тут не понятно, ой а вчера вышел новый стандарт и так теперь не пишуть и вообще… И естественно наляпать ошибок в реализации не поняв и половину того, что нужно.

                                                                                    А специалист внутренности своих квадратиков с закрытыми глазами если надо нарисует. Вот хотя бы примерчик… Если вы знакомы с предметной областью этого квадратика — вы узнаете в нем абсолютно все! Если нет — даже вряд ли нагуглите, что это…
                                                                                      0
                                                                                      Как бы внутренности ваших квадратиков писал какой-то программист. И он как раз знает что там внутри куда лучше вас.

                                                                                      Кстати, варианта «программист со знанием предметной области» вы принципиально не рассматриваете?
                                                                                        0
                                                                                        Как бы внутренности ваших квадратиков писал какой-то программист. И он как раз знает что там внутри куда лучше вас.

                                                                                        Ну и пусть знает. Главное, что тому, кто этот блок использует не нужно знать специфику внутренностей. Ему главное, чтобы блок выполнял свою функцию, заложенную спецификацией. И чтобы блок выполнял ее безукоризненно.


                                                                                        Кстати, варианта «программист со знанием предметной области» вы принципиально не рассматриваете?

                                                                                        В некоторых отраслях это очень редкие экземпляры.

                                                                                          0
                                                                                          Ну и пусть знает. Главное, [...]

                                                                                          Вот только в комментарии, на который я отвечал, написано прямо противоположное.

                                                                                        +1
                                                                                        Т.е. «квадратики» — это способ сокрытия информации?
                                                                                        0
                                                                                        Понимаете, в от дельной узкой области — наверно это так. Но если говорить в целом… Наш оппонент же говорит про программирование в целом? Почему бы нам тоже не говорить про кодогенерацию с помощью визуальных сред разработки в целом?
                                                                                          0
                                                                                          Наш оппонент же говорит про программирование в целом?
                                                                                          Давайте лучше про «Копание ям в целом» поговорим — это лопатой в целом делают или экскаватором все же в целом? Надо ли уничтожить все лопаты — если экскаватор новее, и более лучше-быстрее копает? Или может все же грядку под клубнику будем копать лопатой а магистральный газопровод — экскаватором? Так вроде?
                                                                                            0
                                                                                            Это нужно спросить у Вас.
                                                                                              0
                                                                                              Я считаю, что никакого «программирования в целом» не существует, как не существует «правильных метдов в целом», «правильных языков в целом», и каких-то «в целом универсальных инструментов»! В то же время быстрее+дешевле+надежнее — объективные измеряемые критерии разработки.

                                                                                              Так же я считаю, что если машина, что то может сделать вместо человека — именно она и должна это делать! Причем в любой области деятельности вообще. И последние 15 лет так или иначе занимаюсь именно этой проблематикой…

                                                                                              Ну а кто думает не так — пусть копает лопатой беломорканал — бо деды копали именно так, а значит в целом сие более универсально и лампово.
                                                                                                0
                                                                                                Как бы не так, Вы утверждаете, что визуальное программирование — это «правильный метод в целом».
                                                                                                Приводите пример из своей области, но в упор не видите, что за её пределами, из-под «мышиных программ» выходит почти исключительно говнокод.

                                                                                                И добавляете, что кто с Вами не согласен «пусть копает лопатой беломорканал».
                                                                                                Короче, по Вам оргвыводы сделаны.
                                                                                                  –3
                                                                                                  Я утверждаю, что это как раз не в целом — а в частном случае правильный метод — в моей области. А что там в вашем «целом» мире говнокода происходит — не интересно.
                                                                                                    +2
                                                                                                    Я утверждаю, что это как раз не в целом — а в частном случае правильный метод — в моей области

                                                                                                    Поздравляю, гражданит, соврамши.

                                                                                                    Напоминаю — это у вас инерция системы! Вы до сих пор пишите, что то там в тексте хотя есть ВП — БОЛЕЕ НОВАЯ и более совершенная технология создания ответственных и сложных программных продуктов!

                                                                                                    Ваши слова? Продолжите отпираться, будто говорили не «в целом»?
                                                                                                      –1
                                                                                                      Ваши слова?
                                                                                                      А где здесь написано про целое? Это описание частного случая! Частный случай состоит в том что надо уволить всех программистов — которых можно заменить автогенерацией и оставить всех, что заменить нельзя! (с перспективой увольнения когда можно будет).

                                                                                                      Мало того конкретно там речь шла про Матлаб. В котором легко пишется некий прикладной уровень но нельзя например написать драйвер! И прикладной уровень, что в матлабе занимает полэкрана самой сути алгоритма — в С занимает 15 экранов никому не понятного говнотекста. Следовательно не нужен.
                                                                                                        +2
                                                                                                        И прикладной уровень, что в матлабе занимает полэкрана самой сути алгоритма — в С занимает 15 экранов никому не понятного говнотекста.

                                                                                                        вам непонятного. в силу вполне понятных причин.
                                                                                                            –1
                                                                                                            MATLAB не подходит для разработки больших программ
                                                                                                            С подходом «возьмем дешевого программера и обучим новым трюкам» — никакой язык не подходит. Но если взять серьезного специалиста по матлабу а код С++ даст матлаб кодер — все прекрасно работает. «Большая программа» которую почему то пишет то ли 1 то ли 2 человека — тоже повеселило.
                                                                                                        0

                                                                                                        Мне любопытно, как вы определяете "говнокод".
                                                                                                        Вы относите к нему фрагмент из комментария?
                                                                                                        Если да, то по каким признакам?

                                                                                                          –2
                                                                                                          Мне любопытно, как вы определяете «говнокод».
                                                                                                          Вы относите к нему фрагмент из комментария?
                                                                                                          Если да, то по каким признакам?
                                                                                                          По простым…
                                                                                                          Есть некий язык, в котором вычисление гиперболического тангенса производится средствами языка — но при этом, он увы не является языком общего назначения.

                                                                                                          Есть некий другой язык — где нет такого, но при этом он общего назначения…

                                                                                                          Есть конкретная задача — вычислить гиперболический танегенс!

                                                                                                          В первом случае это просто пишется в одну команду и не требует ничего кроме знания самого языка!

                                                                                                          Во втором случае, вы тащите для этого какую то неясную сущность, тащите знание этой сущности, тащите знание языка… (в итоге, у вас как правило не остается место в голове на знание предметной области этого вычисления)…

                                                                                                          Естественно, любые лишние сущности = говнокод! Если задача может быть решена без них. Конечно при этом в какой то другой задаче все будет строго наоборот но не в этой…

                                                                                                            0

                                                                                                            Все таки не понятно, что именно вы считаете говнокодом.
                                                                                                            Судя по примеру с гиперболическим тангенсом получается, что говнокод для вас это все, что не предусмотрено стандартной библиотекой.
                                                                                                            Возьмем тогда алгоритм обратного распространения, который вы упоминали выше.
                                                                                                            Он есть в стандартной библиотеке? Нет.
                                                                                                            Чтобы реализовать его вам нужно тащить новую сущность? Да — тот самый серый квадратик.
                                                                                                            Нужно ли специалисту тащить с собой знание этого серого квадратика? Да, судя по вашим словам в комментарии.
                                                                                                            Получается, что алгоритм обратного распространения был примером говнокода на Mathlab.


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


                                                                                                            Я ведь правильно понимаю вашу позицию, что на ВП и Mathlab в частности, говнокода быть не может?

                                                                                                              –1
                                                                                                              Алгоритм написан исключительно средствами языка! Я вам уже длительное время объясняю, что для решения задач, если алгоритм может быть написан средствами языка — то язык это «молоток». А если нет то это «микроскоп». Микроскоп мощнее — им тоже можно забивать гвозди а рассматривать срезы тканей в молоток нельзя.

                                                                                                              Получается, что алгоритм обратного распространения был примером говнокода на Mathlab.

                                                                                                              Если же тот серый квадрат не «лишняя сущность», то алгоритм обратного распространения на питоне тоже не является лишней сущностью, а значит он не говнокод.
                                                                                                              Вы опять упустили самое важное — программа на матлаб не является конечным решением задачи. Она лишь разрабатывается и отлаживается в нем. Конечное решение — микроконтроллер. И говнокодом в данном случае будет любое нагромождение сущностей, которое нельзя поместить в микроконтроллер на любом языке который не транслируется в ПО миконтроллера. Потому что задачу они не решают! т.е. банально не работают.

                                                                                                              Я ведь правильно понимаю вашу позицию, что на ВП и Mathlab в частности, говнокода быть не может?
                                                                                                              На ВП вы можете нарисовать неадекватную объекту говномодель — это будет частный случай говнокода. В матлаб скажем так — говнокод создать несколько более сложновато…
                                                                                                                0
                                                                                                                Вызов из внешней библиотеки — это тоже средство языка.
                                                                                                                  –1
                                                                                                                  Вызов из внешней библиотеки — это тоже средство языка.

                                                                                                                  Это не средство — если размер вашей библиотеки больше чем память программ целевой системы. (numpy 10-к мег в архиве весит). Библиотека с кучей мертвых функций не идентична отдельной реализации строго только нужных команд.
                                                                                                                    +1
                                                                                                                    далеко не все библиотеки тянутся в компилированный код полностью.
                                                                                                                    равно как и использование «нужной команды» тянет в код дополнительные вызовы библиотек.
                                                                                                                    ну а сравнивать с библиотекой интерпретируемого питона — это, уж извините, уже за гранью идиотизма…
                                                                                                                  0
                                                                                                                  если алгоритм может быть написан средствами языка — то язык это «молоток». А если нет то это «микроскоп». Микроскоп мощнее — им тоже можно забивать гвозди а рассматривать срезы тканей в молоток нельзя.

                                                                                                                  Какое то странное противопоставление. Можете привести примеры алгоритмов, которые нельзя выразить средствами тьюринг-полного языка?
                                                                                                                  На питоне (а также на C#, java, lua и многих других) можно при желании вызвать внешнюю нативную библиотеку. Например для реализации шифрования.
                                                                                                                  При этом, то же самое шифрование при желании можно написать средствами этих же языков, хоть это и нецелесообразно. Стал ли питон от этого микроскопом? Перестал ли он быть молотком?


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

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

                                                                                                                    –1
                                                                                                                    Какое то странное противопоставление. Можете привести примеры алгоритмов, которые нельзя выразить средствами тьюринг-полного языка?
                                                                                                                    Тьюринг полнота предполагает «беcконечность ленты». А когда у вас память 8-16-32кб, а библиотека — 10+мб, ваша Тьюринг полнота резко пропадает для любого языка в принципе!
                                                                                0
                                                                                У вас частный случай кастрированного серого квадрата

                                                                                Что вы называете "частный случай"? Обработку массива 4х2?
                                                                                В таком случае, вглядитесь в код. На питоне реализован не частный случай, а общий. Алгоритму можно подать на вход массив любого размера и он обучит сетку.


                                                                                Кстати "серый квадрат" на питоне это только вот этот фрагмент:


                                                                                # backpropagation
                                                                                # 1. Multiply its output delta and input activation 
                                                                                #    to get the gradient of the weight.
                                                                                # 2. Subtract a ratio (percentage) of the gradient from the weight
                                                                                 for i in range(len(self.weights)):
                                                                                    layer = np.atleast_2d(a[i])
                                                                                    delta = np.atleast_2d(deltas[i])
                                                                                    self.weights[i] += learning_rate * layer.T.dot(delta)

                                                                                Для таких алгоритмов пошагово мысли объясняли в конце 80-х

                                                                                Для таких алгоритмов мысли будут пошагово объяснять пока есть студенты, которые их изучают. Этот фрагмент кода — учебный и предназначен для увеличения наглядности и разжевывания материала.


                                                                                сейчас они вот так квадратом рисуются и все сразу ясно

                                                                                Из квадрата мне ничего не ясно. Я могу только верить и надеяться, что серый квадрат с надписью "backpropagation algorithm" это на самом деле алгоритм обратного распространения.


                                                                                Самое главное что вы глядя в квадрат с ходу поняли, что он делает а вот я глядя в ваш код с ходу этого не пойму и никто не поймет — от того вам так важны комментарии в этом коде.

                                                                                Я гуглил по заголовку диаграммы, плюс у меня есть немного знаний по теме. Что конкретно делает ваш квадрат я не знаю и из картинки для меня это не очевидно.


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

                                                                                  –1
                                                                                  Кстати «серый квадрат» на питоне это только вот этот фрагмент:

                                                                                  Нет — поскольку используется сторонняя библиотека адового размера, из которой вы вызываете только вам ясные функции и по сути подменяете ими, а квадратик полностью самодостаточен и не использует ничего. Но самое главное даже не это… А то, что можно сделать с квадратиком вот так:







                                                                                    0
                                                                                    Нет — поскольку используется сторонняя библиотека адового размера, из которой вы вызываете только вам ясные функции и по сути подменяете ими, а квадратик полностью самодостаточен и не использует ничего

                                                                                    Что значит "квадратик самодостаточен"? Вы так говорите, как будто ваш визуальный язык не использует библиотеку компонентов.
                                                                                    Если бы ваш квадратик был самодостаточен, вы бы могли его в любом графическом редакторе нарисовать и запустить. Но это не так и квадратику для работы нужна специальная IDE и сопоставимая библиотека таких квадратиков.


                                                                                    Тот факт, что вы показываете результат кодогенератора из визуальной модели, говорит о том, что ваш визуальный язык вторичен и нужен только для создания текстового исходного кода.


                                                                                    В питоне у вас сразу текстовое представление и совсем не нужно упражняться с рисованием квадратиков мышкой.

                                                                                      –1
                                                                                      Что значит «квадратик самодостаточен»? Вы так говорите, как будто ваш визуальный язык не использует библиотеку компонентов.

                                                                                      Я вам говорю что квадратик ее не использует — следовательно не эквивалентен вашему коду. Поэтому квадратик транслируется автоматом в реализацию самого себя на слабом микроконтроллере, а ваш код дальше вашего зоопарка определенной ветки питона никому не нужен (еще раз посмеялся про якобы конкуренцию питона с матлабом).

                                                                                      Тот факт, что вы показываете результат кодогенератора из визуальной модели, говорит о том, что ваш визуальный язык вторичен и нужен только для создания текстового исходного кода.

                                                                                      О боже — программист увидел что то знакомое. Только вот этот код не нужен! — нужен HEX ДЛЯ AVR! точнее даже нет — hex тоже не нужен — нужно устройство, решающую некую задачу, неким методом, где то в глубине которого находится AVR и в нем зашит некий HEX, который скомпилирован включая некий автоматически сгенерированный говнокод на С, который реализует алгоритм изначально нарисованый и отлаженный ИНЖЕНЕРОМ в виде квадратика и нужно что-б во всем этом процессе как можно меньше людей ерундой страдало ибо сие есть более дешево, многократно более надежно и конечно же практично!

                                                                                      Тот факт, что я создал 80кб исходник на си для целевой системы за 20 секунд нажатием пары кнопок говорит лишь о том что программист вторичен, нафиг не нужен а программы может писать любая домохозяйка! Ничего другого из этого факта никак не вытекает.
                                                                    +1
                                                                    Тяжко было начинать? Не очень, согласитесь?

                                                                    Ошибка выжившего. То что не было тяжело мне или вам вовсе не означает, что не будет тяжело кому-то другому. Это не в защиту визуальных языков, если что.
                                                                      0
                                                                      Люди есть очень разные. С разным стилем мышления. С разной мотивацией. Одним начинать было очень легко. Другим очень сложно. Хелловорлды тоже бывали разными, на разных языках. Преподаватели, которые объясняли основы (хотя бы как набрать текст этого хелловорлда, и как запустить набранное на исполнение) — тоже разные, с разным подходом (на ФЮПе нас начинали учить программированию с исчисления предикатов и правил вывода. сбежало очень много народа. Впрочем, через пару лекций лектору объяснили, что перед ним не студенты второго-третьего курса, а школьники-старшеклассники. Перешли к решению квадратного уранения. На фортране, естественно). Я учил — уже подход был несколько другим. Не столько «математическим», сколько «информационным» (правда, тут между контингентами была большая разница)
                                                                        0
                                                                        О, я бы посмотрел как вы после простого hello world сделали какой-нибудь простой поиск пути в графе дийкстрой на Python, JS, Rust и Prolog. #15minchallenge
                                                                          +1
                                                                          Поисковые алгоритмы трудно назвать простыми.
                                                                            0
                                                                            Не сказать что они и сильно сложные. Хотя, я б и варианты задач послушал.
                                                                          +1
                                                                          Каждой задаче нужен свой инструмент, если можно забить гвоздь микроскопом, это не значит, молоток следует выбросить, более того, молотком даже удобнее и легче будет. После хеллоуворлда придётся ещё интенсивно много часов объяснять всё остальное и если Вы учите программированию, а не особенностям программирования на конкретном языке, человеку придётся запомнить много не нужного, а так как время и способность мозга усвоить какой-то объём информации в единицу времени ограничены, можно не достичь цели в рамках заданного количества занятий.
                                                                          0
                                                                          Ну совсем незнакомых всё меньще — какому-нибудь Турбо Паскалю учат почти во всех школах страны. И тех кто к обучению способен, учать более менее неплохо с учётом квалификации самих учителей.
                                                                      +9
                                                                      Например, в 3Д/2Д редакторах (да и многих других видах приложений), ИМХО, очень неплохо реализована та или иная разновидность визуального программирования. Это разнообразные стеки модификаторов, всякие node editor'ы, управление анимациями кривыми и ключевыми кадрами и т.п. Да, они решают довольно специфические задачи, но я не представляю, как можно обойтись без такого визуального программирования, даже если использовать доступные невизуальные скрипты и плагины.
                                                                      Тем не менее, хочу отметить, что по моим наблюдениям, те же редакторы на базе узлов и связей заметно сложнее для освоения пользователями, чем просто стеки модификаторов, ну а про текстовые скрипты и речи нет. Это логично, что, чем универсальнее и гибче инструмент, тем сложнее он в освоении.
                                                                        +1
                                                                        Мне кажется, что программировать можно только на чем-то Тьюринг-полном. Скажу честно, node editorы видел только во обучащих видео на ютубе, но у меня что-то не сложилось впечатления, что на них можно написать программу. Задать сложный граф зависимостей, с обработкой данных — да. А вот написать программу — нет.
                                                                          +2
                                                                          Не хотелось бы отвлекаться на спор об определениях, в поисках границы между программами, недопрограммами, совсем не программами и т.п. Например, MS Acсess с ранних версий позволял широкому кругу лиц не имеющих представления о «текстовом» программировании очень быстро создавать вполне себе рабочие приложения. А Houdini от SideFX со своей нодовой системой, хоть и не прост в освоении, но настолько гибок и универсален в своей области процедурного моделирования, что я даже не знаю, что в нем нельзя запрограммировать (в рамках предназначения пакета, разумеется).
                                                                          Да, большинство нодовых систем в редакторах графики скорее ближе к функциональному программированию, но разве это плохо? Думаю ощущения от конструирования функции готовыми нодами, а не кодом весьма схожи и приятны программисту, по крайней мере это не зазорнее, чем «вешать на кнопки» короткий текстовый код, вызывающий мощные методы готовых объектов, фреймворков, библиотек и т.п. Ведь именно этим занимается приличная доля вполне себе достойных звания программиста людей? )
                                                                            0
                                                                            Мне кажется, что программировать можно только на чем-то Тьюринг-полном.

                                                                            Конечные алгоритмы и регулярные выражения не являются тьюринг полными. однако специализированные языки для конечных автоматов и, особенно, регулярные выражения используются в IT постоянно.
                                                                          +4
                                                                          Для меня программирование в первую очередь понимание
                                                                          Способ реализации – кто как хочет.
                                                                          Удобна нодовая структура – окей, нравится много печатать – вперед, поизвращаться на пустом месте – есть Brainfuck и иже с ним )
                                                                          На самом деле плевать.
                                                                          Программист – человек понимающий суть процесса, в первую очередь!
                                                                            +6
                                                                            Как непрограмиссту, Blockly очень помог с домашней автоматизацией, без необходимости изучать какой либо программный код.
                                                                            Всеми лапами за блочное программирование, для простых вещей (сценариев, алгоритмов)
                                                                              +4
                                                                              Так и не понял, почему это настолько плохая идея, что достойна отдельной статьи. Даже сам автор говорит о том, что существует некоторые области, где визуальные средства используются весьма интенсивно. Например, можно вспомнить промышленную автоматизацию, где визуальные инструменты достаточно востребованы — LD, FBD, SFC, которые спокойно (как правило) траслируются в IL/ST, что вполне решает проблему контроля версий, упомянутую автором статьи. Визуальные средства программировани имеют богатую историю, они проверены временем и они дают на выходе стабильно функционирующие ТП, уменьшая количество ошибок, которые могут быть допущены в процессе разработки, фактически сводя их только к логическим ошибкам. Но видимо эта сфера очень далека от автора, раз в пример от приводит Scratch.
                                                                                +3
                                                                                >Так и не понял, почему это настолько плохая идея, что достойна отдельной статьи.
                                                                                Потому что плохих примеров применения в других областях к сожалению навалом. Большую часть того, о чем автор пишет, я лично наблюдал многократно.

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

                                                                                >Но видимо эта сфера очень далека от автора, раз в пример от приводит Scratch.
                                                                                Ну я могу привести в пример BPMN и/или Информатику. На которых предлагается программировать бизнес-процессы, или ETL.

                                                                                И пытаясь применять которые вы очень быстро натыкаетесь на ограниченность выразительных средств графического языка. Эта проблема решается как правило просто — добавляется второй (третий, пятый) язык, более обычный — Java, Javascript или что-то еще. На выходе получаем гибрид, который выглядит как результат визуального программирования, но процентов на 90 состоит из кода на более привычном языке. Профита от визуальных средств при этом что-то около нуля, а мешает он знатно.
                                                                                  +5
                                                                                  Кстати, было бы очень интересно понять, почему в промышленной автоматизации визуальные средства так востребованы, чем именно эта область отличается от множества других.

                                                                                  1. Тематика. В автоматике рулит релейка. Все IL/STL, LD и прочие являются их прямым воплощением в контроллере.
                                                                                  2. Относительно низкий порог вхождения. Человек, знающий, как сделать запуск двигателя с самоподхватом на 1 контакторе и 2-х кнопках, сможет эту же схему воплотить и на контроллере (для примера) после изучения самых основ.
                                                                                  3. Лёгкость понимания. Почти везде в автоматике идут дискретные сигналы. И их проще отслеживать визуально в отладке — «ага, вот тут у нас сигнал дальше не идёт, надо посмотреть причину… а вот и она — один из входов в 0!». С аналоговыми величинами абсолютно аналогично — на входе блока X и Y, на выходе имеем Z как результат какой-либо мат. операции. Поищите в интернете ролики об отладке FBD/LAD ;)
                                                                                    +3
                                                                                    Зависит, на самом деле от конкретной задачи и конкретной команды.
                                                                                    Я, например, замечал, что LD и FBD обычно любят и используют родовые КИПовцы и электрики, а молодое поколение, особенно кто имеет опыт программирования под ПК, предпочитают ST, который как раз текстовый и похож на Паскаль.
                                                                                      +1
                                                                                      ST даёт послледовательный алгоритм.
                                                                                      FBD LAD — это условно параллельный порядок выполнения.
                                                                                      Пишут на ST скорее всего какие-нибудь функции обработки сигналов (ПИД регулятор тот же самый, разбор пакетов при организации протоколов связи). Но потом, на верхнем уровне, это всё упаковывается в FBD LAD.
                                                                                      Молодёжь в институтах учит С++ и Джаву по большей части. Может быть по началу (от неопытности или с непривычки) им легче в алгоритмической форме паскаля писать. Я думаю, потом перестроятся.
                                                                                    0
                                                                                    Ну я могу привести в пример BPMN и/или Информатику. На которых предлагается программировать бизнес-процессы, или ETL.

                                                                                    ETL на BPMN? Я знаком с обоими, но вот такая комбинация выглядит странно. Может быть вы имели в виду ETL на DFD?


                                                                                    BPMN это ведь не средство программирования, а средство визуализации. Диаграммки рисуются в первую очередь для людей с целью улучшить понимание предметной области. Потом уже на основе таких диаграммок пишутся BRD на разработку и другие документы. Функционал по воспроизведению диаграмм BPMN в коде и их запуску — фичи конкретных инструментов, а не нотации.

                                                                                      0
                                                                                      Там было написано «или». ETL это информатика (с ее кубиками и стрелочками), а BPMN тут сам по себе.

                                                                                      >Функционал по воспроизведению диаграмм BPMN в коде и их запуску — фичи конкретных инструментов, а не нотации.
                                                                                      Разумеется. Но вполне конкретные вендоры преподносят BPMN как язык для разработки. Забывая при этом упомянуть, что без второго языка эта разработка реально невозможна.

                                                                                  –3
                                                                                  Как уже писали выше, автор видимо очень далёк от реального понимания термина «программирование». Он почему то считает программированием только написание игрушек и сайтов. Но ведь есть огромная сфера промышленного программирования, где основными языками как рази являются визуальные языки, которые проверенны и отработаны уже в течении десятков лет. Причём там решены все вопросы и с контролем версий, и с созданием функциональных блоков конечным пользователем, да и вообще практически все «проблеммы» описанные автором. Я бы очень порекомендовал ему изучить матчасть, и не позорится написанием подобного бреда.
                                                                                    +8
                                                                                    Не путайте, пожалуйста, «промышленную разработку ПО» и «разработку ПО для промышленных систем и автоматики», это все-таки совершенно не тождественные понятия. Вы, как я понял, имеете в виду второе, и да, там действительно в ходе МЭКовские языки, часть из которых являются графическими.
                                                                                    Вот только даже в этом случае с системами контроля версий, например, до недавнего времени вообще все было очень плохо, в средах разработки под PLC, как и SCADA, нормальная интеграция с CVS начала появляться относительно недавно в приемлемом виде, да и сами бинарные и закрытые форматы файлов к их использованию мало располагали.
                                                                                        +3
                                                                                        В Honeywell есть встроенная CVS, если в лицензии была приобретена эта опция ;)
                                                                                        Работает по принципу бэкапа — у каждого контура можно создать версию с описанием, к которой потом можно откатиться.
                                                                                          +5

                                                                                          В TIA Portal новом, как я слышал, тоже нечто подобное есть.
                                                                                          Только вот нормальная CVS — это не только откат к старым версиям, это ещё и наглядное отображение различий между ними и удобное разрешение конфликтов при командной работе. И как раз с этим у граф. языков проблемы: классические системы заточены на текстовые языки, а графический дифф требует соответствующего подхода и поддержки от разработчика среды. Как у Honeywell с этим?

                                                                                          +6

                                                                                          А учитывая, что под промышленной разработкой обычно считается именно работа по какой-нибудь методологии управления проектами, активное использование подходов CI для регулярных билдов, автоматического развертывания и автоматического тестирования, написание кода в строгом соответствии с установленными конвенциям кодирования, разработка читаемого кода и расширяемой архитектуры, основывающихся на общепринятых паттернах проектирования… то, зная, как по факту обстоят дела у многих АСУТПшных разработчиков, можно сказать, что разработка ПО для промышленности часто на самом деле очень далека от промышленного программирования :)

                                                                                          +2
                                                                                          Все эти визуальные языки созданы лишь для того, чтобы ограничить конкурентов. Если бы все программировалось даже на банальном Бейсике, как бы Сименс тот же зарабатывал на сертифицировании специалистов, без которого в той же Германии тебя на пушечный выстрел не подпустят к решению задач на абстрактном контрактном предприятии?
                                                                                          +4
                                                                                          Зачастую в школе основная проблема — скорость набора учениками текста программы. Любые помощники набора или блочные построители нивелируют данный аспект.
                                                                                            +5

                                                                                            Между тем умение быстро печатать, не отвлекаясь на поиск символов на клавиатуре — навык гораздо более общеупотребительный, чем навык программирования.

                                                                                            +1
                                                                                            Всё так, хороший пример: Dynamo BIM — написать там что то более менее сложное, полный трешь
                                                                                              +5
                                                                                              Почти вся CG работает на визуальном программированииimage
                                                                                                +4

                                                                                                В блендере есть аналогичный node editor для шейдеров. Поначалу я думал, что это наглядно и удобно, но потом понял, что реализация сколько-нибудь сложной функции занимает кучу места и оказывается сложной для восприятия. Переиспользовать код тоже неудобно — приходится создавать подграфы и переключаться между ними.


                                                                                                Например, простейшая модель освещения:


                                                                                                color = diffuseColor * (ambient + light * min(0, -dot(lightDir, normal)));

                                                                                                Эта строчка легко читается, быстро печатается и занимает мало места: на экране без проблем поместится ещё 50-100 таких же. Если я захочу добавить зеркальное отражение — допишу ещё одну строчку.
                                                                                                А в нодах — выщеописанная функция уже содержит 5 операций и использует 5 переменных и одну константу. Т.е., в граф придётся добавить ещё 6 новых вершин и потом соединить их друг с другом и с пятью внешними вершинами. Это уже громоздко выглядит, не говоря уж о чём-то реально сложном.

                                                                                                  +4
                                                                                                  Да. Это, что называется, «для гуманитариев».
                                                                                                  Такой инструмент сильно снижает порог входа, но получается это за счёт ОЧЕНЬ сильного опускания потолка возможностей.
                                                                                                  +7

                                                                                                  Автор, похоже, не знаком не только с промышленной автоматизацией, как указали выше, но и не в курсе, что с помощью Model-Based Design — тоже одного из видов визуального программирования, создается софт, который управляет автомобилями, самолетами, садит ракеты SpaceX, обрабатывает информацию с сонаров и радаров и передает гигаваты электричества на тысячи километров. В общем эти товарищи, похоже, выбрали плохую идею.
                                                                                                  Ну а те, кто клепает проекты на Labview, вообще дети, наверное.

                                                                                                    +1

                                                                                                    А вот да. :)

                                                                                                      +1
                                                                                                      На Labview пишут не из-за широты возможностей, а из-за низкого порога вхождения и поддержки инструментов NI. Ну и по старой памяти, потому что тут так заведено, а менять руководство ничего не хочет. Как только задача выходит за рамки — все превращается в закат Солнца вручную. Говорю как человек, который писал на Labview и сейчас по необходимости часто пользуется CVI.
                                                                                                        0
                                                                                                        Это хороший инструмент для непрофессионалов (точнее, профессионалов в других областях)
                                                                                                          +1
                                                                                                          Читайте — низкий порог вхождения. Плюс возможность быстрой интеграции измерительных инструментов. Но снова же — как только проект вырастает, проще все стереть и переписать в нормальной невизуальной среде, чем пытаться что-то понять в этой бесконечной картинке.
                                                                                                            0
                                                                                                            Но снова же — как только проект вырастает, проще все стереть и переписать в нормальной невизуальной среде

                                                                                                            Если бы это автоматически могло происходить…
                                                                                                              0
                                                                                                              Но снова же — как только проект вырастает, проще все стереть и переписать в нормальной невизуальной среде,

                                                                                                              Для многих проектов он не вырастает никогда, а вот наоборот, когда через несколько лет надо бы что-то подправить — Labview дает очень хороший результат

                                                                                                          +2
                                                                                                          В SpaceX вроде бы как C/C++ используют, откуда информация про MBD?
                                                                                                            0
                                                                                                            Садит же.
                                                                                                              0
                                                                                                              На выходе из MBD все тот же родной C/C++ который встраивается в бОльший проект.
                                                                                                              Намного проще посадить теоретиков с PhD в зарегулированную песочницу и встраивать результат их труда в системную обертку нежели пытаться найти людей с теми же скилами в прикладной области да плюс еще умеющих в C/C++.
                                                                                                            +1
                                                                                                            Я сильно извиняюсь — а что нынче есть визуальное программирование?
                                                                                                            LabView?
                                                                                                            C++Builder/Delphi?
                                                                                                            Ничего другого не знаю.
                                                                                                            +2
                                                                                                            Ну так визуально програмирование хорошо устроено в UE4 правда производительность немного хуже чем нативный код, а про всякие програмирования шейдеров это не заменимая вещь.
                                                                                                              +6
                                                                                                              Визуальные языки — почему это хорошая идея

                                                                                                              Языки программирования, такие как С, С++ и прочие, могут быть написаны в блокноте, где фон одним цветом, текст другим, контрастным с первым. Все. Это текстовые языки.
                                                                                                              Но дальше мы визуализируем. Визуализация происходит статически и динамически. Статичная визуализация на самых верхних уровнях затронута у автора статьи. Что же динамичная визуализация и статическая визуализация на нижних уровнях?
                                                                                                              Рассмотрим статическую визуализацию на нижних уровнях. О, чудо — это банальные отступы строк! И заметим, что отступы практически не влияют на работоспособность кода! Да простят меня программисты на Python, у которых отступы могут повлиять на работу их скрипта. Зачем нужны блоки? Они «визуализируют» блоки, выделяя псевдографическими средствами. И этим пользуются уже очень давно и доступно даже в ч/б режиме. Статическая — сохраняется в исходном коде.
                                                                                                              С появлением цветных мониторов появилась динамическая визуализация — подсветка слов разными цветами в зависимости от предназначения. Динамическая, т.к. в исходный текст не сохраняется и каждый раз высчитывается заново. Конечно, некоторые могут пойти на ухищрения, чтобы сохранить разметку в отдельный файл, но мощности современных компьютеров хватает высчитывать это динамически, поэтому большинство не заморачивается.
                                                                                                              И наступают еще два вида визуализации, одна статическая — специальным образом оформленные комментарии вначале процедуры, и одна динамическая — гипертекстовая с переходом к логически связанной области кода (например, объявление процедуры) с вариантом «отобразить в виде всплывающей подсказки».
                                                                                                              И если первые два варианта доступны издавна и нынче доступны даже в продвинутых блокнотах (geany, notepad++ и т.д.), то следующие две стали распространены позже и требуют поддержки на уровне IDE и наличия исходного кода, на который ссылаться (хотя бы заголовочных файлов и/или комментариев/справки).

                                                                                                              Можно даже представить развитие языков в виде линии 1D->2D->3D
                                                                                                              Текст без отступов и переносов — это чистая 1D (одна длинная строка)
                                                                                                              Отступы и переносы — 1,25D (условное деление, дабы 2D отдать полностью визуализированным языкам первого уровня)
                                                                                                              Цвет текста (подсветка синтаксиса) — 1,5D
                                                                                                              Гипертекстовые переходы и подсказки — 1,75D
                                                                                                              Сверх-юникодная поддержка и Drag&Drop — 1,9D
                                                                                                              Графическая автозамена — 2D
                                                                                                              Поддержка слоев — 2,5D
                                                                                                              … и т.д. вплоть до 3D и 4D!

                                                                                                              Вышло много текста, поэтому остальное описание про 1,9D-4D с подробностями под спойлером!
                                                                                                              тут подробности
                                                                                                              Я упомянул такую строчку «Сверх-юникодная поддержка и Drag&Drop — 1,9D». Что это? Это не просто поддержка Юникода, а поддержка каких-то графических элементов. Например, языку Pascal ставят в недостатки длину операторных скобок — begin/end против сишных скобочек. Это вы не видели имена ООП-объектов/интерфейсов у Java, JS, C#, С++ и других ЯП! А ведь вполне можно объект Smile заменить смайликом, объект Tree заменить изображением дерева, auto — автомобиля, и т.д. Даешь эмодзи в программировании! Причем не обязательно делать подобное на уровне ключевых слов (иногда даже вредно), а вот вместо подсветки текста отобразить картинку — вполне можно. У той же OpenGL переменные именуются с префиксами (принадлежность к библиотеке) и суффиксами (тип переменной). Проблема будет в том, что у нас у многих в старом (Legacy) коде не проставлялись ни префиксы, ни суффиксы для переменных, если проект не связан с OpenGL. Но заменой на картинку можно вместо префикса отобразить иконку модуля, а вместо типа — иконку типа, даже если ни префикса, ни суффикса. Многие IDE это уже умеют делать, но покажут только в всплывающей подсказке и только текстом. А есть разработчики, которые с простановкой типов в названии переменной не парятся и сейчас, особенно на скриптовых, где статические типы могут и отсутствовать.
                                                                                                              Но как проставлять значки? На клавиатуре таких символов нет! Ответ: Drag&Drop поможет! Из готовых библиотек. Как значки, так и готовые куски текста — названия переменных, процедуры и т.д. Да хоть скопировать код, который находится чуть выше! Мне часто приходится копировать названия переменных, а так — навел, нажал клавишу мышки и перетащил куда надо, с зажатым Ctrl оно скопировалось. Но чаще привычка срабатывает Ctrl+C и Ctrl+V. Пока что надо предварительно выделять, нет возможности связать два названия переменной с указанием «это одно и то же» вплоть до одновременного редактирования (вместо пункта диалога — «заменить») и прочее.
                                                                                                              Меня интересовала больше возможность заменить текст не на символьные примитивы, а на графические.

                                                                                                              Как видим — сегодня мы пользуемся 1,75D языками, которые ближе к «чисто визуальным», нежели «чисто текстовым». И это считается нормой и является промышленным стандартом для многих серьезных проектов. В одну строчку код нынче не пишут, даже переносов людям стало нехватать! Поэтому и движутся по пути максимальной визуализации языка — отступы, подсветка синтаксиса и т.д.

                                                                                                              А что же Scratch и прочие? Они сейчас больше похожи на ту одежду, которую демонстрируют на показах мод. Выглядят революционно, но в большинстве случаев имеют проблемы с применением в быту или вообще могут быть исключительно демонстрационными материалами (в мире визуальных языков — «для обучения»). Конечно, существуют и те языки, которые также используются в промышленном применении, но все же не стали всеобщим стандартом для большинства программистов.

                                                                                                              Ах, да — визуальные языки еще помогут избавиться от наследия текстовых файлов — «все в один столбик». И если встречается ключевое слово «IF» («ЕСЛИ»), тогда дальше уже будет в 2 столбца, причем правый столбец — код, который записан в ветке «ELSE» («ИНАЧЕ»).
                                                                                                              Но об этом уже на уровне 2D из представленной схемы.

                                                                                                              Я для себя уже расписывал идеи по визуальному языку вплоть до 3D и 4D, но если 3D действительно в трех измерениях, то 4D — скорее маркетинг, нежели доп.измерение, и имеет интересные для меня свойства, которые «сделают этот жестокий мир программирования лучше» и позволят писать даже на машинных языках, т.е. нет необходимости компилировать код :D
                                                                                                              Уточню про написание на машинных языках — 2D подготовит почву, благодаря замене машинного кода на граф.знаки, а вместо компиляции будет 2 файла — машинный код (готовый к исполнению) и файл привязки машинных кодов к граф.символам (нужен для IDE).
                                                                                                              3D — упростит написание сложного кода на порядки, как это произошло с переходом от ассемблера на языки высокого уровня.
                                                                                                              4D — позволит писать код тем, кто до этого не умел. И не обязательно что-то учить или даже знать как работает процессор для написания машинного кода!


                                                                                                              Просматривая комментарий — надо было опубликовать как статью! Но я перфекционист и как-то не привык делиться концептами (описание у меня на уровне концептов), особенно для 3D и 4D, когда тут даже 2D подразумевает революционный подход (либо долгий эволюционный путь). Хотя, может кто-то согласится такое помочь реализовать или подсказать где искать? Тогда ради подсказок можно будет и попытаться поделиться своим видением «Next Gen» ЯП, которые будут визуальные на уровне IDE, но при этом все те же привычные С, Java, JS, C++, C# и любой другой текстовый язык, ассемблер или даже машинный код! Под спойлером я расписывал, но без подробностей и как оно так функционирует.
                                                                                                                +4
                                                                                                                Э-э-э…
                                                                                                                Вы забыли принцип «мухи отдельно, котлеты отдельно».
                                                                                                                Т.е., для обычных ЯП (не визуальных), код и его «визуальное» представление отделены и не зависимы.
                                                                                                                При этом как выглядит код, не сильно важно (кроме отчасти python'а)
                                                                                                                В отличии от визуальных ЯП. Где все смешалось в кучу. Где визуальное представление не отделима от кода программы.
                                                                                                                И да с текстом работать удобнее, чем с пиктаграммами.
                                                                                                                Тупо за счет того, что текст компактнее.

                                                                                                                  +1
                                                                                                                  Тупо за счет того, что текст компактнее.

                                                                                                                  Странно, обычно картинка favicon.ico (иконка сайта) компактнее названия всего сайта. Например, модуль подключения facebook можно обозначить двумя иконками — f (на синем фоне)+вилка (которую в розетку). 2 иконки будут короче целых слов, но могут посоревноваться по длине только с аббревиатурами, у которых есть ограничения по количеству допустимых вариантов — количество букв в алфавите всегда будет меньше количества доступных пиктограмм.
                                                                                                                  Мало того — есть много стандартных иконок, типа «сохранить» (дискета), «открыть» (папка), «создать» (лист с загнутым уголком или зеленый плюсик), «удалить» (красный минус). Соответственно, эти иконки будут заменами даже для слов «save», «open», «create», «delete». Можно набрать ключевое слово, которые позже будет отображаться иначе. Мало того — даже скобки можно представить в виде контейнеров, а это уже визуальщина. И Lisp благодаря этому может избавится от скобочек — в IDE отрисовывать выражение в скобках в виде выражения внутри прямоугольника или иной фигуры. И именно этот язык разбивает ваше утверждение про
                                                                                                                  с текстом работать удобнее, чем с пиктаграммами.


                                                                                                                  Опять же — ориентация на современные системы, в том числе сенсорные экраны, жесты и прочее, на которых с текстом работать уже хуже, чем с пиктограммами. Даже андроид-клавиатура предлагает ввод всяких смайликов. Только legacy клавиатуры до сих пор имеют неизменяемое нанесение букв одного-двух алфавитов с невозможностью динамической смены. На программном уровне клавиатуре все равно что за символы она передает. Она просто передает состояние типа «код нажатой клавиши» и «код клавиш-модификаторов», но никак не «код символа», это уже ОС сопоставляет «код нажатой клавиши» с «кодом символа» и это сопоставление зависит от раскладки клавиатуры, которая может быть любой пиктограмной.

                                                                                                                  И я приводил примеры, когда люди уже работают с пиктограммами — подсветка текста, отступы, переносы, сворачивания процедур и операторных блоков, базовые команды IDE или даже блокнота — везде пиктограммы. Даже Microsoft Word отказался от чисто текстового меню в пользу визуальных пиктограмм.
                                                                                                                  Сейчас в текст нельзя вставить картинку — она будет только в виде hex, base64 или иного варианта кодирования, который не воспринимается человеком как картинка.

                                                                                                                  И последний аргумент: символ — это частный случай пиктограммы из специального набора под названием «алфавит». Отсюда — любой текст — это набор пиктограмм. Отсюда ваше выражение приобретает противоречивый характер в стиле «с символами работать удобнее, чем с символами»
                                                                                                                    0
                                                                                                                    И последний аргумент: символ — это частный случай пиктограммы из специального набора под названием «алфавит». Отсюда — любой текст — это набор пиктограмм. Отсюда ваше выражение приобретает противоречивый характер в стиле «с символами работать удобнее, чем с символами»
                                                                                                                    Пиктогра́мма (от лат. pictus — нарисованный и греч. γράμμα — запись) — знак, отображающий важнейшие узнаваемые черты объекта, предмета или явления, на которые он указывает, чаще всего в схематическом виде.
                                                                                                                    Буква алфавита такими свойствами не обладает, только набор букв формирующий слово целиком.
                                                                                                                      0
                                                                                                                      Буква современного алфавита, причем только для некоторых языков, не обладает свойствами пиктограммы. История развития многих языков на это намекает, те же «Азъ Буки Веде Глаголь...» и последующее сокращение лишних или неполиткорректных сущностей до современного уровня или заимствования от других народов. Возможны позднего придумывания, например, «ё».
                                                                                                                      Также во многих языках существуют ситуации, когда буква может обозначать целое слово. Аббревиатуры
                                                                                                                      Не забываем, что многие народы «перескакивали» целые эпохи развития и могли получить свою письменность относительно недавно, особенно это касается малых народов, не являющимися на момент получения письменности государствообразующим.
                                                                                                                      И еще было упущено иероглифическое написание, когда даже сейчас можно каждой букве подставить свою пиктограмму-иероглиф, что даже так и делается — азбука для детей или шифрованные сообщения (простая замена написания), но особо не распространено среди остальных, т.к. является усложнением написания и влияет на скорость письма. Скорость письма отходит на второй план только при появлении доступного аудио- или иного фиксирующего оборудования, но до этого всю историю развития человечества именно скорость письма была критична, особенно до широкого распространения книгопечатания.
                                                                                                                      Соответственно, в будущем вполне возможен переход на иероглифичные стили письма. На это намекает широкое распространение эмоджи/смайликов, которые даже стало удобно набирать в различных мессенджерах/общалках/смс с поддержкой на уровне ОС (андроид и прочие). Но этому явлению в сверхшироком массовом сегменте буквально два десятилетия — первое десятилетие у каждого свои иероглифы-смайлики, второе — смайлики уже на уровне целых экосистем и операционных систем. Почему выделил только последние два десятилетия? До этого телефоны и компьютеры, как и интернет, не были доступны широкому кругу пользователей, в т.ч. домохозяйкам, обычным работникам, студентам, школьникам и другим не IT-специалистам, которым хочется писать в чате да котиков рассматривать, а не «изучать новое, неопознанное и очень сложное» без онлайн-сервисов, без связи с другими ПК, высокая стоимость этих самых ПК, никакая функциональность телефонов (максимум — телефонная книга в крошечном экране, и то не всегда). И т.д.
                                                                                                                        0
                                                                                                                        1) Иероглифы действительно близки к пиктограммам, но они не являются буквами — это не алфавит, это принципиально другая система письменности. Причем пиктографичны именно иероглифы, но не слоговая азбука в японском (хирагана и катакана) и не корейский фонетический хангыль.
                                                                                                                        2) Смайлики не стоит рассматривать как альтернативу письменности, по сути это аналог жестов (типа рукопожатия, махания рукой) и невербальных эмоций (улыбка, нахмуривание и т.п.) при реальном общении. Полноценно на них никто не общается.
                                                                                                                        3) Абревиатуры — это не буквы алфавита сами по себе, это своего рода слова и они имеют смысл только в виде конкретного набора букв, но не сами буквы по отдельности.
                                                                                                                        4) Есть редкие исключения, когда одна буква может являться целым словом: я (местоимение), и (союз), о! а? (междометия), но сами буквы в составе слова не несут отдельного смысла.
                                                                                                                          +1
                                                                                                                          1. различие достигнуто по причине, о которой я уже упоминал — скорость письма. А также из-за звукопроизношения и необходимости делить на более простые формы-атомы.
                                                                                                                          Проще это демонстрировать на диаграмме Венна, когда по вложенности идут следующие множества:
                                                                                                                          Изображения/фото->рисунки->пиктограммы->иероглифы->базовые элементы->буквы->буквенные модификаторы (точки над ё).
                                                                                                                          Да, по мере вложенности часть информации теряется. И это больше похоже на слои абстракции, т.к. более вложенное множество не может продемонстрировать все достижения предыдущего слоя. Но получаем универсальность.
                                                                                                                          Картину зимнего леса не получится использовать для объяснения принципа работы компьютера. Но зато картина зимнего леса может эффективно заменить текст описания этого зимнего леса.
                                                                                                                          Имеет три параметра — скорость письма, универсальность применения, сложность обучения, сложность написания и информативность. Человечество ориентировалось на первые четыре в ущерб информативности, поэтому и дошли до букв. Тот же значок банана трудно нарисовать черным цветом, отсюда упрощение и сложность обучения иероглифу.

                                                                                                                          2.1) «Гулливер» Джонатана Свифта. Описание общения с помощью предметов. Они не знали про пиктограммы, поэтому таскали с собой целые мешки. А так достаточно одной книги со всеми возможными заменами слов в виде пиктограмм и просто тыкать на нужной странице.
                                                                                                                          2.2) Сейчас некоторые диалоги можно строить с помощью пиктограмм, этим даже пользуются. Например — когда пишут про 18+, используя (отпечаток помады от женских губ), (банан), (клубника) и т.д. IT специалисты пока вынуждены ждать, т.к. пиктограмм Shift, Ctrl, Tab и прочего еще не завезли. Названия клавиш не сильно интересны, а вот всякие faceboot, google и прочие значки могут пригодится.
                                                                                                                          2.3) Язык глухонемых. Извините, зашел с козыря. Мало того, язык глухонемых можно использовать для общения с теми существами, у которых человекопонятная речь в принципе невозможна из-за принципиально другого строения, например — собаки, обезьяны и прочие. Просто вместо жестов применять картинки.

                                                                                                                          3,4) некоторые иероглифы/пиктограммы могут не иметь самостоятельного значения или оно бессмысленно отдельно. Даже для слов встречается — есть слово «ненавидеть», но нет слова «навидеть». В остальном — повторение п.1.

                                                                                                                          5) Смысл букве именно сейчас обрести отдельный смысл?
                                                                                                                          6) Вы отрицаете, что буквы при ныне отсутствующем самостоятельном смысле когда-либо ранее имели отдельный смысл?
                                                                                                                            +1
                                                                                                                            «Значок банана трудно нарисовать черным цветом» — это почему?
                                                                                                                            «собаки понимают язык глухонемых» — это сильное заявление…
                                                                                                                              0
                                                                                                                              «Значок банана трудно нарисовать черным цветом» — это почему?

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

                                                                                                                              «собаки понимают язык глухонемых» — это сильное заявление…

                                                                                                                              Собаки поддаются дрессировке и способны понять 1-2 жеста и больше. Даже десяток вполне смогут. Или вы отрицали, что собаки могут понять до десятка жестов?
                                                                                                                              Я не говорил про всю полноту языка, тут даже люди не способны знать всю полноту родного языка, особенно всякой терминологии, названия инструментов и явлений и редко используемых слов. Максимум — художественную полноту осознают. А перечислить по памяти названия врачебных инструментов (кроме врачей и причастных)? Вряд ли рядовой обыватель справится. Я молчу про диалекты и местные наречия, когда одному и тому же явлению находятся разные слова.
                                                                                                                                0
                                                                                                                                Задачка посложнее — как отличить зеленое яблоко от красного? если оба нарисованы схематично черным цветом.

                                                                                                                                зато вы достаточно хорошо описали их текстом. Заметьте, текстом любого цвета. поэтому текстовое описание — более точное, позволяет выделять существенные признаки вещей.
                                                                                                                                Собаки поддаются дрессировке и способны понять 1-2 жеста и больше
                                                                                                                                — понимание языка сильно отличается от запоминания жестов. Далеко не все слова в языке глухонемых описываются одним-двумя жестами. но немой вполне может одними и теми же жестами обьяснить, высокий или низкий он слышал звук, и высоко или низко прыгнула собака. вы можете выучить собаку в зависимости от жеста прыгать высоко или низко, но этим же жестом-модификатором вы не сможете ее заставить выть выше или ниже, и наоборот. Хотя вы можете заставить собаку запомнить названия медицинских инструментов (типа, «скальпель — гав», «шприц — гавгав»), но классифицировать иглу от шприца и иглу для взятия пункции как «иглы» она не сможет. а человек сможет выбрать иглу для пункции из груды скальпелей, зажимов и тампонов даже если никогда не знал о ее существовании.
                                                                                                                                  0
                                                                                                                                  текстом любого цвета. поэтому текстовое описание — более точное, позволяет выделять существенные признаки вещей.

                                                                                                                                  Во-первых — не любого! Как минимум — не совпадающего с фоном, а желательно вообще контрастным
                                                                                                                                  Во-вторых — позволяет абстрагироваться с потерей информации. Т.е. при описании фото растения вы можете пропустить информацию о том, что это растение болеет (нейросети уже учатся). Также вы не можете описать то, чего не знаете. Например, некоторые не знают что такое штангенциркуль, соответственно — не смогут его опознать.
                                                                                                                                  В-третьих — занимает больше места. Одна иконка размером с 2-3 буквы заменит словосочетание «красное яблоко» (13 букв+спецсимвол пробела)
                                                                                                                                  Еще пример — как мужчина попытайтесь описать название нескольких розовых помад разных оттенков и покажите это описание женщине. Тут большинство мужчин будет бессильно описать разницу между помадами, даже если вы ее заметите. Бессилие растет с ростом количества помад, для 2-3-х единиц могут и кое-как справится.
                                                                                                                                  человек сможет выбрать иглу для пункции из груды скальпелей, зажимов и тампонов даже если никогда не знал о ее существовании.

                                                                                                                                  Нет, не сможет. Если не знал даже очень похожих аналогов. Можете проверить — открыть рабочий набор инструментов перед студенткой гуманитарной специальности и попросить дать гаечный ключ, крестовую отвертку, различные биты для шуруповерта. Вот на словах «любой бит для шуруповерта» даже я засомневался, т.к. знаю про «насадки», но не про «биты», которые синонимы «насадкам», а не которые из IT.
                                                                                                                                  Девушки, которые не от мира IT и специально или случайно не изучавшие, не смогут подать материнскую плату (которая не алименты), оперативную память (а отличить DDR2 от DDR3? DDR4? Или хотя бы ноутбучную DDR от полноразмерной?), процессор (который не системный блок под столом). А про всякие радиодетали — тут даже я буду бессилен, т.к. не всегда могу их различить, даже если видел их ранние версии, т.к. современные могут очень сильно отличаться или быть очень нестандартными в связи с миниатюризацией.
                                                                                                                                  Еще пример с музыкой — тут первично графическое отображение (ноты). Не принято пытаться музыку записывать текстом. И обычный человек не способен описать музыку как она есть, максимум — выразить чувства и какие-то базовые характеристики — интонации, темп и прочее. Только для людей с абсолютным слухом возможно описать музыку «дословно», т.е. буквально каждую ноту.
                                                                                                                                    0
                                                                                                                                    Как минимум — не совпадающего с фоном, а желательно вообще контрастным
                                                                                                                                    — требованияе несовпадения с фооном есть требование выделения сигнала на фоне шума. Текст, кстати, отличается этим от картинок в лучшую сторону.
                                                                                                                                    как вообще у пиктограмм с пмхозщищнстью?
                                                                                                                                    В-третьих — занимает больше места. Одна иконка размером с 2-3 буквы заменит словосочетание «красное яблоко» (13 букв+спецсимвол пробела)
                                                                                                                                    — пожалуйста, нарисуйте всем понятную иконку, обозначающую «зеленое кисло-сладкое яблоко, весом 150 граммов, с плотной сочной мякотью, пролежавшее под деревом несколько дней в начале октября».
                                                                                                                                    как мужчина попытайтесь описать название нескольких розовых помад разных оттенков и покажите это описание женщине.
                                                                                                                                    — колористами прекрасно работают и мужчины. и парфюмерами тоже. Более того, можно не «описывать словами» (аналог вашей «пиктограммы»), а указать конкретный цвет на палитре.
                                                                                                                                    Еще пример с музыкой — тут первично графическое отображение (ноты). Не принято пытаться музыку записывать текстом.
                                                                                                                                    — «не принято» — это не значит, что невозможно (в студенчестве на Корветах вполне записывали в знаковом виде, взаимно однозначно переводимом в стандартную музыкальную нотацию). и более того, само понятие «нота»- это «знак». Т.е современная нотная нотация — это знаковое письмо. аналог формул — но не пиктограмм.
                                                                                                                                    некоторые не знают что такое штангенциркуль, соответственно — не смогут его опознать.
                                                                                                                                    Это ндывается «бинго!». Давно-давно, несколько более 30 лет назад, ко мне в гости пришли одноклассники. на рабочем столе обычный рабочий беспорядок — паяльник, инструменты, детали… И вот девочка, гуманитарий, музыкантка-пианистка, ненавидящая естественные науки, задумчиво смотрит на стол и спрашивает — «это что, паяльник? — да. А это штангенциркуль? — да. Так вот он какой! — в смысле? — Ну, отец с кем-то говорил, сказал, что померил штангенциркулем. Я его никогда не видела, но поняла [тут описание цепочки рассуждений] что это штангенциркуль.» Вот так.
                                                                                                                                      0
                                                                                                                                      С помехозащищенностью — никак. Впрочем, как и у текста. Почерк врачей или jpeg-фото на старый телефон — и текст не разобрать.

                                                                                                                                      зеленое кисло-сладкое яблоко, весом 150 граммов, с плотной сочной мякотью, пролежавшее под деревом несколько дней в начале октября

                                                                                                                                      Решается, но несколькими иконками (кроме цифр и единиц СИ):
                                                                                                                                      (яблоко (зеленый; вкус: лимон, сахар; вес 150г; мякоть: сок, плотный; место: под деревом; срок давности: несколько дней; время года: октябрь)
                                                                                                                                      Теперь каждое из слов можно заменить на свою иконку. Всего было 236 символов (включая пробелы), Русский язык. Можно заменить на 18 иконок + до 6-10 спецсимволов.
                                                                                                                                      Вкус — рисунок губ+языка (на одной иконке)
                                                                                                                                      Сахар — кубики сахара
                                                                                                                                      Вес — Гиря+ перо (на одной иконке)
                                                                                                                                      150г — остается без изменений, т.к. цифры и единицы СИ итак имеют максимальное сжатие, пиктограммами тут можно только увеличить размеры; также цифры общеприняты и не переводятся, кроме некоторых народов.
                                                                                                                                      Мякоть — нож, воткнутый в арбуз
                                                                                                                                      сок — стакан рядом с пакетом (одна иконка)
                                                                                                                                      под деревом — стрелка вниз под кроной иконки дерева; посчитал за две иконки, но по факту тут одна
                                                                                                                                      срок давности — часы и стрелка влево над часами, т.е. «в прошлое»
                                                                                                                                      несколько дней — сдаюсь. Вот тут я не придумал что нарисовать.
                                                                                                                                      Время года: октябрь — тут надо учитывать, что названия месяцев по звучанию — белиберда, т.к. никаких ассоциаций с реальными предметами. Логично, ведь название месяцев по факту — иностранные имена, числительные и прочее. Поэтому проще взять какие-нибудь народные названия, типа тех же украинских, у них «октябрь» = «жовтень». Итого 2 иконки — календарь отрывной + желтый цвет (можно совместить). Падающий лист уже будет «листопад» = «ноябрь»

                                                                                                                                      Итого — не подобрал замену только для «несколько дней».
                                                                                                                                        0
                                                                                                                                        почерк врачей — это отдельная тема. как и почерк вообще. и, имхо, больше имеет отношение к шифрованию, нежели передаче информации.
                                                                                                                                        по «пиктограммам» — вы не смогли обойтись без знаков. Но даже с ними — проведите эксперимент: дайте ваш рисунок нескольким людям, померьте время на расшифровку «мгновенного восприятия образа», и сравните для смеха их понимание вашей пиктографики с тем, что вы пытались изобразить. ну, можете им еще сравнить их версии между собой — тоже весело будет.
                                                                                                                                        я думаю, вывод понятен?
                                                                                                                                0
                                                                                                                                Я думал, в первую очередь, о животных, когда писал этот комментарий.
                                                                                                                                Но сейчас обнаружил и вариант получше:
                                                                                                                                ИИ! Точнее, пиктограммы/знаки для общения с ИИ.

                                                                                                                                Про собак — их вполне обучали даже вождению, например
                                                                                                                                У ИИ с этим некоторые сложности

                                                                                                                                Жаль, что все исследования носят локальный и ограниченный характер. Хотелось бы увидеть обучение в течении нескольких поколений. Правда, не исключено, что при положительном исходе обучения вполне возможно появление «нового разумного вида», даже если интеллект будет на уровне ребенка. И потом общение в интернете вплоть до споров, что когда-то люди считали этот вид не ровней человеку. Тут куча претендентов — дельфины, обезьяны, собаки и другие.
                                                                                                                                Что-то подобное уже было — всего пару столетий назад черные не считались за людей у белых европейцев или белых американцев. А до этого белые ученые пытались доказывать, что черные в принципе не могут разумно мыслить.

                                                                                                                                Согласно научному методу нужно это проверить. Предоставить равные права и возможности (с учетом особенностей строения) и посмотреть на результаты. Причем, стараться ради результата, а не бросая на самотек. Боюсь, результаты могут быть шокирующими и непривычным, особенно если интеллект этих животных превзойдет человеческий или будет сопоставим со взрослыми людьми или подростками.
                                                                                                                                +2
                                                                                                                                Вы интересный собеседник и пишите правильные вещи, с большинством из которых я согласен, но не со всеми.

                                                                                                                                I) Есть два принципиальных типа письменности
                                                                                                                                — Фонети́ческое письмо́ — вид письма, в котором графический знак (графема) привязан к определённому звучанию.
                                                                                                                                — Логографическое — главное отличие логограмм от других письменных систем состоит в том, что графемы напрямую не связаны с произношением.
                                                                                                                                У этих двух систем есть ряд вариаций, но это уже детали.

                                                                                                                                II) Я нигде не нашел детального обоснования того, что фонетическое письмо произошло от логографического, есть очень древние примеры и того и другого типа. Я склонен считать, что это две параллельные ветви письменности.

                                                                                                                                III) Язык глухонемых — это не козырь по следующим причинам:
                                                                                                                                — он очень специфичен и узкозаточен под конкретную задачу, точно также как и другие языки жестов.
                                                                                                                                — мы спорили не о языках, а о системах письменности. Какая письменность у языка глухонемых?

                                                                                                                                6) Вы отрицаете, что буквы при ныне отсутствующем самостоятельном смысле когда-либо ранее имели отдельный смысл?

                                                                                                                                Да, именно так и именно из этого началась наша дискуссия.
                                                                                                                                  +1
                                                                                                                                  Благодарю за понимание! Я стараюсь давать развернутые ответы, а также иногда даю рискованные утверждения, дабы получить критику. С момента первого моего комментария к этой статье (он корневой) благодаря дискуссии я смог и сам, и с помощью других найти много интересной информации. Согласно утверждению «В споре рождается истина».

                                                                                                                                  II) А я склонен, что это не просто параллельные, а одновременные. Т.е. грубо — 50% произошло от первого вида, 50% от другого. А у другого народа другие пропорции в пределах от (0%; 100%) до (100%; 0%). Мало того, в этих пропорциях могут быть поправки, например — третий вид, суррогатный. Когда и произношение, и письмо — заимствованное от более высокоразвитых цивилизаций, например — белые в Африке.

                                                                                                                                  3) А тут небольшой подвох. Сейчас отдельной письменности у глухонемых нет, т.к. они используют принятую в обществе. Но они сами пользуются лишь ограниченным числом жестов, которые можно перевести в пиктограммы и мы получим письменность глухонемых, которую уже можно пользоваться наравне с обычно письменностью или даже вместо. В тех же смс/чате иной раз будет даже полезно. Или в инструкции. Кстати, в некоторых инструкциях действительно заменяют слова на иконки, например в инструкции к пульту управления будут не названия кнопок, а их графические изображения. Зависит от производителя и модели пульта. Возможно и для другой техники.
                                                                                                                                  Отсюда — письменности пока что нет, но в этом направлении можно двигаться, он уже существует и даже немного работоспособен, пусть даже на базовом уровне и перевод в иконки должен быть «не дословным», т.е. как жест в реальности выглядит, а приблизительным или адаптированным для легкости понимания.

                                                                                                                                  6) а я думал, что был иероглиф (который ближе к картинке), потом его расчленили на составные части, которые стали более универсальными, потом слишком сложные части еще раз порезали. И более простые элементы стали письменностью, как та же слоговая азбука в японском (хирагана и катакана). Я не утверждаю, что так появилось 100% букв. Мне для подтверждения хватит 1% от общего алфавита, причем для какого-нибудь одного языка. Тогда автоматически получается признание, что система работает и такое возможно. А дальше лишь установить точную границу в том, сколько именно букв получилось от иероглифов и когда-либо имели самостоятельно значение.

                                                                                                                                  Эх, я сразу же выиграл. «Я» и сейчас имеет самостоятельное значение, а это более, чем 1%. Даже для пиктограмм свойственно утрачивать собственное значение, в зависимости от контекста и модификаторов, например — черта сверху может обозначать инверсию, т.е. было значение «красный», стало «не красный».
                                                                                                                                    0
                                                                                                                                    Кстати, в некоторых инструкциях действительно заменяют слова на иконки, например в инструкции к пульту управления будут не названия кнопок, а их графические изображения.
                                                                                                                                    Тут всё проще: иконки в инструкции позволяют её не переводить и, главное, не разделять модели с разными инструкциями. Сильно упрощает логистику.
                                                                                                                                      0
                                                                                                                                      но, к сожалению, на данный момент чисто графических инструкций очень мало. Видел — у Google и некоторых других была инструкция для онлайн-продукта в стиле — весь экран затемняется и только нужная часть подсвечена. И выполняется в песочнице. Но все равно текст не всегда воспринимается, типа — что происходит? т.к. иногда встречались даже на китайском, язык поменять можно только если закончить инструкцию, но повторно инструкция уже не запустится. Глюки с локалью или с тем приложением (игра на андроид от китайских разработчиков)
                                                                                                                                      0
                                                                                                                                      I) По поводу языка глухонемых.
                                                                                                                                      — Врядли изображения их жестов будут простыми и удобными и легко читаемыми, так как там жесты объемные, а так же еще и масса жестов с движением.
                                                                                                                                      — Интересно было бы услышать мнение человека владеющего и языком глухонемых и речью, насколько вообще этот язык удобен.

                                                                                                                                      II) По поводу пультов, иконок и т.п.
                                                                                                                                      Это все удобно в отдельных узких сферах, и даже там применяется частично, а не заменяет все.
                                                                                                                                      Например есть дорожные знаки — визуально, удобно, понятно. Но, даже там есть еще доп. информационные таблички с текстом, хотя казалось бы, ну сделай знаков больше и откажись от текста вообще. Но ведь не отказываются, потому что это создаст больше путаницы, чем удобства.

                                                                                                                                      III) В целом, я считаю, что есть отдельные задачи, где использование пиктограмм, иконок, смайликов и т.п. визуальных элементов очень удобны, но они удобны именно для узкого подмножества задач, но не формируют полноценный гибкий универсальный язык.
                                                                                                                                      Эх, я сразу же выиграл. «Я» и сейчас имеет самостоятельное значение, а это более, чем 1%.
                                                                                                                                      В даном случае, я думаю просто была фонема означающая личное местоимение я и совпало что есть буква с таким звучанием (в английском тоже совпало, а вот в немецком и французском уже нет).
                                                                                                                                      Если бы это не было случайностью, то скорей всего так было бы во многих языках и для многих местоимений.
                                                                                                                                        0
                                                                                                                                        1) не обязательно копировать именно этот язык. Достаточно факта, что он существует. Для реального текста проще придумать лаконичную адаптацию. Я даже чуть выше дал пример описания
                                                                                                                                        habr.com/company/edison/blog/432334/?reply_to=19476468#comment_19480142

                                                                                                                                        2) тут есть труднокодируемые сочетания: названия городов, улиц и т.д., аббревиатуры, числа, единицы СИ (скорость, масса) и т.п.
                                                                                                                                        100% достигнуть не получится. Но заменять на слова типа «скользко», «ограничение скорости» и прочие — слова декодируются дольше, а сейчас еще и появляются те, кто читают с трудом. Видел одного, который до 11 класса читал по слогам, но сейчас нормально, т.к. научился из-за игровых чатов и субтитров к кинофильмам.

                                                                                                                                        3) настаивал на том, что формируют, получаясь что-то вроде разборчивых иероглифов. 5-6 тыс таких знаков вполне могут дать адекватную замену для многих. А специализированные термины или редкие слова можно оставить текстом.
                                                                                                                                          0
                                                                                                                                          «читающие с трудом» были всегда. (И существовали даже «нечитающие»). начиная от времен «ликбеза», включая вполне вроде бы благополучные советские (например, был знакомец из соседнего двора, читающий в 7 классе (это 1982 год) по слогам. Впрочем, у него были другие качества, благодаря которым он успешно сел на малолетку, а затем спился и умер. Был муж сокурсницы — тоже выпускник советской школы, читавший ребенку сказку тоже по слогам… Надеюсь, вы не считаете, что такие люди крайне необходимы в разработке программ?
                                                                                                                                      0
                                                                                                                                      II) Я нигде не нашел детального обоснования того, что фонетическое письмо произошло от логографического, есть очень древние примеры и того и другого типа. Я склонен считать, что это две параллельные ветви письменности.
                                                                                                                                      Любой логографический язык неизбежно сталкивается с необходимостью фонетической записи тех слов, которые нельзя обозначить картинкой. Например имена в древнем египте.
                                                                                                                                      Как правило — используется первая буква/слог
                                                                                                                                      При «импорте» письменности иноязычным народом остаётся только фонетическая часть. А сами иероглифы упрощаются — ведь они теперь обозначают только звук, сохранять визуальное сходство уже не надо.
                                                                                                                                        0
                                                                                                                                        Любой логографический язык неизбежно сталкивается с необходимостью фонетической записи тех слов, которые нельзя обозначить картинкой.
                                                                                                                                        В Китае так и подбирают по созвучию, но стараются подобрать еще и иероглифы с положительным смыслом.
                                                                                                                                        А в Японском изобрели дополнительную фонетическую запись. Кстати, сейчас посмотрел — она действительна произошла от иероглифов, это удачный пример появления фонетического письма из логографического. Но является ли это общей практикой или редким частным случаем?

                                                                                                                                        При «импорте» письменности иноязычным народом остаётся только фонетическая часть.

                                                                                                                                        Так как в случае китайских иероглифов пример прямо противоположный — они распространялись именно как графическое изображение слова, а вот их произношение в разных языках было совершенно разное. Что объяснимо, так как речь появилась раньше письменности.
                                                                                                                                        Хотя да, в Японии паралельно с этим еще и создали слоговую азбуку упростив иероглифы.
                                                                                                                                          0
                                                                                                                                          В Китае — не было импорта, был навязываемый сверху государственный язык.
                                                                                                                                          А импорт (добровольный) был например в средиземноморье. Сначала финикийцы непонятно у кого, потом от них остальные.
                                                                                                                                          И угадать вполне можно, если присмотреться
                                                                                                                                          А — бык, D — дверь, М — вода(море), О — око, S — крючок, R — голова, W — зубы, Y — рука
                                                                                                                                            0
                                                                                                                                            В Китае — не было импорта, был навязываемый сверху государственный язык.
                                                                                                                                            Я говорю про экспорт китайских иероглифов в соседние регионы в дальнейшем — в Японию, в Корею. И они туда пришли именно как логографическая письменность, на слух их произносили так, как обозначаемое слово произносилось в языке нового региона, а не как в исходном Китайском.
                                                                                                                                              0
                                                                                                                                              Ну там неизвестно как оно было, финикийцы же через торговлю т.е. точно без навязывания.
                                                                                                                                        0
                                                                                                                                        Я нигде не нашел детального обоснования того, что фонетическое письмо произошло от логографического, есть очень древние примеры и того и другого типа.

                                                                                                                                        Зато есть замечательный пример письма, которое является их гибридом: египетские иероглифы. Короткие слова обозначаются логограммами, а длинные — строятся из коротких по принципу ребуса.
                                                                                                                                        +1
                                                                                                                                        Но зато картина зимнего леса может эффективно заменить текст описания этого зимнего леса.

                                                                                                                                        Только ту часть, где даётся описание визуальной информации. А вот как на картине изобразить следующие фразы:
                                                                                                                                        «В лесу раздавался топор дровосека.»
                                                                                                                                        «Смолою и дымом пахнет зимний лес.»
                                                                                                                                          0
                                                                                                                                          как в комиксах. Дополнительная информация дается в виде новых картинок, но с группировкой, что это об одном и том же.
                                                                                                                                            0
                                                                                                                                            То есть вместо точного описания получаем ребус, который разные люди могут понять по разному. А ведь в тексте может ещё присутствовать тактильная информация (бархатистые иголки пихты), временна́я (лишь изредка можно услышать стук дятла), взаимосвязи (ветер содействует естественному возобновлению леса, распространяя пыльцу, семена и плоды древесных пород) и многое другое.
                                                                                                                                              0
                                                                                                                                              Зато в некоторых случаях этот ребус может примерно разгадать не умеющий читать индивидуум… из которого, видимо, должен получаться «визуальный программист»
                                                                                                                                +2
                                                                                                                                Иногда говорят, что одна картинка стоит тысячи слов. Это не совсем так, но… похоже.

                                                                                                                                Посмотрите на картинку нового процессора AMD:
                                                                                                                                Там (в маленьких квадратиках по краям) 64 ядра. А вот та здоровенная хрень посередине — это хаб. Условно — «стрелочки», соединяющие эти ядра с шикой данных и друг другом. И нет — это не кеш.

                                                                                                                                Собственно из этой картинки понятно в чём беда «графических сред программирования».

                                                                                                                                Их бич — не пиктограммы. Они и компактнее текста могут быть.

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

                                                                                                                                Когда задачи усложняются количество стрелочек возрастает — и довольно быстро вы достигаете состояния, где «за деревьями леса не видно».

                                                                                                                                А в тексте — никаких стрелочек нет. Они подразумеваются. Что, с одной стороны, позволяет делать всё компактнее, а с другой — требует обучения, да.
                                                                                                                                  0
                                                                                                                                  Я не видел аргументов, чтобы JMP-инструкции ассемблера (или goto-инструкции ЯП высокого уровня) можно было легко читать. Даже есть название для этого — спагетти-код. Мало того — даже отказ от JMP/GOTO инструкций не исключает появления плохо читаемого кода, который достигается методом «все вместе» без разбиения на процедуры, функции и т.д. А еще есть неявные вызовы, которые расцвели у скриптовых ООП-языков.

                                                                                                                                  Теперь посмотрим на визуальные языки и видим, что им JMP/GOTO-инструкции не запретили, какого-либо обучения не дают и получаем спагетти-код или всякие другие варианты, в которых и похуже может получиться.

                                                                                                                                  И видя, что и в тексте можно поломать и отстрелять себе ноги и все на свете, мы продолжаем ругать визуальные языки. Причем обучение не гарантирует получение знаний, которые позволят писать хороший и качественный код. Это не из-за «самоучителей для чайников», а просто потому, что чем сложнее создаваемая система, тем меньше людей, достигший того же уровня, соответственно — меньшему количеству людей потребуется решение. А сами решения могут быть сопоставимы по сложности с другими сложными системами, разве только на порядок проще, но все равно остаются на несколько порядков сложнее задач из самоучителей.