DevTools наносят ответный удар

Дисклеймер

Эта статья родилась после моего участия в организации нескольких треков об инструментах для разработчиков на крупных Российских индустриальных конференциях в 2024 году. Основной ее целью является рассказать о том, что интересно девелоперскому коммьюнити, поделиться своим пониманием и накидать ссылочек «на посмотреть». Поэтому, для полного погружения рекомендуется прогуляться по ссылкам и посмотреть пару видео. Nuff said.

GigaConf 2024

GigaConf 2024

DevTools в каждом из нас

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

Понятно, почему так происходит — ведь в загадочную категорию DevTools попадает абсолютно все, чем пользуются разработчики во время своей ежедневной рутины: от IDE до анализаторов кода, от профиляторов до дебаггеров, от платформ для хостинга кода до CI/CD, issue-трекеров и многих других инструментов. И у каждого девелопера есть свое мнение, боль и опыт, связанный с ними.

Именно поэтому на прошедшем фестивале Positive Hack Days 2024 в Лужниках мы не преминули воспользоваться моментом и устроил такой кликбейт. Ведь в России очевидно эта тема стала особенно горячей (например, спустя полтора месяца на площадке GigaConf от Сбера мы уже собирали похожий трек про DevTools). На PHDays я немного сжульничал и расширил тему до еще более общей, собрав трек »Languages and Tools». То есть мы обсуждали не только стандартные инструменты, но еще и самые главные DevTools для любого разработчика: сами языки программирования, компиляторы, интерпретаторы и связанные технологии. В итоге, неожиданно для меня, у нас спонтанно получилось сквозное повествование из семи докладов с кросс-ссылками друг на друга и очень живым общением.

В итоге, трек у нас открывал Chair сообщества EuroLLVM и контрибьютор в LLVM/Clang Андрей Боханко, который больше десяти последних лет лично участвует в развитии этих проектов (кстати, рекомендую его статью). А вишенкой на торте стал доклад от контрибьютора в Java и автора сортировки Dual-Pivot Quicksort в JDK Володи Ярославского. Ну и конечно, когда разговор заходит про инструменты для разработчиков, не могло обойтись и без авторов популярных опенсорс библиотек, которые выступили с хардкором про фаззеры, сэмплирующие профайлеры, концепты компиляторов (на примере MOJO) и мультивселенную Kotlin.

Да кто такие, эти ваши DevTools

И как раз на PHDays, в перерывах между хардкорными докладами я умудрился сделать легкий доклад »Open-source-инструменты для разработчика, которые мызаслужили». В нем я сделал небольшой поверхностный обзор инструментов и процессов девелопмента, которые полезны при создании своих проектов. По большому счету, этот доклад как раз и отвечал на вопросы: что же такое DevTools? Что вообще доступно разработчику, и в каком порядке стоит расставить приоритеты, чтобы построить свой проект с нуля?

Говоря об инструментах для разработчика, кажется, что сразу можно определить некоторую инфоцыганскую пирамиду «Потребностей», которая всегда определяет то, в какой последовательности растет почти любой проект (мы как-то описывали такую пирамиду для Java разработчиков на Jpoint). Это движение обычно происходит поступательно от сырого проекта, в котором просто выбран язык программирования, до состояния, в котором автоматизация разработки доведена до абсолюта (как у ситхов) вплоть до авто-рефакторинга кода, всевозможными удобствами в CI, проверками кода и даже разработкой проектов автономными AI-ассистентами вроде AutoGPT (кстати, отличный список всех таких AI инструментов собран тут). В этой статье мы попробуем взглянуть на самые интересные и важные из них в контексте написания кода отдельным разработчиком.

Пирамида потребностей разработчика

Пирамида потребностей разработчика

Причем тут Open-source

Open-source сам по себе является флагманом DevTools, ведь именно здесь сообщество настолько большое и активное, что большинство идей таких инструментов появляются и сразу апробируются тут же. А ведущую роль в развитии этого сообщества продолжает конечно же играть GitHub, который предоставляет площадку для всевозможных плагинов и активно исследует, как можно улучшить опыт разработки ПО. Все движение индустрии обкатывается именно здесь. Поэтому, надеюсь, что не обижу создателей суверенных Git-хостингов, но мои примеры будут основаны на том, что происходит на этой платформе. К слову, многие разработчики не знают, что ознакомиться с новыми трендами, которые у исследовательской команды Github сейчас в фокусе, можно на githubnext.com. Авторы, не стесняясь, у себя на сайте так и пишут: «Исследуем будущее разработки программ».

8425f7a34ce828e215dff3a2979bd35a.png

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

  • Realtime GitHub и Collaborative Workspaces: возможность совместной работы над проектом в режиме реального времени, как в GoogleDocs. В первом случае речь идет о модификации документов и кода прямо на платформе в вебе, а во втором случае — в 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.

80% современных исследований про применение AI в разработке

80% современных исследований про применение AI в разработке

У Github Next меня еще очень цепляет и иногда заставляет грустить — это sunset модель, когда над исследованием заходит солнце экономической целесообразности Майкрософта. Так, например, умер мой любимый проект разношерстной кастомизации репозиториев GitHub Blocks. Надеюсь хотя бы, что однажды суверенные Git-хостинги таки доделают эту функциональность.

The Blocks technical preview ended on December 15th, 2023. Learn more about why Blocks is being sunset.

