Неважно, новичок ли вы, отлаживающий вашу первую программу «Hello World», или опытный инженер, — у каждого из нас всегда есть возможность улучшить свои навыки. Александр Шелютин, Data Architect в KarmaHQ, расскажет о разнице между тем, как просто заставить что-то работать, и написанием действительно хорошего кода.

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

Не совсем. Сложный и запутанный код может работать поначалу, но в конечном итоге он также может стать источником проблем. Хороший код это не только о результате — это об искусстве, о создании чего-то читабельного, масштабируемого, эффективного и безопасного.

Написание качественного и чистого кода облегчает жизнь в долгосрочной перспективе: он производит впечатление на работодателей и партнеров, держит подальше непредвиденные ошибки и головную боль. Разве это не то, чего мы все хотим? Давайте посмотрим, как мы переходим от кода, который работает, к хорошему коду.

Ищем мудрость в книгах по программированию

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

«Чистый код», Роберт Мартин

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

«Программист-прагматик», Эндрю Хант и Дэвид Томас

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

«Ruby. Объектно-ориентированное проектирование», Сэнди Метц

Эта книга предлагает бесценные идеи в понимании написания модульного, понятного объектно-ориентированного кода, применимого к любому ОО-языку. В ней есть советы о создании умных абстракций с объектами и классами, минимизации зависимостей между компонентами и избегании ужасных «монстр-классов» из тысяч строк кода. Метц — крестная мать аккуратного объектно-ориентированного дизайна.

Создаем собственный кодерский проект

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

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

  • Изучение документации и Stack Overflow для освоения незнакомых инструментов и методов.

  • Преодоление деморализующих ошибок компилятора и сбоев при исполнении кода.

  • Устранение коварных багов.

  • Постоянное улучшение первой «минимально жизнеспособной продуктовой» версии в надежную и стабильную финальную версию.

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

Рефакторинг помог мне радикально улучшить структуру кода, читаемость, расширяемость и производительность. Я чувствовал себя гордым родителем, наблюдая, как мой бот вырос из младенца в зрелую и эффективную программу. Мой маленький торговый бот даже заработал около $1,000 в год, прежде чем я устал поддерживать эту капризную штуку.

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

Не ограничивайтесь просто следованием какому-либо учебнику или руководству — бросьте себе вызов, чтобы создать нечто значимое и оригинальное.

Углубленная практика алгоритмов

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

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

LeetCode, HackerRank и Codewars предлагают огромные каталоги задач по программированию и алгоритмических головоломок для решения. Они варьируются от простых упражнений до сложных алгоритмических задач, требующих высокой производительности, таких как сортировка, поиск, обход графов, работа со строками, динамическое программирование и многое другое.

Не стоит слепо прорываться через задачи в погоне за очками и значками — подходите к практике алгоритмов осознанно.

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

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

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

  • Только после тщательного планирования вашего подхода приступайте к кодированию алгоритма в среде типа VS Code. Затем используйте инструменты вроде линтеров, отладчиков и профайлеров для дальнейшего улучшения.

Несколько более продвинутых советов

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

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

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

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

Погружение в открытый исходный код

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

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

Как начинающий разработчик, вы можете внести свой вклад в открытое программное обеспечение разными способами:

  • нахождение и исправление дефектов и ошибок;

  • создание новых функций на основе ваших творческих идей;

  • улучшение документации, такой как Readme и Wiki;

  • добавление тщательных тестов для повышения качества и надежности;

  • предоставление обратной связи по использованию, сообщений об ошибках и запросов на новые функции.

Посмотрим на то, как участие в проектах с открытым исходным кодом ускоряет рост ваших навыков программирования.

Чтение кода высокого качества

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

Тщательная проверка кода

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

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

Создание реальных решений

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

Экспериментирование с передовыми технологиями

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

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


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

Материал подготовлен совместно с редакцией ProductStar.

ProductStar — онлайн-школа IT-профессий, часть холдинга РБК с 2023 года. Спасибо, что остаетесь с нами!

Вы можете подписаться на наш Telegram-канал о разработке, посмотреть на все наши публикации на Хабре и познакомиться со всеми предлагаемыми нами курсами по программированию.

Комментарии (0)