Ситуация с ЯП очень похожа на события этого фильма. Узнали же из какого?
Рейтинги субъективны
Начать стоит с того, что популярность языков программирования — понятие весьма субъективное. Для объективного анализа банально не хватает данных. Просто невозможно отследить даже примерное количество программистов, которые начали учить конкретный язык, или отдельных проектов, в которых он используется.
В основном для расчёта популярности ЯП используют данные поисковой выдачи крупных поисковиков. Но даже при единых исходных данных результаты аналитики иногда различаются кардинально.
Индекс TIOBE
Индекс TIOBE — один из самых известных рейтингов языков программирования. Для анализа используются запросы в поисковиках, которые включают название языка. Например, «python для новичков». Но уже здесь имеется несколько нюансов, которые потенциально могут повлиять на место ЯП в рейтинге.
Рейтинг не учитывает качество и количество написанного кода на конкретном языке. По сути для анализа используются косвенные данные.
TIOBE не учитывает поиск Яндекса. То есть как минимум половина запросов из русскоговорящих стран вылетает в трубу. Также не учитывается китайский поисковик Baidu. Тем не менее рейтинг остается одним из самых популярных.
Теперь непосредственно о языках программирования.
На первом месте оказался С. С начала года он стабильно занимает примерно 16% рынка.
Java, который ещё в январе был лидером, стремительно обваливается. Он потерял треть пунктов и опустился на третье место. Эксперты считают, что падение Java и подъем Python, который поднялся на второе место, — это следствие пандемии.
Популярность Python также подстёгивает значительный рост сферы Data Science, где Python считается приоритетным языком. К разочарованию поклонников R, Python требуют в 81% вакансий на позицию аналитика больших данных (читайте об этом в нашем материале), а R (без Python) нужен только в 3% случаев.
Впрочем, активное изменение рейтинга в 2020 году могло быть вызвано и майскими изменениями алгоритмов Google. Ведь именно в мае начались резкое падение рейтинга Java и рост Python.
Немного странной кажется низкая позиция JavaScript. 2 % рейтинга, и 7-е место — слишком заниженный результат, по нашему мнению. Ведь по количеству пулреквестов в GitHub JavaScript уверенно лидирует. Больше 20 % всех пулреквестов — это JavaScript. Для сравнения: Python на втором месте с показателем 15,9 %.
Активность сообщества разработчиков говорит куда больше, чем количество ключей в поисковой выдаче. И, несмотря на крепкую позицию JavaScript на GitHub, в TIOBE JavaScript за всю историю существования не поднимался выше 6-й позиции.
Вот, например, сравнение рейтинга JavaScript и C даже без учёта С++:
По рейтингу TIOBE, все шансы стать языком 2020 года есть у С. Если за декабрь не случится никаких серьезных изменений, то этот титул будет у языка второй год подряд — таким ранее мог похвастаться лишь Objective-C.
PYPL — рейтинг от GitHub
PYPL — это ещё один рейтинг популярности языков программирования. И он использует совершенно другую систему анализа.
TIOBE учитывает общее количество страниц, которые относятся к конкретному языку. Собственно, это одна из причин, почему С стабильно находится в лидерах, ведь многие популярные ЯП появились значительно позже.
Рейтинг PYPL использует для анализа Google-тренды. С их помощью оценивают, насколько часто пользователи ищут туториалы по конкретному языку. Ведь, по мнению создателей рейтинга, именно поиск туториалов показывает, насколько популярен язык конкретно сейчас.
PYPL показывает удивительную стабильность. Первая десятка позиций за последний год абсолютно не изменилась. А ведь именно на них приходится 85,94% всех запросов.
Уверенно лидирует Python, индекс которого почти в 2 раза выше, чем у Java с его вторым местом. При этом отрыв второго от третьего места — тоже почти в 2 раза. Так что в сумме Python и Java занимают почти половину всех запросов по туториалам. А это значит, что именно их активнее всего изучают в 2020 году.
По всем рейтингам — Python в топе (хоть и на втором месте после Java). Сохранится ли тенденция? Какие у языка перспективы?
Python не просто останется в топе еще много лет, но и поднимется по позициям. Если мы говорим о России, то это во многом обусловлено экономическими факторами. Люди поняли, что их профессии уже не такие нужные, да и денег приносят не так много. Поэтому многие начинают штурмовать IT-сферу и изучать программирование. А Python имеет очень низкий порог входа из-за простоты синтаксиса и, конечно же, сахара.
Тут мы приходим к другой причине. Python позволяет написать рабочий прототип скрипта с помощью нескольких десятков строк кода, в отличие от других языков, где будет уже сотня-другая. Тем самым разработка на Python гораздо быстрее. А для многих компаний нужно быть первыми, чтобы не потеряться на рынке.
Семён Березовский, ментор курса SkillFactory «Python для веб-разработки»
Среди других ЯП активный рост демонстрируют Go, Rust, Ada, Lua и Dart. Их можно рассматривать как перспективные языки, но пока что интерес к ним слишком мал, чтобы с ними считаться в глобальных масштабах. Отметку в 1% преодолел только Go.
Если обобщить, то рейтинг PYPL дает хорошее понимание, какие языки программирования сейчас активно изучают либо ищут для них решение конкретных задач.
Но при этом он не показывает, на каких языках работают программисты. Ведь для выполнения рабочих задач совсем не обязательно искать туториалы в Интернете.
Опрос программистов на постсоветском пространстве
В начале 2020 года на DOU были опубликованы результаты опроса почти 10 000 программистов из постсоветских стран. И на основе их ответов был составлен рейтинг языков на которых сейчас пишут больше всего.
Да, выборка в 10 000 анкет — это мало по сравнению с анализом миллионов запросов поисковиков. Но при этом она дает более полное видение о истинной популярности языков. Ведь используются не косвенные данные, а вполне себе прямые.
В первую очередь нас интересует вопрос «На каком языке вы пишете сейчас?» Ведь именно он показывает, насколько распространен язык именно в рабочей сфере, а не в обширности теории или популярности обучения.
Первая пятёрка с небольшими изменениями повторяет рейтинг PYPL. Разве что нет такого огромного отрыва Python от остальных ЯП. А разброс первого места с 18,4 % и пятого с 10,8 % нельзя считать слишком уж большим.
При этом первые пять позиций покрывают 71,5 % рынка, что также коррелирует с рейтингом PYPL. Но тут тоже есть изменения. По сравнению с 2019 годом JavaScript и Python растут, а вот рейтинги Java, C# и PHP постепенно падают.
Особенно активно растёт Python. Количество разработчиков, которые считают Python своим основным ЯП, выросло на 21,1% по сравнению с 2019 годом.
В целом Python растёт практически во всех аспектах. Он лидирует по личностным предпочтениям программистов. Также его планирует изучать как второй язык наибольшее количество респондентов. А в качестве дополнительного языка программирования он занимает почётное второе место.
Учитывая темпы роста, Python через несколько лет вполне может вырваться в лидеры и крепко оккупировать первое место. Тем более что разрыв между ним и лидером составляет всего чуть больше 5 %.
При этом очень активно растёт TypeScript, что в целом имеет смысл. Ведь разработка мобильного софта на TypeScript за последние несколько лет выросла многократно. Поэтому программистам, которые планируют разрабатывать софт для смартфонов, стоит обратить внимание на этот ЯП. Ну а для тех, кто уже знает JavaScript, — сам Билл Гейтс велел.
Заключение
Если обобщить информацию из всех рейтингов, то складывается следующая картина.
Python, JavaScript, Java и С# и PHP — это элита. Их активно изучают, на них программируют, пишут и читают туториалы. Сообщество языков живо, они развиваются и процветают. Можно посоветовать любой из этих языков новичку, который хочет «войти в IT» — и не ошибётесь. Они действительно востребованны и популярны.
Что касается С/С++, то в Интернете просто огромное количество информации по ним. Несмотря на возраст, они все ещё сильны, хоть и понемногу теряют аудиторию.
Что касается перспективных языков программирования, которые могут хорошо «выстрелить» в будущем, то здесь стоит упомянуть TypeScript, Kotlin, Rust и Dart. На них стоит обратить внимание, если ищете перспективный второй язык программирования.
Но в целом стоит помнить, что любые рейтинги такого плана субъективны и во многом зависят от того, как именно проводится анализ данных. Так что если хочется учить С++ — вперед. И даже если интересен Whitespace (тьфу-тьфу-тьфу), то можно и его. Успехов вам в ваших начинаниях! Тем кто надумает изучать язык — мы всегда готовы в этом помочь. А промокод HABR, добавит 10 % к скидке на баннере.
- Курс «Python для веб-разработки»
- Курс по JavaScript
- Профессия Java-разработчик
- Профессия iOS-разработчик с нуля
- Профессия Android-разработчик с нуля
- C++ разработчик
- Профессия Веб-разработчик
Tujh
Если С и С++ выучены много лет назад, то и искать туториалы по ним вряд ли будут, а из-за относительной сложности С++ после прочтения пары страниц «С++ за 21 день» многие ищут, что полегче и выбирают Java(Script)?
sshikov
Я бы сказал бы проще — этот рейтинг фигня. Почему? Объясню. Например — если я гуглю скажем 'spring', я при этом изучаю Java, или нет? А если graalvm? А если еще лучше — загуглите слово spark — и вы найдете как Apache Spark, так и веб фреймворк. И какой из них я искал, и что за язык я при этом изучаю?
А если я гуглю nodejs — я что изучаю при этом?
Ну вы поняли, надеюсь. Экосистема языков, особенно сложных — она очень широкая, и запросы к поисковикам могут быть самые разнообразные. И попытка как-то их ограничить — она явно искажает результаты.
Deerenaros
И да и нет.
Если даже взять просто тупое количество запросов названия языка программирования в гугле — уже это будет достаточно репрезентативным. Объективной назвать такую метрику довольно сложно, но когда разрывы различаются на порядки — тренд не обнаружит только глухослепой, а другого в общем-то и не требвоалось.
Даже больше того — какую-то объективную метрику искать даже и не надо, как делать объективный срез. В целом, python уже лет сто стал стандартом дефакто, а javascript, не смотря на некоторую корявость, засел в браузерах и никак не собирается оттуда как-то деваться. Java — стандарт надёжных систем, а Си — ну это то, на чём первые три пишутся. Это анализ если пытаться в объективность, хотя и не сильно претендует. Но. Зачем оно надо? Кроме как тренировки ума никаких действительно полезных выводов из неё не следует, а вот банально прощупать тренды — полезно. Перед выбором фреймворка для изучения, при запуске нового проекта и вот это всё. И таким действиям особо не нужны объективные выводы, и даже более того — они могут быть вредными, так как можно будет взять объективно крутой и прогрессирующий Dart и потом офигеть от того, где он сейчас. Тогда как TypeScript воспринимался как каким-то подобием. При всём при этом сбоку уже сто лет был CoffeScript, но чутка помахав крыльями тот так и остался уделом редких "смотрите какую штуку я нашёл!".
Нормальные рейтинги, просто вам они не нужны.
sshikov
>Нормальные рейтинги, просто вам они не нужны.
А кому они нужны? Ну вот серьезно, кто сделал из этого рейтинга полезный для себя вывод? Хотел бы я поглядеть на такого человека.
Ну вот какой смысл в том, что Java с питоном скажем поменялись местами? А C почему-то вылез аж на первое? В то время как мы и так прекрасно знаем, какой из них для чего хорош, и где он плох.
GarretThief
Смотри, вот я. Когда после школьных паскалей я думал, на чём начать писать в нормальном мире программирования, от из-за этих рейтингов и выбрал питон, и пишу на нём до сих пор (правда, теперь ещё и на js дополнительно, но это пройдёт).
Siemargl
Вопрос был про «полезный для себя вывод» =)
StjarnornasFred
Никаких объективно полезных выводов из этого сделать нельзя, можно лишь удовлетворить любопытство. Потому что «не самый популярный» (третий, пятый, а то и десятый) ЯП не означает, что вам с ним будет трудно найти работу. Трудно — если язык один из наименее популярных, то есть вся суть рейтинга сводится к трём категориям: популярные, непопулярные и что-то среднее. И тут становится ясно, что:
* Python, C/C#/C++, Java, JS, PHP, GO — популярные
* Swift, Lua, Rust, Kotlin, TypeScript, R, 1C — неоднозначно
* Pascal/Delphi, Basic/VBA, Erlang, Fortran и многое другое — непопулярные.
Дальше можно выяснять, почему одни языки популярные, а другие нет, но не более того. С практической же точки зрения — подавляющее большинство изучаемых и легкодоступных для изучения ЯП относится первой категории (ну кроме паскаля), поэтому без работы никто не останется. Да и если вы реально мастер языка из последней группы, то вы тоже можете или устроиться по специальности (и не факт, что зп редкого спеца будет меньше), или без особого труда переучиться, или не переучиваясь пойти туда с понижением квалификации.
tyomitch
Как это вы сделали вывод, что Basic/VBA менее популярные, чем Lua и Rust?
В рейтинге, на который ссылается пост — в точности наоборот.
sshikov
Не, ну а если бы выбрали скажем java разве что-то сильно изменилось бы? Ведь то, как язык зайдет личто тебе — от его рейтинга почти не зависит. А найдешь ли работу — тоже примерно одинаковые шансы для первых десяти.
mirypoko
Гугл в этом плане умный. Например если Вы все время ищите что-то про c#, то при запросе «string» он выдаст Вам ссылку на msdn, а не вики по js
tyomitch
Вопрос в том, так же ли умны составители этих рейтингов, как гугл.
pprometey
Ну и так ясно, что это средняя температура по больнице
0xd34df00d
Если C++ выучен много лет назад, то перед вами бог, лучше спросите у него что-нибудь философское.
Tujh
Имелось в виду не изучение конкретным человеком. Приток новых разработчиков на плюсах сильно ниже, чем на более простых Java и Python. Плюс по плюсам достаточно качественной литературы, даже по новым стандартам.
Но с вами это обсуждать бесполезно, флуд ради флуда я не собираюсь разводить.
0xd34df00d
Я бы с этим поспорил, отчасти для того, чтобы знать, что рекомендовать новичкам, отчасти потому, что, несмотря на все эти книги, ответов на вопросы «как сделать такую-то хитровывернутую штуку» они не дают (иронично, что вот как раз три дня назад stackoverflow меня уведомил о том, что кто-то поставил плюсик моему вопросу трёхлетней давности, и вот прямо сейчас я отвечал на вопрос приятеля, как сделать другую хитрую штуку).
Но раз не хотите это обсуждать, то и ладно.
dmtrka
Это крайне странное точка зрения.
Во первых шаблоны в C++ скорее всего были созданы чтобы можно было выебыватся умением их писать(мой любимый пример это конечно посчитать число полей в произвольной структуре, ну только публичных понятное дело и не юнионов и не битовых полей). Если чуть более серьезно то ответить на вопрос «как сделать такую-то хитровывернутую штуку» просто нереально. Как это вообще должно выглядеть? Всеравно что жаловаться на то что нет книг описывающих все возможные алгоритмы.
0xd34df00d
Всё же они ещё иногда полезны для того, чтобы писать обобщённый код, или чтобы перенести побольше вещей в компилтайм, чтобы компилятор мог их соптимизировать.
Просто это показатель внутренней сложности языка и её «фрактальности». Часто для того, чтобы эту штуку сделать, надо воспользоваться каким-нибудь хитрым сочетанием темплейтов, констекспров и чего-нибудь ещё.
Я уж не говорю о том, что ни в одном другом языке нет такого количества шансов выстрелить себе в ногу через недиагностируемые UB, как в плюсах.
dmtrka
Конечно нужны, вот только на цппшных шаблонах это делать это примерно как переписать C++ код на SQL например. Мне вообще непонятно зачем с C++ 11 решили что самое слабое место C++ это недостаточно геморойные шаблоны. Это всегда было языком в языке, но с появлением концептов в с++20 через рамки разумного уже перешагнули.
Нет вот серьезно кто вот это придумал? (отсюда: en.cppreference.com/w/cpp/language/reference)
Это один (даааааааалеко не самый сложный пример) из миллиона. Открываем вообще любую шаблонную пост C++11 ерись и там просто пиздец творится. Это что реально единственный возможный случай реализовать метапрограммирование?
ну а то что принципиально отличается от это для меня за гранью даже с учетом того что и без подобных штук грань давно позади.
Но разумеется не все так плохо и в С++20 мы наконец-то можем написать вот такой макрос! А-ЛИ-ЛУЯ!
и юзать его примерно так
Cfyz
Согласен со всем, кроме decltype =).
Вас же не смущает, что 5 и '5', var и &var, var и *var — это разные типы и/или сущности? Почему же вызывает удивление, что var и (var) тоже разные? =___=
0xd34df00d
Ну так вы именно что подтверждаете мой поинт, спасибо вам за это! Выстрел в ногу с
T&&
как не forwarding reference я видел очень регулярно, кстати, что в чатиках по плюсам, что на код ревью.Нет, конечно. Посмотрите на тот же template haskell (там тупо манипуляции AST, причём обычным кодом на хаскеле, так что можно использовать произвольные библиотеки в компилтайме). Но это плюсы, в плюсах нельзя не страдать.
isnullxbh
Поделитесь ссылкой?
tyomitch
github.com/apolukhin/magic_get/blob/develop/include/boost/pfr/detail/fields_count.hpp
isnullxbh
Спасибо!
Tujh
Перечитайте текст новости и слово «туториал» в частности.
0xd34df00d
Если по ним можно выучить язык, то да, должны. Перечитайте процитированный мной в моем исходном комментарии текст.
Tujh
Я же говорю — дискутировать с вами, только флуд разводить. С каких пор туториалы описывают все нюансы языка, а не дают общие сведения? Изученное Вами в университете до сих пор не обновлялось и не дополнялось новыми знаниями и практиками?
Вы мне напоминаете персонажа рассказа «Профессия» Азимова, но не главного героя, а того, который проиграл соревнование, потому что был обучен не той версии инструмента.
0xd34df00d
Тогда к чему вообще «выучены» и «туториалы»?
Считайте, что нет. Я на прикладного математика учился, а матан, линал и даже функан за десять лет не сильно поменялись.
Ладно, в любом случае это всё ерунда. Я на плюсах почти год не пишу, но иногда помогаю с ними знакомым (как раз вот сделать что-то этакое) и ревьювлю чужой код, и вот, что иронично, прям сегодня попался на глаза такой код, на самом деле очень простой, без темплейтов, без наркомании, обычный такой тырпрайз-код:
Вопрос: есть ли здесь UB?
Ответ: да, есть, и он приводил ко вполне реальному падению (и это ещё повезло, мог бы и просто память портить и падать где-то потом).
getChild()
возвращает неконстантныйChild
, поэтому выбирается перегрузкаgetName()
, возвращающая ссылку, поэтому правила для temporary lifetime extension не работают, поэтому вname
лежит dangling reference.Если убрать перегрузку
std::string& getName();
, то, похоже, это корректный код, но за 10 минут чтения стандарта и, в частности, [class.temporary]/6 и [conv.rval] у меня это доказать самому себе не получилось.В связи с чем следующие вопросы:
const auto& smth = foo.getBar().getBaz()
? В каком ещё языке нужно настолько быть настороже?getBaz()
, возвращающей ссылку, сломает этот код с нулевой диагностикой от компилятора?Siemargl
1. Здесь нет UB в языке, только в голове.
2. Компилятор ругается, что const отбрасывать нельзя.
Или аффтор переврал пример или…
И вообще, это преждевременная оптимизация и в серьезных учебниках поясняется, как ее _правильно_ делать, если уж начинать.
0xd34df00d
Есть, я же написал, почему.
Да, у
getChild()
должен бытьconst
справа, но это не делает возвращаемыйChild
константным.Или автор писал его по мотивам конкретного кода как иллюстрацию.
Что именно преждевременная оптимизация? Человек, выучивший C++ давно, именно так и привык писать. И я знаю несколько компаний, где так принято писать.
Siemargl
Ну я думаю, что сегодня продолжать обсуждать не стоит…
Конечно, возвращаемый объект Child неконстантен, да и он вообще временный.
Но чтобы сказать про UB, надо ткнуть пальцев в стандарт с этим описанным UB. Но ни я ни ты этого сделать не можем. Просто никто не знает С++.
Но это не значит, что компилятор или язык виноват, это простая человеческая ошибка =)
PS. Я кстати, не уверен, что в QXmppTransferManager ошибку исправили.
0xd34df00d
Тут надо тыкать пальцем в те места, которые явно пишут, что это не UB, и проверять, подходит ли наш случай под них или нет. Список выше.
?
Так что можно его вообще не продолжать :)
Siemargl
В общем, посмотрел свежим взглядом.
«Оптимизация» конечно оборжаться — сначала возвращаем дипкопию сложного Чайлда, чтобы потом вернуть из него стринг по ссылке =)Компилятор не ругается, потому что в оригинале было
Логично (и правильно) было бы сделать так
Впрочем, даже простое (без ссылки) уже решало проблему.
Не надо втыкать ссылки куда попало. Заготовка для опытов тут.
С появлением мув-семантики в С++14 ситуация еще более усложнилась, потому надо читать учебники, типа Скотта Мейерса. Там, кстати и про преждевременную оптимизацию есть, что не надо стесняться возвращать по значению.
Висячая ссылка на временный объект это все же сюрприз, но не UB, т.к. описана в Стандарте.
Serge78rus
Как раз много лет назад C++ еще можно было выучить даже простому смертному