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

Крокфорд: Я переупорядочиваю код так, чтобы объявление и инициализация каждой переменной были размещены непосредственно перед ее использованием. Отдельные языки допускают при этом некоторую гибкость, так что это не всегда необходимо. Но мне такая гибкость не нужна.

Сейбел: Значит, вы против предварительного объявления ?

Крокфорд: Да, против. Или, по крайней мере, предварительное объявление должно быть явным. Я против того, чтобы код располагался в произвольном порядке, кроме случаев литературного программирования (literate programming), когда я изменяю порядок кода для его наглядности, отказываясь от привязки к требованиям языка, — и мне это очень нравится. Но без специальных инструментов лучше это не делать.

Сейбел: В одном из интервью вы цитировали Исход, 23:10-11: «Шесть лет засевай землю твою и собирай произведения ее, а в седьмой оставляй ее в покое», — утверждая, что каждый седьмой цикл следует посвятить чистке кода. Какой разумный временной промежуток вы имели в виду?

Крокфорд: Шесть циклов — это циклы между выпусками чего-либо. Если вы выпускаете новую версию ежемесячно, то каждые полгода следует пропускать один цикл выпуска, посвятив это время чистке кода.

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

Крокфорд: Обычно команда знает, когда пора этим заняться. Руководитель проекта понимает это гораздо позже. Работа замедляется, ошибок становится слишком много, код становится слишком большим и медленным, команда не укладывается в сроки. И все знают, почему. Не потому, что все внезапно поглупели или обленились, а потому, что кодовая база больше не отвечает своим задачам.

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

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

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

Сейбел: Под «классической» методикой вы подразумеваете применение классов?

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

Сейбел: Но ведь вы считаете рефакторинг кода полезным, раз советуете посвящать ему каждый седьмой цикл? И тогда необходимость в серьезном переписывании отпадает.

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

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

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

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

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

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

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

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

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

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

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

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

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