Программирование

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

Человек - программа?

Возможно, программирование стоит интенсивно изучать не только в области software engineering, но и его роль в психологической и социальной сферах. И фразу Бродского "Человек - сумма его поступков" можно интерпретировать как "Человек - это его программа", где программа - совокупность суб-программ, ответственных за отдельно взятые поступки.

Человек не должен себя определять как еврея, русского, итальянца, испанца и т. д. За него это часто делает государство или язык. Человек должен определить себя в более конкретных категориях. Он должен спросить себя: «Кто я? Трус или более-менее не трус? Я добрый человек или я жадный человек? Я честен с женщинами или не очень?. Человек сначала на эти вопросы должен себе внятно ответить и только потом он должен начать себя определять в категориях национальности, культуры, географии, философии, религии и т. д. Потому что все и большие категории очень замутняют самоопределение. Потому что ты думаешь что, если ты читал Гегеля или Бердяева, то ты уже хорош. Это примерно так же, как бороться с советской властью — если ты борешься, то ты уже хорош. Когда есть объективное зло, оно избавляет тебя от самоанализа и ты не думаешь, что ты подонок. … Человек должен быть к себе требователен, если он может. И не прятаться «за»или «в» концепциях. Человек не сумма того, во что он верит, на что он уповает, не сумма своих убеждений. Человек — сумма своих поступков".

Стоит отметить, что цитата Бродского очень подходит и при рассмотрении аспектно-ориентированного подхода в моделировании данных.

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

Программа = данные?

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

Интересно взглянуть на то, как эволюционируют языковые конструкции. Привычные циклы и условия теряют преимущества в сравнении с потоковыми нотациями вроде LINQ. Цикл "for", например, очень плохо реагирует на рост требований (партиционирование, многопоточность и т.п.), поэтому более правильная абстракция данных (например, диапазон или множество для обработки) выглядела бы более выгодно.

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

Не исключено, что в недалёком будущем появится лозунг: "Не пишите программы". Нас будут побуждать описывать ожидаемые состояния, спецификации, постепенно сводя привычные императивные программы к декларативным. В целом, декларативное программирование и может символизировать код как данные.

Что такое код?

Мета-программы?

Работа современных программистов во многом представляет рутину. И это то, с чем призвана бороться сама индустрия software engineering. Пришло время писать мета-программы, которые будут генерировать код на привычных сейчас языках программирования, но выведут скорость и качество разработки на совершенно новый уровень. Эта идея пока находит отражение в DevOps, где масштабы вынуждают прибегать к подобным решениям, но масштаб применения гораздо шире.

И уже на этом этапе можно начать проводить аналогии с человеком, рассматриваемые чуть выше. Мы часто пытаемся держать под контролем конечные действия, от этого серьёзно теряем в решительности и впустую расходуем время. Поэтому считается, что дети развиваются гораздо быстрее, хотя должно быть наоборот, опыт должен с каждым день наращивать преимущества. Конечные действия должны стать практически привычками, выполняемыми молниеносно, которые в свою очередь формируются мета-программами, основанными на знаниях, жизненных принципах и т.п. Практически, поведение основанное на системе ценностей - это как компьютерная программа выстроенная на спецификации (подразумевается Specification-driven approach).

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