Я начну с конструкторской документации. В частности, спецификация, в которой указывается цель рассматриваемой вещи.
Если возможно, тогда я просматриваю заметки по проектированию и документацию, чтобы получить общее представление о том, как это было сделано, процесс мышления, стиль и характер заинтересованных лиц.
Если возможно, я тогда поговорю с людьми, которые работали над этим - что это делает? Как? Почему? Где похоронены тела?
Среди разработчиков существует тенденция прыгать в код: «Позвольте мне показать вам этот код». Это хорошо для них, но имеет тенденцию угонять мои потребности - то есть понять высокий уровень, который дает контекст для вещей низкого уровня.
Он использует огромное количество умственных способностей, чтобы взглянуть на небольшие кусочки кода вне контекста и понять что-либо значимое. Поэтому, если это возможно, то, чтобы разработчики говорили о ПРИНЦИПЕ, структуре, единицах, модулях, все это приводит к пониманию задачи.
Только тогда стоит пытаться проникнуть в код.
По большому счету, смотреть на код - это все равно, что смотреть на страницу, полную нулей и единиц. Есть смысл, но чтобы понять его, нужно много времени. Получить представление о том, где искать и какие части имеют смысл, помогает сузить пространство поиска.
Все это говорит - когда нет ни доко, ни людей, а только кода - тогда для этого нет ничего, кроме как посмотреть на код.
В этом случае я обычно не пытаюсь понять это медленным глубоким чтением, я делаю быстрый проход, просматривая все. Иногда это просто открыть файлы и сидеть с нажатием клавиши вниз страницы. Вы можете получить удивительную оценку большой картины, просто делая это. (И в некоторых случаях я даже выполняю строковые дампы исполняемых файлов и тралю их в поисках сигнатур и шаблонов. Это было удивительно плодотворно за последние 20 с лишним лет.)