Как прочитать код программы

Перевели и адаптировали статью Джозефа Мусандо, аналитика информационной безопасности и автора блога на Medium — о том, как быстро научиться читать чужой код и какие есть для этого подходы. Повествование ведется от имени Джозефа.

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

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

Шаг 1. Проанализируйте хоть что-то в непонятном коде

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

как считать информацию с чипа паспорта гражданина Украины (ID карта, ID паспорт) мобильным телефоном

Например, вы знаете, что программа выдает список фильмов. Найдите функцию, которая собирает готовый список. Затем сделайте шаг назад и попробуйте понять, по какому принципу фильмы располагаются в списке. Потом определите, где код берет названия фильмов. И так далее.

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

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

Шаг 2. Повторите первый шаг

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

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

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

Давайте проиллюстрируем всю идею простым примером — определением пола цыплят.

Как определить пол цыпленка

Перед вами стоит куча цыплят, и на первый взгляд вы не видите между ними никакой разницы. Но тут ваш ментор говорит: «Бери их по одному и попробуй определить пол». Сначала вам кажется, что все ответы будут совершенно случайными. Но ментор считает иначе:

После каждого случайного ответа ментор дает вам обратную связь: «да» или «нет». Системы не наблюдается, но вы продолжаете тренировку. А потом происходит нечто невероятное. Ваши ответы все чаще попадают в точку. Вы становитесь все лучше в определении пола цыплят, хотя и не знаете, почему.

Как научиться читать любой код за 30 минут

Вам по-прежнему кажется, что ваши ответы случайные, но на этот раз какая-то магия делает их верными.

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

Читайте также:
На какой программе варить плов в мультиварке

Никогда не останавливайтесь: В программировании говорят, что нужно постоянно учиться даже для того, чтобы просто находиться на месте. Развивайтесь с нами — на Хекслете есть сотни курсов по разработке на разных языках и технологиях .

Источник: dzen.ru

Как читать чужой код: гайд для новичков

Даже опытным разработчикам иногда сложно читать чужой код — тем более это тяжело дается джунам. Руководитель кампуса Elbrus Bootcamp Юрий Плисковский рассказывает, с чего начать и на что обратить внимание новичкам.

Зачем читать чужой код

Чтение кода — это приблизительно 90% задач, с которыми сталкивается разработчик. Даже если вы ищете баги в программе, пишете новый код или читаете документацию, вы постоянно сталкиваетесь с чужим кодом. Сложность в том, что разработчики пишут его очень по-разному: могут отличаться стиль, реализации или код может быть попросту некачественным.

Например, условие if/else на JavaScript можно написать так:

Чем больше чужого кода вы читаете, тем быстрее можете разбирать логику и находить стартовые функции, без которых программа не заработает. Высокая насмотренность помогает понять, как писать код для программистов, которые будут его читать, а не для компьютера. Ниже разберем четыре шага, с которых стоит начинать читать чужой код.

Шаг первый

Как бы банально это не звучало, в первую очередь стоит определить язык программирования, на котором написан код. Это поможет разобраться со способами объявления переменных, функциями и другим синтаксисом.

После этого код нужно скопировать в редактор: он подсветит элементы синтаксиса и укажет, где находятся переменные, где — функции и методы. Это сделает код более наглядным и упростит его разбор.

Для каждого языка программирования существуют разные редакторы кода. В случае с JavaScript наиболее популярные — VS Code и WebStorm.

Шаг второй

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

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

На этом этапе стоит выяснить, что именно делает стартовая функция, какие переменные и методы нужны для ее выполнения.

Шаг третий

Переходим к анализу кода с помощью отладки. На этом этапе возможны разветвления: можно выполнить отладку простым способом с помощью console.log (без остановки выполнения программы), а можно более сложным и профессиональным — путем построчной остановки выполнения программы дебаггером.

Дебаггер — выражение для глубокой отладки кода. Оно позволяет установить точки останова (брэйкпоинты) на конкретной строке кода и увидеть результат его выполнения до этой строки. Например, у вас есть программа, состоящая из 75 строк: с помощью дебаггера вы можете остановить ее выполнение на 25 строке и посмотреть, что происходит в коде к этому моменту.

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

