Перейти к содержимому
Войти Регистрация

Лучшие способы разобраться в чужом коде

Лучшие способы разобраться в чужом коде

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

Чего не надо делать

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

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

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

Проект — не книга: у него нет начала, и читать его подряд бессмысленно.
Проект — не книга: у него нет начала, и читать его подряд бессмысленно. Фото: markus spiske · CC0.

Топ 6 приёмов

Сначала запустить

до чтения кода, а не после

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

Побочная польза. Процесс запуска сам по себе рассказывает о системе: какие нужны базы, какие внешние сервисы, какие переменные окружения. Это карта зависимостей, полученная бесплатно.

Если не запускается. Это первая задача, и её стоит довести до конца, а заодно дописать инструкцию — она пригодится следующему. Проект, который не поднимается локально, будет мучить вас всё время работы с ним.

  • Даёт контекст, без которого код бессмыслен
  • Показывает реальные зависимости системы
  • Позволяет проверять гипотезы сразу
  • Запуск старого проекта иногда занимает дни
  • Не всё можно поднять локально

первым делом · оценка 9,5

Идти от точки входа за одним сценарием

один путь целиком вместо всего понемногу

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

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

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

  • Даёт цельную картину, а не обрывки
  • Сразу показывает принятые в проекте соглашения
  • Поиск по видимой строке работает почти всегда
  • В системах с очередями и событиями путь рвётся
  • Легко уйти вглубь библиотек и потерять нить

основной приём · оценка 9,4

Отладчик и точки останова вместо чтения

самый недооценённый способ понять код

Поставьте точку останова и посмотрите, что реально приходит в функцию и что она возвращает. Час с отладчиком заменяет день чтения, потому что вы видите факты, а не свои догадки о них.

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

Если отладчик недоступен. Временный вывод значений в лог работает почти так же. Главное — не забыть убрать его перед отправкой изменений.

  • Показывает, как код работает на самом деле
  • Стек вызовов даёт путь бесплатно
  • Снимает ошибочные предположения сразу
  • Настройка отладчика в чужом проекте бывает мучительной
  • Плохо работает с асинхронным кодом

каждый раз · оценка 9,3

Читать историю, а не только код

там лежит ответ на вопрос «зачем это здесь»

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

Типичная находка. Костыль, который выглядит бессмысленным, оказывается обходом ошибки во внешнем сервисе. Убрали бы — сломали бы продакшн через неделю.

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

  • Объясняет решения, которых нет в коде
  • Спасает от удаления нужных костылей
  • Показывает, кого спросить
  • Бесполезно при сообщениях вида «фикс»
  • Массовое переформатирование стирает следы

при непонятном коде · оценка 9,0

Рисовать схему по ходу

потому что в голове это не держится

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

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

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

  • Обнажает пробелы в понимании
  • Освобождает голову для деталей
  • Остаётся полезной для команды
  • Устаревает вместе с кодом
  • Соблазн нарисовать слишком подробно

по ходу дела · оценка 8,8

Тесты как документация

если они есть, начинать стоит с них

Тест показывает, как код задумывался: какие входные данные считаются нормальными, что должно получиться, какие случаи авторы считали важными. Это документация, которая не устаревает, потому что иначе она бы падала.

Самый полезный приём. Сломайте код намеренно и посмотрите, какие тесты упали. Так вы узнаёте, за что отвечает конкретный кусок, быстрее любого чтения.

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

  • Показывает задуманное поведение
  • Не устаревает молча
  • Позволяет менять код без страха
  • Часто их просто нет
  • Плохие тесты вводят в заблуждение

если есть · оценка 8,9

Инфографика: когда применять приём, что он даёт и что требует
Три приёма из шести не зависят от того, в каком состоянии проект вам достался.

Сравнение по главному

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

Первая неделя в новом проекте

День первый. Поднять проект локально. Всё остальное подождёт: без запуска вы читаете вслепую.

День второй. Пройти один сценарий от кнопки до базы данных, попутно рисуя схему.

День третий. Взять маленькую реальную задачу — исправление опечатки, мелкий баг. Ничто не объясняет проект так, как первое доведённое до конца изменение.

Дни четвёртый и пятый. Пройти ещё два-три сценария, задавая вопросы. И записывайте всё, что было неочевидно: через месяц вы это забудете, а следующему новичку пригодится.

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

Частые вопросы

Сколько времени нужно, чтобы освоиться в проекте?

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

Помогает ли ИИ разбираться в чужом коде?

Да, и заметно: объяснить незнакомый кусок, набросать схему модуля, подсказать, где искать. Но проверяйте выводы — модель не знает вашей истории решений и уверенно достраивает недостающее. Как поисковик по смыслу и первый черновик объяснения работает отлично, как источник истины — нет.

Что делать, если код действительно плохой?

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

С чего начать, если документации нет совсем?

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

Итог

Порядок, который работает: запустить, пройти один сценарий целиком, поставить точку останова. Три шага, которые дают больше, чем неделя чтения файлов подряд.

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

0
Оценили 0 читателей

Комментарии

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

Будьте первым, кто ответит автору.