Webrium
Подписаться

Доля языков: кто теряет, а кто набирает

Наш замер долей: полезное в таблице — не порядок лидеров, а изменение малых величин

Доли языков: малые величины растут быстрее крупныхмалые растут быстрее

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

Данные: GitHub, доля языка среди репозиториев с активностью за неделю; окно 6 июля — 30 августа; измерено 6 сентября. Метод описан ниже, ограничения — тоже.

Что именно измерено

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

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

Сразу об ограничениях. Это замер публичных репозиториев, а не отрасли: корпоративный код сюда не попадает вообще. Язык репозитория определяется по объёму файлов, поэтому проект со сборкой на одном языке и логикой на другом попадает в одну корзину. И это активность, а не количество людей, не деньги и не вакансии.

Ещё одно ограничение стоит назвать прямо, потому что оно объясняет, почему наши ряды нельзя складывать с чужими. Отметка активности у репозитория — это дата последнего изменения, а не число изменений. Репозиторий, куда за неделю пришла сотня правок, и репозиторий, куда пришла одна, попадают в выборку одинаково. Такой замер хорошо показывает, где работа идёт, и плохо — сколько её там.

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

Тупик: смотреть, кто «на первом месте»

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

Наш замер это подтверждает буквально. Python занимает 34,2% выборки, JavaScript — 27,5%, TypeScript — 27,1%. Три первые строки закрывают почти девять десятых, и любой из этих языков «первый» в своей области. Порядок в верхней части таблицы не подсказывает решения, он только говорит, что найм по этим языкам будет проще.

Полезная информация в другой колонке — в изменении доли за окно.

Что показывает изменение

Растут в доле два языка: Go прибавил 14,3% своей доли, Rust — 11,6%. Это не значит, что они догоняют лидеров: у Go доля 2,4%, у Rust — 2,0%, и рост считается от маленькой базы. Значит это другое: активность в них прибавляется быстрее, чем в выборке в целом.

Растёт также TypeScript — 4,7% к своей доле, и это уже рост крупной величины: доля больше четверти. На этом фоне JavaScript теряет 1,1%. Два числа удобно читать вместе: суммарно фронтенд не сдувается, внутри него идёт замещение.

Теряют долю Python (−3,3%) и Java (−3,6%). Про Python это не «падение популярности»: с долей больше трети он остаётся самой крупной строкой, и снижение доли на таком масштабе означает лишь, что соседи растут быстрее.

Что изменение доли значит на практике

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

Отсюда следует неочевидное. Языки, на которых начинают новое, всегда выглядят в таком замере лучше языков, на которых поддерживают старое. Java и Python несут на себе огромный объём уже написанного, и этот объём в замере почти не виден: работающая система, куда не приходят изменения, для нас невидима.

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

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

Как это читать, выбирая язык команде

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

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

Третье: замещение внутри одной ниши (как TypeScript и JavaScript) значит больше, чем движение между нишами. Оно показывает, куда переезжают команды, которые уже решили задачу того же класса, что и ваша.

Четвёртое: ни одно из этих чисел не отменяет стоимости содержания. Язык выбирают на годы, а платит за выбор тот, кто будет чинить систему через несколько лет.

Чего замер не говорит

Он не говорит, на чём пишут в компаниях: закрытый код в выборку не попадает.

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

Он не говорит о качестве и не говорит о деньгах. Доля активности — это про то, где сейчас идёт работа, а не про то, где она окупается.

И он не переносится на следующий квартал. Восемь недель — короткое окно; направление в нём видно, скорость — нет.

Позиция редакции

Мы считаем, что таблицу долей стоит читать снизу вверх: полезное в ней — изменение малых величин и замещение внутри одной ниши, а не порядок лидеров. Практический вывод: если язык выбирается под задачу, которую в отрасли решают массово, смотрите на замещение внутри её ниши; если под редкую — таблица долей вам не помощник, считайте стоимость найма и содержания.

Мы неправы в одном случае: когда язык выбирается под наём стажёров и джуниоров. Там верхняя часть таблицы решает почти всё, и брать язык с растущей, но маленькой долей — значит платить за каждого человека дороже без выгоды, которую можно предъявить.

С чем это связано

Метка над заголовком говорит, зачем туда идти: продолжить тему, перейти к практике или увидеть возражение.

Фильтр выбора: из нескольких языков для микросервисов проходит один — Go, ставший дефолтом платформыЯзыки для сервисовGo — дефолт
Усиление

Почему Go стал платформенным дефолтом

Усиливает вывод про выбор: как устроен выигрыш Go и почему этот выбор закрывают один раз и надолго.

Сетка сервисов: закрашены лишь три ячейки — случаи, где Rust окупается; рядом счётчик сэкономленных машинЭкономия машин
Спор

Rust в сервисах: где окупается, а где нет

Возражение по существу: спор давно идёт не о скорости, и решают его два фактора, ни один из которых не технический.

Столбцы времени закрытия вакансии растут всё круче и взлетают над пунктирным планом: у редкого языка сроки найма растут как произведение этапов воронки, а не кавремя закрытия
Практика

Найм под редкий язык: сколько это стоит на самом деле

Руками по деньгам: как посчитать наём под редкий язык через время закрытия, часы интервьюеров и простой команды.

Письмо по вторникам

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

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

выбрать · Enter открыть · Esc закрыть