Проясняется, что должна захватить компьютерная революция в первую голову -- ее мосты, вокзалы и телеграф. Нужно сделать главных три дела: переход в интерактивность для уточнения намерения (программирование/моделирование как цикл инженерии-исследования, редактирования-понимания), обеспечение интерактивности для уточнения намерения в условиях коллаборации агентов (фрагментов кода, сервисов), аппаратную поддержку новых языковых архитектур.
1. Интерактивное программирование: научиться не только "сплетать" и "оценивать", но и проделывать все это в обратном направлении -- чтобы получить возможность понимать, что именно происходит в программе в исходных терминах, а не в терминах "произошло деление на ноль где-то в пятом килобайте инструкций байт-кода".
Похоже, что "моделирование" -- это просто способ указать на декларативность кода программы.
Похоже, что "метамоделирование" -- это просто способ работы с онтологиями предметной области.
Моделирование тем самым сводится к неимперативному программированию с повышенным вниманием к онтологиям -- вопросу о бытии и существовании, соотношению программного-модельного и реального.
Вопрос о выразительности (краткости записи) и масштабируемости (применимость для самых разных типов объектов) определений самих DSL становится ключевым. Языковые верстаки (универсальные IDE, универсальные моделеры) выходят на первый план.
В связи с интерактивным пониманием программирования-моделирования возможно переопределение основных базовых языковых конструкций так, чтобы эти языки приобрели специальные свойства (появился, например, термин "спредшитный язык", отражающий то, что текст языка пишет не только человек, но и машина).
Рефлексивность -- это тут же, программа сама себя должна уметь читать и писать.
Кстати, я сделал трансляцию в ЖЖ блога Jonathan Edwards
http://alarmingdevelopment.org/ --
alarmingdevelop. Он пишет правильные вещи типа "Java is the new Cobol".
Ключевое слово: "намерение", краткость его выражения, и как от машины добиться его выполнения.
2. "Программирование в большом". -- нужно разбираться, как обходиться с модульностью и распределенными в пространстве и времени вычислениями. Разные люди и программы/модели пишут/синтезируют разные коды, эти коды затем работают асинхронно в разных вычислительных системах, каждый из этих кодов работает в определенном онтологическом окружении (кодирование -- это всегда "встать на плечи гигантов", а не писать с нуля, накоплены ведь огромные объемы моделей, и все они витают в разных облаках) и в концептах (да и терминах тоже) собственной онтологии+метамодели (написаны все эти модули на разных DSL, да еще и разнопарадигмальных). Как сделать так, чтобы весь этот знаниевый и фактический зоопарк был хоть как-то обозреваем, отлаживаем и понимаем -- пока непонятно, но как минимум, программистским и моделирующим сообществом проблема замечена.
SOA, всякие "процессные" BPMN 2.0, семантические вебы и ISO 15926 как раз в эту точку, но этого совершенно недостаточно. Агенты -- тоже сюда, и это магистральное направление.
Ключевое тут слово: "коллаборация" (выполнение намерения в условиях столкновения многих разных намерений разных людей и машин), и как от разных кусков кода (модулей) добиться этих намерений совместного уточнения и реализации.
3. Аппаратная архитектура должна стать другой. Весь вопрос в том, что пока еще непонятно, что именно должна поддержать аппаратная архитектура (до тех пор, пока не решатся проблемы 1. и 2.). До этих пор совершенно все равно, будет там Фон Нейман или Гарвард, и сколько ядер у GPGPU -- если не знаешь, куда плыть, любой ветер не будет тебе попутным. Кстати, моя гипотеза по поводу аппаратуры: будет много-много разных спецпроцессоров для разных типов обработки, соединенных сверхширокими каналами. Как в мозге.