Хороший обзор кода — один из самых недооцененных навыков, которыми может обладать Data Scientist. В этом блоге я поделюсь своим 3 контрольным списком проверки кода, особенно для R Code. В нашей команде по науке о данных мы регулярно проверяем код, чтобы убедиться, что он соответствует стандартам, которым он должен быть. По моему мнению, три основных элемента, упомянутых в этом блоге, должны быть включены в любой обзор кода R.

Одной из самых больших ловушек проверки кода является предвзятость разработчиков. Цель проверки кода — создать лучший код, а не код, который вам как разработчику нравится больше всего. Я не могу утверждать, что этот блог полностью очищен от предвзятости разработчиков, она есть у всех. Для меня это главная причина, по которой я так не люблю код-ревью. Я хотел написать код, который мне нравится больше всего. Я рассуждал так: если это работает, то какая разница, как это работает. За годы, пока члены нашей команды приходят и уходят, я узнал, что может добавить код-ревью. Используя передовой опыт, мы разрабатываем наш код так, чтобы он был лучше понятен и прост в обслуживании. Во всяком случае, вот мой контрольный список проверки кода Top 3.

Контрольный список R Code Review: 1. Вспомогательные функции

Вспомогательные функции, без сомнения, являются моим номером 1 в любом контрольном списке проверки кода. Не будет преуменьшением сказать, что каждый цикл for, когда-либо написанный на языке R, должен быть заменен вспомогательной функцией. Когда я просматриваю чужой код, это первое сканирование, которое я делаю. По своей сути R — это функциональный язык программирования, и это должно многое сказать о том, почему мы должны сосредоточить внимание на этом аспекте. Некоторые другие причины:

Разделение кода

Для меня у вспомогательных функций много преимуществ, так как я люблю отличные функции, они также облегчают чтение кода. А если серьезно, одна из главных причин для меня на самом деле заключается в том, как он разделяет ваш код на краткие куски. Отличный код, готовый к работе, состоит из центрального скрипта, который загружает различные вспомогательные функции по мере необходимости. Во вспомогательных функциях выполняется фактическая обработка данных, моделирование и т.д. Как рецензент вашего кода, это позволяет мне оценить его в контексте того, для чего предназначен этот конкретный фрагмент кода.

Переносимость вспомогательных функций

Как только мы создадим наш код из функциональных блоков/функций, это позволит нам улучшить переносимость нашего кода. Это верно как для проектов, так и для коллег. Основное преимущество проверки кода в R заключается в том, что она позволяет вам и вашей команде получить базовый набор функций для данных вашей компании. В конечном итоге эти функции могут быть собраны и преобразованы в корпоративный пакет.

Я начал этот сегмент, сосредоточившись на циклах for, на самом деле вспомогательные функции должны быть более распространенными. Вспомогательные функции полезны для предотвращения повторения не только в циклах for, но и в межпроектных функциях. Поэтому, если я увижу шаг, написанный в коде коллеги, который с высокой вероятностью нуждается в повторении, я отмечу его как потенциальную вспомогательную функцию.

Контрольный список R Code Review: 2. Оптимизация пакетов

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

Почему мы не забиваем шурупы молотком

Что именно не зависит от библиотеки? это означает, что вы готовы и способны переключать пакеты, когда это необходимо. Я пытаюсь сделать акцент на использовании правильного инструмента для правильной работы, это должно быть центральным элементом проверки кода. Область, в которой это долгое время было для меня проблемой, — это BaseR, я почти всегда использовал код BaseR, поскольку это то, что я выучил и с которым мне было удобно. У меня не было непосредственной причины использовать такие пакеты, как tidyverse или data.table, мой код работал нормально. Но в конечном итоге это остановило меня, потому что я не мог переключать пакеты по мере необходимости, мой код был неэффективен в определенных областях.

Выявление этих областей и предоставление отзывов об оптимизации использования пакетов входит в число моих трех главных задач рецензента. Посмотрите, какие пакеты могут подойти для конкретного варианта использования, какие пакеты реализованы в коде? Предоставляя отзывы в этой области, я люблю объяснять различные варианты и их потенциальную выгоду (скорость, понятность и т. д.). Это, на мой взгляд, также помогает рецензенту больше думать о коде и является областью, которая приносит пользу обоим.

Контрольный список R Code Review: 3. Размещение кода

Когда я пишу первоначальный сценарий для проекта, он всегда начинается достаточно структурированным. Это похоже на ритуал: загрузить данные, выбрать, преобразовать, сделать визуализацию и т. д. Но потом всегда происходит одно: я замечаю что-то в своем выводе, странный паттерн. Возможно, это коллега, который хочет немного изменить понимание. Что теперь происходит с моим кодом? В итоге я помещаю быстрый фильтр в строку 241. Проходит неделя, может быть, даже месяц, и я пересматриваю проект. Объем немного изменился, и я снова начинаю добавлять код.

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

Значение хорошего размещения кода трудно переоценить. Это соответствует всем требованиям проверки кода. Это улучшает читаемость кода и возможность переноса между проектами, а также очень часто увеличивает его функциональность.

Завершение проверки кода

Эти 3 пункта вместе составляют основу моей проверки кода и входят в любой контрольный список проверки кода. Эти 3 пункта также имеют одну общую черту. Все они сосредоточены на внешнем виде кода, и я твердо верю, что это самое большое преимущество проверки кода. Оптимизируя удобочитаемость и переносимость, мы создаем синергию в командах и проектах по обработке и анализу данных, которая так необходима.

В Интернете вы найдете статьи, в которых проверка вывода кода рассматривается как часть проверки кода. Лично я считаю, что любая проверка является частью самого процесса написания кода. Если у вас нет сдержек и противовесов в вашем коде, который проверяет ваши входы и выходы, это большая проблема. Роль рецензента заключается в проверке этих элементов, но он не несет ответственности за написание или выполнение этого самостоятельно.

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

Первоначально опубликовано на https://codexvalue.com 13 марта 2021 г.