Почему читать код важнее, чем писать

Шесть ответов на вопрос, который редко задают новички · 29.03.2021

💡 Навык, о котором не пишут в вакансиях

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

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

В художественном произведении поражают идеи, которые заложил в него автор. Пытаясь понять, что он написал и как, вы выходите за границы собственного воображения. С кодом происходит то же самое.

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

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


1Вы перестанете повторять сами себя

Принцип DRY — «не повторяйся» — ввели Энди Хант и Дейв Томас в книге «The Pragmatic Programmer» (Программист-прагматик), выпущенной в 2000 году. Сама идея родилась гораздо раньше.

Повторяемость при написании кода ограничивает развитие знаний: вы раз за разом применяете один и тот же приём, потому что другого не знаете. Спасает как раз чтение чужого кода — оттуда вы забираете новые для себя стратегии.

Разработчики преувеличивают сложность чтения кода по сравнению с написанием. В итоге многие останавливаются на заученных приёмах и не пополняют их запас.

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


2Ваш код станет чище

Здесь замкнутый круг: сложность чтения кода напрямую зависит от того, насколько аккуратно и лаконично он был написан.

Хотите писать код быстро и легко — позаботьтесь о том, чтобы его было легко читать.

Роберт К. Мартин, «Чистый код. Создание, анализ и рефакторинг»

Попробуйте сравнить небрежный код с грамотным — так задача становится нагляднее. Если продумывать, как превратить плохой код в хороший, и прилагать к этому умственное усилие, багаж навыков расширяется.

Чтение чужого кода знакомит и с качественными примерами, которые пригодятся позже. Когда такой код вдруг даёт сбой, вы понимаете, что именно в нём не так. Когда программа написана удачно — видно, какие части всё равно стоит улучшить. Разбирая технику другого программиста, вы постепенно начинаете писать чище и эффективнее сами.


3Улучшится аналитическое мышление

Язык программирования отличается от литературного тем, что он математический: в нём есть функции, присваивания и вычисления. Чтобы понять структуру, нужно именно аналитическое мышление.

Люди с развитой аналитикой любят задавать вопросы и стремятся к новому. Они не стесняются ставить под сомнение даже общепринятое, поэтому понимают: правда меняет облик в зависимости от времени, места и ситуации. Это позволяет принимать решения, подходящие конкретным условиям.

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

Разбор чужого кода развивает этот склад ума напрямую: вы ищете логические объяснения, которые в итоге складываются в понимание того, как работает вся программа.


4Найдутся ответы на сложные вопросы

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

Развитие навыков разработки напрямую зависит от накопленного опыта — своего или чужого. Чтение кода даёт доступ к решениям, которые уже реализовали квалифицированные специалисты.

Люди, чей код вы читаете, раньше вас столкнулись с проблемами, которые вам только предстоят. Их решения остались в коде — по сути, это готовый ответ, к которому не прилагался вопрос.

Многие опытные разработчики проводят немало времени за чтением чужого кода. Стоит брать с них пример.


5Вы научитесь качественнее отлаживать

Обучение происходит тогда, когда мы читаем и смотрим то, с чем раньше не были знакомы. С кодом так же. Что вы будете делать, когда в программе всплывёт ошибка?

Качественный код невозможен без навыка отладки, а навык отладки требует опыта — того самого, который набирается при чтении и изменении чужих программ.

Программирование позволяет размышлять над размышлением, а отладка учит учиться.

Николас Негропонте

6Ускорится анализ исходного кода

Для инженера умение легко читать исходники — часть повседневной работы, а не отдельное упражнение.

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


📋 Что даёт привычка читать код

ПричинаЧто именно вы получаете
Меньше самоповторовНовые стратегии вместо одного заученного приёма
Чище собственный кодНаглядное сравнение небрежного и грамотного решения
Аналитическое мышлениеПривычка искать логическое объяснение, а не принимать на веру
Ответы на сложные вопросыДоступ к решениям тех, кто прошёл эту проблему раньше
Навык отладкиОпыт, который набирается только на чужих ошибках и своих правках
Скорость входа в проектБыстрое понимание незнакомой архитектуры

Заключение

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

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