Опытный разработчик не так давно зашёл в .Net и поставил цель получить сертификат Microsoft. Свой ежедневный прогресс он описывает на канале .Net Разработчик. Заметки об изученном материале, советы по повышению производительности и поддержке мотивации, ин
День 1329. #CodeReview
Допрашиваем Незнакомый Код. Начало
Читаемый код — это хорошо, но не весь код будет читаемым. Популярное утверждение о коде, что его читают в десять раз чаще, чем пишут. Точных цифр нет, но скорее реальное соотношение ближе к 100:1. И чем больше срок службы продукта, тем оно выше. Книги и пособия обычно фокусируются на написании кода, но чтение кода — это отдельный навык.
Новичкам часто кажется, что, если не тратить большую часть времени на добавление нового кода в проект, они не работают продуктивно. На самом деле, первые 80-95% времени должны быть потрачены на чтение кода и других форм документации. Иногда это даже 100%: в процессе изучения кода вы можете узнать, что эта функция уже существует, просто о ней забыли или это принесёт больше вреда, чем пользы.
Рассмотрим наиболее практичные тактики чтения кода и полезные инструменты, которые нужно иметь и сочетать их в зависимости от ситуации.
1. Изучите IDE и установите полезные плагины
Ваша IDE — бесценный инструмент для понимания кода. Однако стоит потратить время, чтобы найти полезные плагины, которые облегчат чтение и понимание кода. Ищите следующие функции:
- Подсветку синтаксиса: ключевые слова, имена классов/методов/полей/переменных,… скобки.
- Автоформатирование
- Статический анализ
- Контекстная навигация: позволит быстро перейти к определению, просмотреть реализации и просмотреть использования класса или метода.
- Рефакторинг: автоматизирует частые рефакторинги, такие как извлечение логики в метод, изменение параметров метода или переименование переменной.
- Подсказки по коду: тип, параметры, документация о классе/методе/поле, при наведении курсора.
- Средство запуска тестов.
- Отладчик.
- Интеграция с системой контроля версий: помимо очевидного, предоставляет информацию об авторе и дате последнего редактирования каждой строки кода.
Вы можете (а иногда, возможно, придётся) читать код без этих инструментов. Но они упрощают проверку ваших предположений и сбор контекста, и вы с большей вероятностью будете принимать правильные решения и меньше гадать.
2. Прочитайте код как минимум дважды
Одного прочтения почти никогда не бывает достаточно, чтобы полностью понять, что делает фрагмент кода. Дважды - это самый минимум.
При первом чтении постарайтесь получить общую картину, просматривая и создавая схему в уме (или на бумаге). Ваша цель — общее представление о том, что делает код. Если под рукой есть резиновая уточка, - самое время поговорить с ней. Объясните общую цель кода. Если какие-то части будет сложно объяснить, это привлечёт к ним внимание.
Второе чтение больше касается деталей. Убедитесь, что вы понимаете каждую строку или хотя бы имеете теорию об этом. Обратите особое внимание на внешние эффекты. Какие методы вызываются? Обновляется ли общее состояние? Какие значения возвращаются? Потратьте время на изучение каждого метода, чтобы понять всю логику, даже если она находится за пределами изучаемого кода. Перейдите к другим методам, посмотрите документацию библиотечных методов, проверьте, что значит каждый фрагмент, вызывающий сомнения. Когда вы закончите, у вас будут теории о возможном поведении, пограничных случаях и условиях отказа в коде. Могут быть части, которые вы не понимаете, но они почти всегда следуют простым правилам, которые можно нагуглить или узнать у товарища по команде.
Третье прочтение полезно, если код содержит сложную логику. Выберите простые значения для любых параметров или переменных и представьте, что они проходят через код сверху вниз. Просчитайте результаты каждой строки.
На самом деле, каждое чтение может включать в себя несколько проходов и несколько походов в Google и на Stack Overflow. Совершенно нормально читать кусок кода десять или более раз, прежде чем вы действительно его поймёте. Может помочь длительный перерыв после первых нескольких прочтений, особенно если вы имеете дело с новыми для вас понятиями.
Продолжение следует…
Источник: https://stackoverflow.blog/2022/08/15/how-to-interrogate-unfamiliar-code/