Как стать великим программистом: читайте код

Чтобы стать великим писателем, больше пишите, а еще больше читайте. В начале своей карьеры разработчика ведите себя как начинающий автор: читайте код.
Зачем мне читать код?
Просмотр чужого кода расширяет кругозор программиста, открывает новые стили кодирования. Это сделает вас более продуктивным программистом. Вы будете знать, где искать ошибки в коде, когда что-то пойдет не так.
Как отмечает Дональд Кнут (Donald Knuth) «Чем больше вы читаете то, что написали другие, тем больше у вас возможностей придумать что-то свое в будущем…».
Как следует «читать» код?
Пассивное чтение чужих исходников, при котором не нужно писать свой код или исправлять ошибки, малоэффективно. Поэтому я применяю следующую стратегию RSDW:
- Запускайте - (Run): компилируйте, запускайте и старайтесь понять, что должен делать код.
- Изучайте структуру – (Examine Structure): изучайте высокоуровневые структуры и просматривайте основные комплексные тесты.
- Погружайтесь - (Dive in): следите за ключевыми потоками и изучайте структуры данных.
- Пишите тесты - (Write tests): пишите тесты и расставляйте приоритеты простых функций и исправления ошибок.
Запуск программы (Run)
Начинайте чтение исходника только после того, как поймете, какой функционал реализует эта программа. В рамках этого шага вы должны составить резюме кода и иметь понимание того, что представляют собой входы и выходы.
Для использования программного обеспечения нужно запустить его. Это означает отслеживание зависимостей и компилирование кода. В отношении библиотек это означает вызов некоторых функций. Самое время провести тестирование и изучить отладочную информацию.
Структура (Structure)
Определите самые важные части кода. Начните с понимания структуры кода. Используйте автоматические инструменты (такие как tree и cloc), чтобы определить файлы базы кода. Просмотрите самые важные комплексные тесты, выпишите вызываемые функции.
Глубокие погружения (Deep Dives)
При чтении кода вы должны различать используемые потоки, понимать структуру данных / объектов. Выберите от трех до пяти ключевых потоков, которые вы обнаружили в ключевых комплексных тестах. Затем погружайтесь глубже.
Начните с «вершины» конкретного действия, а затем отследите весь код. Для этого некоторые разработчики используют отладчики. Другие предпочитают использовать Unified Modeling Language (UML – унифицированный язык моделирования) или Flame Graphs.

Flame Graphs.

UML-схема технологического процесса

Структура данных UML
В других случаях я остановлюсь в точке прерывания важной функции и пройду по стеку, чтобы понять, как я туда попал. Если вы решили следовать коду, убедитесь, что редактор настроен на быструю навигацию по определениям и ссылкам.
Просмотрите типы данных и где устанавливаются ключевые переменные. Используйте отладчик для опроса структуры данных в критические моменты.
Во время таких глубоких погружений я держу открытыми два документа с заметками. В первый я записываю новый синтаксис и шаблоны, которые я нахожу Во второй я заношу вопросы к авторам кода, которые у меня возникают.
Как только появляется начальное понимание некоторых ключевых потоков, становится намного проще разбираться в коде.
Написание кода (Write Code)
Два простых подхода, позволяющих начать писать код – это написание тестов и разбор простых функций, ошибок.
Написание тестов заставляет обращать внимание на действительные входы и выходы конкретного взаимодействия. Оно помогает лучше запоминать код.
Для меня модульное тестирование служит простой отправной точкой. Как только появляется понимание основ кода, я перехожу к комплексным тестам, которые расширяют кругозор.
Еще одним простым подходом является написание простых функций или устранение простых ошибок. Обе эти задачи не требуют полного знания кода. Но, тем не менее, заставляют вас вникнуть в исходники программы. Внесение исправлений и составление документации также является отличным способом проследить все взаимосвязи компонентов кода.
Некоторые советы по чтению кода
Стратегии RSDW эффективны при систематическом подходе, когда вы часто сталкиваетесь с новым кодом. Они также способствует активному изучению кода путем тестирования или через отладчик.
Чтение нового кода – утомительное занятие. При этом вы тщательно прослеживаете потоки кода и одновременно с этим пытаетесь удержать десятки структур данных и функций у себя в голове.
Какой код следует читать?
Начинающему разработчику чтению кода следует уделять 60% рабочего времени. Возможно, треть этого времени должен занимать код, не входящий непосредственно в основные базы кода. Так что же читать в оставшееся время?
Я рекомендую отводить час утром или вечером для чтения кода, выходящего за рамки вашей повседневной работы. Это трудно после тяжелого рабочего дня. Но найдите интересный для себя исходник и посвятите его изучению неделю. Например, Redis известен как популярная отправная точка в языке программирования С.
Параллельные проекты являются мощным стимулом. Вам придется прочитать о новых подходах в программировании и изучить разные варианты реализации создаваемого решения.
Также следует много читать о новых инструментах, с которыми вы сталкиваетесь. Если вы работаете с одним языком программирования, выберете другой язык, чтобы читать его код в свободное время.
Еще одним хорошим подходом является изучение исходников авторитетных программистов, которых вы уважаете.
Написание свежего кода для начинающих разработчиков может быть самым захватывающим делом. Но активное чтение чужого кода – это то, что выделит вас из толпы.