Читаю
довольно древнюю книжку Джоэля Сполски. Книжка представляет собой винегрет эссе, собранных Джоэлем по всему блогнету и конференцнету, и снабженных его же вступлениями (за что отдельное спасибо - иначе эту разноголосицу совершенно было бы невозможно воспринимать внутри одной книжной обложки). Впечатления излагаю по ходу, т.к. говорить о "впечатлении" от столь разных материалов все равно не приходится.
Итак, Кен Арнольд пишет о стилях программирования. Под стилем подразумеваются не особенности архитектуры проекта (объекты, их интерфейсы, методы обмена сообщениями между объектами и прочая), а набор надъязыковых синтаксических правил, которому следует каждый конкретный программист, когда пишет код. Вы угадали: каждый конкретный программист имеет свой "стиль", но никакие двое не делают это одинаково. Кен выводит из этого очевидного наблюдения весьма слабую мысль: что нынешняя, берущая свое начало от печатной машинки свобода "стиля" приносит индустрии больше вреда чем пользы, и поэтому
все должны ставить скобки одинаково. На этом статья заканчивается.
Как профессионал, Кен мог бы добавить в конец статьи дисклеймер - мол, это все была шутка и вы все это понимаете; давайте дружно посмеемся над ней и перейдем к следующему эссе. Но, вероятно, счел, что "умные" и так поймут, а для "дураков" нечего и стараться. Собственно, я не согласен уже с этим: эссе пишутся для нас, "дураков". Те, кто такие же умные как Кен, и сами все знают. Что же до расстановки скобок и пробелов, гордо именуемую "стилем"...
Факт, что каждый индивидуум ставит скобки, переносы строк, пробелы и символы табуляции по-своему, не нуждается в доказательстве. Посмотрите имеющиеся в вашей (да-да, вашей, если вы набираете программистов) компании "примеры написанных кандидатами программ" за любой месяц. Зайдите в отдел кадров (или кто у вас приемная комиссия) и попросите взгянуть. За полтора десятка лет работы программистом я еще не встречал двух людей, которые бы расставляли вышеперечисленные элементы оформления кода абсолютно одинаково. Хуже того. Каждый программист искренне убежден в святости своего стиля. То есть, он готов перейти с Бейсика на Пролог, поменять паспорт, фамилию, госстрой, и получать зарплату безналом, но изменить своему спонтанно сложившемуся принципу расстановки скобок - о-о-о, вы посягаете на святое, здесь он готов идти на костер, сверкать глазами, приходить на работу с автоматом и подавать заявление об увольнении. Я не шучу.
Пожалуй, единственный способ создать код проекта, с более или менее единой расстановкой скобок - это показать новоприбывшему работнику в его первый рабочий ЧАС (а еще лучше - на собеседовании) образец кода и в не предполагающем возражений виде сообщить: "Все, кто работает здесь, ставят скобки вот так. Не обсуждается." Использующие Эклипс имеют чуть больше свободы: могут использовать форматтеры (и даже автоматически переформатировать проект КАЖДЫЙ ДЕНЬ в целях воспитания саботажников).
Похожие на эти наблюдения сделаны и у Кена в статье. Но мои выводы из них - прямо противоположные. Различия между тупоконечниками и остроконечниками неистребимы. Если бы это было иначе, все женские платья и автомобили давно были бы одного цвета. Но каждый из нас холит и лелеет свою индивидуальность, выражается ли это в запонках с бриллиантами или в фигурной скобке с новой строки. Почему окружающие протестуют против скобковой формы самовыражения? Аргументов обычно два.
А1. Разнородно отформатированные исходники заметно тяжелее читать.
А2. После переформатирования даже одного файла в нем возникает столько текстовых различий с предыдущей версией, что трудно понять, какова была суть сделанных между версиями 1.14 и 1.15 изменений.
Все! Прочие причины неудовольствия - производные от этих (есть еще и часто-не-высказываемое-вслух понимание, что если в группе может быть только один стиль, и это не-то-к-которому-я-привык, то соседу будет лучше, чем мне, но мы его здесь опустим, почему - будет видно из дальнейшего).
Рассмотрим следующую процедуру. Вот есть некоторый стиль, и мы храним в нем файлы исходников на общем сервере. Теперь я, программист Юджин, открываю файл Ф в своей среде разработки. Если бы среда разработки на лету переформатировала этот файл и показала мне его в моем любимом стиле - я был бы абсолютно счастлив, ВНЕ ЗАВИСИМОСТИ от того, в каком виде скобки лежат на сервере. Больше того, если стиль сервера формализован, ничто не мешает среде перед отправкой файла на сервер отформатировать его обратно. Тем самым, всем остальным будет БЕЗ РАЗНИЦЫ, какой стиль расстановки скобок использую персонально я.
В качестве первого приближения, процесс выглядит так:
шаг 1. Берем запрошенный файл Ф с сервера, помещаем на диск. Если совсем лень форматировать все на лету, делаем локальную копию Ф1.
шаг 2. Программист Юджин меняет текст файла Ф1 как хочет. Получается Ф2.
шаг 3. Сохраняем файл на сервер. Для этого сравниваем Ф2 с Ф1, и изменившиеся места меняем также и в Ф, после чего Ф полностью переформатируем по стандартам сервера.
Разработка плагина к Эклипсу или Идее, реализующая эту схему - это не более двух месяцев труда одного талантивого программиста. Очевидно, что схема не требует никаких заметных дополнительных ресурсов от компьютера, который во время набора кода и по сей день используется как машинка для пробивания перфокарт. Это позволяет оценить мизерабельность проблемы. И мораль, которая с этого дня ложится и на ваши, дорогой читатель, плечи: раз среди миллионов программистов планеты не нашлось (пока) одного героя, чтобы запрограммировать приведенную схему, значит нам действительно более важно потрындеть о расстановке скобок, нежели испытать удобство от их "действительно правильной" расстановки.