Четвертый шаг

Отладка помогает глубже понять, как разные сущности в коде связаны между собой. После нее стоит составить mindmap — нарисовать на бумаге визуализацию этих связей. Например, вы видите, что основной функции для выполнения нужно число, которые формирует другая функция.

Визуализация поможет понять логику, на которой построен код, и освободить место в голове для его непосредственного анализа. При этом важно понимать, что визуализация нужна для длинного кода на несколько десятков строк. Если речь идет о программе на 30 строк, mindmap строить необязательно.

Где искать код

Самая большая база кода хранится на GitHub. Найти примеры кода можно по запросу «Лучшие проекты на JavaScript» (или на любом другом языке программирования) и изучить репозитории. Чем больше у него звезд, тем выше вероятность, что код в нем написан хорошо и работает без ошибок.

Хотите попрактиковаться в решении задач и узнать больше об обучении? Подписывайтесь на наш канал в Telegram.

Кроме GitHub существуют учебные платформы — например, CodeWars и HackerRank, — где в награду за успешно решенную задачу пользователь получает доступ к лучшим решениям. Примеры можно брать и оттуда, но стоит быть осторожным: часто там попадается сильно оптимизированный код, который решает задачу в одну очень длинную строку. В промышленном программировании такие программы — боль: их логика понятна только автору, а другим разработчикам очень сложно его читать и поддерживать.

Читайте также:
Не удалось подключиться к другой программе недопустимая строка с указанием класса

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

Катрин Алимова

Катрин Алимова

Вам может также понравиться.

Решаем задачу на JavaScript: преобразование строк

Решаем задачу на JavaScript: преобразование строк

Как устроен алгоритм сортировки пузырьком

28 мар. 2023 г.

Как устроен алгоритм сортировки пузырьком

15 расширений для VSCode, которые упростят разработку

15 мар. 2023 г.

Источник: elbrusboot.camp

Один из простых способов улучшить свои навыки программирования — читать чужой код

Примечание: первоначально эта статья была написана для сайта Fuel Your Coding back в мае 2010 года. К сожалению, этот сайт сейчас не работает, поэтому я публикую статью здесь, чтобы сохранить её для потомков. Я собирался обновить её, учитывая последние веяния, но решил оставить так, как она была написана. Те части, что подустарели, могут показаться немного смешными, но да ладно. Получайте удовольствие…

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

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

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

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

Что читать

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

Читайте программы, имеющие к вам отношение

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

• Плагин WordPress, который вам действительно нравится;
• Ruby gem, который вы считаете полезным;
• Плагин jQuery, к которому вы продолжаете возвращаться.

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

Читайте программы, впечатлившие вас

Помню, что, когда я первый раз просматривал сервис создания презентаций 280 Slides, я подумал: «Да! Круто!». Я быстро выяснил, что программа, управляющая этим сайтом, является проектом Cappuccino с открытым кодом. Это знание вошло глубоко в моё сознание, и когда я как-то наткнулся на ещё одно впечатляющее приложение, работавшее на Cappuccino, я уже знал, что на этом проекте я смогу многому научиться.

Что произвело сильное впечатление на вас в последнее время? Эта программа имеет открытый исходный код? Если так, то она — отличный выбор для чтения: код, скорее всего, впечатлит вас так же, как и само приложение.

Читайте программы, написанные теми, кого вы уважаете

image

Программисты, достойные уважения

Если вы уже занимаетесь программированием с открытым исходным кодом какое-то время, то, вероятно, у вас уже есть на примете программисты, заслужившие ваше уважение. Я мог бы с ходу назвать несколько разработчиков, программы которых вызывают у меня просто «белую зависть».

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

Читайте программы, которые вы сможете, действительно, достаточно глубоко понять

Если вы склонны рисковать, то можете рассмотреть погружение в большой проект, как, например, Ruby на Rails, Drupal или jQuery. Но я предложил бы вам не использовать пока такие проекты, если вы, конечно, не являетесь опытным читателем программ.

