Для опытных программистов нет ничего необычного в том, чтобы переключаться с одного языка на другой. Это может быть сделано для удовлетворения требований различных проектов или просто для того, чтобы опробовать новые варианты. Какова бы ни была причина, существует довольно много миграции, как временной, так и постоянной.
Учитывая интерес программиста ко всем компьютерным языкам, недавний пост Варена Лонга, стажера по машинному обучению, в блоге source{d} затронул очень актуальную тему — разработчики меняют языки, на которых они кодируют, в течение периода времени, начиная с 2000 года и охватывающего 16 лет. Используемый подход был столь же увлекательным, как и сам результат, и в нем содержится много подробных математических и статистических данных, о которых стоит прочитать с точки зрения науки о данных. Сценарии, используемые для анализа, и сам пост в блоге, все с открытым исходным кодом и доступны.
Вдохновением для этого исследования кода GitHub послужило сообщение в блоге в марте этого года от Эрика Бернхардссона, который в собственном векторе “Почему мы перешли с языка X на язык Y” ответил на этот вопрос:
Можно ли создать таблицу непредвиденных обстоятельств N * N для перехода с языка X на язык Y?
Бернардссон проанализировал запросы Google, связанные с изменением языков, и охватил 25 языков. Единственным вопиющим упущением в списке языков был JavaScript, который Эрик объяснил двумя причинами:
“(а) если вы делаете это на интерфейсе, вы все равно застряли с ним, так что нет никакого движения (за исключением того, что вы делаете сумасшедшие вещи, такие как транспилирование, но это действительно не очень распространено) (б) все называют Javascript на бэкэнде » Узлом’». Наш конвейер поиска данных не мог отличить обычный JS от узла, и поэтому нам пришлось полностью исключить его.
В то время как анализ Бернхардссона отражал гипотетическую миграцию языка и включал тех, кто рассматривал или исследовал возможность переключения, анализ Лонга, основанный на исходном коде GitHub, а не на поиске Google, дает информацию о том, кто на самом деле сделал переключение или нет. Набор данных, которым располагал источник{d}, был:
4,5 Миллиона пользователей GitHub
393 разных языка
Всего 10 ТБ исходного кода
Был проведен некоторый предварительный анализ, чтобы исключить репозитории GitHub «Hello world» из набора данных, а затем была вычислена матрица переходов между последовательными годами для пользователей GitHub и суммирована по пользователям и за последние 16 лет. Результаты были нанесены на сетку с использованием сценария Бернхардссона, что позволяет легко получить обзор различий и сходств между двумя результатами.
В двух сетках перечислены языки в алфавитном порядке, а пустые строки и столбцы в исходной матрице{d} — это те языки для Cobol, Kotlin и Lisp, которые не были найдены в данных GitHub. Хотя числа в двух сетках очень разные, затенение основано на логарифмическом масштабировании от 1 до максимального значения — так представляют плотность.
Другая большая разница заключается в том, что, в то время как диагональ в таблице непредвиденных обстоятельств пуста (вы не можете рассмотреть возможность переключения с языка X на язык X), в матрице перехода потока это не так. На самом деле он всегда содержит самый плотный оттенок как в строке, так и в столбце и представляет тех, кто не переключает язык и использует один и тот же из года в год.
В своем сравнении популярности языков в двух анализах Лонг пишет::
Python (16,1 %), по-видимому, является наиболее привлекательным языком, за которым следует Java (15,3 %). Это особенно интересно, поскольку только 11,3% всего исходного кода на GitHub написано на Python.
В рейтинге Эрика Го был большим победителем с 16,4 %. Поскольку Эрик основывал свой подход на запросах Google, похоже, что шумиха вокруг Go, которая заставляет людей явно задаваться вопросом в блогах, стоит ли им переходить на этот язык, занимает немного времени, чтобы эффективно создавать проекты, написанные на Go на GitHub.
Кроме того, C (9,2 %) преуспевает в соответствии с оценкой Эрика в 14,3 %, хотя это связано с количеством проектов, закодированных на C на GitHub.
Хотя на GitHub в PHP в десять раз больше строк кода, чем в Ruby, они имеют одинаковое стационарное распределение.
Go (3,2 %) находится на 9-й позиции, что в значительной степени почетно, учитывая небольшую долю (0,9 %) проектов Go, размещенных на GitHub. Например, такая же доля проектов написана на Perl, но этот язык на самом деле не вызывает страсти (2 % популярности).
Для этой визуализации используется рейтинг популярности с наиболее популярным языком внизу.
Следующая матрица перехода показывает пропорции пользователей GitHub, переходящих с языка X на язык Y и наоборот. Так, например, он показывает, что 40% пользователей Scala переключаются на Java, в то время как 4% пользователей Java переключаются на Scala. Если вы суммируете пропорции, они не дотянут до 100%. Дефицит — это доля тех, кто из года в год придерживается своего языка.
Выделение примечательных моментов, Длинные комментарии:
Разработчики, кодирующие на одном из 5 самых популярных языков (Java, C, C++, PHP, Ruby), скорее всего, перейдут на Python с ок. вероятность в среднем 22%.
Кроме того, согласно матрице Эрика, люди переключаются с Objective-C на Swift и обратно с большей вероятностью — 24% и 19% соответственно.
Аналогично, разработчик Visual Basic имеет больше шансов (24%) перейти на C#, в то время как Erik’s почти уверен в этом переходе с вероятностью 92%.
Пользователи Clojure, C# и, прежде всего, Scala предпочли бы перейти на Java с вероятностью соответственно 22, 29 и 40%.
Люди, использующие числовые и статистические среды, такие как Fortran (36%), Matlab (33 %) или R (40%), скорее всего, перейдут на Python, в отличие от матрицы Эрика, которая предсказывает C как их будущий язык.
Один общий момент, который я нашел в результатах Эрика о Go, заключается в том, что он привлекает людей, которые отказались от изучения Ржавчины.
Лонг выбирает четыре матрицы из разных интервалов временной шкалы, которые, как он отмечает, показывают один и тот же языковой профиль каждый год, то есть самые глубокие оттенки в одних и тех же позициях. Вот два из десяти лет, 2005-2006 (с гораздо меньшим количеством языков) и 2015-2016.
Наконец, чтобы собрать все данные об использовании языка вместе, мы получаем эту хронологическую последовательность, в которой толщина каждой полосы соответствует значению в доминирующем собственном векторе.
Длинные комментарии:
Первые два языка, Python и Java, имеют один и тот же профиль. Они занимают место С в течение 15 лет. Действительно, агрегация этих первых 3 слоев дает прямой.
Привлекательность C++ заметно снизилась в 2008 году, когда такие языки, как Java или Ruby, начали быстро расти. Тем не менее, с этого периода он сохраняет свою популярность.
Я определенно поддерживаю вывод Эрика о том, что Перл умирает.
Apple представила Swift на WWDC’2014, и он должен был заменить Obj-C. Таким образом, принятие Obj-C должно начать уменьшаться после этого события, но сумма обоих языков должна оставаться неизменной. Глядя на рисунок, эта гипотеза оказывается верной.
У Руби, похоже, было 6 лет славы, начиная с 2007 года. Это можно объяснить запуском веб-фреймворка Ruby on Rails (RoR), который достиг важной вехи, когда Apple объявила, что будет поставлять его с Mac OS X v10.5 “Leopard” — выпущен в октябре.
Что касается Go, то популярность остается относительно низкой. Однако динамика явно положительная.
Чтобы понять заключительный комментарий, вам нужно знать, что Го стал лидером в анализе Бернхардссона, который он прокомментировал:
Удивительно, но (по крайней мере, для меня) Го — большой победитель здесь. Существует множество результатов поиска для людей, переходящих из X в Go. Я даже не уверен, что я чувствую по этому поводу (у меня смешанные чувства по поводу Go), но я думаю, что мой безошибочный анализ указывает на неизбежный вывод, что Go-это то, что стоит посмотреть.
Go-это язык, к которому существует большой гипотетический интерес. Действительно ли это язык будущего, может быть предметом повторного анализа в какой-то момент в будущем.