Вообще, GitHub, несмотря на свое название, уже давно перестал быть обычным Git-хостингом, и стал полноценной средой для разработки, со своим Cloud IDE (за счет Codespaces), своими CI (за счет крайне удобного Actions) и даже возможностью написания своих плагинов, которые могут быть нативно встроены в процесс ревью. В девелоперской пирамиде потребностей эко-система GitHub покрывает почти все ступени, может только за исключением полноценной роли как Cloud-провайдера.

И даже при этом, GitHub не останавливается и превращается в некоторую социальную сеть для разработчиков с функциональностью Stackoverflow (Discussions), механизмами достижений, в меру тщеславными рейтингами и даже своими собственными «рок-звездами» (stars.github.com). Причем вокруг этой рейтинговой системы строятся целые стартапы, вроде opensource-heroes.com или gitstar-ranking.com которые собирают и ранжируют людей по звездочкам на проектах.

Рынок платформ для разработки и IDE

Однако, в этой красивой истории с платформой, которая закрывает все потребности разработчика есть и ложка дегтя: пройти простой квест от «я написал код в IDE» до «я выложил код в open-source» становится сильно сложнее в силу политических обстоятельств. Microsoft уже применял ограничительную политику к группам разработчиков, вынуждая появляться все новым суверенным платформам, которые конкурируют с GitHub. И здесь появляются действительно сильные игроки, такие как Gitee (крупнейший Git-хостинг в Китае от OSChina), которые начинают отъедать у Github долю рынка.

Ну и очевидно, что также идет некоторое движение в сторону децентрализованных платформ для разработчиков и Git-хостингов. Например таких, как проект radicle.xyz. 

Имя им - легион, и это далеко не всё

Имя им — легион, и это далеко не всё

Мои друзья из JB меня наверняка раскритикуют, но ту же самую историю сейчас уже видно с IDE, которые так или иначе разрабатываются многими крупными компаниями, которые пытаются закрыть и свои потребности и повторить успех двух лидеров рынка, которые производят как десктопные IDE, так и облачные решения. Microsoft представлен своими VSCode и Codespaces, а JetBrains со своим набором IDE и инструментов совместной разработки: плагина CodeWithMe и Space.

Стоит отметить и саму борьбу этих двух компаний между собой: судя по масштабным опросам, таким как StackOverflow Survey, VSCode лидирует на широком рынке, хотя платформа Intellij все еще абсолютно доминирует на рынке JVM-языков. Это происходит, поскольку VSСode от Microsoft имеет крайне слабую поддержку Java (через плагин от Red Hat).

Visual Studio Code - лидирующая IDE//

Visual Studio Code — лидирующая IDE//

Continuos Integration

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

Если мы исключим инструменты менеджмента команды из опроса The State of Developer Ecosystem 2023 (от JetBrains), и оставим только инструменты, от которых непосредственно зависит разработка программ, то именно CI займет лидирующую позицию после платформ совместной разработки. 

Номер 4 в рейтинге популярности

Номер 4 в рейтинге популярности

В том же опросе, неожиданно для меня, Jenkins имеет лидирующую позицию в категории CI по количеству использований, даже обгоняя очень простую и удобную интегрированную в GitHub платформу Actions и GitLab CI.

18822d5310f7d41e5ae1af3e7d4548cf.png

На плечах у CI: что делает ваш проект лучше

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

  • Проверка кодовой базы анализаторами кода. Кстати, вот отличный список с популярными открытыми анализаторами кода.

  • Автоматическое обновление кодовой базы. Начиная от версий проекта в readme и заканчивая автоматическим рефакторингом кода.

  • Сбор метрик каждого изменения кода: от процентов тестового покрытия через CodeCov, до метрик кода, например Cognitive Complexity. Ну и сбор общих метрик для проекта (OpenSSF Best Practices, Codebeat и многие другие).

  • Ну и главным удобством является помощь разработчикам c код ревью (Codacy, Code Climate, CodeFactor). Интересно, что у GitHub было большое исследование по поводу автоматического ревью кода от Copilot, которое было завершено в декабре 2023 го года без полноценного добавления этой функциональности на Github.

Поэтому крупные платформы, со встроенным CI (такие как Github) предоставляют возможность не только удобно создавать и размещать у себя подобные плагины для workflow, но и нативно интегрировать их в процесс ревью за счет специального формата SARIF, тулинг для которого позволяет загружать отчеты статического анализа прямо в Git-хостинг и отображать эти результаты прямо во время ревью.

Пример интеграции с Github через SARIF

Пример интеграции с Github через SARIF

Особенно это применимо к приложениям, занимающимися анализом кода, ведь советы анализатора появляются как комментарии живого человека непосредственно на ревью. При этом в опенсорс есть два очень крупных агрегатора анализаторов кода, пользующиеся этими форматами: Spotless и Super-linter, на которые стоит обратить внимание.

Отдельно стоит упомянуть также модное у крупных компаний сканирование проектов на проблемы с third-party зависимостями, причем речь не только идет про supply-chain атаки, но и про банальное использование кода или зависимостей, которые потенциально могут иметь несовместимую или строгую лицензию. Среди таких утилит стоит выделить платформу FOSSA.com, выполняющую комплексную проверку зависимостей проекта. И конечно Dependabot, ставший частью GitHub и выполняющий комплексную проверку на наличие уязвимостей в зависимостях. А также RenovateBot, который автоматически позволяет обновлять зависимости проекта на новые версии по расписанию. 

В качестве заключения

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

Github Marketplace

Github Marketplace

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

Типичные помощники разработчика

Типичные помощники разработчика

© Habrahabr.ru