Перевод статьи «How to quickly and effectively read other people’s code».

Недавно мой приятель, программист-самоучка, задал мне вопрос:
«Как тебе удается разбираться в чужом коде? Я начинаю осваиваться в собственном, но каждый раз, пытаясь заглянуть в чужой, я теряюсь. Я знаю, что иногда это неизбежно, особенно если код плохо документирован (или вообще не имеет документации), но у меня вообще нет никакой стратегии на этот случай. Буду благодарен за любые советы!»
Мне нравится этот вопрос по двум причинам:
- Метод чтения чужого кода, который я рекомендую, также поможет вам начать лучше понимать собственный код. Кроме того, вы будете быстрее и легче разбираться во всех новых частях кода, с которым работаете.
- Этот вопрос позволяет затронуть один из наиболее важных аспектов освоения программирования: пользу большого количества высококачественных примеров.
В общем, вопрос хороший. Давайте начнем с начала.
Лучший подход к чтению и пониманию чужого кода
1. Найдите одну вещь, которую, как вы знаете, этот код делает, и отследите все действия в обратном порядке, начиная с конца.
Возьмем пример. Вы знаете, что код, который вы просматриваете, в конечном итоге создает файл со списком названий фильмов. Определите, где в коде те несколько строк, которые, собственно, генерируют этот файл.
Затем сделайте шаг назад и определите, как код помещает информацию в файл.
После этого сделайте еще шаг назад и найдите, откуда берется эта информация.
И так далее.
Назовем все эти связанные кусочки «цепочкой действий».
Используя этот метод, вы неизбежно ознакомитесь с разными частями кода. Это, вполне вероятно, позволит вам хорошо разобраться в следующих вещах:
- как организовано тело кода (где определены переменные, где расположены разные типы функций и т. д.),
- стиле написания кода, которого придерживался автор,
- образе мышления автора кода и его подходе к решению проблем (это сложнее, но по мере накопления опыта подобные вещи начинаешь понимать интуитивно).
В процессе продвижения от конца кода к его началу вы будете постепенно наращивать понимание кода в целом. Таким образом, вы стартуете от
[большой файл с кодом, смысл которого вам не понятен]
и постепенно приходите к
[по-прежнему большой файл с кодом, но несколько его разделов вы уже понимаете].

Это как если бы вы стояли в совершенно темной комнате, где один за другим включались бы огни, постепенно открывая вам все больше деталей интерьера.
2. Повторяйте пункт 1.
Повторите весь процесс несколько раз, и вы быстро улучшите свое понимание все большего количества частей этой кодовой базы.
Как постепенно освещаются разные части темной комнаты, так и разные части кода постепенно открываются вам (по мере того, как вы разбираетесь все с новыми и новыми функциями).
Работа этого метода основана на том, что тело кода всегда создается для решения какой-то одной (или не одной) сложной задачи. Так что «цепочка действий» для прохождения вам обеспечена.
А чем лучше вы поймете, как связаны между собой разные части кодовой базы, тем лучше вы будете понимать эту кодовую базу в целом.
Чем больше примеров (хорошего) кода вы изучите, тем легче вам будет даваться чтение и понимание кода вообще, тем быстрее вы сможете это делать.
И это подводит нас ко второй причине, почему мне понравился вопрос моего приятеля. Он позволяет отметить важность изучения большого количества высококачественных примеров кода, написанных другими людьми.
Статья ради статьи.
Коммент ради коммента
Куштии