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

Подробное объяснение, подобное этому, предоставляет элементы управления: кнопки, ползунки, перетаскивание, флажки и все те другие элементы GUI (графический интерфейс пользователя), без которых большинство людей может эффективно работать. много тренировок. Под элементами управления, как и в любой программе, есть код: детище поваренной книги и учебника алгебры. Автор работы написал код; вы, активный читатель, манипулируете элементами управления.

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

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

Более яркий пример - видеоигра Infinifactory (которую, кстати, я рекомендую всем, кто любит создавать вещи в Minecraft). В основной игре вы летаете в трехмерной среде, размещая заводские компоненты (например, конвейеры, датчики, толкатели), которые собирают поток сырья в желаемый продукт. Эти компоненты выбираются из визуального меню.

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

Редактор уровней Contrast Portal 2, который представляет собой схематический мультфильм. Хотя редактор уровней не является кодом, он требует совсем другого интерфейса и набора инструментов, чем сама игра. Вход на уровень от первого лица происходит с заметной задержкой. (Честно говоря, строительная механика Infinifactory вполне поддается редактору уровней.)

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

Что общего у видеоигр и интерактивных рисунков? Состояние. Они могут находиться в одном из нескольких состояний и перемещаться между ними либо во времени, либо в результате действий человека (то есть контроля). Контроль второго порядка влияет на состояние состояния. Кнопка не может быть отмечена или снята, если она не существует. Конвейер не может иметь местоположение и ориентацию, если конвейеры запрещены в этой головоломке. На местоположение игрока влияет расположение стен и пола. У файла не может быть индекса в списке файлов, если он не виден этому пользователю. Активный читатель может изменить число и увидеть реакцию системы, но автор должен сначала создать это число и определить его значения по умолчанию, максимальные и минимальные значения. Состояние в зависимости от другого состояния - везде.

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

Тогда есть текстовый редактор vim. (Если вы не знакомы с vim, просто бегите по этому абзацу.) Если вы считаете, что команды нормального режима являются кодом, то они являются кодом второго порядка. dap, удалите весь абзац… кода в этом файле. Поэтому код в моем .vimrc является кодом третьего порядка: это код, который управляет кодом (команды vim), который управляет кодом (в файле). Предполагается, что код, который я редактирую, находится «внизу»; если это сценарий конфигурации или развертывания, слоев может быть больше. И если я использую vim для редактирования моего .vimrc, тогда у меня будет почти цикл, когда старая версия управляет тем, как я редактирую новую.

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

В 1984 году Apple представила первый Macintosh, исходя из того, что компьютеры должны узнавать о людях. Теперь движение Learn to Code говорит, что люди должны узнавать о компьютерах. Я согласен с тем, что создание программного обеспечения расширяет возможности, но для этого нужно много знаний и усилий. Элементы управления второго порядка не предлагают почти всех возможностей кода, но их может сразу же использовать кто угодно. Если программирование похоже на восхождение на гору, то средства управления второго порядка похожи на подъем по лестнице: вы не сможете подняться так высоко, но это выполняется большим количеством людей, часто и безопасно.

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