Что я узнал, читая чужой код по вечерам

30.05.2025 · 5 мин

Блокнот и печатная машинка на столе

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

Почему не хватало кода с работы

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

Чтение стороннего кода без задачи — это другое упражнение. Оно ближе к чтению книги ради удовольствия, а не ради конспекта к экзамену.

Что удивило больше всего

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

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

Третье — комментарии в хорошем коде объясняют «почему», а не «что». Строчка // retry три раза, потому что этот конкретный API иногда роняет соединение без видимой причины говорит куда больше, чем // повторяем запрос.

Как я это применяю

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

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