Дисклеймер
Эта статья родилась после моего участия в организации нескольких треков об инструментах для разработчиков на крупных российских конференциях. Ее главная цель — рассказать о том, что сейчас интересно девелоперскому комьюнити, поделиться своим мнением и накидать ссылочек на «посмотреть». Для полного погружения рекомендую прогуляться по ссылкам и глянуть пару видео ;) Nuff said...
Вопрос выбора инструментов для разработки всегда вызывает массу дискуссий, ведь в загадочную категорию DevTools попадает все, чем так или иначе пользуются девелоперы — от IDE и анализаторов кода до дебаггеров и CI/CD. Эти обсуждения никогда не заканчиваются без поножовщины и никого не оставляют равнодушным, поэтому на Positive Hack Days Fest 2 мы провели полноценный DevTools-трек Languages and Tools. В итоге неожиданно для меня самого у нас спонтанно получилось сквозное повествование из семи докладов с кросс-ссылками друг на друга и очень живым общением.
Наш трек на Positive Hack Days Fest 2 открывал Андрей Боханко, chair сообщества EuroLLVM и контрибьютор в LLVM (Clang), который более десяти лет участвует в развитии этих проектов (кстати, рекомендую его статью). А вишенкой на торте стал доклад Володи Ярославского, контрибьютора в Java и автора сортировки Dual-Pivot Quicksort в JDK. Конечно, не обошлось и без авторов популярных open source библиотек, которые выступили с хардкором про фаззеры, сэмплирующие профайлеры, концепты компиляторов (на примере MOJO) и мультивселенную Kotlin.
В перерывах между хардкорными выступлениями я представил легкий доклад, в котором постарался ответить на сакральные вопросы: «Что же такое DevTools?», «Какие инструменты доступны разработчику сегодня?» и «Как расставить приоритеты, чтобы грамотно развивать проект с нуля?».
Пирамида потребностей
Наглядно показать развитие проектов по разработке ПО можно с помощью пирамиды потребностей разработчика. Она описывает поступательное движение от «Ура, мы выбрали язык программирования!» к состоянию, в котором автоматизация разработки возведена в абсолют (как у ситхов).
На вершине пирамиды ждут авторефакторинг кода, всевозможные блага CI и даже автономные AI-ассистенты вроде AutoGPT (к слову, отличный список AI-инструментов ищите здесь). Но сегодня мы остановимся на фундаменте: IDE, Git, CI и связанных с ними Open Source инструментах.
При чем здесь open source
Флагманом DevTools был и остается open source, а ведущую роль в развитии сообщества продолжает играть GitHub. Все движение индустрии обкатывается здесь! Поэтому (надеюсь, не обижу создателей суверенных Git-хостингов) мои примеры будут основаны на том, что происходит именно на этой платформе.
Многие разработчики не знают, что ознакомиться с трендами, на которых сейчас фокусируется исследовательская команда Github, можно на githubnext.com. Авторы, не стесняясь, так и пишут на сайте: «Исследуем будущее разработки ПО».
По большому счету все современные исследования ведутся вокруг AI-ассистентов. Из несвязанного с Copilot и близкого мне можно выделить лишь движение в сторону совместной разработки и совсем чуть-чуть рассказать про CodeQl:
- Realtime GitHub и Collaborative Workspaces: предоставляют возможность совместной работы над проектом в режиме реального времени, а-ля Google Docs. В первом случае речь идет о модификации документов и кода прямо на платформе в вебе, а во втором — в IDE.
- Incremental CodeQL: исследование, близкое лично мне — как человеку, который имеет прямое отношение к анализу кода. Суть — в увеличении эффективности анализа кода в CI за счет того, что при изменениях кодовой базы построение CodeQL-аналога code property graph происходит инкрементально, без необходимости перестраивать весь граф с нуля.
Если вдруг захотите погрузиться в чудесный мир CodeQL, анализа с помощью CPG или инкрементальной навигации по коду, рекомендую тройку докладов: «Incremental, zero-config Code Nav using stack graphs» Douglas Creager, «Анализ кода и графовые базы данных» Андрея Щеглова и «Java Code Analysis with Database and Domain Specific Language» Pan Linjie.
Отмечу, что GitHub уже давно перестал быть только Git-хостингом и превратился в полноценную среду для разработки: со своим Cloud IDE (Codespaces), CI (GitHub Actions) и возможностью написания собственных плагинов, которые можно нативно встроить в процесс ревью. Сегодня экосистема GitHub покрывает почти все ступени девелоперской пирамиды потребностей!
Более того, GitHub постепенно превращается в социальную сеть для разработчиков с функциональностью Stack Overflow (GitHub Discussions), механизмами достижений, в меру тщеславными рейтингами и даже собственными рок-звездами. Причем вокруг рейтинговой системы строятся целые стартапы, например opensource-heroes или gitstar-ranking, которые собирают и ранжируют людей по звездочкам на проектах.
Рынок платформ для разработки и IDE
Однако в этой красивой истории есть ложка дегтя: пройти квест от «я написал код в IDE» до «я выложил код в Open Source» становится все сложнее в силу политических обстоятельств. Microsoft уже вводила ограничения для определенных групп разработчиков, поэтому на рынке появляется все больше независимых платформ, которые конкурируют с GitHub. Яркие примеры — китайский Gitee и децентрализованная платформа radicle.xyz.
Аналогичный тренд вырисовывается и на рынке IDE: сегодня многие компании разрабатывают собственные решения и пытаются повторить успех Microsoft и JetBrains. У первых есть VS Code и Codespaces, у вторых — свой набор IDE и инструменты совместной разработки (Code With Me и Space).
Стоит отметить и борьбу компаний-разработчиков между собой. Судя по масштабным опросам, VS Code лидирует на широком рынке, а платформа IntelliJ IDEA доминирует на рынке JVM-языков. Причина кроется в крайне слабой поддержке Java в VS Сode (через плагин Red Hat).
Рейтинг популярных IDE 2024 г. по версии Stack Overflow выглядит так.
Continuous integration
Другим важным элементом нашей пирамиды являются CI-системы. Их востребованность подтверждает ежегодное исследование JetBrains The State of Developer Ecosystem 2023. Если мы исключим из рейтинга инструменты тим-менеджмента, CI займут в нем одну из лидирующих позиций — сразу после платформ для совместной разработки.
Отмечу, что представленный в том же исследовании рейтинг CI-систем неожиданно для меня возглавила Jenkins, обогнав интегрированную в GitHub платформу Actions и GitLab CI.
В первую очередь CI-системы закрывают базовые потребности разработчика: сборку на каждый PR и коммит в main, а также регулярное автоматическое тестирование. Но их функциональность выходит далеко за пределы базового минимума! Следом идет тонна приятных бонусов, например:
- Проверка кодовой базы анализаторами. Держите отличный список популярных открытых продуктов.
- Автоматическое обновление кодовой базы. Начиная от версий проекта в README и заканчивая автоматическим рефакторингом кода.
- Сбор метрик каждого изменения кода — от процентов тестового покрытия через Codecov до метрик кода (например, cognitive complexity). И не забываем про сбор общих метрик для проекта: OpenSSF Best Practices, Codebeat и др.
- Помощь c код-ревью (Codacy, Code Climate, CodeFactor). Интересный момент: GitHub проводили большое исследование на тему автоматического ревью кода от Copilot. Оно завершилось в декабре 2023 г. без полноценного добавления этой функциональности на платформу.
Github как крупная платформа со встроенным CI позволяет не только создавать и размещать плагины для workflow, но и нативно интегрировать их в процесс ревью за счет специального формата SARIF. Его инструментарий дает возможность загружать отчеты статического анализа в Git-хостинг и отображать результаты прямо во время ревью.
Это особенно актуально для приложений, которые отвечают за анализ кода: ведь советы анализатора отображаются как комментарии живого человека — непосредственно на ревью. Отмечу, что в open source есть два крупных агрегатора анализаторов, которые используют эти форматы: spotless и super-linter.
Отдельно стоит остановиться на модных сервисах для сканирования проектов на предмет проблем с third-party-зависимостями. Причем речь не только о supply-chain-атаках, но и о банальном использовании кода или зависимостей с несовместимой либо строгой лицензией. Среди таких утилит можно выделить платформу FOSSA, сервис Dependabot (стал частью GitHub) и Renovate Bot, который позволяет автоматически обновлять зависимости проекта на новые версии по расписанию.
***
Индустрия DevTools развивается семимильными шагами, и уже сейчас на Github Marketplace можно найти тысячи утилит, которые заметно упростят вам жизнь ;)
Сегодня мы рассмотрели только часть базовых инструментов и принципов, на которые стоит обратить внимание, дальше — больше!