Крупные проекты имеют чрезвычайно много взаимодействующих частей, и вы, в конечном итоге, потратите немало времени и сил на освоение общих представлений, чтобы узнать что-то конкретное. Запутанность предмета изучения расхолаживает, и большие проекты, более вероятно, приведут к вашему разочарованию при чтении. Преимуществом выбора небольшого проекта для чтения является то, что вы можете держать всю логику работы программы в вашей голове целиком. Это позволяет работать только с деталями, чтобы извлечь какие-то уроки.

Читайте также:
Программа по смене языка

Как читать

Теперь, когда код для чтения выбран, как наилучшим способом читать его? Я прочитал на сегодня множество программ и могу предложить несколько способов максимизации вашего КПД.

Изучите общую картину

image

Структура каталога twitter gem

Я предполагаю, что вы, по крайней мере, знаете на макроуровне, что делает код, который вы читаете. Если нет, то предлагаю прочитать веб-сайт проекта, учебные пособия, документацию и всё остальное, что вы можете достать помимо кода.

После того как надлежащая ясность внесена, вашим первым шагом должно быть рассмотрение структуры проекта. Объём этой работы зависит от размера выбранной базы исходного кода, но даже если она занимает больше одного файла, это потребует лишь ненамного больше времени.

Прежде всего, зафиксируйте для себя структуру файлов. Этот шаг легче выполнить с помощью редактора, который имеет вид иерархии папок, как, например, TextMate. Здесь, как пример, показан прекрасный вид Twitter Ruby gem.

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

Документируйте ваши результаты

Чтение кода не должно быть каким-то пассивным действием. Рекомендую добавлять комментарии по мере продвижения, документировать ваши предположения и ваши выводы, когда вы начнёте понимать ход выполнения программы. Когда вы начнёте впервые, ваши комментарии будут выглядеть, вероятно, так:

# Полагаю, что вызов этой функции происходит после «initialize» # Что же делает эта задача? # Уверен, эта переменная теряет свою область действия после строки 17

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

Используй тесты, Люк

(Прим. переводчика: автор вспомнил «Используй силу, Люк» из «Звёздных войн»)

Будем надеяться, что проект, который вы выбрали, имеет набор тестов. Если нет, то можете пропустить этот раздел вообще (или найти проект, имеющий такой набор).

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

Измените код, скомпилируйте

Кто сказал, что чтение кода должно быть пассивным? Вы начнёте, действительно, понимать код, только после того, как сломаете всё и снова соберёте вместе. Вспомните пройденные тесты? Сделайте так, чтобы они завершились неудачно, добавьте кое-что или попытайтесь изменить реализацию так, чтобы они прошли нормально.

Попробуйте добавить какую-нибудь небольшую «фичу», которая вам кажется «крутой», или настройте регистрацию по всему проекту так, чтобы можно было распечатать вывод на различных этапах выполнения программы. Это по-прежнему чтение? Абсолютно, но такой подход является больше собственным приключением, чем чтением детективного романа. И это — именно то, что надо!

Смыть и повторить

(Прим. переводчика: из анекдота про айтишника, моющегося шампунем строго по инструкции — бесконечно)

Закончив с чтением одной кодовой базы, возьмите другую и начните процесс снова. Чем больше кодов вы читаете, тем лучше идёт это чтение и тем больше вы получаете из него за меньшее время. Я думаю, вы обнаружите, что ваш КПД растёт довольно быстро и что это действительно очень приятный способ обучения.

Где начать

Единственным, самым важным источником для чтения кода является для меня GitHub. Этот сайт позволяет так легко найти новые проекты и действительно великих программистов, что вы действуете себе во вред, если не используете его. Я предлагаю начать на GitHub и читать код прямо на сайте, пока не найдёте проект, из которого по вашему мнению вы сможете извлечь какие-то уроки. Затем склонируйте его и читайте!

А вы используете чтение кода как обучающий инструмент? Какие проекты вы порекомендовали бы коллегам? Прочитали какую-нибудь хорошую программу в последнее время?

  • программирование
  • обучение программированию
  • качество кода
  • навыки программирования
  • чтение кода
  • чтение программы

Источник: habr.com

Рейтинг
( Пока оценок нет )
Загрузка ...
EFT-Soft.ru