Дисклеймер
Эта статья родилась после моего участия в организации нескольких треков об инструментах для разработчиков на крупных Российских индустриальных конференциях в 2024 году. Основной ее целью является рассказать о том, что интересно девелоперскому коммьюнити, поделиться своим пониманием и накидать ссылочек "на посмотреть". Поэтому, для полного погружения рекомендуется прогуляться по ссылкам и посмотреть пару видео. Nuff said.
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. Авторы, не стесняясь, у себя на сайте так и пишут: "Исследуем будущее разработки программ".
Но, по большому счету, там сейчас все современные исследования ведутся вокруг 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.
У Github Next меня еще очень цепляет и иногда заставляет грустить - это sunset модель, когда над исследованием заходит солнце экономической целесообразности Майкрософта. Так, например, умер мой любимый проект разношерстной кастомизации репозиториев GitHub Blocks. Надеюсь хотя бы, что однажды суверенные Git-хостинги таки доделают эту функциональность.
Вообще, 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).
Continuos Integration
В нашей иерархии стоит еще выделить системы для Continuous Integration или CI, без которых не получили бы своего активного развития многие инструменты сборки, тестирования, автоматической валидации и анализа кода. Ведь именно CI позволяет регулярно и автоматически запускать все эти проверки и вырабатывать у команды разработчиков правильные паттерны подходов к разработке. CI закрывает две основные потребности разработчика: сборку на каждый PR и коммит в основную ветку, а также регулярное автоматическое тестирование.
Если мы исключим инструменты менеджмента команды из опроса The State of Developer Ecosystem 2023 (от JetBrains), и оставим только инструменты, от которых непосредственно зависит разработка программ, то именно CI займет лидирующую позицию после платформ совместной разработки.
В том же опросе, неожиданно для меня, Jenkins имеет лидирующую позицию в категории CI по количеству использований, даже обгоняя очень простую и удобную интегрированную в GitHub платформу Actions и GitLab CI.
На плечах у CI: что делает ваш проект лучше
Но CI и его функциональность - это совершенно точно не только базовый минимум, который мы перечислили выше, со сборкой проекта. Это также приятные бонусы:
Проверка кодовой базы анализаторами кода. Кстати, вот отличный список с популярными открытыми анализаторами кода.
Автоматическое обновление кодовой базы. Начиная от версий проекта в readme и заканчивая автоматическим рефакторингом кода.
Сбор метрик каждого изменения кода: от процентов тестового покрытия через CodeCov, до метрик кода, например Cognitive Complexity. Ну и сбор общих метрик для проекта (OpenSSF Best Practices, Codebeat и многие другие).
Ну и главным удобством является помощь разработчикам c код ревью (Codacy, Code Climate, CodeFactor). Интересно, что у GitHub было большое исследование по поводу автоматического ревью кода от Copilot, которое было завершено в декабре 2023го года без полноценного добавления этой функциональности на Github.
Поэтому крупные платформы, со встроенным CI (такие как Github) предоставляют возможность не только удобно создавать и размещать у себя подобные плагины для workflow, но и нативно интегрировать их в процесс ревью за счет специального формата SARIF, тулинг для которого позволяет загружать отчеты статического анализа прямо в Git-хостинг и отображать эти результаты прямо во время ревью.
Особенно это применимо к приложениям, занимающимися анализом кода, ведь советы анализатора появляются как комментарии живого человека непосредственно на ревью. При этом в опенсорс есть два очень крупных агрегатора анализаторов кода, пользующиеся этими форматами: Spotless и Super-linter, на которые стоит обратить внимание.
Отдельно стоит упомянуть также модное у крупных компаний сканирование проектов на проблемы с third-party зависимостями, причем речь не только идет про supply-chain атаки, но и про банальное использование кода или зависимостей, которые потенциально могут иметь несовместимую или строгую лицензию. Среди таких утилит стоит выделить платформу FOSSA.com, выполняющую комплексную проверку зависимостей проекта. И конечно Dependabot, ставший частью GitHub и выполняющий комплексную проверку на наличие уязвимостей в зависимостях. А также RenovateBot, который автоматически позволяет обновлять зависимости проекта на новые версии по расписанию.
В качестве заключения
Про инструменты для разработчика можно говорить бесконечно, ведь только на Github Marketplace можно найти тысячи небольших утилит, помогающих разработчику делать свою основную обязанность - писать код.
И поэтому в этой статье мы поговорили только о базовых вещах и принципах, на которые стоит обратить внимание. Очень надеюсь, что у меня хватит сил, чтобы родилась серия более глубоких статей на эту тему. В любом случае, я уверен, что индустрия Dev tools будет и дальше расти семимильными шагами, особенно с активной помощью искусственного интеллекта. И все больше инструментов будет напрягать и бить по голове алертами облегчать жизнь рядовому разработчику. Ну а разработчики будут и дальше наносить ответный удар.