Читаем Кодеры за работой. Размышления о ремесле программиста полностью

Он сопротивлялся, но в конце концов поступал по-моему. Как-то раз ему нужно было взять большой кусок кода, написанный его предшественником, доработать и встроить в новую версию системы. Он потратил на это почти неделю. Программа того парня настолько вывела его из себя, что он пожаловался начальству: мол, в нашем отделе нет достаточно четких стандартов программирования. А тот его предшественник просто программировал так, как считал нужным, в своем стиле. Так мой коллега понял, что бывает, если хороший, серьезный программист уделяет недостаточно внимания ясности. В итоге получилась одна очень длинная программа — не то чтобы спагетти-код, просто слишком много уровней сложности в одном линейном куске. Парень почти достал меня, обратившись к начальству, как я уже говорил, через мою голову и сказав, что наш отдел работает не по стандартам.

Сейбел: Не понимая, что ранее написанные им программы также не удовлетворяли этим стандартам?

Козелл: Нет. Это он понял. Но уже изменил свои взгляды. Это тот тип людей, которые, бросив курить, начинают громче всех жаловаться на других курильщиков. Он стал одним из лучших сотрудников в моем проекте. Он сам придирался ко мне, когда я был недостаточно последователен и допускал компромисс в работе. Мой проект стал для него первым проектом подобного рода. Передача данных, реальное время и все, что с этим связано, было ему в новинку. Но он оказался умницей, быстро во всем разобрался и стал очень хорошим программистом, как я и ожидал. Впоследствии я слышал о нем только самые лучшие отзывы. С ним все получалось. Остальные не любили работать со мной, считая меня слишком властным; не могу понять, почему.

Сейбел: Вы придерживаетесь каких-либо правил относительно количества комментариев?

Козелл: Я не добавляю в свой код слишком много комментариев, так как считаю, что он сам по себе должен быть читабельным и ясно выражать твои алгоритмы и мысли. Пишу комментарии к подпрограммам с кратким описанием того, как они действуют и как к ним обращаться — что делать, когда возникают исключения, какова последовательность аргументов и так далее. Но сам по себе код должен ясно выражать, что ты делаешь с его помощью.

Я добавляю комментарий в код, только если инстинкт говорит мне: «Этот конкретный участок кода, хотя и работает, не совсем ясно показывает, что я хочу сделать». Тогда я пишу: «Этот код сортирует таблицу», если по каким-то важным для меня причинам он не очень похож на стандартный предназначенный для этого код.

Я никогда не был фанатом структурированных программ, где каждая подпрограмма сопровождается 18-строчным комментарием и все аргументы идут в строгом порядке. Я не структурирую свои программы настолько тщательно. Какие-то из моих подпрограмм могут быть длинными, другие — короткими. Меня беспокоит общая структура программы, так сказать, расположение фигурных скобок.

Одна из причин состоит в том, что я смотрю на работу кода в целом, а не его отдельных частей. Так, встретив инстукцию if, я вижу условие. Я мысленно отвечаю на это условие «да» или «нет», и если хочу пропустить тело инстукции if, то код должен позволить мне перейти к тому, что идет после этой инстукции, не особо вникая в синтаксис. То есть я из тех старомодных парней, которые любят, чтобы открывающая и закрывающая скобки стояли одна под другой.

Если все делать по-моему, то код будет выглядеть так: «оператор, открывающая скобка, закрывающая скобка; оператор, открывающая скобка, закрывающая скобка», — это позволяет видеть последовательность операторов. Кроме того, как я уже сказал, если открывающая скобка находится слишком далеко от закрывающей, значит в нее заключено слишком много всего и это надо оттуда убрать. Иногда я убираю даже не очень большие куски кода, заключенные в скобки, если не могу понять, что эта ветка программы делает и зачем в ней весь этот бардак.

