Эта история случилась в 2015 году. Тогда я написал статью для своего сайта на болгарском языке. А в прошлом году, я решил подтянуть свои знания в русском языке. И сделал этот перевод в качестве упражнения.
Ну и решил опубликовать. Конечно осовременил и укомплектовал картинками.
Надеюсь, эта почти детективная история вам понравится.
Рассказ о том, как работает Tiobe index, как это связано с ассемблером и о моей маленькой роли во всем этом.
Я уже много лет занимаюсь программированием на ассемблере и продвижением этого языка среди программистов.
Совершенно естественно, делая все это просто как хобби, мне всегда было интересно насколько популярен ассемблер на самом деле?
Дело в том, что это язык, который «официально» как бы и не существует. Почти не издаются книги про ассемблер, а те которые издаются безнадёжно устарели. Не пишутся статьи, а когда пишутся, они попадают в раздел «ненормальное программирование» или в лучшем случае в «написание вирусов».
Однако, работая в этой области в течение многих лет, мне стало казаться, что дела обстоят не совсем так. Почему-то создаётся впечатление, что используют ассемблер намного больше, чем принято говорить.
Что-то вроде апокрифического языка, который используют часто, но тайно, чтобы не быть обвинёнными в ереси за использование антипаттернов, дурных практик и других языческих методов программирования.
А во времена, когда методологии программирования становятся все более догматичными, такое обвинение очень серьёзно и может иметь самые грустные последствия, как для отдельного программиста, так и для всего проекта. И это не гипербола.
Когда мне стало понятно, что ассемблер попадает в зоны как бы программистского андерграунда, у меня возникло желание получить хоть каких-то объективных данных насчёт популярности ассемблера среди программистов.
После некоторого исследования этого вопроса, я начал отслеживать некоторые сайты, исследующие популярность языков программирования через статистические методы.
Tiobe – это консалтинговая компания, которая занимается главным образом исследования качества ПО. Не знаю как хорошо их бизнес идёт, но они однозначно наиболее известны тем, что каждый месяц публикуют индекс популярности языков программирования.
Методика расчёта этого индекса проста – они используют несколько десятков поисковиков, которым отправляют следующий запрос: +"%LANGUAGE% programming"
. (заметьте, что кавычки – часть запроса и они важны для результата). Дальше, в зависимости от количества найденных страниц, рассчитывается и рейтинг языка.
Конечно, данные обрабатываются статистически, нормализуются, а разные поисковики имеют разный вес. Все, как положено. Кстати, подробно метод исследования документирован в статье Tiobe index definition.
Эта методика, хоть и простая, даёт сравнительно адекватные результаты. Хотя и неясно что именно эти результаты значат. То ли широту использования языка, то ли желание людей изучать его (это не одно и то же), то ли сложность языка и желание программистов найти решение своих проблем. Но так или иначе, в каком-то смысле, все это можно назвать «популярностью».
А сейчас, посмотрим где находится ассемблер в этом рейтинге? Так как Тиобе публикует только результаты текущего месяца, а архив только продаётся, то мне не оставалось ничего, кроме как пойти на Wayback Machine и посмотреть что там можно нарыть.
Есть данные, что Tiobe занимается подобными исследованиями как минимум с 1987 года, но самые старые доступные архивы относятся к 2001 году. Однако, в рейтинге 2001 года, ассемблер вовсе и не фигурирует.
Это конечно не странно, так как в то время считалось что ассемблер, это язык, на котором никогда больше никто не будет писать. (По иронии судьбы, именно в начале нулевых годов начались публикации о программировании на ассемблере для современных ОС – например замечательные туториалы Iczelion-а, вышли первые версии FlatAssembler и вообще начался некий asm-ренессанс)
Явно, составители получали на почту вопросы почему ассемблер не фигурирует в
индексе, так как в июне 2003 года, они начали публиковать на странице следующее туманное
и запутанное оправдание:
Языки ассемблера не включены в индекс, потому что они так отличаются друг от друга, что по нашему мнению, их следует рассматривать отдельно.
Как бы то ни было, но это состояние сохранялось вплоть до декабря 2010 года, когда
составители решились посмотреть правде в глаза и включить ассемблер в индекс. Это было сделано со следующим комментарием:
Rob Lee suggested to add Assembly languages to the TIOBE index. Although this has been proposed for many years his arguments were convincing: "I was curious about why assembler language isn't included in your index. The language is (obviously) Turing complete, and has a Wikipedia article, which would seem to qualify it for inclusion based on the criteria defined on tiobe.com.". Assembly has been added to the index. It starts at position 17.
Роб Ли посоветовал включить ассемблер в Tiobe Index. Хотя это и предлагалось в течение многих лет, его аргументы были убедительными: «Мне было интересно, почему язык ассемблера не включён в ваш индекс. Этот язык (очевидно) является полным по Тьюрингу, и у него есть статья в Википедии, что, казалось бы, даёт право на включение его в индекс на основании критериев, определённых на tiobe.com.» Ассемблер был добавлен в индекс. Он начал на 17-ом месте.
Кстати, заметьте это «has been proposed for many years» – «предлагалось в течение многих лет»! Кем предлагалось? Сколько их было? Неизвестно.
Что интересно, это то, что язык, который игнорировался в течение 9 лет, сразу попадает на 17-ом месте, между Pascal(16) и Ada(18). Как по мне, это замечательный дебют.
И не только! В следующих месяцах, ассемблер поднимался в рейтинге и в марте 2011 года занял аж 12-ое место.
Подробности неизвестны, потому что эти перемены видны только на единственной сохранившейся графике в архиве:
Следующая полная запись в архиве лишь с мая 2011 года. На ней, ассемблер находится на 14-ом месте:
Такой резкий старт и высокое место в рейтинге, очевидно произвели на составителей впечатление, потому что они включили следующий вопрос/ответ в раздел ЧЗВ сайта:
Q: How come that Assembly is so popular nowadays?
A: It seems as if Assembly is new in the top 20. This is not the case. Through the years we had a lot of discussions with followers of the index whether Assembly should be part of the index or not. Until now we could convince them to leave Assembly out. However, recently we defined objective criteria to qualify for the index and Assembly appeared to meet these criteria. So we added Assembly at the end of 2010. Since no historical data is available, it seems as if it comes out of nowhere, whereas it was probably in the past at least as popular as it is now.
В: Как получилось, что ассемблер так популярен в наши дни?
О: Выглядит так, как будто ассемблер новенький в первой двадцатке. Но это не так. На протяжении многих лет у нас было много дискуссий с последователями индекса о том, должен ли ассемблер быть частью индекса или нет. До сих пор нам удавалось убедить их не включать ассемблер. Однако, недавно мы сформулировали объективные критерии для включения в индекс и оказалось, что ассемблер соответствует этим критериям. Поэтому мы добавили ассемблер, в конце 2010 года. Поскольку исторических данных нет, кажется что он появился ниоткуда. Но вероятно в прошлом он был по крайней мере так же популярен как и сейчас.
Как бы то ни было, но в 2012 году ассемблер вдруг покатился во «второй лиге» – до 26-ого места, где не отслеживаются подробные графики. В марте 2013 года опять попал в «первой лиге» на 20-ое, а потом и на 19-ое место и до середины 2014 года держался на 17..18-ом местах в рейтинге. Однако, после августа 2014 года последовало резкое и продолжительное падение до 30-ых позиций и ниже, из которых казалось, что уже не выбраться.
Ну, что же, как футбольные фанаты не предают свою команду, когда она вылетает из турнира,
так и я, грустно вздохнул и продолжил писать свои проекты на ассемблере.
Но постепенно во мне зародилось подозрение, что такое падение в рейтинге не было реальным, а вызвано ошибкой в измерениях.
Однако, загадка начала расплетаться с другого конца. Однажды я заметил, что на stackoverflow, часто публикуются вопросы с меткой «assembly», но вопросы задают о C# а не о ассемблере.
Я заинтересовался и быстро нашёл, что оказывается, в .net есть, то ли библиотеки, то ли пакеты, которых называют «assembly». Наверное в Майкрософт решили, что слово свободное, раз «никто уже не пишет на ассемблере».
Выходит, что в английском языке, одним словом называют и язык программирования и библиотеки .net.
Но как этот факт отражается на Tiobe Index?
Чтобы понять что происходит, давайте впервые разберёмся, как на самом деле называется этот язык программирования на английском языке. Вопрос отнюдь не тривиальный, потому что с момента появления компьютеров всегда существовали разногласия по поводу названия этого языка. Более того, я подозреваю, что у него никогда не было имени в подлинном смысле этого слова.
Программа, которая компилирует исходники в бинарный код всегда называлась «assembler», но язык никогда не имел официального названия, поскольку он никогда не разрабатывался и не стандартизировался как язык для общего применения, а всегда возникал естественным образом, в соответствии с идеями тех, кто пишет компиляторы и спецификациями производителя процессора (и эти спецификации являются скорее всего аппаратными, а не программными).
По этой причине, со временем люди стали использовать несколько названий, производных от названия компилятора – «assembler». А точнее «assembler», «assembly» и «assembly language». Очень часто используется и сокращение «asm».
В Интернете всегда были споры насчёт как правильно называть язык и компилятор этого языка. Консенсус, конечно, никогда не был достигнут, но более-менее принято называть язык «assembly» или «assembly language», а компилятор «assembler».
Кстати, в русском и болгарском языках, наоборот, и язык и компилятор называют «ассемблером». Хотя в старых книгах встречается и громоздкое «язык ассемблера».
Итак, у меня возникла гипотеза, что поскольку слово «assembly» широко используется для обозначения .net-ских библиотек, то люди, которые пишут что-то о языке ассемблер, или задают вопрос в Интернете, не используют в своём тексте слово «assembly», чтобы избежать двусмысленности, а выбирают один из других вариантов названия языка.
Самый простой вариант избежать двусмысленности, это использовать «assembly language» – и слово привычное и понятно, что говорим о языке, а не о библиотеках .net. Именно так называется язык и в Википедии.
Но с другой стороны, Tiobe использовал в качестве названия одиночное слово «assembly». При этом ещё и запрос в кавычках. То есть запрос "assembly programming"
не будет возвращать результаты о .net потому что никто так не выражается. Библиотеку можно компилировать, скомпоновать, но программирование библиотек никак не отличается от программирования чего-либо другого. Так что вряд ли кто напишет «assembly programming» имея ввиду .net и C#.
С другой стороны, запрос +"assembly programming"
не вернёт страницы на которых написано «assembly language programming» или «assembler programming» и тем более «asm programming».
Следовательно, возможно что люди используют один вариант, а Tiobe другой, таким образом получая сильно заниженные данные по ассемблеру.
Эту гипотезу очень просто проверить. Если она верна, то запрос "assembly programming"
должен возвращать меньше результатов, чем "assembly language programming"
.
Наоборот – если гипотеза не верна, то более длинная фраза в кавычках должна возвращать
меньше результатов, чем более короткая.
После простой проверки в Google, так и оказалось. У вас числа могут быть другими,
но соотношение как правило сохраняется:
+"assembly programming" = 281000 результатов
+"assembly language programming" = 690000 результатов
Выходит, что по методике Tiobe, результаты для ассемблера занижены по крайней мере в два с половиной раза. (на момент написания оригинала, эта разница была меньше – около полутора раз – но все равно это было много.)
Конечно, я не мог оставить такую вопиющую несправедливость просто так, и поэтому в апреле 2015 года, написал письмо Полу Янсену (занимается поддержкой индекса), в котором написал ему, что логично было бы изменить названия языка с «assembly» на «assembly language».
Пол оказался мужиком вменяемым, энтузиастом своего дела, согласился, что мои аргументы логичны, и пообещал, что такие изменения будут внесены в индекс.
Дело сделалось не быстро, но в июне 2015 года индекс вышел с новым именем языка.
В результате этой коррекции, в июле 2015 года, ассемблер занял своё законное место, а именно 12-ое, а в январе 2016 года установил рекорд, войдя в топ-10 (на 9-ом месте).
С тех пор, ассемблер почти всегда находится в топ-10 рейтинга и несколько раз занимал аж 8-ое место. Где и находится в момент написания этой статьи (декабрь 2021 года):
Какова мораль этой истории со счастливым концом?
Их две.
Во первых, ассемблер здесь, всегда был здесь и активно используется. Слухи о его смерти всегда были сильно преувеличенными. Он жив и находится в прекрасном здравии.
И в отличие от многих языков программирования, которые рождаются, имеют свои 3 минуты славы и умирают забытыми, ассемблер, хоть и остаётся в тени и пренебрежении, на самом деле, имеет реальную популярность, которая не меняется под влиянием текущей конъюнктуры и моды.
Во вторых, статистика дело не простое. Делая статистические исследования надо очень внимательно проверять что именно вы измеряете и какой физический смысл тех чисел, которые вы получаете на выходе своих программ.
К тому же, то что было правильным вчера, может оказаться неправильным сегодня. То есть статистические программы, которые работают с данными из реального мира, надо контролировать на достоверность постоянно. Так как мир меняется незаметно.
Ну и в третьих (бонус мораль), придумывая имя своего нового языка программирования, думайте внимательно, как он будет выглядеть в поисковых запросах. Создатели Go не дадут соврать. Хотя им это и не помогло – ассемблер все равно популярнее.
Автор: John Found