Самые популярные языки программирования. Хабратоп 2020 года

    Мы тут решили подбить предварительные итоги года и проанализировать рейтинги популярности языков программирования. Как менялась популярность ЯП и какие языки в 2020 году считаются топовыми, читайте в этой статье.


    Ситуация с ЯП очень похожа на события этого фильма. Узнали же из какого?



    Рейтинги субъективны


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

    В основном для расчёта популярности ЯП используют данные поисковой выдачи крупных поисковиков. Но даже при единых исходных данных результаты аналитики иногда различаются кардинально.

    Индекс 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 % к скидке на баннере.

    image



    Самые популярные языки по версии Хабра

    Только зарегистрированные пользователи могут участвовать в опросе. Войдите, пожалуйста.

    На каком языке вы пишете сейчас больше всего?

    • 23,9%JavaScript371
    • 13,4%Java209
    • 21,8%Python339
    • 19,3%C#300
    • 8,5%C132
    • 14,5%C++226
    • 11,1%TypeScript173
    • 2,6%Swift40
    • 5,2%Kotlin80
    • 2,4%Ruby38
    • 8,4%Go130
    • 15,7%PHP244
    • 1,8%Scala28
    • 2,7%Pascal/Delphi42
    • 2,7%T-SQL42
    • 2,1%Dart33
    • 2,4%PL-SQL38
    • 0,5%Erlang8
    • 0,1%Apex1
    • 2,0%1C31
    • 5,8%Другое90
    • 0,6%Julia9
    • 4,0%Rust62
    • 1,3%Lua20
    • 0,3%Ассемблер4
    • 0,0%Fortran0
    SkillFactory
    Школа Computer Science. Скидка 10% по коду HABR

    Комментарии 124

      +13
      оценивают, насколько часто пользователи ищут туториалы по конкретному языку. Ведь, по мнению создателей рейтинга, именно поиск туториалов показывает, насколько популярен язык конкретно сейчас.
      То есть — это рейтинг популярных к изучению языков, а не рейтинг использования, так?
      Если С и С++ выучены много лет назад, то и искать туториалы по ним вряд ли будут, а из-за относительной сложности С++ после прочтения пары страниц «С++ за 21 день» многие ищут, что полегче и выбирают Java(Script)?
        +4
        Я бы сказал бы проще — этот рейтинг фигня. Почему? Объясню. Например — если я гуглю скажем 'spring', я при этом изучаю Java, или нет? А если graalvm? А если еще лучше — загуглите слово spark — и вы найдете как Apache Spark, так и веб фреймворк. И какой из них я искал, и что за язык я при этом изучаю?

        А если я гуглю nodejs — я что изучаю при этом?

        Ну вы поняли, надеюсь. Экосистема языков, особенно сложных — она очень широкая, и запросы к поисковикам могут быть самые разнообразные. И попытка как-то их ограничить — она явно искажает результаты.
          0

          И да и нет.


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


          Даже больше того — какую-то объективную метрику искать даже и не надо, как делать объективный срез. В целом, python уже лет сто стал стандартом дефакто, а javascript, не смотря на некоторую корявость, засел в браузерах и никак не собирается оттуда как-то деваться. Java — стандарт надёжных систем, а Си — ну это то, на чём первые три пишутся. Это анализ если пытаться в объективность, хотя и не сильно претендует. Но. Зачем оно надо? Кроме как тренировки ума никаких действительно полезных выводов из неё не следует, а вот банально прощупать тренды — полезно. Перед выбором фреймворка для изучения, при запуске нового проекта и вот это всё. И таким действиям особо не нужны объективные выводы, и даже более того — они могут быть вредными, так как можно будет взять объективно крутой и прогрессирующий Dart и потом офигеть от того, где он сейчас. Тогда как TypeScript воспринимался как каким-то подобием. При всём при этом сбоку уже сто лет был CoffeScript, но чутка помахав крыльями тот так и остался уделом редких "смотрите какую штуку я нашёл!".


          Нормальные рейтинги, просто вам они не нужны.

            0
            >Нормальные рейтинги, просто вам они не нужны.
            А кому они нужны? Ну вот серьезно, кто сделал из этого рейтинга полезный для себя вывод? Хотел бы я поглядеть на такого человека.

            Ну вот какой смысл в том, что Java с питоном скажем поменялись местами? А C почему-то вылез аж на первое? В то время как мы и так прекрасно знаем, какой из них для чего хорош, и где он плох.
              0
              Смотри, вот я. Когда после школьных паскалей я думал, на чём начать писать в нормальном мире программирования, от из-за этих рейтингов и выбрал питон, и пишу на нём до сих пор (правда, теперь ещё и на js дополнительно, но это пройдёт).
                0
                Вопрос был про «полезный для себя вывод» =)
                  +1
                  Никаких объективно полезных выводов из этого сделать нельзя, можно лишь удовлетворить любопытство. Потому что «не самый популярный» (третий, пятый, а то и десятый) ЯП не означает, что вам с ним будет трудно найти работу. Трудно — если язык один из наименее популярных, то есть вся суть рейтинга сводится к трём категориям: популярные, непопулярные и что-то среднее. И тут становится ясно, что:
                  * Python, C/C#/C++, Java, JS, PHP, GO — популярные
                  * Swift, Lua, Rust, Kotlin, TypeScript, R, 1C — неоднозначно
                  * Pascal/Delphi, Basic/VBA, Erlang, Fortran и многое другое — непопулярные.
                  Дальше можно выяснять, почему одни языки популярные, а другие нет, но не более того. С практической же точки зрения — подавляющее большинство изучаемых и легкодоступных для изучения ЯП относится первой категории (ну кроме паскаля), поэтому без работы никто не останется. Да и если вы реально мастер языка из последней группы, то вы тоже можете или устроиться по специальности (и не факт, что зп редкого спеца будет меньше), или без особого труда переучиться, или не переучиваясь пойти туда с понижением квалификации.
                    0
                    * Swift, Lua, Rust, Kotlin, TypeScript, R, 1C — неоднозначно
                    * Pascal/Delphi, Basic/VBA, Erlang, Fortran и многое другое — непопулярные.

                    Как это вы сделали вывод, что Basic/VBA менее популярные, чем Lua и Rust?
                    В рейтинге, на который ссылается пост — в точности наоборот.
                  0

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

            • НЛО прилетело и опубликовало эту надпись здесь
                0
                Вопрос в том, так же ли умны составители этих рейтингов, как гугл.
                0
                Ну и так ясно, что это средняя температура по больнице
                +24
                Если С и С++ выучены много лет назад

                Если C++ выучен много лет назад, то перед вами бог, лучше спросите у него что-нибудь философское.

                  –5
                  Имелось в виду не изучение конкретным человеком. Приток новых разработчиков на плюсах сильно ниже, чем на более простых Java и Python. Плюс по плюсам достаточно качественной литературы, даже по новым стандартам.
                  Но с вами это обсуждать бесполезно, флуд ради флуда я не собираюсь разводить.
                    +1
                    Плюс по плюсам достаточно качественной литературы, даже по новым стандартам.

                    Я бы с этим поспорил, отчасти для того, чтобы знать, что рекомендовать новичкам, отчасти потому, что, несмотря на все эти книги, ответов на вопросы «как сделать такую-то хитровывернутую штуку» они не дают (иронично, что вот как раз три дня назад stackoverflow меня уведомил о том, что кто-то поставил плюсик моему вопросу трёхлетней давности, и вот прямо сейчас я отвечал на вопрос приятеля, как сделать другую хитрую штуку).


                    Но раз не хотите это обсуждать, то и ладно.

                      –5
                      Это крайне странное точка зрения.
                      Во первых шаблоны в C++ скорее всего были созданы чтобы можно было выебыватся умением их писать(мой любимый пример это конечно посчитать число полей в произвольной структуре, ну только публичных понятное дело и не юнионов и не битовых полей). Если чуть более серьезно то ответить на вопрос «как сделать такую-то хитровывернутую штуку» просто нереально. Как это вообще должно выглядеть? Всеравно что жаловаться на то что нет книг описывающих все возможные алгоритмы.
                        +2
                        Во первых шаблоны в C++ скорее всего были созданы чтобы можно было выебыватся умением их писать

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


                        Если чуть более серьезно то ответить на вопрос «как сделать такую-то хитровывернутую штуку» просто нереально. Как это вообще должно выглядеть?

                        Просто это показатель внутренней сложности языка и её «фрактальности». Часто для того, чтобы эту штуку сделать, надо воспользоваться каким-нибудь хитрым сочетанием темплейтов, констекспров и чего-нибудь ещё.


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

                          +5
                          Всё же они ещё иногда полезны для того, чтобы писать обобщённый код, или чтобы перенести побольше вещей в компилтайм, чтобы компилятор мог их соптимизировать.

                          Конечно нужны, вот только на цппшных шаблонах это делать это примерно как переписать C++ код на SQL например. Мне вообще непонятно зачем с C++ 11 решили что самое слабое место C++ это недостаточно геморойные шаблоны. Это всегда было языком в языке, но с появлением концептов в с++20 через рамки разумного уже перешагнули.

                          Нет вот серьезно кто вот это придумал? (отсюда: en.cppreference.com/w/cpp/language/reference)
                          template<class T> struct A {
                              // x is not a forwarding reference: T is not a
                              // type template parameter of the constructor,
                              // but y is a forwarding reference
                              template<class U>
                              A(T&& x, U&& y, int* p);
                          };
                          


                          Это один (даааааааалеко не самый сложный пример) из миллиона. Открываем вообще любую шаблонную пост C++11 ерись и там просто пиздец творится. Это что реально единственный возможный случай реализовать метапрограммирование?

                          ну а то что
                          decltype(var)
                          принципиально отличается от
                          decltype((var))
                          это для меня за гранью даже с учетом того что и без подобных штук грань давно позади.

                          Но разумеется не все так плохо и в С++20 мы наконец-то можем написать вот такой макрос! А-ЛИ-ЛУЯ!
                          #define has_method(TypeName, MethodName, ...) []<typename T, typename... Args>(){ return requires{std::declval<T>().MethodName(declval<Args>()...);}; }.operator()<TypeName, __VA_ARGS__>()
                          

                          и юзать его примерно так
                          if constexp(has_method(std::vector<int>, push_back, int))
                          {
                              //do smth
                          }
                            0
                            Согласен со всем, кроме decltype =).

                            Вас же не смущает, что 5 и '5', var и &var, var и *var — это разные типы и/или сущности? Почему же вызывает удивление, что var и (var) тоже разные? =___=
                              +3

                              Ну так вы именно что подтверждаете мой поинт, спасибо вам за это! Выстрел в ногу с T&& как не forwarding reference я видел очень регулярно, кстати, что в чатиках по плюсам, что на код ревью.


                              Это что реально единственный возможный случай реализовать метапрограммирование?

                              Нет, конечно. Посмотрите на тот же template haskell (там тупо манипуляции AST, причём обычным кодом на хаскеле, так что можно использовать произвольные библиотеки в компилтайме). Но это плюсы, в плюсах нельзя не страдать.

                            0
                            мой любимый пример это конечно посчитать число полей в произвольной структуре, ну только публичных понятное дело и не юнионов и не битовых полей

                            Поделитесь ссылкой?

                          0
                          ответов на вопросы «как сделать такую-то хитровывернутую штуку» они не дают
                          а должны?
                          Перечитайте текст новости и слово «туториал» в частности.
                            0

                            Если по ним можно выучить язык, то да, должны. Перечитайте процитированный мной в моем исходном комментарии текст.

                              0
                              Я же говорю — дискутировать с вами, только флуд разводить. С каких пор туториалы описывают все нюансы языка, а не дают общие сведения? Изученное Вами в университете до сих пор не обновлялось и не дополнялось новыми знаниями и практиками?
                              Вы мне напоминаете персонажа рассказа «Профессия» Азимова, но не главного героя, а того, который проиграл соревнование, потому что был обучен не той версии инструмента.
                                +5
                                С каких пор туториалы описывают все нюансы языка, а не дают общие сведения?

                                Тогда к чему вообще «выучены» и «туториалы»?


                                Изученное Вами в университете до сих пор не обновлялось и не дополнялось новыми знаниями и практиками?

                                Считайте, что нет. Я на прикладного математика учился, а матан, линал и даже функан за десять лет не сильно поменялись.


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


                                struct Child
                                {
                                  std::string getName() const;
                                  std::string& getName();
                                };
                                
                                struct Parent
                                {
                                  Child getChild();
                                };
                                
                                void doSmth(const Parent& p)
                                {
                                  const auto& name = p.getChild().getName();
                                  // дальше работаем с name
                                }

                                Вопрос: есть ли здесь UB?


                                Ответ: да, есть, и он приводил ко вполне реальному падению (и это ещё повезло, мог бы и просто память портить и падать где-то потом). getChild() возвращает неконстантный Child, поэтому выбирается перегрузка getName(), возвращающая ссылку, поэтому правила для temporary lifetime extension не работают, поэтому в name лежит dangling reference.


                                Если убрать перегрузку std::string& getName();, то, похоже, это корректный код, но за 10 минут чтения стандарта и, в частности, [class.temporary]/6 и [conv.rval] у меня это доказать самому себе не получилось.


                                В связи с чем следующие вопросы:


                                1. В каких туториалах рассказывают достаточно, чтобы не писать такой код, и, желательно, чтобы понимать, почему его писать плохо? Ну со всеми этими xvalue, prvalue, glvalue и прочей ерундой.
                                2. Зацепится ли у вас на кодревью глаз за каждую строку вида const auto& smth = foo.getBar().getBaz()? В каком ещё языке нужно настолько быть настороже?
                                3. В каком ещё языке подобное невинное действие, как добавление неконстантной перегрузки getBaz(), возвращающей ссылку, сломает этот код с нулевой диагностикой от компилятора?
                                  0
                                  1. Здесь нет UB в языке, только в голове.
                                  2. Компилятор ругается, что const отбрасывать нельзя.

                                  Или аффтор переврал пример или…

                                  И вообще, это преждевременная оптимизация и в серьезных учебниках поясняется, как ее _правильно_ делать, если уж начинать.
                                    0
                                    Здесь нет UB в языке, только в голове.

                                    Есть, я же написал, почему.


                                    Компилятор ругается, что const отбрасывать нельзя.

                                    Да, у getChild() должен быть const справа, но это не делает возвращаемый Child константным.


                                    Или аффтор переврал пример или…

                                    Или автор писал его по мотивам конкретного кода как иллюстрацию.


                                    И вообще, это преждевременная оптимизация и в серьезных учебниках поясняется, как ее правильно делать, если уж начинать.

                                    Что именно преждевременная оптимизация? Человек, выучивший C++ давно, именно так и привык писать. И я знаю несколько компаний, где так принято писать.

                                      0
                                      Ну я думаю, что сегодня продолжать обсуждать не стоит…

                                      Конечно, возвращаемый объект Child неконстантен, да и он вообще временный.

                                      Но чтобы сказать про UB, надо ткнуть пальцев в стандарт с этим описанным UB. Но ни я ни ты этого сделать не можем. Просто никто не знает С++.

                                      Но это не значит, что компилятор или язык виноват, это простая человеческая ошибка =)

                                      PS. Я кстати, не уверен, что в QXmppTransferManager ошибку исправили.
                                        +3
                                        Но чтобы сказать про UB, надо ткнуть пальцев в стандарт с этим UB. Но ни я ни ты этого сделать не можем.

                                        Тут надо тыкать пальцем в те места, которые явно пишут, что это не UB, и проверять, подходит ли наш случай под них или нет. Список выше.


                                        Просто никто не знает С++.


                                        Так что можно его вообще не продолжать :)

                                          0
                                          В общем, посмотрел свежим взглядом.

                                          Компилятор не ругается, потому что в оригинале было
                                          Child getChild() const;
                                          «Оптимизация» конечно оборжаться — сначала возвращаем дипкопию сложного Чайлда, чтобы потом вернуть из него стринг по ссылке =)

                                          Логично (и правильно) было бы сделать так
                                          const Child& getChild() const { return m_child;}

                                          Впрочем, даже простое (без ссылки)
                                          const auto name = p.getChild().getName();
                                          уже решало проблему.

                                          Не надо втыкать ссылки куда попало. Заготовка для опытов тут.

                                          С появлением мув-семантики в С++14 ситуация еще более усложнилась, потому надо читать учебники, типа Скотта Мейерса. Там, кстати и про преждевременную оптимизацию есть, что не надо стесняться возвращать по значению.

                                          Висячая ссылка на временный объект это все же сюрприз, но не UB, т.к. описана в Стандарте.

                        +5
                        Как раз много лет назад C++ еще можно было выучить даже простому смертному
                      +28

                      На работе использую С++ и Python, хобби — Rust.
                      C++ не гуглю совсем, если что подзабыл — перехожу на cppreference сразу.
                      По Rust — все сервисы (docs.rs, crates.io и т.д) в закладках. Очень редко гуглю что-то хитровывернутое.
                      И только Python, язык, который мне почти совсем не нравится и я его знаю плохо, требует постоянного гугления.
                      То есть я поднимаю рейтинг тому, кому хотел бы его опустить…

                        +2

                        Согласен. Python — это язык с самой ярковыраженной stackoverflow driven development необходимостью. На это есть несколько причин, основные:


                        • Довольно дурацкая дока (особенно в библиотеках), постоянное отсутствие примеров
                        • Постоянные **kwargs, в которых даже читая source code библиотек не всегда понятно что происходит
                        • Каждый пишет как хочет, нет общих паттернов. Код DataScience и код Web Service и сопутствующие библиотеки отличаются по парадигмам и подходам, кроме того есть огромное количество разных покалений (вроде "как тут делать async до того как завезли async"), и все библиотеки на разных покалениях сидят.

                        В результате, единственный быстрый способ писать на Python — гуглить вопрос как есть и копипсатить со stackoverflow. Качество кода — соответствующее

                        +1
                        Блондинка за иконкой свифта — это так специально? :-)
                          0
                          Долгое время работал на PHP, сейчас благополучно перешел на Dart. Язык очень активно развивается, релизы выходят довольно часто, да и сам язык довольно приятный.
                          Не так давно пробовал Rust, понравились его принципы безопасности, просмотрел кол-во вакансий в нашем городе, их 1 на весь Харьков и та для сеньера. Понятно что для бизнеса выбирают то что проверенно временем, но хотелось бы побольше вакансий для новых ЯП
                            0

                            Тут только самим создавать их...

                            +3

                            Добавьте что ли Julia в опрос… Самый современный язык для математики, а в списке его нет....

                              +1
                              Добавил, в самом низу.
                                +3

                                Только для вычислительной части этой самой математики.

                                +3

                                а где Rust в вашем опросе?

                                0
                                Для своих проектов использую Parser-3, который никогда не попадет ни в один рейтинг, разве что с конца. Высокая скорость написания кода и скорость работы интерпретатора, полезные сообщения об ошибках и стабильность делают его исключительно приятным в работе.
                                  +2
                                  Интересно, как составлялась выборка из «почти 10 000» программистов? Нет ли тут такого нюанса, что «телефонный опрос показал, что телефоном пользуются 100% опрошенных»?
                                  Например, у нас в институте (сугубо наука) наиболее популярные инструменты — это фортран, матлаб и разные Си. При этом я даже не знаю, можно ли назвать тех, кто пишет и поддерживает эти программы, программистами. Так как основная задача почти у всех — это статьи, а программа — лишь инструмент, чтобы сделать конкретный расчет. Т.е. программа очень часто не является отчуждаемым «продуктом для пользователей». Это программирование или нет? Нужно ли его учитывать при составлении таких рейтингов, и как?
                                    +1
                                    Добавьте, пожалуйста, Lua в опрос.
                                      0
                                      Готово
                                        0
                                        Ещё бы ассемблер бы добавить!
                                          0
                                          Извольте :-)
                                      +1
                                      Аналогия — «самые популярные авто» VS «используются профи» VS «используются в бизнесе».

                                      Упрощая — популярные, это не значит «полезные» или «крутые». Это скорее — «для учеников»
                                        0
                                        Все корпорации и говермент в северной америке массово мигририруют в облака. А в основном это AWS+Python на лямбдах
                                          0
                                          Вроде бы, Azure не так уж отстаёт от AWS, а там всякий .NET
                                          +9

                                          Ждал от статьи со словом хабратоп хоть какой статистки по хабру:
                                          Популярность тегов, количество статей по языкам, привлекательность этих статей для читателя…

                                            +4

                                            Всегда удивлялся оценке популярности языка по количеству запросов в поисковиках. IMHO здесь все зависит от наличия порталов с удобными и полными описаниями. Ну вот например Delphi, официальная документация вообще ни чего не поясняет кроме сигнатур процедур и методов, что и так понятно из исходников. Приходится долго и нудно копаться в древних форумах.
                                            Или вот Пайтон — модный язык, но чтобы быстро получить нормальную краткую справку приходится идти на неофициальные сайты типа W3school. А по серьезным расширениям типа SQLAlchemy документация вообще нечитаемая, опять же приходится бегать по Стаковерфлоу.
                                            Но вот если взять PHP — обычно мне хватает всего одного php.net — быстро и удобно — один запрос на проблему.
                                            Вот и выходит что на поиск решения влияет не только популярность языка но и качество его документации.

                                              0
                                              На моем опыте выборка по упоминанию языка в поиске вообще не репрезентативна. Я люблю пользоваться гуглом, даже чтобы быстро перейти на заранее известную страницу в документации. Только при этом в 90% в качестве префикса указываю свой фреймворк. Могу еще что-нибудь по mysql/git/bash поискать. А php я и так для повседневной работы знаю достаточно. Плюс что-то можно посмотреть прямо в ide. Так что конкретно по языку очень редко приходится что-то искать.
                                                0
                                                Опечалило отсутствие в опросе Visual Basic. По версии TIOBE он на шестом месте; по версии PYPL — был бы в десятке, если бы не искуственное разделение на Visual Basic и VBA, которые один и тот же язык. По обоим рейтингам он намного опережает нишевые языки, упомянутые предыдущими комментаторами (Rust, Lua, Julia)
                                                  0

                                                  Rust нишевой? Какая у него ниша? А Visual Basic — не нишевой?

                                                    0
                                                    Раст пока экспериментальный, ниша его в дикой природе не определена. VBA — скриптовый же.
                                                      0

                                                      Он займет все ниши.

                                                  0

                                                  «Python позволяет написать рабочий прототип скрипта с помощью нескольких десятков строк кода, в отличие от других языков, где будет уже сотня-другая. Тем самым разработка на Python гораздо быстрее. А для многих компаний нужно быть первыми, чтобы не потеряться на рынке.»


                                                  Действительно, кому сейчас надо закладываться на архитектуру, продумывать слои, строить абстракции для связи между ними, так что бы это все не поехало через 3-4 года.
                                                  Проще продать и быстрее сляпать на коленке несколько десяток строк кода.

                                                    +1
                                                    Вы так говорите «сейчас», как будто 10, 20, 50, 100 лет назад было иначе?
                                                      0
                                                      Это вот очень яркий пример «шашечки или ехать».
                                                        0
                                                        Прототип пишут чтоб протестировать, доказать идею и выкинуть.
                                                        Потом, если взлетит — можно и абстракции и архитектуру и вот это все.

                                                          0
                                                          Действительно, кому сейчас надо закладываться на архитектуру, продумывать слои, строить абстракции для связи между ними, так что бы это все не поехало через 3-4 года.

                                                          Как показывает практика, с такой-то архитектурой, слоями и абстракциями, в большинстве случаев проект в кусок неподдерживаемого говнища превращается гораздо раньше, чем через 3-4 года.

                                                            0
                                                            Показательный пример — Windows NT, спроектированная с архитектурой, слоями и абстракциями, и на протяжении следующих 10 лет рушившая всё это, потому что в начале девяностых никто не смог угадать, что потребуется пользователям в начале нулевых — win32k в ядре (и ликвидация остальных подсистем), UAC вместо логина, вот это всё.
                                                        • НЛО прилетело и опубликовало эту надпись здесь
                                                            0
                                                            en.wikipedia.org/wiki/Category:Free_software_programmed_in_C
                                                              +1

                                                              На С пишется много чего.
                                                              Те же микроконтроллеры далеко не все на С++ программируются.
                                                              Ядро линукса по большей части на С писано.
                                                              Еще SQLite (да и многие известные СУБД) тоже на С.
                                                              Компиляторы, опять же.

                                                              • НЛО прилетело и опубликовало эту надпись здесь
                                                                  +2
                                                                  Я не говорю что на нем вообще не пишут,

                                                                  Но вы писали следующее: "Но я не видел проектов или разработчиков на нем"


                                                                  я говорю что на других языках проектов намного больше

                                                                  Возможно, хотя не уверен в этом, особенно если учесть, что далеко не все проекты публичны (особенно если это не очередной "здравствуймир", а что-то действительно серьезное).
                                                                  Опять же, существующее положение вещей в видимом большинству мире выдвигает на первые позиции всякую веб-разработку и быструю разработку не программистами (соответственно, привет JS и питон). Но Это не отменяет "невидимую" часть, а именно массовую промышленную будничную (не стартапы всякие модные) разработку. Там, естественно, используется не только Си, но и его доля, как мне кажется на основании моих наблюдений, весьма велика.
                                                                  Я сам, кстати, на Си давно ничего не писал, но разработчиков на сем языке, тем не менее, регулярно видел и вижу до сих пор.


                                                                  Голосование на хабре подтверждает

                                                                  Голосование в интернете показало, что 100% пользуются интернетом.
                                                                  Впрочем, даже на хабре Си не оказался самым непопулярным языком.


                                                                  да и кол-во вакансий тоже

                                                                  Количество вакансий на Delphi исчезающе мало, но почему-то количество программистов, которые программируют на Delphi, и которых знаю я лично (причем не по работе), непропорционально велико относительно количества вакансий.

                                                                  • НЛО прилетело и опубликовало эту надпись здесь
                                                                      –1
                                                                      Не зная С, ты не знаешь ни C#, ни целое СИмейство C-подобных языков.

                                                                      У тебя тогда просто нет базы, фундамента обучения.

                                                                      Конечно, работы на чистом С не там много, но например я получил пару месяцев назад нормальный контракт. А вот стыковок с С-библиотеками много, и без знания С ты далеко не уедешь.
                                                                      • НЛО прилетело и опубликовало эту надпись здесь
                                                                          +1
                                                                          А я >25 лет (С) и шарп с релиза 2.0 и таких нубов видел предостаточно.

                                                                          Узкий специалист широкого профиля (с)
                                                                          • НЛО прилетело и опубликовало эту надпись здесь
                                                                              +1
                                                                              Я таких в команду никогда и не брал…
                                                                          +2

                                                                          Нет, знать С хоть для плюсов, хоть, тем более, для C# совершенно необязательно.

                                                                            +1
                                                                            Только не говори, что ты его не знаешь.

                                                                            Это как говорить, что знать английский необязательно, т.к. доки переведены =)
                                                                              0

                                                                              Таки C я не знаю. Я приближенно знаю некоторое его подмножество на уровне «ну это как в плюсах, только вот то, то и то делать нельзя».


                                                                              А для того, чтобы делать FFI в сишные библиотеки, его достаточно знать вообще на очень базовом уровне.

                                                                                –1
                                                                                С это и есть очень базовый уровень
                                                                                  0
                                                                                  > «ну это как в плюсах, только вот то, то и то делать нельзя».

                                                                                  Существенная часть фишек Си отсутствует в плюсах, например variable-length arrays
                                                                                    0

                                                                                    Поэтому я и написал «подмножество» (хотя, например, конкретно с VLA сталкиваться, к сожалению, приходилось).

                                                                                      0
                                                                                      В % от синтаксиса языка очень мало. Над этим работает Комитет.

                                                                                      А вот UB там разные =)
                                                                                +1
                                                                                Ну так можно далеко углубиться — «не зная ассемблер PDP-11, ты не знаешь Си» и т.д.
                                                                                Знать Си безусловно полезно, но я бы не сказал, что для программиста на ЯВУ это столь необходимо.
                                                                                  0
                                                                                  Я знаю и ассемблер PDP-11. Связи с С никакой нет, разве что автоинкременты/декременты в адресации, но это лишь внешнее сходство.

                                                                                  Что такое ЯВУ, сейчас границы размываются (куда отнести С/С++ — спорят). Но вот тему на форуме, как вызвать CreateProcess() из VBA, я видел прямо сегодня.
                                                                                    0
                                                                                    Думаю, что связи больше: первое, что приходит в голову — отсутствие операторов &&= и ||=
                                                                          +2
                                                                          Компиляторы, опять же.

                                                                          C для компиляторов плохой выбор. Да и, собственно, даже gcc уже несколько лет как разрешил плюсы.


                                                                          На функциональных языках их писать куда эффективнее и приятнее.

                                                                            0
                                                                            Те же микроконтроллеры далеко не все на С++ программируются.

                                                                            Потому что под них зачастую есть только компилятор C, и то кривой.


                                                                            Ядро линукса по большей части на С писано.

                                                                            Исключительно из-за упёртости Линуса.


                                                                            Еще SQLite (да и многие известные СУБД) тоже на С.

                                                                            А теперь вспомните, сколько им лет. Когда их начинали писать, C++ ещё и в помине не было.


                                                                            Компиляторы, опять же.

                                                                            О, а это какие, интересно? Я так навскидку могу только TCC вспомнить, но обычно не для разработки используют. GCC написан на смеси C и C++. Clang с самого начала написан на C++.

                                                                              0
                                                                              Cython, Perl, PHP JIT?
                                                                                0
                                                                                Потому что под них зачастую есть только компилятор C, и то кривой.
                                                                                А что такое кривой С-компилятор?

                                                                                Собственно, от эмбедщиков слышно только про проблемы ограничения по ресурсам. Шаблонный С++ только проникает туда, но даже STL часто не влезает. И есть глобальная проблема с исключениями — с ними невозможны сильные оптимизации.
                                                                                  0

                                                                                  А в чём проблема с ресурсами? Я с темплейтами писал под attiny лет 12 назад, когда компиляторы оптимизировали код хуже, а не лучше. И STL уровня какого-нибудь std::any_of вполне может отлично жить на эмбеддщине.

                                                                                    0
                                                                                    Вроде 8-128кБ памяти. Но я не эмбедщик.

                                                                                    Zero-cost примитивы конечно влезут, но libstdc++6 уже несколько Мб давно
                                                                                      0

                                                                                      У упомянутого attiny было в районе полкилобайта оперативной памяти и килобайта флеша (или наоборот, не помню уже).

                                                                                  0
                                                                                  Потому что под них зачастую есть только компилятор C, и то кривой.

                                                                                  Не всегда кривой, но в любом случае это создает достаточно много рабочих мест для тех, кто пишет на С.


                                                                                  Исключительно из-за упёртости Линуса.

                                                                                  Скорее: "А теперь вспомните, сколько им лет".


                                                                                  А теперь вспомните, сколько им лет. Когда их начинали писать, C++ ещё и в помине не было.

                                                                                  Это не отменяет того факта, что для многих проектов на Си продолжается разработка, причем часто все на том же Си (наверное, чтобы не плодить языки, которые необходимо знать разработчикам).


                                                                                  GCC написан на смеси C и C++.

                                                                                  Т.е. Си там все-таки присутствует.

                                                                                    0
                                                                                    Не просто «присутствует» — его там втрое с лишним больше, чем C++, судя по статистике на github.com/gcc-mirror/gcc
                                                                                0
                                                                                Но я не видел проектов или разработчиков на нем, даже когда дело касалось программ для микроконтроллеров.
                                                                                Практически вся телефония, начиная от Open Source-ных, Asterisk, FreeSwitch, OpenSIPS, Kamailio и прочее, заканчивая проприетарными вещами, когда sip-прокси или сервер должен общаться с ядром Linux или драйверами аппаратного оборудования для обработки голосового потока.
                                                                                +3
                                                                                А что такое «самый популярный язык программирования»? Самый используемый по мировому объёму кода в байтах? По приносимой написанными на нём программами прибыли? По числу выданных учебными центрами сертификатов об изучении? По числу умеющих хотя бы Hello world людей? Или ещё по какому-то критерию?

                                                                                Самый популярный автомобиль — понимаю. Самый популярный движок сайта — тоже всё ясно, это исчислимая величина. А как может быть язык программирования быть самым популярным — не понимаю. Нужно уточнять, потому что иначе окажется, что:

                                                                                • по вакансиям (с учётом того, что в вакансиях иногда требуют 2-3 языка) самым популярным наверняка будет Python — он нужен не только программистам, но и различным учёным и исследователям в качестве вспомогательного навыка автоматизации;
                                                                                • по числу изучивших на курсах — ну, возможно, Java, её преподают много и часто;
                                                                                • по доходам от продажи программного обеспечения — наверняка C++, на нём пишутся масштабные и дорогостоящие программные продукты, включая ОС;
                                                                                • по числу тех, кто умеет хоть чуть-чуть — безусловно, Pascal, его знает чуть ли не 100% россиян, отучившихся в школе.

                                                                                Так что «рейтинг самых популярных ЯП» — это всё равно что осмотр слона слепыми мудрецами. Измерили неизвестно что неизвестно как и получили соответствующий результат.
                                                                                • НЛО прилетело и опубликовало эту надпись здесь
                                                                                    +1
                                                                                    Зачем мешать языки программирования с языками разметки в одну кучу?
                                                                                    • НЛО прилетело и опубликовало эту надпись здесь
                                                                                        +2
                                                                                        С тем же успехом можно было бы добавить русский и английский языки в отдельных пунктах — тоже ведь используются в ходе разработки. И до кучи PDF — чем не язык?
                                                                                        • НЛО прилетело и опубликовало эту надпись здесь
                                                                                    +1
                                                                                    Фильм Крысиные бега, языки довольно забавно распределены по персонажам.
                                                                                    –1
                                                                                    смешной рейтинг, кому он нужен вообще?
                                                                                    неужели не понятно, что «доля» Си берет половину от С++ и еще половину от С#?
                                                                                      0
                                                                                      Интересно, чем объясняется мощный рост Perl в первой таблице и Ada во второй.
                                                                                        0
                                                                                        Есть ли рейтинг, который учитывает сферу применения того или иного языка программирования? ИМХО, популярность языка скрорей зависит от того, где он применяется.
                                                                                          0

                                                                                          Как по мне самым точным является рейтинг от github. Почему? Да потому что по разным языкам можно гуглить разное количество запросов. А git — реальный показатель рабочего процесса.
                                                                                          Ну и еще один метод оценивания, которым я пользуюсь лично — просмотр фриланс бирж. Список проектов прямо отображает какие технологии более и менее востребованы.

                                                                                            0
                                                                                            На Гитхабе опенсорсные проекты, и любительские.

                                                                                            Коммерческие же (считай рабочие) там представлены микроскопически.

                                                                                            Далеко не ходить — свои рабочие я храню на приватном битбакете.
                                                                                            +2
                                                                                            А как же LabVIEW?
                                                                                            Частично на котором сделан софт в проекте SpaceX.
                                                                                              0
                                                                                              Надо добавить R, Octave, Elixir, Crystal.
                                                                                                0
                                                                                                Использую ассемблер UASM, C/C++, Lua в точности скрипты для игры сталкер. Всё пожалуй. Питон не использую, и его совсем не понимаю, крайне сложный ЯП.
                                                                                                  0
                                                                                                  Я взял и запилил под LabVIEW NO CODE (Framework), пришлось так же и посидеть над аппаратным I/O модулем и внешним интерфейсом.
                                                                                                  Теперь можно процесс прототаипинга под автоматику, робототехнику или смарт устройства «кодить» посредством внешней консоли методом применения тех или иных простых инструкций визуальных процедур через интуитивно понятный HMI, участвующих в сценарии управления или сбора данных.
                                                                                                    0
                                                                                                    С бóльшим интересом посмотрел бы на LabVIEW YES CODE для программирования текстом вместо «визуальных процедур».
                                                                                                      0
                                                                                                      Такое возможно. LV позволяет отображение своего кода, к примеру на Си. А смысл? В плане его оптимальности, важным показателем является устойчивая Real time функциональность под минимальной аппаратной архитектурой под Win 10 (iOT) \Linux 18… Если речь идет о перекомпиляции открытого кода в среде инструментов, то да. Декомпиляция исходного exeшника, ммм…
                                                                                                      www.beeptoolkit.com
                                                                                                      www.facebook.com/groups/349188626162345
                                                                                                        0
                                                                                                        Этому на LV посвящен отдельный tools, можно под ним кодить и на С++. В моей практике в этом не было необходимости. С API объектами в dll, да приходится часто работать, если кодеры дают вменяемый SDK.
                                                                                                      0
                                                                                                      К слову, хакерранк — наиболее объективный рейтинг языков:
                                                                                                      www.hackerrank.com
                                                                                                      image
                                                                                                      0
                                                                                                      И вообще по прогнозам дона эсквайера на следующие 10 лет около 100 млн кодеров сядут на забор. CEO GitHub Chris Wanstrath — «The next 10 years and the next 100 million developers»
                                                                                                        0
                                                                                                        Куда забыли Fortran? Он живее всех живых! У нас в лаборатории все на нём пишут. Intel поддерживает его компилятор в актуальном виде — вплоть до нового стандарта F2018. Основная ниша — высокопроизводительные научные вычисления.
                                                                                                          0
                                                                                                          Прошу прощения, его добавил тоже.

                                                                                                        Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

                                                                                                        Самое читаемое