Искусство программирования?

Источник: the-programmer
the-programmer

 

Искусство программирования?

Я люблю читать статьи о программировании, в которых нет ни строчки кода. Такие статьи отлично развивают "вглубь" и часто дают повод посмотреть на давно устоявшиеся вещи под другим углом. Поэтому, рискуя навлечь на свою и без того чахлую карму гнев определенного среза общественности, я всё же решил опубликовать эту статью, в надежде, что кому-то она даст не только пищу для размышлений, но и поможет по-новому взглянуть на свою деятельность.

Начало


Так сложилось, что на текущем месте работы программисты предоставлены самим себе. То есть, конечно, кодят на благо предприятия, но совершенно бесконтрольно, вплоть до отсутствия банального тестера. ТЗ даже на "тяжелые" программы редко превышает объема в три листа А4 (один из которых - подписи всех причастных).

Звонки по поводу проблем с ПО направляются напрямую программистам. С этого всё и началось.

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

В процессе общения я стал интересоваться взглядами коллег на программирование, после чего посмотрел исходные коды некоторых программ, и всё стало на свои места.

Опус о творческих личностях


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

Дома у подобных людей царит, как правило, бардак творческий беспорядок - от заляпанного краской дивана и обшарпанных стен до страшного вида бытовой техники и посуды.

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

При работе над произведением художник/музыкант обычно начинает с этого самого "вектора зюйд-зюйд-вест" - с определенного настроения, концепции (рожденной внутри или выданной заказчиком, это в данном случае не столь важно). Конечный результат, в большинстве случаев, представляется весьма смутно. Справедливости ради отметим, что это - львиная доля удовольствия от творчества - делать как делается. Это, в сущности, и есть попытка "выразить себя".

Творческие программисты


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

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

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

Мораль сей басни


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

Даже если программисту не выдают грамотно составленное ТЗ - нужно обозначить себе четкое понимание того, что будет в итоге. Если есть вероятность, что написанное придется глубоко модифицировать - тем лучше - задачи написания ПО с вероятностью сильной модификации очень увлекательны и отнюдь не просты.

Ну и в заключении фраза Стива Макконнелла - "Пишите код так, как будто сопровождать его будет склонный к насилию психопат, который знает, где вы живете". А психопат, вероятно, будет очень зол, если сломает голову от отсутствия логики и упорядоченности.


Страница сайта http://test.interface.ru
Оригинал находится по адресу http://test.interface.ru/home.asp?artId=29444