Стэнфорд, кажется у нас проблемы…
На ваш суд скорее статья-вопрос, статья-рассуждение и местами — недоумение. С одной стороны нам презентовали авторитетное мнение Лесли Лэмпорта «Programing Should Be More Than Coding», расставляющее программирование и кодирование в импровизированном табеле о рангах. С оппонирующей стороны — я, не обладающий статусом достаточным для споров с мэтром и легендарным ВУЗом, который он представляет…, но отказать себе в таком удовольствии и риске я не могу. Надеюсь, более опытные товарищи поправят мои огрехи в рассуждениях.
Умом я понимаю, что кодирование в современном мире принято воспринимать как низшую ступень инженерной деятельности, которая на эволюционном графике скорее ближе к шимпанзе, чем к программисту. И, возможно, в этом кроется наша большая ошибка, поскольку код — он как ДНК. Всего четыре нуклеотида, а какая пёстрая биомасса в продуктовой линейке.
Как опытные инженеры, мы — мастера абстракций. Поэтому для нас не составит труда представить условного программиста по имени Лесли Лэмпорт (все имена и совпадения не случайны) и его основной инструмент — машину Тьюринга. Он — мастер своего дела, во многом благодаря железному дао:
- Решить, что именно должна делать программа.
- Определить, как именно она должна выполнять свою задачу.
- Написать соответствующий код.
Последний шаг хоть и кажется ему важным, но явно его недолюбливает и предлагает проигнорировать. И с этим сложно спорить. Двигать указатель по бесконечной ленте машины Тьюринга — тоска смертная.
И вот здесь его гений раскрывается в полной мере. Но за этим процессом, как за шулером с напёрстками, надо следить очень внимательно. Он берет три пункта своей программы и под последний кладёт шарик с кодом. Мы одобрительно киваем и делаем ставки. После чего напёрстки нарочито медленно перемешиваются. Где код?
У нас практически нет сомнений в том, где третий напёрсток, а код оказывается… под напёрстком номер 1. Зеваки в шоке, мистер Лэмпорт тоже выглядит растерянным, но в душе он знает, что смухлевал. И именно в этот момент, когда он незаметно перекатывал шарик с кодом из п.3 в п.1, мне очень хотелось схватить его за рукав.
То, что выглядит как утка, крякает как утка и даже само уверено что утка, скорее всего ей и является. Если ты разработал язык TLA+ для спецификаций, всем своим видом и поведением кричащий, что он — код, он им и является. Тот факт, что ты использовал его на этапе спецификации программы, сиречь п.1 «решения, что именно должна делать программа», ты не избавился от необходимости п.3 «написать соответствующий код».
Давайте интерполируем Лесли на десять лет вперёд, в течение которых он методично использует созданный им TLA+ для написания спецификаций. Я думаю в независимости от того, аналитики мы, архитекторы или инженеры БД, нехотя признаёмся, что становимся чем-то вроде кодера в самом рутинном смысле этого слова. Разные диалекты, разные словари, но тот же рефлекторный аппарат, который со скучающим видом выдает дизайн-паттерны, ER-диаграммы или спецификации в случае с нашим персонажем. И вот, под благовидным пунктом #1 автор тезиса что «кодинг не так важен», прячет этот самый кодинг.
Для иллюстрации я приглашу ещё одного свидетеля, назовём его Джон МакКарти. Никого так не бесит программирование машины Тьюринга как Джона, особенно, когда речь идёт о столь любимых им задачах в области искусственного интеллекта. И во спасение он изобретает новый, декларативный стиль кодирования для описания того, как должна выполняться задача (п.2 списка Лесли). Назовём его условно LISP.
Давайте предположим, что Джон не написал за свою жизнь ни одной программы, что по формуле Лэмпорта ставит его в рейтинге на уровень планктона, хотя к коду он имеет самое прямое отношение. Возникает вопрос, какова его степень недоумения и что он скажет ему при встрече?
Не буду утомлять десятками идентичных примеров, а попробую предложить на суд коллег некоторое резюме. Кодирование — это пульс разработки. Оно присутствует на всех этапах в том или ином виде. Кардиограмма выглядит скучно, но является необходимым индикатором того, что проект жив. Поэтому всё чаще всплывают формулировки *-as-a-Code.
Все мы — кодеры. У нас есть определённый аппарат и правила для этого, просто каждый занимается этим на своём этаже. Не существует каких-либо обоснованных причин, что человек продуцирующий PHP-код в чём-то глупее чем аналитик, создающий executable specifications, а вместе они проигрывают юному хакеру думающему сразу в машинных кодах.
Различие в том, что некоторые из нас увидят что-то, что не заметили другие и добавят ценности к этому процессу. МакКарти — LISP, Лэмпорт — LaTeX и TLA+. А когда перебираешь в руках такие коды как десятичная система счисления, азбука Брайля, радио или смайлики, то не поднимется язык сказать, что «Programing Should Be More Than Coding».
P.S. Может кто-то из посетителей конференции захочет задать поднятые вопросы. Если спикеру и аудитории они покажутся глупыми, то валите всё на меня.
P.P. S. Так сталось, что у меня масса материалов на тему кода и кодирования и если данная тема вызовет интерес, я с охотно поделюсь.