asm32.info
Keep it simple — code in asm

Тиобе, статистика и асемблер

Тази статия е малко по-различна от останалите ми статии. В нея ще ви разкажа как се измерва популярността на езиците за програмиране в "Тиобе индекс", каква връзка има това с асемблер и моята малка роля в тази класация.

Знаете, че в продължение на много години аз се занимавам с програмиране на асемблер и популяризиране на този език сред програмистите. Съвсем естествено, вършейки тази работа просто за удоволствие, винаги ми е било интересно доколко всъщност популярен е асемблерът, като език за програмиране. Работата е там, че това е език, който "официално" като че ли не съществува. Почти не се издават книги за асемблер, а тези които се издават са безнадеждно остарели. Не се пишат статии, а когато се пишат то тезата е "всички знаят, че вече никой не пише на асемблер".

Обаче, работейки в тази област в продължение на години, започна да ми се струва, че нещата не стоят точно така. Някак си се натрапва впечатлението, че асемблер се използва много повече отколкото е прието да се говори. Нещо като апокрифен език за програмиране, който много ползват, но тайно, за да не бъдат обявени за еретици, използващи антипатърни, лоши практики и други езически методи за програмиране.

А във време, когато методологиите за програмиране придобиват все по-догматичен вид, подобно обвинение е сериозно и може да има сериозни последствия, както за програмиста, така и за цели проекти. И това не е хипербола - имам личен опит.

Така че, когато започна да става ясно, че асемблер попада в зоната на нещо като програмистки ъндърграунд, у мене възникна желанието да получа някакви обективни данни за популярността на асемблер сред програмистите.

След известно проучване на въпроса, просто започнах да следя няколко сайта, занимаващи се с изследване на популярността на езиците за програмиране използвайки чисто статистически методи. За резултатите получени на един от тези сайтове се разказва и в тази статия.

Първо, за тези които не знаят, Тиобе е консултантска фирма, която се занимава с качество на софтуера. Не знам колко им върви бизнеса, но определено са най-известни с това, че всеки месец публикуват рейтинг на популярността на езиците за програмиране.

Методиката за изчисляване на този рейтинг е проста - използват се няколко десетки интернет търсачки, към които се отправя заявка за търсене от вида +"<language> programming" (забележете, кавичките са част от заявката и са важни за резултата). Според броя на върнатите резултати се изчислява и рейтинга на съответния език. Разбира се, данните се обработват статистически, нормализират се и различните търсачки имат различно тегло. Въобще, всичко е както си трябва - методът е описан подробно в статията Tiobe index definition

Тази методика, макар и проста, дава сравнително адекватни резултати. Друг е въпроса, какво точно изразяват тези резултати - дали популярността на езика, дали желанието на хората да го изучават (не е едно и също), дали трудността на езика и опитите на програмистите да намерят решение на проблемите си. Но тъй като всяко от тези неща може да се смята за "популярност" в някакъв смисъл, то можем да приемем, че рейтинга показва именно популярността на даден език.

А сега, нека видим, какво е положението на асемблер в тази класация. Тъй като фирмата публикува резултатите само от текущия месец, а старите резултати са срещу заплащане, то не ми остана нищо друго, освен да отида на web.archive и да погледна какво има архивирано там.

Има данни, че Тиобе се занимава с подобни статистики, поне от 1987г., но най-старите достъпни архиви са от 2001 година. В рейтинга за 2001 обаче, асемблер въобще не се споменава. Това разбира се не е странно, защото по това време официално се смяташе, че асемблер е език, на който никой, никога вече няма да пише. (по ирония на съдбата, именно в началото на нулевите години, асемблер отново започна да става популярен).

Явно съставителите на индекса са получавали на е-мейла си въпроси защо асемблер не е включен в индекса, защото от юни 2003 година започва да публикува на страницата следното неясно и засукано оправдание:

Assembly languages are not grouped in the index because they differ so much from each other in our opinion that they are treated separately.

Както и да е, това положение се запазва чак до декември 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.

Интересното в случая е това, че език, игнориран в продължение на 9 години изведнъж попада директно на 17-то място, между Pascal (16) и Ada (18). Чудесен дебют според мене!

И не само дебют. През следващите месеци асемблер се качва в класацията и през март 2011 заема дори 12-то място. Подробности не са известни, защото тези промени се виждат само на една запазена графика от архива. Следващият пълен достъпен запис е чак от юли 2011г. На него, асемблер е отново паднал на 17-то място.

Подобен летящ старт и висока популярност, очевидно е направила впечатление на публиката, защото съставителите включват следния въпрос/отговор във "често задавани въпроси":

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.

Демек - "Да бях знаяла, как' Сийке!"

Както и да е, през 2012-та асемблер се търкулва в Б-група (до 26-то място) в класацията, където за съжаление не се дават подробни графики за езика. Но през март 2013-та отново попада в А-група на 20-то място, после на 19-то. До средата на 2014-та продължава да държи 17..18-то място в класацията.

След август 2014-та обаче следва рязко и дълготрайно пропадане до 29..32 място от което изглежда, че няма измъкване.

Какво пък, както футболните запалянковци не зарязват отборът си когато изпадне от групата, така и аз въздъхнах тъжно и продължих да си пиша на асемблер.

Постепенно обаче, в мене възникнаха подозренията, че подобен спад в рейтинга не е реален, а се дължи просто на неточно измерване.

Загадката започна да се разплита обаче от съвсем различно място. Забелязах, че на stackoverflow, където понякога отговарям на въпроси за асемблер, много често се публикуват въпроси за C#, дот-нет и въобще разни джави, обозначени с тага assembly. В продължение на дълго време не обръщах особено внимание - к'во да ги правиш програмистите на дот-нет — "блажени са нисшите духом", както е казано.

