«Пропитка» — дело тонкое. Если ваш босс ждет, когда вы выскажете свое мнение по поводу важного решения, то я не советую вам говорить ему нечто вроде: «Я без понятия, что нам делать в данной ситуации, поэтому я собираюсь сначала пойти позадавать тупые вопросы, затем проверить свои знания на чужаке, записать свои мысли, а потом выбросить их и, наконец, забыть обо всем, что я делал». Любое крупное решение, любая серьезная проблема требует времени и неспешного изучения. Если у вас за плечами многолетний опыт и вы умеете ускоряться, то вы все равно периодически будете сталкиваться с ситуациями, когда правильнее всего не принять решение немедленно, а сесть и подумать.
Во время «пропитки» я даже пальцем не шевелю. Это любимая часть моей работы! Для меня это созидательная деятельность. Проектирование. Разработка стратегии. Избавление от эмоций и невежества, а затем создание оригинального решения, которое продемонстрирует всем, с кем я работаю, что то, чем я занимаюсь, мне небезразлично.
27. Фиксация контекста
Сохранить мысли, благодаря которым ваши идеи стали гениальными
У каждой структуры в компании есть свое Любимое Приложение. На самом деле оно не совсем любимое, это просто приложение, которое они должны использовать, выполняя свою конкретную функцию в организации. Прямо сейчас встаньте, пойдите в малознакомую вам часть здания и пошпионьте там за своими коллегами. Если кто-нибудь остановит вас и спросит, что вы здесь делаете, скажите ему: «Меня послал Рэндс» — и при этом уверенно кивайте. Это всегда работает.
Когда вы будете идти по коридорам этой странной и новой для вас части здания, смотрите на мониторы компьютеров. Какое приложение сидит на всех экранах? Excel? Значит, скорее всего, вы находитесь в расчетном отделе. Повсюду виден Word? Тогда это могут быть юристы или техотдел. Пустой рабочий стол? Отдел продаж!
Самое распространенное приложение в отделе разработки — это текстовый редактор. Это может быть как Окно Терминала, так и самая роскошная в мире интегрированная среда для разработки софта, в любом случае их Любимое Приложение — это редактор кода, но это не их секретное оружие. Их секретное оружие — контроль версий.
Концепция контроля версий проста. Это централизованное сетевое хранилище для всех файлов, из которых состоит проект. Если я хочу отредактировать файл, я использую инструмент (работающий одновременно с моим редактором), который создает местную редактируемую копию этого файла у меня в системе. Я вношу свои изменения, а затем с помощью этого же инструмента сохраняю свой файл в сети. Ну и что в этом особенного?
В этом нет абсолютно ничего особенного, если вы открываете файлы и сохраняете свои изменения без спешки и суеты. Проблемы возникают тогда, когда вы понимаете, что проект, как это часто бывает, превратился в громадную коллекцию файлов, редактируемых целыми командами. Система контроля версий позволяет решить проблему, возникающую, когда два инженера одновременно вносят изменения в один и тот же файл и пытаются их сохранить. Неважно, кто из них открыл файл первым. Когда один из них открывает файл, второй получает предупреждающее сообщение: «Эй, открытый тобой файл был изменен. Ну и что мне теперь делать?» Теперь пользователь должен каким-то образом объединить два файла в один.
Контроль версий действует как регулировщик дорожного движения, и это круто, потому что он помогает нам избегать драки. Но и это еще не самая главная его крутизна. Существует одна вещь, которую я всегда делаю, когда вношу изменения в файл. Я не просто сохраняю свои изменения, а добавляю информацию о том, что именно я изменил:
«Рэндс добавил новую шикарную функцию. Она работает как надо!»
Затем сервер контроля версий копирует мою новую версию файла, помечает ее моим именем и комментариями и увеличивает номер версии.
А теперь давайте проигнорируем то, как важно и полезно, когда каждая конкретная версия файла сохранена в системе и привязана к комментарию, который был добавлен вместе с изменениями. Это большое дело! Это и есть секретное оружие в разработке софта! Мы не только сохраняем каждую версию рабочего файла, мы еще и фиксируем контекст изменений. Контроль версий хранит мысли, благодаря которым ваши идеи стали гениальными.
Если вы сейчас подумали: «Боже мой, нелепая привычка настоящего гика!», если вы не почувствовали момент прозрения, то вспомните о двух продуктах: del.icio.us и Flickr. Оба создали набор функций для фиксации контекста. Под контекстом я подразумеваю метки. Каждый раз, когда кто-нибудь добавляет туда новую ссылку или фотографию, он одновременно может добавить к ним любую метку, какую пожелает. Никаких правил не существует. Просто вбейте пару слов о том, почему эта ссылка или эта фотография кажется вам важной. Это и есть контекст.