8 советов для быстрого понимания чужого кода
На Quora матёрые программисты дали тонну советов и техник, которые помогут сориентироваться в базе кода, написанного не вами и не вашей командой.
Такое часто случается с проектами, доставшимися «по наследству» от предыдущих разработчиков. Вам уже нужно писать новые блоки, а в старой базе over 9 000 строк кода. Как быстро освоиться и не утонуть юному падавану?
Самый очевидный совет — найти программиста, который уже знаком с этим кодом, и слёзно попросить его отвечать на все ваши глупые вопросы в течение пары следующих недель. Ещё лучше поговорить с тимлидом проекта и заранее попросить его снизить нагрузку на программиста, который любезно согласится побыть вашим наставником.
Отсюда две линии развития событий:
— Вы нашли себе учителя (если вы работаете в команде)
— Вы не нашли себе учителя (такое может случиться, если вы работаете над опенсорсным проектом)
I. Вариант с менторством. Как облегчить жизнь себе и вашему кунг-фу гуру?
- Попросите наставника объяснить вам целостную структуру кода, его философию и стиль. Погрузитесь в историю проекта, расспросите, почему система именно такая и какой она была ранее. Если в коде используются сторонние фреймворки и библиотеки, составьте их список. Изучите отдельно мануалы и документацию этих сторонних ресурсов, это поможет потом вычленить их из общей массы кода.
- Попросите дать вам простое задание (пофиксить баг, добавить фичу), которое под силу любому новичку.
- Сядьте, успокойтесь, дышите ровно. Старайтесь выполнить задание самостоятельно, но попросите наставника подойти к вам через 15-20 минут. Как правило, за 15 минут можно разобраться почти во всём; если не получается за 15 минут — не хватит и нескольких часов. Поэтому, если вы застряли, прекращайте работу и спросите совета.
- Код-ревью. Отправьте код на ревью наставнику. Получите от него ценные указания о том, какие куски существующего кода можно использовать в конкретной ситуации и как правильно встроить ваши изменения в код.
- Повторите шаги 2-4.
II. Вариант без менторства. Как разобраться во всём самостоятельно и ничего не сломать? (программа на 3 недели)
- Раскройте чертоги разума: постарайтесь охватить всю картину целиком. Определите основные модули и их функциональность. На это обычно требуется 2-3 дня по 6-7 часов. Побродите по модулям, познакомьтесь с ними поближе.
- Зайдите в баг-трекер. Поищите исправленные баги и изучите способы, которыми они исправлялись. По возможности обращайте внимание на те баги, которые исправлялись опытными участниками проекта. Создайте отдельную ветку с кодом, где баг ещё не исправлен; и отдельную с кодом, где баг исправлен. Посмотрите на изменения в файлах и на изменённые куски кода. Обратите внимание на два момента: а) что и как исправляет багфикс; б) почему фикс реализован именно так. На эту работу тоже необходимо потратить 2 дня (проанализировать 2-3 бага).
- Время фиксить самому. Найдите несколько простых багов в баг-трекере и попытайтесь их исправить. Начните с определения модуля, в котором задействован баг. Если вы хорошо поработаете над шагом 1, на это не понадобится много времени. Самое сложное — исправить баг так, чтобы не выбиваться из основных принципов проектирования в данном проекте. Можно попробовать написать пробный фикс, не особо стараясь соответствовать общей структуре проекта, просто чтобы проверить, работает фикс или нет. Если работает, меняйте фикс, уже соблюдая все принятые правила реализации.
- Напишите новую фичу. Если вы разобрались во всех модулях и имеете представление об их работе, написание новой фичи не представит особой сложности. Не сложнее, чем работа с API. Самое сложное — сделать фичу универсальной (чтобы её могли использовать другие).
Так или иначе, в обоих вариантах новичку (даже если вы не новичок в программировании, вы можете быть новичком в этом коде) нужно задать себе четыре глобальных вопроса:
— Что делает этот код?
— Как он это делает?
— Что нужно сделать, чтобы он стал лучше?
— В каком месте это нужно сделать?
Ответы на эти вопросы находятся в самом коде. Если код уже выполнен аккуратно и разбит на чёткие модули и объекты, проблем у вас не возникнет. Пользуйтесь баг-трекером, отладчиком, читайте документацию и не стесняйтесь приступить к исправлению найденных багов.
Перевод написан Люсей Ширшовой.