Code review — способ узнать больше
Просто задавай вопросы.
Это был совет, который полностью изменил мой взгляд на код-ревью.
Я начала работать программистом в Pinterest в команде Shopping Partner Experience сразу после окончания колледжа. Я сосредоточился на своем личном обучении, читая документацию и документы по техническому дизайну, чтобы понять системы и проекты моей команды, но мне не хватало уверенности, чтобы оценивать код моих товарищей по команде. Почему senior-инженеры хотят, чтобы junior-ы рецензировали их код? Что, если я скажу что-то совершенно неправильное?
Поначалу я была очень сосредоточена на обучении, но в какой-то момент в первый год я поняла кое-что важное — чтобы перейти на следующий уровень в инженерии, мне нужно было помогать всей команде, а не только себе. Для начала один из моих товарищей по команде порекомендовал мне оценивать код.
Совет был достаточно прост — используй code review как способ узнать больше о фрагменте кода и расширить свои знания о нашей системе в целом. Выяснилось, что проверка кода была для меня идеальным способом продолжить обучение.
С тех пор я узнала, что рецензирование кода для младшего разработчика дает множество преимуществ:
- Изучение кодовой базы
- Создание круга обратной связи
- Владение кодом
Изучение кодовой базы
Помимо чтения большего количества кода и чтения кода других замечательных инженеров, рецензирование кода также дает подсказку о том, к кому обратиться, если у вас есть какие-либо вопросы по данному разделу. С помощью code review вы можете понять, кто хорошо знает эту часть системы и может быть хорошим ресурсом для вас в будущем. В какой-то момент я исследовала ошибку в новой для меня части нашей системы. Я застряла и не знала, как продолжить работу, но поскольку я наблюдала, кто в моей команде работал над этим разделом кода (и кто исправлял ошибки в этой части), я знала, у кого есть знания, чтобы помочь в моем расследовании. Я обратилась к этому инженеру и с его помощью смогла найти основную причину сбоя.
Создание круга обратной связи
Когда я училась в старших классах средней школы, я провела независимое исследование по творческому письму, но побоялась поделиться своими короткими рассказами с учителем. Тогда, вместо того, чтобы попросить показать мою работу, он сначала прислал мне свой рассказ для обратной связи. Это все изменило. Как только я предоставила отзыв, я почувствовала себя совершенно комфортно и отправила ему свою собственную работу. Он стал уязвим в своем обмене информацией, что создало круг обратной связи, в котором я чувствовала доверие и поддержку.
Точно так же code review укрепляет доверие, когда вы даете и получаете обратную связь от товарищей по команде. После того, как вы дадите отзыв своим товарищам по команде через проверку кода, вы будете более открыты для получения отзывов и выслушивания их идей, когда они возражают против части вашего кода.
Владение кодом
Одна из основных ценностей Pinterest — быть владельцем, а рецензирование кода помогает взять на себя ответственность за кодовую базу команды. Участие в проверке кода ускоряет процесс проверки кода в команде, распределяет вес проверок и дает вам новую перспективу для улучшения кодовой базы.
Проверка кода
Вы думаете: «Хорошо, я понял. Код-ревью звучит здорово, но как мне это сделать?»
Вот три способа, с помощью которых я развила свою способность к проверке кода в качестве junior-разработчика:
- Задавайте вопросы
- Калибруйте обратную связь
- Подражайте другим
Задавайте вопросы
Задавать вопросы во время проверки кода — один из лучших советов, которые я получила как junior-разработчик. Как только я углубилась в то, чего не знала, и стала задавать вопросы по пулл-реквестам моих коллег, я так много узнала о наших системах! Теперь я чувствую себя комфортно, просматривая код практически в любом месте.
Задавать вопросы во время проверки кода — отличная стратегия не только для junior-инженеров, но и для новых членов команды, осваивающих кодовую базу. Например, вы можете спросить, что делает конкретная часть системы, почему они добавили эту часть логики в этот файл, а не в другом месте, или что они имели в виду под конкретным комментарием. Если вам что-то непонятно, то, наверное, не всем понятно. Таким образом, задавая вопросы, вы можете помочь своим товарищам по команде понять, какие пробелы в знаниях могут существовать у новичка в кодовой базе. Ваши товарищи по команде смогут написать четкие имена переменных, изменить структуру функций или добавить некоторые комментарии к коду, чтобы помочь кому-то, у кого практически нет контекста, сразу же перейти к коду.
Калибруйте обратную связь
В конце концов, у вас будут конкретные вещи (такие как стиль кода, масштабируемость или скорость), которые много значат для вас при ревью частей кода, особенно если кто-то занимается разработкой в области, которой вы владеете. Но когда вы новичок, полезно сначала определить, что волнует членов вашей команды, чтобы наладить отношения и получить возможность просматривать код, которым они владеют. Есть ли у вашей команды рекомендации по коду, на которые вы можете ссылаться при просмотре кода других людей? Любит ли конкретный инженер inline функции и был бы он признателен за вашу идею написать часть его кода в виде inline кода?
В моей команде нас волнует, какие шаги вы предприняли для тестирования своего кода, особенно сквозного тестирования. Я часто ловлю себя на том, что задаю вопросы о том, как кто-то тестировал свой код в code review. Это не только гарантирует, что они сами протестируют свой код до того, как он проявится, но также учит меня новым способам тщательного тестирования моих изменений.
Предоставление обратной связи вашей команде строит позитивные отношения. Если вашу команду не волнуют опечатки или комментарии к коду, не просите их исправить опечатку или добавить комментарий к коду — если только эта опечатка не обращена к пользователю и, следовательно, не критична! Это сделает их менее восприимчивыми к вашим предложениям (по их коду, техническому проекту или другим аспектам ваших рабочих отношений) в будущем. Люди восприимчивы к обратной связи, которая она им небезразлична, поэтому работайте над тем, чтобы давать индивидуальные рекомендации каждому человеку. Как только вы заслужите доверие и уважение своей команды, непременно дайте отзыв о том, что для вас важно.
Подражайте другим
Еще один способ сделать рецензирование кода более комфортным — определить кого-то в вашей команде, кто хорошо рецензирует код, и посмотреть, что они делают. Я смотрю на senior-инженеров в моей команде и наблюдаю за тем, всегда ли они проверяют модульные тесты, комментарии к коду, соглашения об именах и т.д. Если они просят о значительных изменениях, как они просят об этом? Если вы видите «синхронизировано offline с @тем-то», а затем большой рефакторинг, это показывает, что для более серьезной критики ваши товарищи по команде могут предпочесть сообщить об этом и поговорить лично. Многие схемы обратной связи, выходящие за рамки code review, предлагают хвалить человека перед всеми и давать конструктивную обратную связь лично, так что ваша команда может предпочесть именно это.
Наблюдая за тем, как ваши коллеги проверяют код, вы можете узнать, на что следует обращать внимание при написании кода. Если вы видите, что кто-то постоянно просит больше модульных тестов, вы можете сами улучшить свой код в первый раз тестовым покрытием, прежде чем отправлять его на проверку. Или, если вы беспокоитесь, что упустили какой-то способ лучше всего протестировать свой код, вовлеките этого человека в свой круг обратной связи, заблаговременно попросив у него рекомендации. Опирайтесь на сильные стороны своих товарищей по команде.
Заключение
Я надеюсь, что эти предложения помогут вам на вашем пути инженера и придадут вам уверенности при проверке кода. Как только я научилась рецензировать код, я смогла читать и писать код во всех наших репозиториях. В конечном итоге это помогло мне перерасти свою должность junior-инженера и участвовать в проектах, в которых участвовало несколько команд. Если вы новичок в код-ревью, попробуйте завтра задать вопрос о чьем-то коде. Даже если это просто «офлайновое» сообщение, а не их код-ревью, оно может начать диалог и помочь вам лучше узнать своих товарищей по команде и свою кодовую базу!