Skip to content

Latest commit

 

History

History
95 lines (76 loc) · 11.4 KB

chapter-17.md

File metadata and controls

95 lines (76 loc) · 11.4 KB

Глава 17. На плечах гигантов

Как джазовый музыкант, я проводил много времени, слушая музыку. Я не просто слушал фоновую музыку во время чтения или вождения, я действительно СЛЫШАЛ музыку. Если джазовая импровизация — это только восприятие звучания аккордов, то слушание музыки — это источник вдохновения и знания того, что в музыке работает, а что — нет. Это не просто красивые слова, здесь скрывается глубокий смысл.

Огромная история джаза — это невероятный источник знаний для тех, кто достаточно искушён в этом вопросе. Следовательно, прослушивание музыки — это вовсе не пассивное времяпрепровождение. Это прежде всего обучение. Более того, способность понимать то, что ты слышишь — это навык, который можно развивать. Окружающие меня музыканты стараются направленно его улучшать. Например, мы даже проводим специальные вечера прослушивания музыки, когда кучка фанатов джазовой музыки совместно слушают её, а потом обсуждают. Иногда мы играли в «назови этого импровизатора», когда один из нас импровизировал, а остальные старались угадать по стилю воспроизведения имя музыканта, которому могла бы принадлежать эта мелодия.

Конечно, такой подход используется не только в джазе. К примеру, классические музыканты делают то же самое. Так же как писатели и поэты, как скульпторы и художники. Изучение работы мастеров — неотъемлемая часть на пути к мастерству.

Слушая джазовую музыку, мы обсуждали приспособления, которые импровизаторы использовали для придания особенного звучания их композициям. «Ух ты! Ты слышал, как он начал переход в самом конце?» или «Каким необычным способом он играл после битов на мосту». Такие разговоры помогали нам находить и открывать для себя всё новые и новые тонкости, которые позже мы могли использовать в собственных импровизациях.

«Ковыряйте чужой код в поисках озарений»

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

Как другие программисты решают алгоритмические проблемы? Как они используют переменные, функции, имена структур? Если бы я захотел реализовать протокол мгновенного обмена сообщениями Jabber на каком-то новом языке, как было бы лучше это сделать? Какие эффективные способы взаимодействия между UNIX и Windows я могу найти? Ответы на все эти вопросы вы можете найти, изучая существующий код.

«Используйте чужой код для осмысления и переоценки своих способностей»

Ещё более важным, чем поиск решений для отдельных задач программирования, является использование существующего кода для анализа наших собственных способностей и стиля. Так же, как прослушивание записей Джона Колтрейна напоминает мне о том, на какой ступени развития как саксофонист я нахожусь, изучение работы выдающегося разработчика имеет схожий эффект. Читая код, вы можете найти идеи, которые никогда ранее не использовали, о существовании которых даже не задумывались. Почему? Как он выстраивал логику? Чем руководствовался? Используя такой аналитический подход к существующим решениям, можно учиться, исследуя даже плохой код.

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

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

Критически оценивая код, вы начнёте вырабатывать свой собственный вкус, словно как к хорошей музыке или литературе. Многообразие стилей и конструкций будет сначала забавлять, потом удивлять, позже злить и (очень надеюсь!) озадачивать вас. Если вам действительно всё это нужно, то вы найдёте множество различных трюков, которые сделают вас намного более продуктивным в проектировании, а также полностью изменят ваш подход к целому классу задач. Как в искусстве, изучая и анализируя привычки других, вы выработаете свой собственный отличный стиль разработки.

Побочным эффектом изучения существующего кода будет расширение вашего кругозора в области существующих программных решений. Когда у вас возникнет новая проблема, то вы можете вспомнить: «О! Да я видел библиотеку, которая реализует обработку MIME типов вот в том и в этом проектах». И, если лицензия позволяет, вы можете сэкономить себе уйму времени, а вашей компании — кучу денег, используя то, что уже сделано до вас. Это просто невероятно, сколько денег тратится в индустрии программного обеспечения на реализацию очередного «велосипеда» (слово «изобретение» здесь будет слишком громким) всё снова и снова.

Сэр Исаак Ньютон сказал: «Если я видел дальше других, то благодаря тому, что стоял на плечах гигантов». Умные парни, такие как Исаак Ньютон, знают, что очень многому можно научиться от тех, кто был до нас. Будьте, как Исаак.

Действуйте!
  1. Возьмите проект и прочитайте его как книгу. Делайте записи. Выделите хорошее и плохое. Напишите критический отзыв и опубликуйте его. Найдите хотя бы одно ухищрение или схему, которую вы можете использовать оттуда. Найдите хотя бы одну вещь, которую стоит занести в список того, что «не надо делать при разработке программного обеспечения» .

  2. Найдите группу единомышленников и встречайтесь хотя бы раз в месяц. Каждый раз выносите на обсуждение какой-нибудь участок кода размером от 2 до 200 строк. Разбейте его. Обсудите его назначение, определитесь, чем они обоснованы, и обдумайте код, которого там не хватает.

Footnotes

  1. Erich Gamma, Richard Helm, Ralph Johnson, and John Vlissides. Design Patterns: Elements of Reusable Object-Oriented Software. Addison-Wesley, Reading, MA, 1995.