Когда впервые сталкиваешься с чужим кодом, особенно если он большой и без комментов, ощущение примерно такое, будто пытаешься разобраться в чужом детективе без главного героя. Я тоже через это проходил, поэтому хочу поделиться тем, что реально помогает.
Первое — надо не пытаться понять всё сразу. Серьёзно, забей на детали поначалу. Смотри на общую структуру: какие основные модули, как они связаны, где главные точки входа и выхода. Обычно полезно сразу найти стартовые функции или классы, которые запускают выполнение.
Дальше — прогоняй код в своей голове или с помощью дебаггера по частям. Запускай с конкретными входными данными, смотри, как меняются переменные, какие вызываются функции. Иногда проще поставить пару логов и увидеть, как «живет» программа на самом деле.
Ещё круто вычленять ключевые сущности и их ответственность. Часто код превращается в кашу из «всё и сразу», если автор не проектировал архитектуру. В таком случае лучше сначала написать небольшой план на бумаге или в голове: «Этот модуль отвечает за обработку данных, этот — за взаимодействие с сетью» — и выстраивать цепочку.