Обаче после обърнах внимание, че в описанието на тага assembly е написано:

Подчертаването е мое

Assembly language (asm) programming questions. Also specify the processor or instruction set your question is related to as well as what assembler you are using. NOTE: For .NET assemblies, use the tag .net-assembly instead. For Java ASM, use the tag java-bytecode-asm instead.

Аха, казах си, ето къде било заровено кучето. Като се разтърсих малко се оказа, че в дот-нет имало някакви библиотеки ли, пакети ли, дето им викали "assembly" - явно M$ е решила, че думата е свободна, защото асемблер е мъртъв език, като латинския или санскрит.

Излиза, че с една и съща дума се обозначава и езика за програмиране и въпросните библиотеки в дот-нет. Но как се отразява това на Тиобе индексът?

За да разберем какво се случва, следва първо да разберем как всъщност се казва езикът за който говорим? Въпросът съвсем не е тривиален, защото още от зората на компютрите винаги е имало разногласия как се казва този език. Нещо повече, подозирам, че той никога не е имал име в истинския смисъл на думата.

Програмата, която компилира сорс кода до бинарен код винаги се е казвала "assembler", но езикът никога не е имал официално име, тъй като никога не е бил разработван и стандартизиран като език за обща употреба, а винаги е възниквал естествено, според представите на тези, които пишат компилаторите (асемблерите) и спецификацията на производителя на процесорите (които спецификации са по-скоро хардуерни, отколкото софтуерни).

По тази причина, с времето хората са започнали да използват няколко имена, производни на инструмента който се използва за компилиране - "assembler". Собствено, "assembler", "assembly" и "assembly language". Много често се използва и съкращението "asm", тъй като обобщава всички тези варианти.

В Интернет винаги е имало много спорове как точно следва да се нарича езика и как точно следва да се наричат компилаторите на този език. Пълен консенсус никога не е постиган, но на английски най-общоприетата тенденция е езикът да се нарича или "assembly" или "assembly language". На руски и български обаче обратно, езикът се нарича просто "асемблер", както и компилаторите за този език.

И така, в един момент у мене възникна хипотезата, че откакто думата "assembly" се използва широко за дот-нетските асемблита, има някаква вероятност потребителите, които пишат нещо за езика асемблер или задават въпрос в интернет, да не използват думата "assembly" в текста си, за да избегнат двусмислицата, а предпочитат някой от другите варианти на името на езика. Най-лесният начин за избягване на двусмислиците е използване на варианта "assembly language" - хем се използва общоприетата дума, хем е ясно, че става въпрос за езикът, а не за дот-нет библиотеките. Точно така е дефиниран езикът и във википедия.

От своя страна обаче, индексът на Тиобе използваше за име на езика именно единичната дума "assembly". При това, заявката за търсенето е за цяла фраза (изразът е в кавички). Тоест заявката "assembly programming" едва ли ще връща резултати за библиотеките за дот-нет, просто защото ако в тази заявка думата "assembly" означава библиотека, то думата "programming" просто не се вързва по смисъл. Тоест в текстовете за дот-нет библиотеки едва ли ще се среща често изразът "assembly programming", а в текстовете за асемблер, хората предпочитат да използват друг вариант на името.

От друга страна, заявката +"assembly programming" заради кавичките, няма да върне страници в които е написано "assembly language programming" или "assembler programming", или "asm programming". От тук е възможно потребителите да използват един вариант, а Тиобе да използва друг и в резултат данните за асемблер да се получават силно занижени.

Тази хипотеза лесно се проверява. Ако тя е вярна, то изразът "assembly programming" би трябвало да връща по-малко резултати от по-коректния израз "assembly language programming". Ако хипотезата не е вярна, то резултата би трябвало да е обратен, просто защото при търсенето за произволен фиксиран израз, колкото по-дълъг е изразът, толкова по-малко резултати се връщат от търсачките.

След проверката с Гугъл се оказа именно така (числата могат да варират):

+"assembly programming" = 238000 резултата +"assembly language programming" = 384000 резултата

Излиза, че по методиката на Тиобе, резултатите за асемблер са занижени поне един път и половина. Разбира се, не можех да оставя такава въпиеща несправедливост току така и затова през април 2015-та написах е-мейл до Paul Jansen, (който се занимава с поддръжката на индекса) в който му написах, че е логично името на езика да се смени от "assembly" на "assembly language".

Той се оказа разбран и ентусиазиран човек и се съгласи, че аргументите ми са логични и обеща, че ще такива промени ще бъдат направени. Промяната се позабави (разбира се) няколко месеца, но през юни 2015-та индексът излезе с новата заявка.

В резултат от тази корекция през юли 2015 година, асемблер зае мястото, което му се полага по право, а именно 12-то, а през януари 2016 дори постави рекорд, като влезе в топ-10 (на 9-то място).

Каква е поуката на тази история със щастлив край?

Тя е проста. Асемблер е тук, винаги е бил тук и се използва активно. Слуховете за смъртта му са силно преувеличени. Той си е жив и в отлично здраве. И за разлика от много езици за програмиране, които се раждат, изживяват своите 3 минути слава и умират, асемблер макар и в сянка и пренебрегван има всъщност реална популярност, която не се мени от текущите конюнктури и моди.

П.П. Освен Тиобе, има и други сайтове, които се занимават с изучаване на популярността на езиците за програмиране. Някои от тях просто не включват асемблер в проучването си. Там където го има, асемблер винаги е в горната част на рейтинга, без да показва някакви принципни отличия спрямо Тиобе индекса.

Last modified on: 22.06.2016 08:57:04

Preview

Comments

Title: Filename: