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

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

  • Часть работы разработчики теперь переложили на AI генераторы кода, нужно только проверить, что все сгенерировано верно. Базовый CRUD по модели или другой шаблонный код; написание тестов и документации теперь можно переложить на ИИ-помошников, таких как GitHub Copilot, Cursor, Claude Code и прочих аналогов.

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

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

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

  • И это еще малая часть их применения :-)

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

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

Второй момент, очевидный, конечно, за два года обновлений вышло достаточно много, а некоторые новые инструменты в целом заменили часть старых. На Go я еще достаточно мало разрабатываю, чтобы дать корректную оценку, а мой основной и пока любимый язык все еще Python, поэтому расскажу про изменения, которые произошли для сервисов, написанных на Python. За два года сервисы стали значительно быстрее. В частности я разрабатывала микросервисы с использованием фреймворка FastApi, который для валидации использует библиотеку Pydantic, — в июне 2023 года вышел Pydantic v2, который был переписан на Rust. В новой версии библиотеки скорость валидации выросла в разы.  Еще хочется отметить появление мощного линтера ruff (тоже, кстати, на Rust написанного), который заменил flake8, isort, pydocstyle и кучу других линтеров. Нельзя не отметить быстрый пакетный менеджер uv, который советуют тоже интегрировать в свои проекты. Мне с ним пока еще не пришлось поработать. И последний топовый пример — это появление фреймворка для асинхронной обработки событий FastStream. Он предоставляет унифицированное API для работы с брокерами сообщений (Kafka, RabbitMQ, NATS) и при том у него тот же синтаксис, что у FastAPI. Этот фреймворк был создан для максимального упрощения разработки event-driven систем. Вот его мне точно еще предстоит затестить.

Третий пункт, который хочется отметить отдельно, это появление новых трендов в разработке сервисов. В частности хочу подсветить момент, что  векторные БД вышли за это время на новый уровень и все чаще их теперь можно встретить в проекте, правда по большей части для бекенда, который работает с AI. До выхода в «отпуск» я как раз работала с распределенной версией векторной БД Clickhouse. Читая разные статьи о разработке, я все чаще натыкаюсь на использование расширения для PostgreSQL pgvectorоно добавляет поддержку векторных операций в привычную нам базу данных. Уже не терпится попробовать в деле это расширение, но пока не ясно, когда и для каких задач могла бы я это применить. А в целом векторные БД это отдельная и интересная тема для освещения.

В этот блок хотелось бы еще добавить немного про тренд создания архитектуры сервисов через  микросервисы. Сейчас я все чаше слышу про «возврат к простоте», а точнее о возврате к монолитам, но с четким разделением на модули - модульные монолиты(Modular monolith). Тут главное, чтобы все модули были действительно изолированными, а весь код не превратился в спагетти. Кстати, GitHub использует модульные монолиты для части сервисов, так управление репозиториями и запросами на включение реализованы с помощью этой архитектуры. 

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

P.S. После выхода на работу думаю смогу дополнить эту небольшую статью, написав, что ещё нового для себя встретила в разработке. Было бы здорово, если бы вы поделились в комментариях, какие изменения вы отметили за прошедшие два года в разработке ПО?