Рассказываем, как начинающему разработчику быстро научиться читать чужой код и какие вообще есть подходы для этого.
Это адаптированный перевод статьи Джозефа Мусандо, аналитика информационной безопасности и автора блога на Medium. Повествование ведется от имени Джозефа.
Чем больше вы программируете, тем лучше понимаете код — как свой, так и чужой. Это замкнутый круг: чем больше вы программируете, тем больше потребляете кода, а значит, больше программируете. Вы быстрее работаете и быстрее учитесь.
Недавно коллега-самоучка пожаловался, что теряется в чужом коде. Он сказал, что прекрасно понимает, что некоторые разработчики пишут код, который очень сложно читать практически всем. При этом он не мог читать и хороший код. И у меня есть для него несколько хороших советов.
Наверняка в коде есть хотя бы одно место, которое вам понятно. Посмотрите на этот участок и попробуйте отследить все действия в обратном порядке, начиная с конца. Что привело к такому результату и каким был предыдущий шаг?
Например, вы знаете, что программа выдает список фильмов. Найдите функцию, которая собирает готовый список. Затем сделайте шаг назад и попробуйте понять, по какому принципу фильмы располагаются в списке. Потом определите, где код берет названия фильмов, и так далее.
Так вы поймете, где и почему вызываются функции, как они меняют данные. Приятный бонус: вы поймете общий стиль автора кода и вам будет легче читать другой подобный код.
Конечно, рассмотрев только один участок кода, вы не решили основную проблему и не поняли весь код целиком. И все же теперь вы ближе к цели. Это как скалолазание: вы еще не подтянулись наверх, но уже ищете глазами нужные вам зацепы.
Читайте также: Это снова я, резиновая уточка: что такое метод Фейнмана и почему с его помощью так просто изучать программирование
На самом деле, это и есть вся стратегия. Нужно найти понятное вам место в коде, хорошенько его разобрать и найти новый кусочек кода для анализа. Когда вы разбираетесь в том, как работает один участок кода, вам тут же становится понятен другой, с ним связанный. Так по цепочке вы можете перебрать хоть всю кодовую базу, если захотите.
Это возможно благодаря общей философии программирования, согласно которой один участок кода выполняет одну задачу. Большинство программ это просто набор подзадач, именно так нам и нужно рассматривать любой незнакомый код.
И не забываем про насмотренность — она развивается со временем, и постепенно вы сможете читать и понимать вообще любой код. Анализ эталонных решений — фактор, который определяет скорость и эффективность обучения. Второй такой же важный фактор — регулярная практика.
Давайте проиллюстрируем всю идею простым примером — определением пола цыплят.
Перед вами стоит куча цыплят, и на первый взгляд вы не видите между ними никакой разницы. Но тут ваш ментор говорит: «Бери их по одному и попробуй определить пол». Сначала вам кажется, что все ответы будут совершенно случайными. Но ментор считает иначе:
После каждого случайного ответа ментор дает вам обратную связь: «да» или «нет». Системы не наблюдается, но вы продолжаете тренировку. А потом происходит нечто невероятное. Ваши ответы все чаще попадают в точку. Вы становитесь все лучше в определении пола цыплят, хотя и не знаете, почему. Вам по-прежнему кажется, что ваши ответы случайные, но на этот раз какая-то магия делает их верными.
После большого количества повторений ваш мозг усваивает новые паттерны, хотя вы этого и не осознаете. Если тренировка продолжается, ваш мозг как бы лучше настраивается и в конце концов может давать довольно точные ответы на основании данных, которые сначала казались лишь информационным шумом. В общем и целом история с непонятным кодом — точно такая же, как и с анализом пола цыплят.
Никогда не останавливайтесь: В программировании говорят, что нужно постоянно учиться даже для того, чтобы просто находиться на месте. Развивайтесь с нами — на Хекслете есть сотни курсов по разработке на разных языках и технологиях