Я всегда стараюсь задвинуть бардак подальше, поместить его в такое место программы, где он не мешал бы понимать структуру и работу кода. Мне тяжело воспринимать некоторые стили программирования, не предусматривающие ясную структуру. Интересно, что у автора языка Python мозги, похоже, устроены в точности как у меня. Он разом избавился от проблем с синтаксисом кода, потому что у него не требуется открывать и закрывать скобки. Если ты видишь инстукцию if, то открывающая фигурная скобка неявно будет рядом, как и закрывающая. И если хочешь пойти по коду дальше, то он будет выровнен по этому if. Я работаю с Си и Perl, предполагая, что в Python то же самое: можно нажать кнопку, и вся программа сворачивается так, что видишь только ее общую структуру.

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

Перейти на страницу:

Похожие книги

Адмирал Советского Союза
Адмирал Советского Союза

Николай Герасимович Кузнецов – адмирал Флота Советского Союза, один из тех, кому мы обязаны победой в Великой Отечественной войне. В 1939 г., по личному указанию Сталина, 34-летний Кузнецов был назначен народным комиссаром ВМФ СССР. Во время войны он входил в Ставку Верховного Главнокомандования, оперативно и энергично руководил флотом. За свои выдающиеся заслуги Н.Г. Кузнецов получил высшее воинское звание на флоте и стал Героем Советского Союза.В своей книге Н.Г. Кузнецов рассказывает о своем боевом пути начиная от Гражданской войны в Испании до окончательного разгрома гитлеровской Германии и поражения милитаристской Японии. Оборона Ханко, Либавы, Таллина, Одессы, Севастополя, Москвы, Ленинграда, Сталинграда, крупнейшие операции флотов на Севере, Балтике и Черном море – все это есть в книге легендарного советского адмирала. Кроме того, он вспоминает о своих встречах с высшими государственными, партийными и военными руководителями СССР, рассказывает о методах и стиле работы И.В. Сталина, Г.К. Жукова и многих других известных деятелей своего времени.Воспоминания впервые выходят в полном виде, ранее они никогда не издавались под одной обложкой.

Николай Герасимович Кузнецов

Биографии и Мемуары
100 великих гениев
100 великих гениев

Существует много определений гениальности. Например, Ньютон полагал, что гениальность – это терпение мысли, сосредоточенной в известном направлении. Гёте считал, что отличительная черта гениальности – умение духа распознать, что ему на пользу. Кант говорил, что гениальность – это талант изобретения того, чему нельзя научиться. То есть гению дано открыть нечто неведомое. Автор книги Р.К. Баландин попытался дать свое определение гениальности и составить свой рассказ о наиболее прославленных гениях человечества.Принцип классификации в книге простой – персоналии располагаются по роду занятий (особо выделены универсальные гении). Автор рассматривает достижения великих созидателей, прежде всего, в сфере религии, философии, искусства, литературы и науки, то есть в тех областях духа, где наиболее полно проявились их творческие способности. Раздел «Неведомый гений» призван показать, как много замечательных творцов остаются безымянными и как мало нам известно о них.

Рудольф Константинович Баландин

Биографии и Мемуары
100 великих интриг
100 великих интриг

Нередко политические интриги становятся главными двигателями истории. Заговоры, покушения, провокации, аресты, казни, бунты и военные перевороты – все эти события могут составлять только часть одной, хитро спланированной, интриги, начинавшейся с короткой записки, вовремя произнесенной фразы или многозначительного молчания во время важной беседы царствующих особ и закончившейся грандиозным сломом целой эпохи.Суд над Сократом, заговор Катилины, Цезарь и Клеопатра, интриги Мессалины, мрачная слава Старца Горы, заговор Пацци, Варфоломеевская ночь, убийство Валленштейна, таинственная смерть Людвига Баварского, загадки Нюрнбергского процесса… Об этом и многом другом рассказывает очередная книга серии.

Виктор Николаевич Еремин

Биографии и Мемуары / История / Энциклопедии / Образование и наука / Словари и Энциклопедии