Как быстро и эффективно читать чужой код

2
2131
views

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

Как читать чужой код

Недавно мой приятель, программист-самоучка, задал мне вопрос:

«Как тебе удается разбираться в чужом коде? Я начинаю осваиваться в собственном, но каждый раз, пытаясь заглянуть в чужой, я теряюсь. Я знаю, что иногда это неизбежно, особенно если код плохо документирован (или вообще не имеет документации), но у меня вообще нет никакой стратегии на этот случай. Буду благодарен за любые советы!»

Мне нравится этот вопрос по двум причинам:

  1. Метод чтения чужого кода, который я рекомендую, также поможет вам начать лучше понимать собственный код. Кроме того, вы будете быстрее и легче разбираться во всех новых частях кода, с которым работаете.
  2. Этот вопрос позволяет затронуть один из наиболее важных аспектов освоения программирования: пользу большого количества высококачественных примеров.

В общем, вопрос хороший. Давайте начнем с начала.

Лучший подход к чтению и пониманию чужого кода

1. Найдите одну вещь, которую, как вы знаете, этот код делает, и отследите все действия в обратном порядке, начиная с конца.

Возьмем пример. Вы знаете, что код, который вы просматриваете, в конечном итоге создает файл со списком названий фильмов. Определите, где в коде те несколько строк, которые, собственно, генерируют этот файл.

Затем сделайте шаг назад и определите, как код помещает информацию в файл.

После этого сделайте еще шаг назад и найдите, откуда берется эта информация.

И так далее.

Назовем все эти связанные кусочки «цепочкой действий».

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

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

В процессе продвижения от конца кода к его началу вы будете постепенно наращивать понимание кода в целом. Таким образом, вы стартуете от

[большой файл с кодом, смысл которого вам не понятен]

и постепенно приходите к

[по-прежнему большой файл с кодом, но несколько его разделов вы уже понимаете].

Совершенно непонятный вам код и код, части которого вы уже понимаете

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

2. Повторяйте пункт 1.

Повторите весь процесс несколько раз, и вы быстро улучшите свое понимание все большего количества частей этой кодовой базы.

Как постепенно освещаются разные части темной комнаты, так и разные части кода постепенно открываются вам (по мере того, как вы разбираетесь все с новыми и новыми функциями).

Работа этого метода основана на том, что тело кода всегда создается для решения какой-то одной (или не одной) сложной задачи. Так что «цепочка действий» для прохождения вам обеспечена.

А чем лучше вы поймете, как связаны между собой разные части кодовой базы, тем лучше вы будете понимать эту кодовую базу в целом.

Чем больше примеров (хорошего) кода вы изучите, тем легче вам будет даваться чтение и понимание кода вообще, тем быстрее вы сможете это делать.

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

2 КОММЕНТАРИИ

ОСТАВЬТЕ ОТВЕТ

Please enter your comment!
Please enter your name here