Наша основная миссия как программистов — создавать революционные системы и постоянно добавлять интересные функции для достижения бизнес-целей. И делаем мы это, в основном, пишем код (конечно, попивая кофе).
Но независимо от того, работаем ли мы в небольшом стартапе, гигантской международной компании или являемся участниками независимых проектов с открытым исходным кодом, всем нам время от времени приходится читать код, написанный другими. У разных людей разные стили кодирования, предпочтения и образ мышления, а также уровень их знаний. Таким образом, сталкиваемся ли мы с чужим кодом, расширяя существующую функцию, исправляя ошибку или просматривая запрос на вытягивание, это может быть запутанным и подавляющим опытом.
В этом посте мы рассмотрим несколько советов, как легко и быстро разобраться с незнакомым кодом.
Совет № 1: Установите четкие намерения
«Дайте мне шесть часов, чтобы срубить дерево, и первые четыре я потрачу на то, чтобы точить топор».
— Авраам Линкольн
Прежде чем вы даже начнете читать какой-либо код, найдите время, чтобы убедиться, что вы будете оставаться сосредоточенным на этом пути. Самый простой способ сделать это — спросить себя: «Что мне нужно понять?»
Во многих случаях у вас не будет точного кода, который вам нужен, и вам придется искать его самостоятельно. Если вы не уверены, что ищете, вы легко можете возиться с кодовой базой и чувствовать себя потерянным. Более того, даже когда вы найдете нужный компонент, его код может быть длинным или сложным. Вы можете обнаружить, что изо всех сил пытаетесь понять, какая часть интересна, а какая не имеет отношения к рассматриваемой проблеме.
Знание того, что вам нужно понять, похоже на наличие путеводной звезды, которая может помочь вам сосредоточиться на том, что важно, и, что еще важнее, игнорировать то, что не важно.
Итак, вы, как настоящий ниндзя, сосредоточились на лазере и нашли именно тот код, который вам нужен. Теперь пришло время познакомиться с кодом. Но как?
Совет №2: Разделяй и властвуй
Не просто читайте код построчно и «выполняйте» его в уме. Вместо этого разберитесь в каждой отдельной его части и объедините все части вместе, чтобы получить полную картину.
Начните умно, просматривая и находя подсказки:
- Определите точку входа
- Обратите внимание на основные классы и функции
- Ищите вызовы других микросервисов или внешних API.
- Посмотрите, узнаете ли вы шаблон проектирования, который используется
Затем просканируйте код в хронологическом порядке или от конца потока к началу. При этом постройте ментальную карту всех ее компонентов и взаимодействий между ними. Может оказаться полезным набросать общую схему этих основных компонентов или записать упрощенный псевдокод, чтобы было легче увидеть общую картину.
Вы, вероятно, обнаружите некоторые компоненты или пути кода, в которые вам на самом деле не нужно копаться, а некоторые другие требуют вашего полного внимания. Важно, чтобы вы оставались верными списку вещей, на которых вам нужно сосредоточиться, чтобы свести к минимуму отвлекающие факторы.
Только после того, как у вас появится общее представление о коде, углубляйтесь. Попутно не стесняйтесь использовать некоторые читы, чтобы получить информацию о коде из внешних источников. Давайте посмотрим на некоторые из них.
Совет № 3: Ищите существующий аналогичный код
Если вы когда-либо посещали Stack Overflow, вы, вероятно, знаете о силе обучения на примерах и, что еще интереснее, копировании и вставке кода. Конечно, вы не всегда можете получить свои решения оттуда, но, возможно, вы можете найти их даже ближе, в кодовой базе вашего собственного проекта.
Поиск существующего аналогичного кода может пролить свет на то, как его использовать, когда использовать и как он взаимодействует с другими компонентами. И вы можете скопировать и вставить этот код с небольшими изменениями.
Простой и эффективный метод поиска такого похожего кода — поиск ключевых слов из кода в кодовой базе (или даже в том же репозитории). Чтение документации также может быть чрезвычайно полезным.
Еще один чит, который вы можете использовать при чтении незнакомого кода, — это чтение мыслей. Позволь мне объяснить…
Совет № 4: проникните в голову автора
Используйте команду git fault для идентификации автора кода. У разных людей действительно разные стили кодирования, но в большинстве случаев стиль кодирования каждого человека довольно постоянен. Со временем вы узнаете образ мыслей своих сверстников и сможете делать соответствующие выводы.
Например, допустим, вы видите проверки данных, которые, как вы подозреваете, являются избыточными. Вы можете обнаружить, что кто-то, кто любит «защитное» кодирование, написал их, так что они, вероятно, там в качестве меры предосторожности. Или автор может быть кем-то, кто обычно спешит и пишет «быстрый и грязный» код, так что вы делаете вывод, что он там по какой-то причине (может быть, даже для исправления ошибки).
Если просто «обвинения git» недостаточно, вы можете поискать более широкий контекст кода. Перейдите к пулл-реквесту или к коммиту, в который был добавлен этот код, прочитайте его описание и посмотрите другие изменения кода, которые были сделаны по тому же поводу.
И помните: если такое исследование не принесет результатов, вы можете просто обратиться за разъяснениями к автору кода.
Конечно, код — это не обычный текст. Он предназначен для того, чтобы бегать и действительно что-то делать. Давайте воспользуемся этим.
Совет № 5: Отладка
Отладка кода позволяет вам точно видеть, что происходит во время выполнения, предоставляя вам полную видимость и контроль над состоянием программы в каждый момент времени.
Хотя использование инструментов отладки IDE часто полезно, иногда достаточно просто наблюдать за вводом и выводом вызовов кода. Например, если вы отлаживаете конечную точку HTTP, посмотрите на вкладку «Сеть» в инструментах отладки браузера. Если вы отлаживаете рабочий процесс производителя, который получает аргументы командной строки и записывает сообщения в очередь, посмотрите на них.

Вы уже прошли долгий путь, но вам может показаться, что как бы вы ни старались понять какой-то фрагмент кода, вы просто не понимаете его. Вот для чего последний совет!
Совет № 6: объясните код утке
«Лучший друг человека — собака. Лучший друг программиста — утка».
— Неизвестно.
Возьмите программную резиновую утку, объясните ей все, что вы уже знаете, и задайте ей все интересующие вас вопросы.
Хотя это звучит глупо, это заставляет вас структурировать то, что вы уже знаете, всесторонне излагать эти знания, объяснять детали и задавать четкие вопросы. Много раз один только этот процесс запускает ваше собственное понимание, когда вы внезапно соединяете точки.
Конечно, вы можете пропустить спорный шаг с просьбой о помощи к марионетке и сразу обратиться к коллеге, сидящему рядом с вами. Но дополнительная ценность здесь заключается в укреплении вашей способности решать сложные проблемы самостоятельно, тем самым повышая вашу самооценку.
Другие варианты этой практики:
- Говорить с собой вслух
- Написать электронное письмо с описанием проблемы (при этом не обязательно отправлять его кому-либо)
- Использование ультимативного чита — ChatGPT (или другого инструмента ИИ)
Подведение итогов
Если вы достигли этой точки, я уверен, что вы увлеченный программист, который стремится стать лучше в том, что вы делаете.
Какая идея вам больше всего импонировала? К какому проекту вы можете применить это? У вас есть другие идеи, как быстро получить контроль над незнакомым кодом? Напишите об этом в комментариях, и вдохновите меня и других читателей.